bestiejs / json3

A JSON polyfill. No longer maintained.
https://bestiejs.github.io/json3
Other
1.02k stars 150 forks source link

168 failures in the Adobe ExtendScript engine #29

Closed subtleGradient closed 11 years ago

subtleGradient commented 11 years ago

Cf. https://github.com/subtleGradient/json3/compare/subtlegradient;extendscript

Started spec `JSON 3 Unit Tests`.
Started test ``parse`: String Literals`.
Assertion: Double-quoted string literal.
Assertion: Empty string literal.
Assertion: String containing an escaped Unicode line separator.
Assertion: String containing an escaped Unicode paragraph separator.
Assertion: String containing an unescaped Unicode surrogate pair.
Assertion: String containing an escaped ASCII control character.
Assertion: String containing an escaped backspace.
Assertion: String containing an escaped form feed.
Assertion: String containing an escaped line feed.
Assertion: String containing an escaped carriage return.
Assertion: String containing an escaped tab.
Assertion: String containing an escaped solidus.
Assertion: String containing an escaped reverse solidus.
Assertion: String containing an escaped double-quote character.
Failure: Single-quoted string literal. Expected: true. Actual: false.
Failure: String containing a hex escape sequence. Expected: true. Actual: false.
Failure: String containing an unescaped CRLF line ending. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: String containing an unescaped ASCII control character. Expected: true. Actual: false.
Failure: done. Expected: 50. Actual: 14.
Finished test ``parse`: String Literals`. 14 assertions, 36 failures.
Started test `ECMAScript 5 Conformance`.
Failure: Valid whitespace characters may not separate two discrete tokens. Expected: true. Actual: false.
Failure: The vertical tab is not a valid whitespace character. Expected: true. Actual: false.
Failure: The form feed is not a valid whitespace character. Expected: true. Actual: false.
Failure: The non-breaking space is not a valid whitespace character. Expected: true. Actual: false.
Failure: The zero-width space is not a valid whitespace character. Expected: true. Actual: false.
Failure: The byte order mark (zero-width non-breaking space) is not a valid whitespace character. Expected: true. Actual: false.
Failure: Other Unicode category `Z` characters are not valid whitespace characters. Expected: true. Actual: false.
Failure: The line (U+2028) and paragraph (U+2029) separators are not valid whitespace characters. Expected: true. Actual: false.
Assertion: Valid whitespace characters may precede and follow all tokens.
Assertion: Leading tab characters should be ignored.
Failure: A tab character may not separate two disparate tokens. Expected: true. Actual: false.
Assertion: Leading carriage returns should be ignored.
Failure: A carriage return may not separate two disparate tokens. Expected: true. Actual: false.
Assertion: Leading line feeds should be ignored.
Failure: A line feed may not separate two disparate tokens. Expected: true. Actual: false.
Assertion: Leading space characters should be ignored.
Failure: A space character may not separate two disparate tokens. Expected: true. Actual: false.
Assertion: Strings must be enclosed in double quotes.
Failure: Single-quoted strings are not permitted. Expected: true. Actual: false.
Failure: Unicode-escaped double quote delimiters are not permitted. Expected: true. Actual: false.
Failure: Strings must terminate with a double quote character. Expected: true. Actual: false.
Assertion: Strings may be empty.
Failure: Unescaped control characters in the range [U+0000, U+0007] are not permitted within strings. Expected: true. Actual: false.
Failure: Unescaped control characters in the range [U+0008, U+000F] are not permitted within strings. Expected: true. Actual: false.
Failure: Unescaped control characters in the range [U+0010, U+0017] are not permitted within strings. Expected: true. Actual: false.
Failure: Unescaped control characters in the range [U+0018, U+001F] are not permitted within strings. Expected: true. Actual: false.
Assertion: Unicode escape sequences are permitted within strings.
Failure: Unicode escape sequences may not comprise fewer than four hexdigits. Expected: true. Actual: false.
Failure: Unicode escape sequences may not contain non-hex characters. Expected: true. Actual: false.
Assertion: Escaped solidus.
Assertion: Escaped reverse solidus.
Assertion: Escaped backspace.
Assertion: Escaped form feed.
Assertion: Escaped line feed.
Assertion: Escaped carriage return.
Assertion: Escaped tab.
Assertion: `JSON.stringify(undefined)` should return `undefined`.
Assertion: The `JSON.stringify` callback function can be called on a top-level `undefined` value.
Assertion: `JSON.stringify` should serialize top-level string primitives.
Assertion: `JSON.stringify` should serialize top-level number primitives.
Assertion: `JSON.stringify` should serialize top-level Boolean primitives.
Assertion: `JSON.stringify` should serialize top-level `null` values.
Assertion: `JSON.stringify` should serialize top-level number objects.
Assertion: `JSON.stringify` should serialize top-level string objects.
Assertion: `JSON.stringify` should serialize top-level Boolean objects.
Assertion: The `JSON.stringify` callback function may return `undefined` when called on a top-level number primitive.
Assertion: The `JSON.stringify` callback function may return `undefined` when called on a top-level object.
Assertion: The `JSON.stringify` callback function may return an array when called on a top-level number primitive.
Assertion: The `JSON.stringify` callback function may return an object literal when called on a top-level number primitive.
Assertion: `JSON.stringify` should return `undefined` when called on a top-level function.
Assertion: The `JSON.stringify` callback function may return a number primitive when called on a top-level function.
Assertion: `JSON.stringify` should ignore `filter` arguments that are not functions or arrays.
Assertion: Optional `width` argument: Number object and primitive width values should produce identical results.
Assertion: Optional `width` argument: String object and primitive width values should produce identical results.
Assertion: Optional `width` argument: The maximum numeric width value should be 10.
Assertion: Optional `width` argument: Numeric values should be converted to integers.
Assertion: Optional `width` argument: Numeric width values between 0 and 1 should be ignored.
Assertion: Optional `width` argument: Zero should be ignored.
Assertion: Optional `width` argument: Negative numeric values should be ignored.
Assertion: Optional `width` argument: Numeric width values in the range [1, 10] should produce identical results to that of string values containing `width` spaces.
Assertion: Optional `width` argument: String width values longer than 10 characters should be truncated.
Assertion: Empty string `width` arguments should be ignored.
Assertion: Boolean primitive `width` arguments should be ignored.
Assertion: `null` `width` arguments should be ignored.
Assertion: Boolean object `width` arguments should be ignored.
Assertion: Object literal `width` arguments should be ignored.
Assertion: An object literal with a custom `toJSON` method nested within an array may return a string primitive for serialization.
Assertion: An object literal with a custom `toJSON` method nested within an array may return a number object for serialization.
Assertion: An object liyeral with a custom `toJSON` method nested within an array may return a Boolean object for serialization.
Assertion: The `JSON.stringify` callback function may return a string object when called on an array.
Assertion: The `JSON.stringify` callback function may return a number object when called on an array.
Assertion: The `JSON.stringify` callback function may return a Boolean object when called on an array.
Failure: An object containing a circular reference should throw a `TypeError`. Expected: true. Actual: false.
Failure: A nested cyclic structure should throw a `TypeError`. Expected: true. Actual: false.
Failure: done. Expected: 74. Actual: 51.
Finished test `ECMAScript 5 Conformance`. 51 assertions, 24 failures.
Started test ``parse`: Object Literals`.
Assertion: Object literal containing one member.
Assertion: Object literal containing multiple members.
Failure: Unquoted identifier used as a property name. Expected: true. Actual: false.
Failure: `false` used as a property name. Expected: true. Actual: false.
Failure: `true` used as a property name. Expected: true. Actual: false.
Failure: `null` used as a property name. Expected: true. Actual: false.
Failure: Single-quoted string used as a property name. Expected: true. Actual: false.
Failure: Number used as a property name. Expected: true. Actual: false.
Failure: Trailing comma in object literal. Expected: true. Actual: false.
Failure: done. Expected: 9. Actual: 2.
Finished test ``parse`: Object Literals`. 2 assertions, 8 failures.
Started test ``parse`: Octal Values`.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: Octal literal. Expected: true. Actual: false.
Failure: Negative octal literal. Expected: true. Actual: false.
Failure: Octal escape sequence in a string. Expected: true. Actual: false.
Failure: Hex escape sequence in a string. Expected: true. Actual: false.
Failure: done. Expected: 48. Actual: 0.
Finished test ``parse`: Octal Values`. 0 assertions, 49 failures.
Started test ``parse`: Array Literals`.
Failure: Trailing comma in array literal. Expected: true. Actual: false.
Assertion: Nested arrays.
Assertion: Array containing empty object literal.
Assertion: Mixed array.
Failure: done. Expected: 4. Actual: 3.
Finished test ``parse`: Array Literals`. 3 assertions, 2 failures.
Started test ``parse`: Invalid Expressions`.
Failure: Source string containing a JavaScript expression. Expected: true. Actual: false.
Failure: Source string containing a JavaScript expression. Expected: true. Actual: false.
Failure: Source string containing a JavaScript expression. Expected: true. Actual: false.
Failure: Source string containing a JavaScript expression. Expected: true. Actual: false.
Failure: Source string containing a JavaScript expression. Expected: true. Actual: false.
Failure: Source string containing a JavaScript expression. Expected: true. Actual: false.
Failure: done. Expected: 6. Actual: 0.
Finished test ``parse`: Invalid Expressions`. 0 assertions, 7 failures.
Started test ``stringify` and `parse`: Optional Arguments`.
Assertion: Callback function provided.
Assertion: Object; optional `filter` and `whitespace` arguments.
Failure: List of non-enumerable property names specified as the `filter` argument. Expected: "{\u0022PI\u0022:3.141592653589793}". Actual: "{\u0022PI\u0022:3.14159265358979}".
Assertion: Issue #10: `walk` should not use `splice` when removing an array element.
Failure: done. Expected: 4. Actual: 3.
Finished test ``stringify` and `parse`: Optional Arguments`. 3 assertions, 2 failures.
Started test ``parse`: Whitespace`.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing an invalid Unicode whitespace character. Expected: true. Actual: false.
Failure: Source string containing a vertical tab. Expected: true. Actual: false.
Failure: Source string containing a form feed. Expected: true. Actual: false.
Failure: Source string containing a byte-order mark. Expected: true. Actual: false.
Assertion: Source string containing a CRLF line ending.
Assertion: Source string containing multiple line terminators.
Assertion: Source string containing a tab character.
Assertion: Source string containing a space character.
Failure: done. Expected: 26. Actual: 4.
Finished test ``parse`: Whitespace`. 4 assertions, 23 failures.
Started test ``parse`: Empty Source Strings`.
Failure: Empty JSON source string. Expected: true. Actual: false.
Failure: Source string containing only line terminators. Expected: true. Actual: false.
Failure: Source string containing a single space character. Expected: true. Actual: false.
Failure: Source string containing multiple space characters. Expected: true. Actual: false.
Failure: done. Expected: 4. Actual: 0.
Finished test ``parse`: Empty Source Strings`. 0 assertions, 5 failures.
Started test `Anticipated ECMAScript 6 Additions`.
Finished test `Anticipated ECMAScript 6 Additions`. 0 assertions, 0 failures.
Started test ``stringify``.
Assertion: `null` is represented literally.
Assertion: `Infinity` is serialized as `null`.
Assertion: `NaN` is serialized as `null`.
Assertion: `-Infinity` is serialized as `null`.
Assertion: Boolean primitives are represented literally.
Assertion: Boolean objects are represented literally.
Assertion: All control characters in strings are escaped.
Assertion: Arrays are serialized recursively.
Assertion: `[undefined]` is serialized as `[null]`.
Assertion: Objects are serialized recursively.
Assertion: Nested objects containing identically-named properties should serialize correctly.
Assertion: Objects containing duplicate references should not throw a `TypeError`.
Failure: Objects containing complex circular references should throw a `TypeError`. Expected: true. Actual: false.
Assertion: Sparse arrays should serialize correctly.
Assertion: Dates should be serialized according to the simplified date time string format.
Assertion: The date time string should conform to the format outlined in the spec.
Assertion: The minimum valid date value should serialize correctly.
Assertion: The maximum valid date value should serialize correctly.
Assertion: https://bugs.ecmascript.org/show_bug.cgi?id=119.
Assertion: Millisecond values < 1000 should be serialized correctly.
Assertion: Years prior to 0 should be serialized as extended years.
Assertion: Years after 9999 should be serialized as extended years.
Assertion: Issue #4: Opera > 9.64 should correctly serialize a date with a year of `-109252`.
Assertion: Invalid dates should serialize as `null`.
Assertion: Nested arrays; optional `whitespace` argument.
Assertion: Empty array; optional string `whitespace` argument.
Assertion: Empty object; optional numeric `whitespace` argument.
Assertion: Single-element array; optional numeric `whitespace` argument.
Assertion: Single-member object; optional string `whitespace` argument.
Assertion: Nested objects; optional numeric `whitespace` argument.
Failure: done. Expected: 30. Actual: 29.
Finished test ``stringify``. 29 assertions, 2 failures.
Started test ``parse`: Numeric Literals`.
Assertion: Integer.
Assertion: Negative integer.
Assertion: Float.
Assertion: Negative float.
Assertion: Decimal.
Assertion: Negative decimal.
Assertion: Exponential.
Assertion: Positive exponential.
Assertion: Negative exponential.
Assertion: Decimalized exponential.
Assertion: Case-insensitive exponential delimiter.
Failure: Leading `+`. Expected: true. Actual: false.
Failure: Trailing decimal point. Expected: true. Actual: false.
Failure: Leading decimal point. Expected: true. Actual: false.
Failure: Missing exponent. Expected: true. Actual: false.
Failure: Missing signed exponent. Expected: true. Actual: false.
Failure: Leading `--`. Expected: true. Actual: false.
Failure: Trailing `-+`. Expected: true. Actual: false.
Failure: Hex literal. Expected: true. Actual: false.
Failure: Invalid negative sign. Expected: true. Actual: false.
Failure: done. Expected: 20. Actual: 11.
Finished test ``parse`: Numeric Literals`. 11 assertions, 10 failures.
Finished spec `JSON 3 Unit Tests`. 117 assertions, 168 failures.
ghost commented 11 years ago

Oh, my...I'll definitely want to get these fixed. What's the most accessible way to run programs in the ExtendScript engine—install a copy of Photoshop, then run the .jsx file from your fork?

subtleGradient commented 11 years ago

You'll need at least "ExtendScript Toolkit CS6". You may need to install the Photoshop Trial in order to get a copy of it. Then simply run the jsx file in my fork, yeah. I'm using JSON2 right now and it's not nearly as awesome as if should be, for reasons you are very familiar with, no doubt.

ghost commented 11 years ago

Will do. Thanks!

ghost commented 11 years ago

It turns out that JSON 3 is compatible with ExtendScript—but the test runner wasn't.

To that end, I've updated the offending tests, and checked your ExtendScript test harness in—would you mind giving the edge version (v3.2.5) a go?

subtleGradient commented 11 years ago
Finished spec `JSON 3 Unit Tests`. 274 assertions, 0 failures.

Awesome!