grails 3.3.9, + теги libs
Я создаю новый тег taglib, как этот
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
class JavaDateTimeTagLib {
static defaultEncodeAs = [taglib:'html']
//static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static encodeAsForTags = [testCall: [taglib:'none']]
static namespace = "jdt" //java8 date time name space for tags
def testCall = { attrs ->
def p1 = attrs.p1
def p2 = attrs.p2
out << "p1:'$p1' with class ${p1.getClass()}"
out << "p2:'$p2' with class ${p2.getClass()}"
}
}
, где я хочу передать не строковую переменную на карту attrs.
Затем я настраиваю тест следующим образом
class JavaDateTimeTagLibSpec extends Specification implements TagLibUnitTest<JavaDateTimeTagLib> {
def setup() {
}
def cleanup() {
}
/**
* restriction params must be quoted values - esentially strings
* taglib has to take that and do any conversions in the taglib
* output by defaults is encoded html using std codec
*/
void "call displayDateTime tag "() {
given:
String result = applyTemplate('<jdt:testCall p1="p1-string" p2="$now" />' , [now:LocalDateTime.now()])
when :
println "$result "
then:
result
}
}
Я пытаюсь передать переменную LocalDateTime на карту attrs.
, если вы используете applyTemplate ипередать p2 = ldt и протестировать карту [ldt: LocalDateTime.now ()], тест не пройден, сообщив, что переменная должна быть 'заключена в кавычки
[Byte array resource [test_1549319950845]:1] Attribute value must be quoted (p1="p1-string" p2=now).
, если вы цитируете переменную p2 с помощью p2 = "$ ldt" ипротестируйте сопоставление имени как [ldt: LocalDateTime.now ()], тогда тест будет работать - однако тип, переданный на карту attrs, имеет тип GStringImpl
при чтении руководства OCI руководство по тегам oci lib
это подразумевает на странице 4, что вы можете передать attrs.employees в виде списка доменных объектов и использовать эту разметку в вашей
, но нет способа вызвать это с помощью тестирования, так как все имеетбыть строкой в кавычках - что делает его GStringImpl
как передать не строковую переменную в карту attrs taglibs из appyTemplate (.. я предполагаю, что то же ограничение применяется в живом gsp, а не только в рамках тестирования)