Permalink
Browse files

Followup for #12751, only test on browsers with JSON.parse

  • Loading branch information...
1 parent c6cf30a commit 3144163f61ea89855818fab597a2b5f1074d10c3 @dmethvin dmethvin committed Oct 19, 2012
Showing with 36 additions and 33 deletions.
  1. +36 −33 test/unit/core.js
View
@@ -1351,49 +1351,52 @@ test("jQuery.camelCase()", function() {
});
});
-test( "JQuery.parseJSON() test internal parseJson (using fallback) to make sure that it throws like JSON.parse", function() {
- expect( 10 );
+// Ensure our window.JSON matches behavior of the native one, if it exists
+if ( window.JSON ) {
+ test( "JQuery.parseJSON() equivalence to JSON.parse", function() {
+ expect( 10 );
- var jsonParse = window.JSON;
- window.JSON = null;
+ var jsonParse = window.JSON;
+ window.JSON = null;
- raises(function() {
- jsonParse.parse("''");
- });
+ raises(function() {
+ jsonParse.parse("''");
+ });
- raises(function() {
- jQuery.parseJSON("''");
- });
+ raises(function() {
+ jQuery.parseJSON("''");
+ });
- raises(function() {
- jsonParse.parse("");
- });
+ raises(function() {
+ jsonParse.parse("");
+ });
- raises(function() {
- jQuery.parseJSON("");
- });
+ raises(function() {
+ jQuery.parseJSON("");
+ });
- raises(function() {
- jsonParse.parse({});
- });
+ raises(function() {
+ jsonParse.parse({});
+ });
- raises(function() {
- jQuery.parseJSON({});
- });
+ raises(function() {
+ jQuery.parseJSON({});
+ });
- var parsedValue = jsonParse.parse(null);
- equal( parsedValue, null );
+ var parsedValue = jsonParse.parse(null);
+ equal( parsedValue, null, "parsed null" );
- parsedValue = jQuery.parseJSON(null);
- equal( parsedValue, null );
+ parsedValue = jQuery.parseJSON(null);
+ equal( parsedValue, null, "parsed null" );
- parsedValue = jsonParse.parse("{}");
- equal( (typeof parsedValue === "object"), true );
+ parsedValue = jsonParse.parse("{}");
+ equal( (typeof parsedValue === "object"), true );
- parsedValue = jQuery.parseJSON("{}");
- equal( (typeof parsedValue === "object"), true );
-
+ parsedValue = jQuery.parseJSON("{}");
+ equal( (typeof parsedValue === "object"), true );
+
- window.JSON = jsonParse;
-} );
+ window.JSON = jsonParse;
+ });
+}

4 comments on commit 3144163

Member

jaubourg replied Oct 19, 2012

Isn't keeping the tests for browsers with JSON.parse the best way to make sure we have the same behaviour across browsers? Or am I missing something here?

Owner

dmethvin replied Oct 19, 2012

We can only compare our results to json.parse on browser that have the native method. I agree it's not optimal to test this everywhere but where we actually use it. Perhaps we dump this test's attempt to compare since we don't care about the native result.

Member

jaubourg replied Oct 20, 2012

Oh, I get what you mean now. Why not just put the tests with the expected result using jQuery.parseJSON only? Browsers with JSON.parse support will use this code path, others will use our polyfil. We'd have some sort of comparison... just not in the same browser but between browsers. Makes sense?

Member

gibson042 replied Oct 20, 2012

I'm with @jaubourg on this one... JSON.parse is just another component we abstract, and will have to normalize if a flaw is discovered in some environment's native implementation.

Please sign in to comment.