
class GeneratorTest extends GroovyTestCase {

    void testGenerator() {
        def x = this.&sampleGenerator
        //System.out.println("x: " + x)
		
        def result = ''
        for (i in x) {
            result = result + i
        }
	    
        assert result == "ABC"
    }

    void testFindAll() {
        def x = this.&sampleGenerator
 	    
        def value = x.findAll { item -> return item == "C" }
        assert value == ["C"]

        value = x.findAll { item -> return item != "B" }
        assert value == ["A", "C"]
    }
    
	
    void testEach() {
        def x = this.&sampleGenerator
 	    
        def value = x.each { println(it) }
    }
    
	
    void testMissingThisBug() {
        def result = ''
        for (i in this.&sampleGenerator) {
            result = result + i
        }
	    
        assert result == "ABC"
    }
	
    void sampleGenerator(closure) {
        // kinda like yield statements
        closure.call("A")
        closure.call("B")
        closure.call("C")
    }
}
