| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| function test() |
| { |
| function ensureJSON(string, expectation) { |
| let invalid = false; |
| try { |
| JSON.parse(string); |
| } catch (e) { |
| invalid = true; |
| } |
| if (expectation === "invalid") |
| InspectorTest.expectThat(invalid, "JSON should be invalid."); |
| else |
| InspectorTest.expectThat(!invalid, "JSON should be valid."); |
| } |
| |
| function ensureEval(string, expectation) { |
| let isObject = false; |
| try { |
| let result = eval("(" + string + ")"); |
| isObject = typeof result === "object"; |
| } catch (e) {} |
| |
| if (expectation === "object") |
| InspectorTest.expectThat(isObject, "Should be able to be evaluated to an object."); |
| else |
| InspectorTest.expectThat(!isObject, "Should not be able to be evaluated to an object."); |
| } |
| |
| |
| let suite = InspectorTest.createAsyncSuite("EsprimaFormatter.JSON"); |
| |
| const isModule = false; |
| const indentString = " "; |
| let workerProxy = WI.FormatterWorkerProxy.singleton(); |
| |
| suite.addTestCase({ |
| name: "EsprimaFormatter.ValidJSON", |
| description: "Format valid JSON", |
| test(resolve, reject) { |
| let validJSON = JSON.stringify({"a":123,"b":[1,2,3],"c":{"d":"e"}}); |
| InspectorTest.log("JSON: " + doubleQuotedString(validJSON)); |
| ensureJSON(validJSON, "valid"); |
| workerProxy.formatJavaScript(validJSON, isModule, indentString, ({formattedText, sourceMapData}) => { |
| InspectorTest.log("FORMATTED:"); |
| InspectorTest.log(formattedText); |
| resolve(); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "EsprimaFormatter.InvalidButObject", |
| description: "Format invalid JSON due to literal keys, but it can be evaluated as a valid JavaScript Object", |
| test(resolve, reject) { |
| let invalidJSON = `{a:123,b:[1,2,3],c:{d:"e"}}`; |
| InspectorTest.log("JSON: " + doubleQuotedString(invalidJSON)); |
| ensureJSON(invalidJSON, "invalid"); |
| ensureEval(invalidJSON, "object"); |
| workerProxy.formatJavaScript(invalidJSON, isModule, indentString, ({formattedText, sourceMapData}) => { |
| InspectorTest.log("FORMATTED:"); |
| InspectorTest.log(formattedText); |
| resolve(); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "EsprimaFormatter.InvalidWithComments", |
| description: "Format invalid JSON due to comments, but it can be evaluated as a valid JavaScript Object", |
| test(resolve, reject) { |
| let invalidJSON = JSON.stringify({"a":123,"b":[1,2,3],"c":{"d":"e"}}) + "/*Comment*/"; |
| InspectorTest.log("JSON: " + doubleQuotedString(invalidJSON)); |
| ensureJSON(invalidJSON, "invalid"); |
| ensureEval(invalidJSON, "object"); |
| workerProxy.formatJavaScript(invalidJSON, isModule, indentString, ({formattedText, sourceMapData}) => { |
| InspectorTest.log("FORMATTED:"); |
| InspectorTest.log(formattedText); |
| resolve(); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "EsprimaFormatter.Invalid", |
| description: "Format invalid JSON, that is not a valid JavaScript Object", |
| test(resolve, reject) { |
| let invalid = `{a:1 b:2}`; |
| InspectorTest.log("INPUT: " + doubleQuotedString(invalid)); |
| ensureJSON(invalid, "invalid"); |
| ensureEval(invalid, "bad"); |
| workerProxy.formatJavaScript(invalid, isModule, indentString, ({formattedText, sourceMapData}) => { |
| InspectorTest.expectThat(formattedText === null, "Response should be null."); |
| resolve(); |
| }); |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Test JSON formatting.</p> |
| </body> |
| </html> |