public void TestDefaultEncoder() { TestEncode(CSharpStringLiteralEncoder.GetEncoder(false), null, string.Empty, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", "\u2028\u2029", // Special whitespace "abcdef123456@~!#$%^&*()\"\a\b\f\n\r\t\v中文", "" + (char)0 + (char)1 + (char)25 + (char)30 + (char)31 + (char)32 + (char)33 + (char)126 + (char)127 + (char)128, new string(Enumerable.Range(0, 128).Select(i => (char)i).ToArray()), // ASCII, "𤭢" // 𤭢 ); TestEncode(CSharpStringLiteralEncoder.GetEncoder(true), null, string.Empty, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", // Letters/Digits "\u2028\u2029", // Special whitespace "abcdef123456@~!#$%^&*()\"\a\b\f\n\r\t\v中文", "" + (char)1 + (char)25 + (char)30 + (char)31 + (char)32 + (char)33 + (char)126 + (char)127 + (char)128, new string(Enumerable.Range(1, 128).Reverse().Select(i => (char)i).ToArray()), // ASCII, "123456789𤭢1256" // 𤭢 ); }
private static void TestEncode(CSharpStringLiteralEncoder encoder, params string[] inputs) { // Outputs var literals = inputs.Select(s => encoder.Encode(s)).ToArray(); // // Treat the encoded strings as string literals and put them in a simple C# source code, // (Static class field, e.g: public static readonly string field_0 = *literal*). // string className; string[] fieldNames; var source = GenerateTestSource(literals, out className, out fieldNames); // // Then compile the source into a .NET assembly on-the-fly. // var testClassType = CompileAssembly(source).GetType(className); // // If the encoder works as expected, the value of each field // should be equal to the corresponding input. // for (var i = 0; i < fieldNames.Length; i++) { var fieldName = fieldNames[i]; var fieldValue = (string)testClassType.GetField(fieldName, BindingFlags.Static | BindingFlags.Public).GetValue(null); Assert.AreEqual(inputs[i], fieldValue); } }
public void TestGetEncoder() { var encoder = CSharpStringLiteralEncoder.GetEncoder(false); Assert.IsFalse(encoder.Verbatim); Assert.IsFalse(encoder.IsWrappingEnabled); Assert.IsTrue(encoder.WrapChars <= 0); Assert.AreEqual(encoder.Indent, 0); Assert.AreEqual(encoder.IndentationChar, CSharpStringLiteralEncoder.DefaultIndentationChar); encoder = CSharpStringLiteralEncoder.GetEncoder(false, 80); Assert.IsFalse(encoder.Verbatim); Assert.IsTrue(encoder.IsWrappingEnabled); Assert.AreEqual(encoder.WrapChars, 80); Assert.AreEqual(encoder.Indent, 0); Assert.AreEqual(encoder.IndentationChar, CSharpStringLiteralEncoder.DefaultIndentationChar); encoder = CSharpStringLiteralEncoder.GetEncoder(false, 80, 4); Assert.IsFalse(encoder.Verbatim); Assert.IsTrue(encoder.IsWrappingEnabled); Assert.AreEqual(encoder.WrapChars, 80); Assert.AreEqual(encoder.Indent, 4); Assert.AreEqual(encoder.IndentationChar, CSharpStringLiteralEncoder.DefaultIndentationChar); encoder = CSharpStringLiteralEncoder.GetEncoder(false, 80, 4, '\t'); Assert.IsFalse(encoder.Verbatim); Assert.IsTrue(encoder.IsWrappingEnabled); Assert.AreEqual(encoder.WrapChars, 80); Assert.AreEqual(encoder.Indent, 4); Assert.AreEqual(encoder.IndentationChar, '\t'); encoder = CSharpStringLiteralEncoder.GetEncoder(true); Assert.IsTrue(encoder.Verbatim); Assert.IsFalse(encoder.IsWrappingEnabled); Assert.IsTrue(encoder.WrapChars <= 0); Assert.AreEqual(encoder.Indent, 0); Assert.AreEqual(encoder.IndentationChar, CSharpStringLiteralEncoder.DefaultIndentationChar); encoder = CSharpStringLiteralEncoder.GetEncoder(true, 80); Assert.IsTrue(encoder.Verbatim); Assert.IsTrue(encoder.IsWrappingEnabled); Assert.AreEqual(encoder.WrapChars, 80); Assert.AreEqual(encoder.Indent, 0); Assert.AreEqual(encoder.IndentationChar, CSharpStringLiteralEncoder.DefaultIndentationChar); encoder = CSharpStringLiteralEncoder.GetEncoder(true, 80, 4); Assert.IsTrue(encoder.Verbatim); Assert.IsTrue(encoder.IsWrappingEnabled); Assert.AreEqual(encoder.WrapChars, 80); Assert.AreEqual(encoder.Indent, 4); Assert.AreEqual(encoder.IndentationChar, CSharpStringLiteralEncoder.DefaultIndentationChar); encoder = CSharpStringLiteralEncoder.GetEncoder(true, 80, 4, '\t'); Assert.IsTrue(encoder.Verbatim); Assert.IsTrue(encoder.IsWrappingEnabled); Assert.AreEqual(encoder.WrapChars, 80); Assert.AreEqual(encoder.Indent, 4); Assert.AreEqual(encoder.IndentationChar, '\t'); }
public void TestWrappingEncoder() { TestEncode(CSharpStringLiteralEncoder.GetEncoder().EnableWrapping(10, 6), null, string.Empty, "1", "123456", "123456789", // 9 characters "0123456789", // 10 characters "0123456789a", // 11 characters "0123456789abcdefghij", // 20 characters "0123456789abcdefghijk", // 21 characters, "𤭢", "12345678𤭢", "123456789𤭢45", "1234567890𤭢1231", "𤭢𤭢𤭢𤭢𤭢𤭢𤭢𤭢𤭢𤭢𤭢", "请在此处@~!#$%^&*()\"\a\b\f\n\r\t\v输入\u2028\u2029中文" ); TestEncode(CSharpStringLiteralEncoder.GetEncoder().EnableWrapping(10, 6).UseVerbatimForm(), null, string.Empty, "1", "123456", "123456789", // 9 characters "0123456789", // 10 characters "0123456789a", // 11 characters "0123456789abcdefghij", // 20 characters "0123456789abcdefghijk", // 21 characters, "𤭢", "12345678𤭢", "123456789𤭢45", "1234567890𤭢1231", "𤭢𤭢𤭢𤭢𤭢𤭢𤭢𤭢𤭢𤭢𤭢", "请在此处@~!#$%^&*()\"\a\b\f\n\r\t\v输入\u2028\u2029中文" ); }