Пример #1
0
        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
        }
Пример #2
0
        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);
            }
        }