Imported Upstream version 3.12.0

Former-commit-id: cf92446697332992ec36726e78eb8703e1f259d7
This commit is contained in:
Jo Shields
2015-01-13 10:44:36 +00:00
parent 8b9b85e7f5
commit 181b81b4a4
659 changed files with 12743 additions and 16300 deletions

View File

@ -1198,5 +1198,88 @@ namespace MonoTests.System.Text
int charactersWritten = Encoding.UTF8.GetDecoder ().GetChars (bytes, 0, 0, chars, 10, false);
Assert.AreEqual (0, charactersWritten, "#3");
}
[Test]
public void EncodingFallback ()
{
/* Legal UTF-8 Byte Sequences
* 1st 2nd 3rd 4th
* 00..7F
* C2..DF 80..BF
* E0 A0..BF 80..BF
* E1..EF 80..BF 80..BF
* F0 90..BF 80..BF 80..BF
* F1..F3 80..BF 80..BF 80..BF
* F4 80..8F 80..BF 80..BF
*/
var t = new EncodingTester ("utf-8");
byte [] data;
// Invalid 1st byte
for (byte b = 0x80; b <= 0xC1; b++) {
data = new byte [] { b };
t.TestDecoderFallback (data, "?", new byte [] { b });
}
///Invalid 2nd byte
// C2..DF 80..BF
for (byte b = 0xC2; b <= 0xDF; b++) {
data = new byte [] { b, 0x61 };
t.TestDecoderFallback (data, "?a", new byte [] { b });
}
// E0 A0..BF
data = new byte [] { 0xE0, 0x99};
t.TestDecoderFallback (data, "?", new byte [] { 0xE0, 0x99});
// E1..EF 80..BF
for (byte b = 0xE1; b <= 0xEF; b++) {
data = new byte [] { b, 0x61 };
t.TestDecoderFallback (data, "?a", new byte [] { b });
}
// F0 90..BF
data = new byte [] { 0xF0, 0x8F};
t.TestDecoderFallback (data, "?", new byte [] { 0xF0, 0x8F });
// F1..F4 80..XX
for (byte b = 0xF1; b <= 0xF4; b++) {
data = new byte [] { b, 0x61 };
t.TestDecoderFallback (data, "?a", new byte [] { b });
}
// C2..F3 XX..BF
for (byte b = 0xC2; b <= 0xF3; b++) {
data = new byte [] { b, 0xC0 };
t.TestDecoderFallback (data, "??", new byte [] { b }, new byte [] { 0xC0 });
}
// Invalid 3rd byte
// E0..F3 90..BF 80..BF
for (byte b = 0xE0; b <= 0xF3; b++) {
data = new byte [] { b, 0xB0, 0x61 };
t.TestDecoderFallback (data, "?a", new byte [] { b, 0xB0 });
data = new byte [] { b, 0xB0, 0xC0 };
t.TestDecoderFallback (data, "??", new byte [] { b, 0xB0 }, new byte [] { 0xC0 });
}
// F4 80..8F 80..BF
data = new byte [] { 0xF4, 0x8F, 0xC0 };
t.TestDecoderFallback (data, "??", new byte [] { 0xF4, 0x8F }, new byte [] { 0xC0 });
// Invalid 4th byte
// F0..F3 90..BF 80..BF 80..BF
for (byte b = 0xF0; b <= 0xF3; b++) {
data = new byte [] { b, 0xB0, 0xB0, 0x61 };
t.TestDecoderFallback (data, "?a", new byte [] { b, 0xB0, 0xB0 });
data = new byte [] { b, 0xB0, 0xB0, 0xC0 };
t.TestDecoderFallback (data, "??", new byte [] { b, 0xB0, 0xB0 }, new byte [] { 0xC0 });
}
// F4 80..8F 80..BF 80..BF
data = new byte [] { 0xF4, 0x8F, 0xB0, 0xC0 };
t.TestDecoderFallback (data, "??", new byte [] { 0xF4, 0x8F, 0xB0 }, new byte [] { 0xC0 });
}
}
}