| gTestsubsuite='JSON'; |
| |
| function testJSON(str, expectSyntaxError) |
| { |
| // Leading and trailing whitespace never affect parsing, so test the string |
| // multiple times with and without whitespace around it as it's easy and can |
| // potentially detect bugs. |
| |
| // Try the provided string |
| try |
| { |
| JSON.parse(str); |
| reportCompare(false, expectSyntaxError, |
| "string <" + str + "> " + |
| "should" + (expectSyntaxError ? "n't" : "") + " " + |
| "have parsed as JSON"); |
| } |
| catch (e) |
| { |
| if (!(e instanceof SyntaxError)) |
| { |
| reportCompare(true, false, |
| "parsing string <" + str + "> threw a non-SyntaxError " + |
| "exception: " + e); |
| } |
| else |
| { |
| reportCompare(true, expectSyntaxError, |
| "string <" + str + "> " + |
| "should" + (expectSyntaxError ? "n't" : "") + " " + |
| "have parsed as JSON, exception: " + e); |
| } |
| } |
| |
| // Now try the provided string with trailing whitespace |
| try |
| { |
| JSON.parse(str + " "); |
| reportCompare(false, expectSyntaxError, |
| "string <" + str + " > " + |
| "should" + (expectSyntaxError ? "n't" : "") + " " + |
| "have parsed as JSON"); |
| } |
| catch (e) |
| { |
| if (!(e instanceof SyntaxError)) |
| { |
| reportCompare(true, false, |
| "parsing string <" + str + " > threw a non-SyntaxError " + |
| "exception: " + e); |
| } |
| else |
| { |
| reportCompare(true, expectSyntaxError, |
| "string <" + str + " > " + |
| "should" + (expectSyntaxError ? "n't" : "") + " " + |
| "have parsed as JSON, exception: " + e); |
| } |
| } |
| |
| // Now try the provided string with leading whitespace |
| try |
| { |
| JSON.parse(" " + str); |
| reportCompare(false, expectSyntaxError, |
| "string < " + str + "> " + |
| "should" + (expectSyntaxError ? "n't" : "") + " " + |
| "have parsed as JSON"); |
| } |
| catch (e) |
| { |
| if (!(e instanceof SyntaxError)) |
| { |
| reportCompare(true, false, |
| "parsing string < " + str + "> threw a non-SyntaxError " + |
| "exception: " + e); |
| } |
| else |
| { |
| reportCompare(true, expectSyntaxError, |
| "string < " + str + "> " + |
| "should" + (expectSyntaxError ? "n't" : "") + " " + |
| "have parsed as JSON, exception: " + e); |
| } |
| } |
| |
| // Now try the provided string with whitespace surrounding it |
| try |
| { |
| JSON.parse(" " + str + " "); |
| reportCompare(false, expectSyntaxError, |
| "string < " + str + " > " + |
| "should" + (expectSyntaxError ? "n't" : "") + " " + |
| "have parsed as JSON"); |
| } |
| catch (e) |
| { |
| if (!(e instanceof SyntaxError)) |
| { |
| reportCompare(true, false, |
| "parsing string < " + str + " > threw a non-SyntaxError " + |
| "exception: " + e); |
| } |
| else |
| { |
| reportCompare(true, expectSyntaxError, |
| "string < " + str + " > " + |
| "should" + (expectSyntaxError ? "n't" : "") + " " + |
| "have parsed as JSON, exception: " + e); |
| } |
| } |
| } |