mention string matches regex for CharSequence contains regex

In 0.6.0 we used `contains ...`, we improved to `contains value...`
by now but this is not enough for contains regex. Thus:
- use `contains: string matching regex`
- resolves #23
This commit is contained in:
Robert Stoll
2018-06-09 18:06:53 +02:00
parent 905bffa50d
commit 4346f68cc9
6 changed files with 18 additions and 10 deletions

View File

@@ -7,6 +7,7 @@ import ch.tutteli.atrium.creating.AssertionPlant
import ch.tutteli.atrium.domain.creating.charsequence.contains.CharSequenceContains
import ch.tutteli.atrium.domain.creating.charsequence.contains.CharSequenceContains.*
import ch.tutteli.atrium.domain.robstoll.lib.creating.basic.contains.creators.ContainsObjectsAssertionCreator
import ch.tutteli.atrium.reporting.translating.Translatable
import ch.tutteli.atrium.translations.DescriptionCharSequenceAssertion
/**
@@ -30,13 +31,13 @@ import ch.tutteli.atrium.translations.DescriptionCharSequenceAssertion
class CharSequenceContainsAssertionCreator<in T : CharSequence, in SC: Any, S : SearchBehaviour>(
searchBehaviour: S,
private val searcher: Searcher<S>,
checkers: List<Checker>
checkers: List<Checker>,
override val groupDescription: Translatable
) : ContainsObjectsAssertionCreator<T, SC, S, Checker>(searchBehaviour, checkers),
CharSequenceContains.Creator<T, SC> {
override val descriptionContains = DescriptionCharSequenceAssertion.CONTAINS
override val descriptionNumberOfOccurrences = DescriptionCharSequenceAssertion.NUMBER_OF_OCCURRENCES
override val groupDescription = DescriptionCharSequenceAssertion.VALUE
override fun getAssertionGroupType() = DefaultListAssertionGroupType

View File

@@ -9,6 +9,8 @@ import ch.tutteli.atrium.domain.robstoll.lib.creating.charsequence.contains.sear
import ch.tutteli.atrium.domain.robstoll.lib.creating.charsequence.contains.searchers.IndexSearcher
import ch.tutteli.atrium.domain.robstoll.lib.creating.charsequence.contains.searchers.RegexSearcher
import ch.tutteli.atrium.reporting.translating.Translatable
import ch.tutteli.atrium.translations.DescriptionCharSequenceAssertion.STRING_MATCHING_REGEX
import ch.tutteli.atrium.translations.DescriptionCharSequenceAssertion.VALUE
fun <T : CharSequence> _containsValues(
checkerOption: CharSequenceContains.CheckerOption<T, NoOpSearchBehaviour>,
@@ -43,7 +45,7 @@ private fun <T : CharSequence, S : CharSequenceContains.SearchBehaviour> checkOn
"Searching for an empty CharSequence does not make sense. You probably forgot to specify the search criterion."
}
}
return createAssertionGroup(checkerOption, searcher, expected)
return createAssertionGroup(checkerOption, searcher, expected, VALUE)
}
fun <T : CharSequence> _containsDefaultTranslationOf(
@@ -62,23 +64,25 @@ fun <T : CharSequence> _containsRegex(
checkerOption: CharSequenceContains.CheckerOption<T, NoOpSearchBehaviour>,
expected: List<String>
): AssertionGroup
= createAssertionGroup(checkerOption, RegexSearcher(), expected)
= createAssertionGroup(checkerOption, RegexSearcher(), expected, STRING_MATCHING_REGEX)
fun <T : CharSequence> _containsRegexIgnoringCase(
checkerOption: CharSequenceContains.CheckerOption<T, IgnoringCaseSearchBehaviour>,
expected: List<String>
): AssertionGroup
= createAssertionGroup(checkerOption, IgnoringCaseRegexSearcher(), expected)
= createAssertionGroup(checkerOption, IgnoringCaseRegexSearcher(), expected, STRING_MATCHING_REGEX)
private fun <T : CharSequence, SC : Any, S : CharSequenceContains.SearchBehaviour> createAssertionGroup(
checkerOption: CharSequenceContains.CheckerOption<T, S>,
searcher: CharSequenceContains.Searcher<S>,
expected: List<SC>
expected: List<SC>,
groupDescription: Translatable
): AssertionGroup {
val creator = CharSequenceContainsAssertionCreator<T, SC, S>(
checkerOption.containsBuilder.searchBehaviour,
searcher,
checkerOption.checkers
checkerOption.checkers,
groupDescription
)
return creator.createAssertionGroup(checkerOption.containsBuilder.plant, expected)
}

View File

@@ -65,7 +65,7 @@ abstract class CharSequenceContainsRegexAssertionsSpec(
= containsAtMostIgnoringCaseFunArr(atLeast, a, aX)
val indentBulletPoint = " ".repeat(rootBulletPoint.length)
val valueWithIndent = "$indentBulletPoint$listBulletPoint${CharSequenceContainsSpecBase.value}"
val regexWithIndent = "$indentBulletPoint$listBulletPoint$stringMatchingRegex"
describeFun(containsRegex) {
context("throws an ${PatternSyntaxException::class.simpleName}") {
@@ -152,7 +152,7 @@ abstract class CharSequenceContainsRegexAssertionsSpec(
message {
contains(
"$rootBulletPoint$containsDescr: $separator" +
"$valueWithIndent: \"[a-z]\"",
"$regexWithIndent: \"[a-z]\"",
"$numberOfOccurrences: 17",
"$atMost: 16"
)
@@ -166,7 +166,7 @@ abstract class CharSequenceContainsRegexAssertionsSpec(
message {
contains(
"$rootBulletPoint$containsIgnoringCase: $separator" +
"$valueWithIndent: \"[a-z]\"",
"$regexWithIndent: \"[a-z]\"",
"$numberOfOccurrences: 19",
"$atMost: 18"
)

View File

@@ -14,6 +14,7 @@ abstract class CharSequenceContainsSpecBase(spec: Spec.() -> Unit) : Spek(spec)
val containsIgnoringCase = String.format(DescriptionCharSequenceAssertion.IGNORING_CASE.getDefault(), DescriptionCharSequenceAssertion.CONTAINS.getDefault())
val numberOfOccurrences = DescriptionCharSequenceAssertion.NUMBER_OF_OCCURRENCES.getDefault()
val value = DescriptionCharSequenceAssertion.VALUE.getDefault()
val stringMatchingRegex = DescriptionCharSequenceAssertion.STRING_MATCHING_REGEX.getDefault()
val atLeast = DescriptionCharSequenceAssertion.AT_LEAST.getDefault()
val atMost = DescriptionCharSequenceAssertion.AT_MOST.getDefault()

View File

@@ -19,5 +19,6 @@ enum class DescriptionCharSequenceAssertion(override val value: String) : String
NUMBER_OF_OCCURRENCES("Anzahl Treffer"),
STARTS_WITH("beginnt mit"),
STARTS_NOT_WITH("beginnt nicht mit"),
STRING_MATCHING_REGEX("Zeichenkette übereinstimmend mit Regex"),
VALUE("Wert"),
}

View File

@@ -19,5 +19,6 @@ enum class DescriptionCharSequenceAssertion(override val value: String) : String
NUMBER_OF_OCCURRENCES("number of occurrences"),
STARTS_WITH("starts with"),
STARTS_NOT_WITH("does not start with"),
STRING_MATCHING_REGEX("string matching regex"),
VALUE("value"),
}