2011-11-13 3 views
2

私は、テキスト復号化クラスのための単体テストのセットを書いています。私は正確にun-mappable の入力CharsetDecoderに処理するテストを書いてみたいと思います。しかし、私はこれを行うバイトバッファを開始しようとしています。例:私はアサーション(6行目)を渡すためにバイトのバッファ(ライン3)を開始することができますどのようにJava CharsetDecoderの 'un-mappable'入力はどのように生成できますか?

CharsetDecoder decoder = Charset.forName("utf-8").newDecoder(); 
decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 
ByteBuffer in = ? 
CharBuffer out = CharBuffer.allocate(256); 
CoderResult result = decoder.decode(in, out, true); 
assertTrue(result.isUnmappable()); 


動作しないもの:

  • NULL文字(例えば\ u0000のエンコードをUTF-8など)
  • (UTF-8としてエンコード例えば\ U0001)制御文字
  • 未定義の文字(例:utf-8としてエンコードされた\ u2065)
  • 非文字(例:\ ufdd0はutf-8としてエンコードされます)
  • 私的使用chara例えば、 \ ue000はutf-8としてエンコードされています)
  • スタンドアロンの文字(例:utf-8としてエンコードされた\ u0305)。
+0

JDKのCharsetDecoderクラスをユニットテストしていますか? –

+0

私は自分のクラス内で 'CharsetDecoder'クラスを使用しています。クラスの動作をテストするために、 'CharsetDecoder'からの出力を生成したいだけです。 – johnstok

答えて

1

マッピング不可能な文字の条件は、エンコードタスクにのみ関係していると思います。ここでは、256文字がISO-8859-1のために定義されていません。

public void testUnmappableCharacter() { 
    CharsetEncoder encoder = Charset.forName("iso-8859-1").newEncoder(); 
    CharBuffer in = CharBuffer.wrap(new char[]{256}); 
    ByteBuffer out = ByteBuffer.allocate(1); 
    CoderResult result = encoder.encode(in, out, false); 
    System.out.println(result); 
} 

UTF-8のデコードのために、あなたが作ることができるでしょう唯一のものは全て違法UTF-8以降不正な条件でありますコードポイントはエンコードできません。

+0

"マップできない文字の条件は、エンコーディングタスクにのみ関連しています" - 私はこれについても疑問に思いました。しかし、なぜそれが最初の場所に 'onUnmappableCharacter'メソッドを追加するのですか? – johnstok

+0

右。だから私はいくつかの文字がUnicode 4.0にマップ可能ではないエンコーディングが存在するかもしれないと仮定します。私はUTF-8がそのようなエンコーディングだとは思わない。 – gawi

関連する問題