Hello
I'm Cyrille Delaunay, I work for the RMOD Inria team.
I'm currently working on tests for the Pharo Collection Library using traits.
I've modified, added some traits and therefore redifined things in
test classes to attempt to get a best coverage.
(For the moment : Arraytest , BagTest , DictionaryTest , IntervalTest
, OrderedCollectionTest , SetTest , SortedCollectionTest StringTest ,
SymbolTest , LinkedListTest ).
All modification have been saved in 'PharoTaskForces'.
With a static coverage tool (also saved in PharoTaskPhorces ) removing noise
for each class (methods defined too high in hierarchy that are not
appropriated ,
private methods , very specific methods that may should not be tested
for collection ), I got those coverage :
Arraytest : tested at 94.5 %
BagTest : 88.4 %
DictionaryTest: 85 %
IntervalTest : 93 %
OrderedCollectionTest : 93.9%
SetTest : 85.9%
SortedCollectionTest : 92.3 %
StringTest : 91%
LinkedListTest : 90.5 %
Here are the more important modifications i've made about traits :
-> new trait TConvertTest :
testing converting methods (such that 'asArray,' asBag', .. )
-> new trait 'TSortTrait' :
testing sorting methods for 'ArrayedCollection'.
-sort
-sort:
-isSorted
-isSortedBy:
-> new trait: 'TCopySequenceable' :
testing copying methods using an order, an index access
(copyAfter: for example)
-> new trait 'TOccurrencesTest' :
testing method :
-> OccurencesOf:
-> new trait: TIterateSequencedReadableTest'
testing iterating methods using a specific order
( usable therefore only by sequenceable collection )
-> new trait: 'TConcatenaionTest'
Bad initial version (specific to sequenceable collection)
Split into two trait:
-> TSequencedConcatenationTest (initial version)
-> TConcatenationTest (to do)
- > new trait: 'TReplacementSequencedTest'
testing replacemnt methods :
- replaceAll:with:
- replaceFrom:to:with:
- replaceFrom:to:with:startingAt:
for Sequenced Collection
-> Modification of all the methods in 'TIndexAccessingTest'
making them independent of elements in collection's Type.( so that it
can be used with all type of sequenceable collection like 'String').
->
-> modification of all the tests in 'TAsStringAndDelimiterTest'
making its independent of the elements' type in collection.
'TAsStringAndDelimiterTest' added to 'ArrayTest'.
-> redefinition of 'TAsStringCommaAndDelimiterTest' which were
specific to sequenceable collection (and didn't work for 'BagTest').
The initial version has been kept in a new trait:
'TAsStringCommaAndDelimiterSequenceableTest'.
-> with new trait: 'TBeginsEndsWith' testing methods:
- beginsWith:
- endsWith:
-> Remodularisation of the initial trait 'TIndexAccessing' (which
became to big)
Split into three traits:
- methods like 'indexOf' added to the New trait 'IndexAccess' .
- methods concerning 'SubCollectionAccess' added to a new trait:
'TSubCollectionAccess'.
- methods concerning elements access added to a new trait :
'TSequencedElementAccessTest'
-> new trait: 'TPrintTest'
testing 'stream printing' methods
Modification of TPrintTest wich was specific to sequenceable
collections. Initial version has been kept in a new trait :
TPrintSequencedTest
-> Modification of TConvertTest wich tested some methods
(asSet, asIdentitySet) for duplicate contents what can't work for
Interval or Collection without equel elements.
Creation of a new trait : 'TConvertAsSetForMultiplinessTest'.
-> Remodularisation of TCopySequenceableTest wich were too big.
Creation of a new trait :
-> TCopySequenceableSameContents
testing copying methods that only change the order of
elements
and don't remove or add any elements to the copy.
-> TCopyPartOfSequenceable
testing copying methods that only copy a part of a
collection
(copyAfter: copyUpTo: )
-> TCopySequenceableWithOrWithoutSpecificElements
testing copying methods ( from the initial trait
TCopySequenceable ) that copy the collection
with more or less
specified elements .
-> 'TCopySequenceableWithReplacement'
testing copying methods ( from the initial version of
TSequenceableTest ) that copy and replace
subcollections in the
receiver.
-> Refinition of all tests in TIndexAccess so that they required a
simple collection without equal element and test the 'Standard'
comportement that come with. Therefore, it can be used by collections
that don't allowed duplicate elements.
The aspect of 'multiple occurrences' was puted into a new trait:
TIndexAccessForMultipliness
( this aspect is important for 'lastIndexOf:' or 'identityIndexOf:'
for exemple )
-> modification of all methods in TAddTest.
those methods used always directly 'self collection' to test if an
element had been added .
For example : self assert: self collection size = oldsize + 1
That didn't work if required methods returned a new object at each time
and not an instance variable of the classTest.
TAddTest use now its own copies of required collection to be
independant of the way the method is given by the ClassTest.
-> new trait:
- TRmoveByIndexTest
testing methods for removing by index access
(used at least by OrderedCollection and SortedCollection)
-> new trait:
- TCopyPartOfSequenceableForMultipliness
testing the specific comportement with duplicate for methods in
TCopyPartOfSequenceable.
TCopyPartOfSequenceable can now be used by collection that don't
allowed duplicate elements.
-> new traits :
- TCopySequenceableWithReplacementForSorted
testing specific comportement of methods like 'copyReplaceAll:with:'
for sorted collection.
-> redefinition of trait : 'TIterateTest' (in a new trait 'TIterateNew').
This trait required a specific collection of integer and many tests
depended on the fact that elements were SmallInteger.
As this trait test iterating methods for all collections ( it is used
by 'CollectionRootTest' ), it should work for every kind of
collection and therfore every kind of elements in ( it should, for
example, work for 'LinkedList' that use 'Link' elements )
The new trait work now for 'LinkedListTest'.
-> Modification of all tests in 'TIterateSequencedReadableTest'
( in the same way and for the same reasons than 'TItereateTest' )
-> Modification of test:
testAsCommaStringMore
in trait 'TAsStringCommaAndDelimiterSequenceableTest'
so that it works also with elements for wich 'asString' return a
String including ' '.
(for example: Link new asSTring returns: 'a Link')
-> TConvertTest split into two Traits.
All methods converting into a sorted collection are now tested in a
new trait: TConvertAsSortedTest so that collections that can't
include 'sortable' elements (LinkedList for example ) can use
TConvertTest.
TConvertAsSorted is specific to collection that can include sortable
elements.
-> Modification of TConvertTest wich tested some methods
(asSet, asIdentitySet) for duplicate contents what can't work for
Interval or Collection without equel elements.
Creation of a new trait : 'TConvertAsSetForMultiplinessTest'.
-> Remodularisation of TCopySequenceableTest wich were too big.
Creation of a new trait :
-> TCopySequenceableSameContents
testing copying methods that only change the order of
elements
and don't remove or add any elements to the copy.
-> TCopyPartOfSequenceable
testing copying methods that only copy a part of a
collection
(copyAfter: copyUpTo: )
-> TCopySequenceableWithOrWithoutSpecificElements
testing copying methods ( from the initial trait
TCopySequenceable ) that copy the collection
with more or less
specified elements .
-> 'TCopySequenceableWithReplacement'
testing copying methods ( from the initial version of
TSequenceableTest ) that copy and replace
subcollections in the
receiver.
-> Refinition of all tests in TIndexAccess so that they required a
simple collection without equal element and test the 'Standard'
comportement that come with. Therefore, it can be used by collections
that don't allowed duplicate elements.
The aspect of 'multiple occurrences' was puted into a new trait:
TIndexAccessForMultipliness
( this aspect is important for 'lastIndexOf:' or 'identityIndexOf:'
for exemple )
-> modification of all methods in TAddTest.
those methods used always directly 'self collection' to test if an
element had been added .
For example : self assert: self collection size = oldsize + 1
That didn't work if required methods returned a new object at each time
and not an instance variable of the classTest.
TAddTest use now its own copies of required collection to be
independant of the way the method is given by the ClassTest.
-> new trait:
- TRmoveByIndexTest
testing methods for removing by index access
(used at least by OrderedCollection and SortedCollection)
-> new trait:
- TCopyPartOfSequenceableForMultipliness
testing the specific comportement with duplicate for methods in
TCopyPartOfSequenceable.
TCopyPartOfSequenceable can now be used by collection that don't
allowed duplicate elements.
-> new traits :
- TCopySequenceableWithReplacementForSorted
testing specific comportement of methods like 'copyReplaceAll:with:'
for sorted collection.
-> redefinition of trait : 'TIterateTest' (in a new trait 'TIterateNew').
This trait required a specific collection of integer and many tests
depended on the fact that elements were SmallInteger.
As this trait test iterating methods for all collections ( it is used
by 'CollectionRootTest' ), it should work for every kind of
collection and therfore every kind of elements in ( it should, for
example, work for 'LinkedList' that use 'Link' elements )
The new trait work now for 'LinkedListTest'.
-> Modification of all tests in 'TIterateSequencedReadableTest'
( in the same way and for the same reasons than 'TItereateTest' )
-> Modification of test:
testAsCommaStringMore
in trait 'TAsStringCommaAndDelimiterSequenceableTest'
so that it works also with elements for wich 'asString' return a
String including ' '.
(for example: Link new asSTring returns: 'a Link')
-> TConvertTest split into two Traits.
All methods converting into a sorted collection are now tested in a
new trait: TConvertAsSortedTest so that collections that can't
include 'sortable' elements (LinkedList for example ) can use
TConvertTest.
TConvertAsSorted is specific to collection that can include sortable
elements.
_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project