Fix flaky test failure in SynchronizedBagTest#testCollectionToArray2
Closes #336
This commit is contained in:
parent
16710abc9a
commit
30a9ab835d
|
@ -674,6 +674,10 @@ public abstract class AbstractBagTest<T> extends AbstractCollectionTest<T> {
|
||||||
super.verify();
|
super.verify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getIterationBehaviour(){
|
||||||
|
return AbstractBagTest.this.getIterationBehaviour();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -46,6 +46,11 @@ public class SynchronizedBagTest<T> extends AbstractBagTest<T> {
|
||||||
return "4";
|
return "4";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getIterationBehaviour(){
|
||||||
|
return UNORDERED;
|
||||||
|
}
|
||||||
|
|
||||||
// public void testCreate() throws Exception {
|
// public void testCreate() throws Exception {
|
||||||
// Bag<T> bag = makeObject();
|
// Bag<T> bag = makeObject();
|
||||||
// writeExternalFormToDisk((java.io.Serializable) bag, "src/test/resources/data/test/SynchronizedBag.emptyCollection.version4.obj");
|
// writeExternalFormToDisk((java.io.Serializable) bag, "src/test/resources/data/test/SynchronizedBag.emptyCollection.version4.obj");
|
||||||
|
|
|
@ -70,6 +70,13 @@ import org.junit.jupiter.api.Test;
|
||||||
* <li>{@link #isFailFastSupported()}
|
* <li>{@link #isFailFastSupported()}
|
||||||
* </ul>
|
* </ul>
|
||||||
* <p>
|
* <p>
|
||||||
|
* <b>Indicate Collection Behaviour</b>
|
||||||
|
* <p>
|
||||||
|
* Override these if your collection makes specific behaviour guarantees:
|
||||||
|
* <ul>
|
||||||
|
* <li>{@link #getIterationBehaviour()}</li>
|
||||||
|
* </ul>
|
||||||
|
* <p>
|
||||||
* <b>Fixture Methods</b>
|
* <b>Fixture Methods</b>
|
||||||
* <p>
|
* <p>
|
||||||
* Fixtures are used to verify that the operation results in correct state
|
* Fixtures are used to verify that the operation results in correct state
|
||||||
|
@ -134,6 +141,13 @@ public abstract class AbstractCollectionTest<E> extends AbstractObjectTest {
|
||||||
// tests on Collection.equals nor any for Collection.hashCode.
|
// tests on Collection.equals nor any for Collection.hashCode.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag to indicate the collection makes no ordering guarantees for the iterator. If this is not used
|
||||||
|
* then the behaviour is assumed to be ordered and the output order of the iterator is matched by
|
||||||
|
* the toArray method.
|
||||||
|
*/
|
||||||
|
protected static final int UNORDERED = 0x1;
|
||||||
|
|
||||||
// These fields are used by reset() and verify(), and any test
|
// These fields are used by reset() and verify(), and any test
|
||||||
// method that tests a modification.
|
// method that tests a modification.
|
||||||
|
|
||||||
|
@ -487,6 +501,18 @@ public abstract class AbstractCollectionTest<E> extends AbstractObjectTest {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a flag specifying the iteration behaviour of the collection.
|
||||||
|
* This is used to change the assertions used by specific tests.
|
||||||
|
* The default implementation returns 0 which indicates ordered iteration behaviour.
|
||||||
|
*
|
||||||
|
* @return the iteration behaviour
|
||||||
|
* @see #UNORDERED
|
||||||
|
*/
|
||||||
|
protected int getIterationBehaviour(){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Tests
|
// Tests
|
||||||
/**
|
/**
|
||||||
* Tests {@link Collection#add(Object)}.
|
* Tests {@link Collection#add(Object)}.
|
||||||
|
@ -1095,9 +1121,14 @@ public abstract class AbstractCollectionTest<E> extends AbstractObjectTest {
|
||||||
|
|
||||||
array = getCollection().toArray(new Object[0]);
|
array = getCollection().toArray(new Object[0]);
|
||||||
a = getCollection().toArray();
|
a = getCollection().toArray();
|
||||||
assertEquals("toArrays should be equal",
|
|
||||||
Arrays.asList(array), Arrays.asList(a));
|
|
||||||
|
|
||||||
|
if ((getIterationBehaviour() & UNORDERED) != 0) {
|
||||||
|
assertTrue("toArrays should contain the same elements",
|
||||||
|
array.length == a.length &&
|
||||||
|
(new HashSet<>(Arrays.asList(array)).equals(new HashSet<>(Arrays.asList(a)))));
|
||||||
|
} else {
|
||||||
|
assertEquals("toArrays should be equal", Arrays.asList(array), Arrays.asList(a));
|
||||||
|
}
|
||||||
// Figure out if they're all the same class
|
// Figure out if they're all the same class
|
||||||
// TODO: It'd be nicer to detect a common superclass
|
// TODO: It'd be nicer to detect a common superclass
|
||||||
final HashSet<Class<?>> classes = new HashSet<>();
|
final HashSet<Class<?>> classes = new HashSet<>();
|
||||||
|
@ -1116,9 +1147,16 @@ public abstract class AbstractCollectionTest<E> extends AbstractObjectTest {
|
||||||
array = getCollection().toArray(a);
|
array = getCollection().toArray(a);
|
||||||
assertEquals("toArray(Object[]) should return correct array type",
|
assertEquals("toArray(Object[]) should return correct array type",
|
||||||
a.getClass(), array.getClass());
|
a.getClass(), array.getClass());
|
||||||
|
|
||||||
|
if ((getIterationBehaviour() & UNORDERED) != 0) {
|
||||||
|
assertTrue("type-specific toArrays should contain the same elements",
|
||||||
|
array.length == getCollection().toArray().length &&
|
||||||
|
(new HashSet<>(Arrays.asList(array))).equals(new HashSet<>(Arrays.asList(getCollection().toArray()))));
|
||||||
|
} else {
|
||||||
assertEquals("type-specific toArrays should be equal",
|
assertEquals("type-specific toArrays should be equal",
|
||||||
Arrays.asList(array),
|
Arrays.asList(array),
|
||||||
Arrays.asList(getCollection().toArray()));
|
Arrays.asList(getCollection().toArray()));
|
||||||
|
}
|
||||||
verify();
|
verify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue