Възможно ли е да се използват съвпадения на низове в комбинация с specs2 Json съвпадения?

В рамките на теста specs2 валидирам json низове, използвайки JSON matchers. Знам, че е възможно да се използват регулярни изрази за съпоставяне на такива стойности

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

Възможно ли е по чист начин да се използват други съвпадения на низове (напр. съдържа)?

Имайки предвид този объркан пример:

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