in.specmatic.core.pattern.NegativePatternsTemplate.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of specmatic-core Show documentation
Show all versions of specmatic-core Show documentation
Turn your contracts into executable specifications. Contract Driven Development - Collaboratively Design & Independently Deploy MicroServices & MicroFrontends.
Deprecation Notice for group ID "in.specmatic"
******************************************************************************************************
Updates for "specmatic-core" will no longer be available under the deprecated group ID "in.specmatic".
Please update your dependencies to use the new group ID "io.specmatic".
******************************************************************************************************
package `in`.specmatic.core.pattern
import `in`.specmatic.core.Resolver
abstract class NegativePatternsTemplate {
fun negativeBasedOn(
patternMap: Map,
row: Row,
resolver: Resolver
): Sequence>> {
val eachKeyMappedToPatternMap: Map> = patternMap.mapValues { patternMap }
val negativePatternsForEachKey: Map>> = getNegativePatterns(patternMap, resolver, row)
val modifiedPatternMap: Map>>?> =
eachKeyMappedToPatternMap.mapValues { (keyToNegate, patterns) ->
val negativePatterns: Sequence> = negativePatternsForEachKey.getValue(keyToNegate)
if(!negativePatterns.any())
return@mapValues null
patterns.mapValues { (key, pattern) ->
when (key) {
keyToNegate -> {
val result: Sequence> = negativePatterns
result
}
else -> newBasedOnR(row, key, pattern, resolver)
}.map {
it.breadCrumb(withoutOptionality(key))
}
}
}
if (modifiedPatternMap.values.isEmpty())
return sequenceOf(HasValue(emptyMap()))
return modifiedPatternMap.values.asSequence().filterNotNull().flatMap {
patternListR(it)
}
}
abstract fun getNegativePatterns(
patternMap: Map,
resolver: Resolver,
row: Row
): Map>>
}