package groovy

/** 
 * @author Hallvard Tr�tteberg
 * @version $Revision$
 */
class ClosureCurryTest extends GroovyTestCase {

    void testCurry() {
		def clos1 = {s1, s2 -> s1 + s2}
		def clos2 = clos1.curry("hi")
		def value = clos2("there")
		assert value == "hithere"

		def clos3 = {s1, s2, s3 -> s1 + s2 + s3}
		def clos4 = clos3.curry('a')
		def clos5 = clos4.curry('b')
		def clos6 = clos4.curry('x')
		def clos7 = clos4.curry('f', 'g')
		value = clos5('c')
		assert value == "abc"
		value = clos6('c')
		assert value == "axc"
		value = clos4('y', 'z')
		assert value == "ayz"
		value = clos7()
		assert value == "afg"

		clos3 = {s1, s2, s3 -> s1 + s2 + s3}.asWritable()
		clos4 = clos3.curry('a')
		clos5 = clos4.curry('b')
		clos6 = clos4.curry('x')
		clos7 = clos4.curry('f', 'g')
		value = clos5('c')
		assert value == "abc"
		value = clos6('c')
		assert value == "axc"
		value = clos4('y', 'z')
		assert value == "ayz"
		value = clos7()
		assert value == "afg"

		clos3 = {s1, s2, s3 -> s1 + s2 + s3}
		clos4 = clos3.curry('a').asWritable()
		clos5 = clos4.curry('b').asWritable()
		clos6 = clos4.curry('x').asWritable()
		clos7 = clos4.curry('f', 'g').asWritable()
		value = clos5('c')
		assert value == "abc"
		value = clos6('c')
		assert value == "axc"
		value = clos4('y', 'z')
		assert value == "ayz"
		value = clos7()
		assert value == "afg"

		clos3 = {s1, s2, s3 -> s1 + s2 + s3}
		clos4 = clos3.curry('a').clone()
		clos5 = clos4.curry('b').clone()
		clos6 = clos4.curry('x').clone()
		clos7 = clos4.curry('f', 'g').clone()
		value = clos5('c')
		assert value == "abc"
		value = clos6('c')
		assert value == "axc"
		value = clos4('y', 'z')
		assert value == "ayz"
		value = clos7()
		assert value == "afg"

		clos3 = {s1, s2, s3 -> s1 + s2 + s3}
		clos4 = clos3.curry('a').asWritable().clone()
		clos5 = clos4.curry('b').asWritable().clone()
		clos6 = clos4.curry('x').asWritable().clone()
		clos7 = clos4.curry('f', 'g').asWritable().clone()
		value = clos5('c')
		assert value == "abc"
		value = clos6('c')
		assert value == "axc"
		value = clos4('y', 'z')
		assert value == "ayz"
		value = clos7()
		assert value == "afg"
    }  
    
    void testParameterTypes() {
        def cl1 = { String s1, int i -> return s1 + i }
        assert "foo5" == cl1("foo", 5)
        assert [String, int] == cl1.getParameterTypes().toList()

        def cl2 = cl1.curry("bla")
        assert "bla4" == cl2(4)
        assert null != cl2.getParameterTypes() 
        assert [int] == cl2.getParameterTypes().toList() 
    }    
    
    void testDelegate() {
        def res = null
        def c = {a -> res = z}
        def cc = c.curry(1)

        cc.delegate = [z: "goodbye"]
        cc()
        assert res == cc.delegate.z
    }
}
