Можно ли использовать сопоставители строк в сочетании с сопоставителями specs2 Json?

Внутри теста specs2 я проверяю строки json с помощью сопоставителей JSON. Я знаю, что можно использовать регулярные выражения для сопоставления таких значений

someJson must */("key")/("(one|other)".r)

Можно ли аккуратно использовать другие средства сопоставления строк (например, contains)?

Учитывая этот грязный пример:

val someJson = """{"blob": "multiline string
                  |with various line endings"}"""

Этот сопоставитель

someJson must */("blob")/contains("various")

Выглядит намного чище, чем

someJson must */("blob")/"[^v]various.*".r

Это неправильное выражение для использования, но оно может работать в этом случае.


person iwein    schedule 12.02.2013    source источник
comment
Есть ли что-то конкретное, что вы хотите сделать, чего не можете сделать с помощью регулярных выражений?   -  person Eric    schedule 12.02.2013
comment
Ну, я не могу придумать ни одного сопоставления строк, которое я не могу сделать с помощью регулярных выражений. Тем не менее, читабельные тесты мне дороги. Я проясню вопрос на примере, который на самом деле был бы запутанным с регулярным выражением.   -  person iwein    schedule 13.02.2013


Ответы (2)


Теперь возможно (в specs2-1.12.4-SNAPSHOT и specs2-1.13.1-SNAPSHOT) использовать сопоставители specs2 в дополнение к простым строкам и регулярным выражениям для сопоставления значений и ключей:

person must /("p.*".r) */(".*on".r) /("age" -> "33")
person must /("p.*".r) */(".*on".r) /("age" -> "\d+\.\d".r)
person must /("p.*".r) */(".*on".r) /("age" -> startWith("3"))
person must /("p.*".r) */(".*on".r) /("age" -> (be_>(30) ^^ ((_:String).toInt)))
person Eric    schedule 15.02.2013
comment
Изменение реальности для того, чтобы ваш ответ был принят, а. Красавчик, отлично выглядит! - person iwein; 15.02.2013

Не похоже. Контрольным признаком этой возможности является метод, принимающий частичную функцию, и все методы в JsonMatchers принимают Any.

person Daniel C. Sobral    schedule 12.02.2013
comment
@iwein Это часто бывает, когда кто-то находит что-то, чего Specs2 не делает, и сообщает об этом Эрику ... - person Daniel C. Sobral; 15.02.2013