views:

170

answers:

2

This was taken nearly verbatim from IBM's Mastering Grails series.

DateTagLib.groovy:

class DateTagLib {
  def thisYear = {
    out << Calendar.getInstance().get(Calendar.YEAR)
  }
}

DateTagLibTests.groovy:

class DateTagLibTests extends TagLibUnitTestCase {
    def dateTagLib

    protected void setUp() {
        super.setUp()

        dateTagLib = new DateTagLib()
    }

    void testThisYear() {
        String expected = Calendar.getInstance().get(Calendar.YEAR)
        assertEquals("years do NOT match", expected, dateTagLib.thisYear())
    }

    protected void tearDown() {
        super.tearDown()
    }
}

grails test-app DateTagLib output:

-------------------------------------------------------
Running 1 unit test...
Running test DateTagLibTests...
                    testThisYear...FAILED
Tests Completed in 359ms ...
-------------------------------------------------------
Tests passed: 0
Tests failed: 1
-------------------------------------------------------

I tried matching the types (int/long/String), but I'm still banging my head against the wall.

This test also fails:

void testThisYear() {
    long expected = Calendar.getInstance().get(Calendar.YEAR)
    assertEquals("years do NOT match", expected, (long) dateTagLib.thisYear())
}
A: 

out << Calendar.getInstance().get(Calendar.YEAR) puts the result into out, if you want to test this use def thisYear = { Calendar.getInstance().get(Calendar.YEAR) }

splix
+5  A: 

Try the following instead

class DateTagLibTests extends TagLibUnitTestCase {

    void testThisYear() {
        String expected = Calendar.getInstance().get(Calendar.YEAR)
        tagLib.thisYear()
        assertEquals("years do NOT match", expected, tagLib.out)
    }

}

Your original code has 2 problems:

  • You should not instantiate DateTagLib explicitly. It is already available through a property of the test class named tagLib
  • thisYear does not return the year value, it writes it to out. Within a test you can access the content written to the output via tagLib.out
Don
Awesome, thanks for the explanation!
Dolph
No problem, BTW I don't know whether you're planning to use this taglib or if it's just for illustrative purposes, but it seems fairly pointless to me. IMO, it's almost as easy to use the following GSP code `${new Date()[Calendar.YEAR]}`
Don