テスト中は、Unicode 文字を修飾したいと考えています。範囲が広い場合もあれば、範囲が狭い場合もあります。いくつかの特定のジェネレーターを作成しました。
// Generate a wide varying of Unicode strings with all legal characters (21-40 characters):
val latinUnicodeCharacter = Gen.choose('\u0041', '\u01B5').filter(Character.isDefined)
// Generate latin Unicode strings with all legal characters (21-40 characters):
val latinUnicodeGenerator: Gen[String] = Gen.chooseNum(21, 40).flatMap { n =>
Gen.sequence[String, Char](List.fill(n)(latinUnicodeCharacter))
}
// Generate latin unicode strings without whitespace (21-40 characters): !! COMES UP SHORT...
val latinUnicodeGeneratorNoWhitespace: Gen[String] = Gen.chooseNum(21, 40).flatMap { n =>
Gen.sequence[String, Char](List.fill(n)(latinUnicodeCharacter)).map(_.replaceAll("[\\p{Z}\\p{C}]", ""))
}
latinUnicodeCharacter
ジェネレーターは、標準ラテン文字 (「A」、「B」など) から高次ラテン文字 (ゲルマン/北欧など) までの範囲の文字を選択します。これは、名前などのラテン語ベースの文字入力をテストするのに適しています。
はlatinUnicodeGenerator
、長さが 21 ~ 40 文字の文字列を作成します。これらの文字列には、横方向のスペース (単なるスペース文字ではなく、他の「横方向のスペース」) が含まれます。
最後の例 はlatinUnicodeGeneratorNoWhitespace
、電子メール アドレスなどに使用されます。ラテン文字は必要ですが、スペースや制御コードなどは必要ありません。問題:最終結果をマッピングString
して制御文字を除外しているため、String
縮小され、全体の長さが 21 文字未満になることがあります (場合によっては)。
問題は、どうすれば実装できますlatinUnicodeGeneratorNoWhitespace
が、常に 21 ~ 40 文字の文字列を取得できるようにジェネレーター内で実行できますか?