Skip to content

Commit b375523

Browse files
committed
handle all escape characters listed in json spec
1 parent 3438a54 commit b375523

File tree

5 files changed

+52
-9
lines changed

5 files changed

+52
-9
lines changed

lib/src/pixeldroid/json/JsonPrinter.ls

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,17 @@ package pixeldroid.json
4343
{
4444
var result:String = s;
4545

46-
result = result.split('\n').join('\\n');
46+
result = result.split('\\').join('\\\\'); // expand backslash before others
47+
4748
result = result.split('"').join('\\"');
49+
result = result.split('\/').join('\\/');
50+
result = result.split('\b').join('\\b');
51+
result = result.split('\f').join('\\f');
52+
result = result.split('\f').join('\\f');
53+
result = result.split('\n').join('\\n');
54+
result = result.split('\r').join('\\r');
55+
result = result.split('\t').join('\\t');
56+
result = result.split('\u').join('\\u');
4857

4958
return '"' +result +'"';
5059
}

lib/src/pixeldroid/json/YamlPrinter.ls

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,17 @@ package pixeldroid.json
5454
{
5555
var result:String = s;
5656

57-
result = result.split('\n').join('\\n');
57+
result = result.split('\\').join('\\\\'); // expand backslash before others
58+
5859
result = result.split('"').join('\\"');
60+
result = result.split('\/').join('\\/');
61+
result = result.split('\b').join('\\b');
62+
result = result.split('\f').join('\\f');
63+
result = result.split('\f').join('\\f');
64+
result = result.split('\n').join('\\n');
65+
result = result.split('\r').join('\\r');
66+
result = result.split('\t').join('\\t');
67+
result = result.split('\u').join('\\u');
5968

6069
return '"' +result +'"';
6170
}

test/fixtures/json.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,19 @@
33
"key_bool_true": true,
44
"key_bool_false": false,
55
"key_string": "abcdefg ABCDEFG 0123_4567",
6+
"key_string_escapes": {
7+
"quotation_mark": "\"",
8+
"reverse_solidus": "\\",
9+
"solidus": "\/",
10+
"backspace": "\b",
11+
"formfeed": "\f",
12+
"newline": "\n",
13+
"carriage_return": "\r",
14+
"horizontal_tab": "\t",
15+
"unicode_smily": "\u263A",
16+
"two_backslashes": "\\\\",
17+
"quoted_backslash": "\"\\\""
18+
},
619
"key_number_integer": 1234,
720
"key_number_real": 0.9876,
821
"key_empty_array": [],

test/src/spec/JsonPrinterSpec.ls

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,11 @@ package
1111
public static class JsonPrinterSpec
1212
{
1313
private static var it:Thing;
14-
private static var json:Json;
14+
private static var _jsonFixture:Json;
1515

1616
public static function specify(specifier:Spec):void
1717
{
1818
it = specifier.describe('JsonPrinter');
19-
var jsonFile:String = 'fixtures/json.json';
20-
var jsonString:String = File.loadTextFile(jsonFile);
21-
22-
json = Json.fromString(jsonString);
2319

2420
it.should('generate a valid JSON string', be_valid_json);
2521
it.should('generate a valid JSON string with compact formatting', be_valid_when_compact);
@@ -28,8 +24,21 @@ package
2824
}
2925

3026

27+
private static function get jsonFixture():Json
28+
{
29+
if (!_jsonFixture)
30+
{
31+
var jsonFile:String = 'fixtures/json.json';
32+
var jsonString:String = File.loadTextFile(jsonFile);
33+
_jsonFixture = Json.fromString(jsonString);
34+
}
35+
36+
return _jsonFixture;
37+
}
38+
3139
private static function be_valid_json():void
3240
{
41+
var json:Json = jsonFixture;
3342
var prettyString:String = JsonPrinter.print(json);
3443

3544
it.expects(prettyString).not.toBeNull();
@@ -38,20 +47,23 @@ package
3847

3948
private static function be_valid_when_compact():void
4049
{
50+
var json:Json = jsonFixture;
4151
var compact:String = JsonPrinter.print(json, JsonPrinterOptions.compact);
4252

4353
it.expects(Json.fromString(compact)).not.toBeNull();
4454
}
4555

4656
private static function be_valid_when_minified():void
4757
{
58+
var json:Json = jsonFixture;
4859
var minified:String = JsonPrinter.print(json, JsonPrinterOptions.minified);
4960

5061
it.expects(Json.fromString(minified)).not.toBeNull();
5162
}
5263

5364
private static function default_to_standard_formatting():void
5465
{
66+
var json:Json = jsonFixture;
5567
var prettyString:String = JsonPrinter.print(json);
5668
var standard:String = JsonPrinter.print(json, JsonPrinterOptions.standard);
5769

test/src/spec/JsonSpec.ls

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ package
5252
var result:Json = Json.fromString(jsonString);
5353

5454
it.asserts(result).isNotNull().or('init from string failed');
55-
it.expects(result.keys.length).toEqual(13);
55+
it.expects(result.keys.length).toEqual(14);
5656
}
5757

5858
private static function init_from_object():void
@@ -106,7 +106,7 @@ package
106106
var result:Json = Json.fromJSON(j);
107107

108108
it.asserts(result).isNotNull().or('init from Loom JSON failed');
109-
it.expects(result.keys.length).toEqual(13);
109+
it.expects(result.keys.length).toEqual(14);
110110
}
111111

112112
private static function report_native_types():void

0 commit comments

Comments
 (0)