public async Task StringTab() { const string deserializesToTab = "\"\\t\""; void defaultJavascriptEncoderTabDeserialization() { Assert(JsonSerializer.Deserialize <string>(deserializesToTab) == "\t"); } void unsafeJavascriptEncoderTabDeserialization() { var options = new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; Assert(JsonSerializer.Deserialize <string>(deserializesToTab, options) == "\t"); } // this is correct js because it's tested in preTest via temp file rather than via bash // this is what the JS should be such that a tab is printed: const string correct_js = "\nvar result = \"\\t\";\n\nconsole.log('__DEBUG__');\nconsole.log(JSON.stringify(result));\n"; async Task preTest() { var(_, stdOut, _, _) = await ProcessExtensions.ExecuteJSViaTempFile(correct_js); Assert(stdOut == deserializesToTab + "\n"); } defaultJavascriptEncoderTabDeserialization(); unsafeJavascriptEncoderTabDeserialization(); await preTest(); // literal JS: // console.log("\t"); const string input = "\t"; // test the built JS: string js = ProcessExtensions.ExecuteJS_Builder(NO_IMPORTS, input); Assert(correct_js == js); // test the built JS, escaping to bash and executing: string jsOutput = await executeJS((object)input); Assert(jsOutput == deserializesToTab + "\n"); // if this fails it must be the bashEscape }
public async Task ExecutingJSViaTempFileOrBashIsIdentical() { foreach (string s in new[] { "\\\\sqrt{}", // literal js: console.log("\\sqrt{}") "\\\\b", // literal js: console.log("\\b") "\\\"", // literal js: console.log("\"") "\\\"\\\"", // literal js: console.log("\"\"") "\\t", // literal js: console.log("\t") "\t", // literal js: console.log(" ") "\\n" }) // literal js: console.log("\n") { string js = $"console.log(\"{s}\")"; var(_, stdOutViaFile, fileErr, _) = await ProcessExtensions.ExecuteJSViaTempFile(js); var(_, stdOutViaBash, bashErr, _) = await ProcessExtensions.ExecuteJS(js); Assert(fileErr == ""); Assert(bashErr == ""); Assert(stdOutViaFile == stdOutViaBash); } }