[479446] Excluding does not remove all occurrences of an element
1- Fix an issue with exluding and duplicates in a sequence
2- Fix an issue with including a duplicate in a sequence
Bug #479446
Change-Id: Id6a690c10c0bdcc9acb29eb9bef28c1dadb86c69
Signed-off-by: sbegaudeau <stephane.begaudeau@obeo.fr>
diff --git a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/CollectionServices.java b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/CollectionServices.java
index 69410d8..94fcba9 100644
--- a/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/CollectionServices.java
+++ b/query/plugins/org.eclipse.acceleo.query/src/org/eclipse/acceleo/query/services/CollectionServices.java
@@ -1374,13 +1374,9 @@
)
// @formatter:on
public List<Object> including(List<Object> sequence, Object object) {
- if (sequence.contains(object)) {
- return sequence;
- } else {
- List<Object> result = Lists.newArrayList(sequence);
- result.add(object);
- return result;
- }
+ List<Object> result = Lists.newArrayList(sequence);
+ result.add(object);
+ return result;
}
// @formatter:off
@@ -1401,7 +1397,7 @@
return sequence;
} else {
List<Object> result = Lists.newArrayList(sequence);
- result.remove(object);
+ result.removeAll(Collections.singleton(object));
return result;
}
}
diff --git a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/CollectionServicesTest.java b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/CollectionServicesTest.java
index 008a8b9..ef744c6 100644
--- a/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/CollectionServicesTest.java
+++ b/query/tests/org.eclipse.acceleo.query.tests/src/org/eclipse/acceleo/query/services/tests/CollectionServicesTest.java
@@ -486,17 +486,19 @@
public void testIncluding() {
List<Object> list = Lists.newArrayList();
Object elt = new Object();
- Object elt2 = new Object();
list.add(elt);
+
+ Object elt2 = new Object();
List<Object> result = collectionServices.including(list, elt2);
assertTrue(result.contains(elt2));
assertTrue(result.contains(elt));
assertEquals(2, result.size());
result = collectionServices.including(list, elt);
- assertEquals(list, result);
+ assertEquals(2, result.size());
assertTrue(result.contains(elt));
- assertEquals(1, result.size());
+ assertEquals(result.get(0), elt);
+ assertEquals(result.get(1), elt);
}
@Test
@@ -520,6 +522,30 @@
}
@Test
+ public void testExcludingWithDuplicates() {
+ List<Object> list = new ArrayList<Object>();
+ String a = "a";
+ String b = "b";
+ String c = "c";
+
+ list.add(a);
+ list.add(b);
+ list.add(c);
+ list.add(b);
+
+ List<Object> result = collectionServices.excluding(list, b);
+ assertTrue(result.contains(a));
+ assertTrue(result.contains(c));
+ assertFalse(result.contains(b));
+
+ assertEquals(2, result.size());
+
+ assertEquals(0, result.indexOf(a));
+ assertEquals(1, result.indexOf(c));
+
+ }
+
+ @Test
public void testReverse() {
List<Object> list = Lists.newArrayList();
assertEquals(0, collectionServices.reverse(list).size());