blob: 8974cf76fc0962baeb41ad94b93d69c58527c1ad [file] [log] [blame]
package org.codehaus.groovy.runtime;
/*
* Test whether the Invoker includes categories when
* trying to find an iterator (via the method iterator())
*/
class CategoryForIteratorTest extends GroovyTestCase {
def identity = { val -> val }
def c
def countCalls = { c = c + 1 }
void setUp() {
c = 0
}
/*
* Ensure that without the iterator category a
* one-element collection is returned that
* results in one call to the countCalls closure
*/
void testWithoutIteratorCategory() {
identity.each countCalls
assert c == 1
}
/*
* When using the IteratorCategory below we get an
* iterator that does no iteration. So the count
* has to be 0
*/
void testWithIteratorCategory() {
use(IteratorCategory) {
c = 0
identity.each countCalls
assert c == 0
}
}
}
/*
* The category simply adds an iterator()-method returning
* the null iterator defined below
*/
class IteratorCategory {
static Iterator iterator(Closure c) {
return new TestIterator()
}
}
/*
* This iterator returns 0 elements, allowing us to distinguish
* from the default collection-iterator
*/
class TestIterator implements Iterator {
public boolean hasNext() { return false }
public Object next() { return null }
public void remove() {}
}