...
| Code Block |
|---|
// require(url:'http://code.google.com/p/instinct', jar:'instinct-0.1.35.jar') // require(url:'http://geekscape.org/static/boost.html', jar:'boost-982.jar') import com.googlecode.instinct.marker.annotate.BeforeSpecification* import com.googlecode.instinct.marker.annotate.Specification import com.googlecode.instinct.runner.TextContextRunner class AlmostEmptyFixedStackContext { private stack @BeforeSpecification void initially() { stack = new FixedStack() stack.push 'anything' assert !stack.isEmpty() } @Specification void shouldRemainNotEmptyAfterPeek() { stack.peek() assert !stack.isEmpty() } @Specification void shouldBecomeEmptyAfterPop() { stack.pop() assert stack.isEmpty() } } class AlmostFullFixedStackContext { private stack @BeforeSpecification void initially() { stack = new FixedStack() (1..<FixedStack.MAXSIZE).each{ x -> stack.push x } assert !stack.isFull() } @Specification void shouldBecomeFullAfterPush() { stack.push 'anything' assert stack.isFull() } } class EmptyFixedStackContext extends GroovyTestCase { private stack = new FixedStack() @BeforeSpecification void preConditionpreConditions() { assert stack.isEmpty() } @Specification void shouldNoLongerBeEmptyAfterPush() { stack.push 'anything' assert !stack.isEmpty() } @Specification void shouldComplainWhenSentPeek() { shouldFail(StackUnderflowException) { stack.peek() } } @Specification void shouldComplainWhenSentPop() { shouldFail(StackUnderflowException) { stack.pop() } } } class FullFixedStackContext extends GroovyTestCase { private stack @BeforeSpecification void initially() { stack = new FixedStack() (1..FixedStack.MAXSIZE).each{ x -> stack.push x } assert stack.isFull() } @Specification void shouldRemainFullAfterPeek() { stack.peek() assert stack.isFull() } @Specification void shouldNoLongerBeFullAfterPop() { stack.pop() assert !stack.isFull() } @Specification void shouldComplainOnPush() { shouldFail(StackOverflowException) { stack.push 'anything' } } } class NonEmptyFixedStackContext { private stack @BeforeSpecification void initiallysetUp() { stack = new FixedStack() ('a'..'c').each{ x -> stack.push x } assert !stack.isEmpty() } @Specification void shouldAddToTheTopWhenSentPush() { stack.push 'd' assert stack.peek() == 'd' } @Specification void shouldBeUnchangedWhenSentPushThenPop() { stack.push 'anything' stack.pop() assert stack.peek() == 'c' } @Specification void shouldReturnTheTopItemWhenSentPeek() { assert stack.peek() == 'c' } @Specification void shouldNotRemoveTheTopItemWhenSentPeek() { assert stack.peek() == 'c' assert stack.peek() == 'c' } @Specification void shouldReturnTheTopItemWhenSentPop() { assert stack.pop() == 'c' } @Specification void shouldRemoveTheTopItemWhenSentPop() { assert stack.pop() == 'c' assert stack.pop() == 'b' } } Class[] contexts = [ TextContextRunner.runContexts( AlmostEmptyFixedStackContext, AlmostFullFixedStackContext, EmptyFixedStackContext, FullFixedStackContext, NonEmptyFixedStackContext ] TextContextRunner.runContexts(contexts) ) |
which outputs:
| Code Block |
|---|
AlmostEmptyFixedStackContext
- shouldBecomeEmptyAfterPop
- shouldRemainNotEmptyAfterPeek
AlmostFullFixedStackContext
- shouldBecomeFullAfterPush
EmptyFixedStackContext
- shouldComplainWhenSentPeek
- shouldNoLongerBeEmptyAfterPush
- shouldComplainWhenSentPop
FullFixedStackContext
- shouldComplainOnPush
- shouldNoLongerBeFullAfterPop
- shouldRemainFullAfterPeek
NonEmptyFixedStackContext
- shouldAddToTheTopWhenSentPush
- shouldBeUnchangedWhenSentPushThenPop
- shouldReturnTheTopItemWhenSentPop
- shouldReturnTheTopItemWhenSentPeek
- shouldNotRemoveTheTopItemWhenSentPeek
- shouldRemoveTheTopItemWhenSentPop
|
The Item Storer Example
Here is how you might use Instinct to integration test the Item Storer Example:
| Code Block |
|---|
// require(url:'http://code.google.com/p/instinct', jar:'instinct-0.1.5.jar') // require(url:'http://geekscape.org/static/boost.html', jar:'boost-982.jar') import com.googlecode.instinct.marker.annotate.*BeforeSpecification as initially import com.googlecode.instinct.marker.annotate.Specification as spec import static com.googlecode.instinct.runner.TextContextRunner.runContexts as check_specs_for class a_default_storer { def storer @BeforeSpecification@initially void setUpcreate_new_storer() { storer = new Storer() } private checkPersistAndReversecheck_persist_and_reverse(value, reverseValue) { storer.put(value) assert value == storer.get() assert reverseValue == storer.getReverse()reverse } @Specification@spec def should_reverse_numbers() { checkPersistAndReversecheck_persist_and_reverse 123.456, -123.456 } @Specification@spec def should_reverse_strings() { checkPersistAndReversecheck_persist_and_reverse 'hello', 'olleh' } @Specification@spec def should_reverse_lists() { checkPersistAndReversecheck_persist_and_reverse([1, 3, 5], [5, 3, 1]) } } check_specs_for a_default_storer |
...