package ioc.specs

import org.apache.tapestry5.ioc.internal.util.MessageFormatterImpl
import spock.lang.Specification
import spock.lang.Unroll

class MessageFormatterImplSpec extends Specification {

    @Unroll
    def "standard formatting: #desc"() {

        def mf = new MessageFormatterImpl(format, null)

        expect:

        mf.format(* args) == expected

        where:

        format                    | args                                            | expected                                         | desc

        "Tapestry is %s."         | ["cool"]                                        | "Tapestry is cool."                              | "simple substition"
        "Tapestry release #%d."   | [5]                                             | "Tapestry release #5."                           | "numeric conversion"
        "%s is %s at version %d." | ["Tapestry", "cool", 5]                         | "Tapestry is cool at version 5."                 | "multiple conversions"
        "%s failed: %s"           | ["Something", new RuntimeException("bad wolf")] | "Something failed: bad wolf"                     | "expansion of exception message"
        "%s failed: %s"           | ["Another", new NullPointerException()]         | "Another failed: java.lang.NullPointerException" | "expansion of exception without message is exception class name"
    }

    def "toString() of a MessageFormatter is the format"() {

        when:
        def mf = new MessageFormatterImpl("this is the %s", null)

        then:

        mf.toString() == "this is the %s"
    }

}
