public void MutableString_Translate1() {
var SJIS = RubyEncoding.GetRubyEncoding(RubyEncoding.CodePageSJIS);
var sjis = new byte[] { 0x82, 0xA0 };
var u12345 = new byte[] { 0xF0, 0x92, 0x8D, 0x85 }; // \u{12345} in UTF-8
Test_Translate(
Utf8("αβγδ"), RubyEncoding.UTF8,
Utf8("α-γ"), RubyEncoding.UTF8,
Utf8("AB"), SJIS,
Utf8("ABBδ"), RubyEncoding.UTF8
);
Test_Translate(
Utf8("αaβzγcδ"), RubyEncoding.UTF8,
Utf8("a-z"), RubyEncoding.Binary,
Utf8("*"), SJIS,
Utf8("α*β*γ*δ"), RubyEncoding.UTF8
);
Test_Translate(
Utf8("αaβzγcδ"), RubyEncoding.UTF8,
Utf8("^α-δ"), RubyEncoding.UTF8,
Utf8("-"), SJIS,
Utf8("α-β-γ-δ"), RubyEncoding.UTF8
);
Test_Translate(
Utf8("-α-"), RubyEncoding.Binary,
Utf8("α"), RubyEncoding.Binary,
Utf8("AB"), RubyEncoding.Binary,
Utf8("-AB-"), RubyEncoding.Binary
);
Test_Translate(
Utf8("-a-"), SJIS,
Utf8("a"), RubyEncoding.Binary,
Utf8("A"), RubyEncoding.UTF8,
Utf8("-A-"), SJIS
);
Test_Translate(
Utf8("a"), RubyEncoding.UTF8,
Utf8("a"), RubyEncoding.UTF8,
Utf8("\0"), RubyEncoding.UTF8,
Utf8("\0"), RubyEncoding.UTF8
);
AssertExceptionThrown<EncodingCompatibilityError>(
() => Test_Translate(Utf8("α"), RubyEncoding.Binary, Utf8("α"), RubyEncoding.UTF8, Utf8("-"), SJIS, null, null)
);
AssertExceptionThrown<EncodingCompatibilityError>(
() => Test_Translate(Utf8("α"), RubyEncoding.UTF8, Sjis("ホ"), SJIS, Utf8("-"), SJIS, null, null)
);
// correctly switches to char repr and invalidates hashcode:
MutableString self, from, to, result;
int h1, h2;
self = MutableString.CreateBinary(Utf8("aAaBa"), RubyEncoding.UTF8);
from = MutableString.Create("a", RubyEncoding.UTF8);
to = MutableString.Create("α", RubyEncoding.UTF8);
result = MutableString.Create("αAαBα", RubyEncoding.UTF8);
MutableStringOps.Translate(self, from, to);
h1 = self.GetHashCode();
h2 = result.GetHashCode();
Assert(h1 == h2);
Assert(self.ToString() == "αAαBα");
}