--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/PPContextMementoTest.st Fri Oct 03 02:33:08 2014 +0100
@@ -0,0 +1,117 @@
+"{ Package: 'stx:goodies/petitparser/tests' }"
+
+TestCase subclass:#PPContextMementoTest
+ instanceVariableNames:'memento'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'PetitTests-Tests'
+!
+
+!PPContextMementoTest methodsFor:'accessing'!
+
+memento
+ ^ PPContextMemento new
+! !
+
+!PPContextMementoTest methodsFor:'running'!
+
+setUp
+ memento := self memento.
+! !
+
+!PPContextMementoTest methodsFor:'tests'!
+
+testEquality
+ | m1 m2 |
+ m1 := self memento.
+ m2 := self memento.
+
+ self assert: m1 = m2.
+
+ m1 propertyAt: #foo put: #bar.
+ self assert: (m1 = m2) not.
+
+ m2 propertyAt: #foo put: #bar.
+ self assert: m1 = m2.
+!
+
+testEquality2
+ | m1 m2 |
+ m1 := self memento.
+ m2 := self memento.
+
+ self assert: m1 = m2.
+
+ m1 propertyAt: #foo put: #bar.
+ self assert: (m1 = m2) not.
+
+ m2 propertyAt: #bar put: #foo.
+ self assert: (m1 = m2) not.
+!
+
+testGetProperty
+
+ | c retval retval2 |
+ c := OrderedCollection new.
+
+ memento propertyAt: #foo put: c.
+
+ retval := memento propertyAt: #foo.
+ self assert: retval size = c size.
+ self assert: (retval == c) not.
+ self assert: retval = c.
+
+ c add: #element.
+ self assert: (retval = c) not.
+
+ retval2 := memento propertyAt: #foo.
+ self assert: (retval = retval2).
+ self assert: (retval == retval2) not.
+
+ retval add: #element.
+ self assert: (retval = retval2) not.
+!
+
+testKeysAndValuesDo
+ | |
+ memento keysAndValuesDo: [ :key :value |
+ self signalFailure: 'Should not be called'
+ ].
+!
+
+testKeysAndValuesDo2
+ | c1 c2 |
+ c1 := OrderedCollection new.
+ c2 := OrderedCollection new.
+
+ memento propertyAt: #foo put: c1.
+ memento propertyAt: #bar put: c2.
+
+ memento keysAndValuesDo: [ :key :value |
+ self assert: (value == c1) not.
+ self assert: (value == c2) not.
+ ].
+!
+
+testPutProperty
+ | c retval |
+ c := OrderedCollection new.
+ self assert: (memento hasProperty: #foo) not.
+ self assert: (memento hasProperty: #bar) not.
+
+ self should: [ memento propertyAt: #foo ] raise: Error.
+ self assert: (memento propertyAt: #foo ifAbsent: [ c ]) == c.
+
+ retval := memento propertyAt: #foo ifAbsentPut: [ c ].
+ self assert: retval size = c size.
+ self assert: (retval == c) not.
+ self assert: retval = c.
+ self assert: (memento hasProperty: #foo).
+
+ retval := memento propertyAt: #bar put: c.
+ self assert: retval size = c size.
+ self assert: (retval == c) not.
+ self assert: retval = c.
+ self assert: (memento hasProperty: #foo).
+! !
+