2

テスト中は、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 文字の文字列を取得できるようにジェネレーター内で実行できますか?

4

1 に答える 1