Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions ark/fast-check/__tests__/arktypeFastCheck.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ contextualize(() => {
const arbitrary = arkToArbitrary(T)
assertProperty(arbitrary, T)
})
it("regex with flags", () => {
const T = type(/^\u{1F600}[a-z]$/iu)
const arbitrary = arkToArbitrary(T)
assertProperty(arbitrary, T)
})
it("multiple regexes", () => {
const T = type("string.email").and("string.alpha")
attest(() => arkToArbitrary(T)).throws(
Expand Down
9 changes: 8 additions & 1 deletion ark/fast-check/arbitraries/string.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ export const buildStringArbitrary = (
if ("pattern" in stringConstraints) {
if (stringConstraints.minLength || stringConstraints.maxLength)
throwInternalError("Bounded regex is not supported.")
return fc.stringMatching(new RegExp(stringConstraints.pattern))
return fc.stringMatching(
new RegExp(stringConstraints.pattern, stringConstraints.flags)
)
}

return fc.string(stringConstraints)
Expand All @@ -22,6 +24,7 @@ const getFastCheckStringConstraints = (
) => {
const stringConstraints: fc.StringConstraints & {
pattern?: string
flags?: string
} = {}
for (const refinement of refinements) {
if (refinement.hasKind("pattern")) {
Expand All @@ -31,6 +34,10 @@ const getFastCheckStringConstraints = (
)
}
stringConstraints["pattern"] = refinement.rule
// fast-check doesn't support i, and dropping it only narrows what
// gets generated, so every generated string still matches
if (refinement.flags)
stringConstraints["flags"] = refinement.flags.replace("i", "")
} else if (refinement.hasKind("exactLength")) {
stringConstraints["minLength"] = refinement.rule
stringConstraints["maxLength"] = refinement.rule
Expand Down
Loading