function testBasic() {
    // Latin1
    var s = '[1, 2, "foo", "bar\\r\\n", {"xyz": 3}, [1, 2, 3]]';
    assertEq(isLatin1(s), true);
    assertEq(JSON.stringify(JSON.parse(s)), '[1,2,"foo","bar\\r\\n",{"xyz":3},[1,2,3]]');

    // TwoByte
    s = '[1, 2, "foo\u1200", "bar\\r\\n", {"xyz": 3}, [1, 2, 3]]';
    assertEq(JSON.stringify(JSON.parse(s)), '[1,2,"foo\u1200","bar\\r\\n",{"xyz":3},[1,2,3]]');
}
testBasic();

function testErrorPos() {
    // Make sure the error location is calculated correctly.

    // Latin1
    var s = '[1, \n2,';
    try {
	JSON.parse(s);
	assertEq(0, 1);
    } catch(e) {
	assertEq(e instanceof SyntaxError, true);
	assertEq(e.toString().includes("line 2 column 3"), true);
    }

    s = '[1, "\u1300",\n2,';
    try {
	JSON.parse(s);
	assertEq(0, 1);
    } catch(e) {
	assertEq(e instanceof SyntaxError, true);
	assertEq(e.toString().includes("line 2 column 3"), true);
    }
}
testErrorPos();

function testEvalHack() {
    // Latin1
    var arr = eval("[1, 2, 3, \"abc\"]");
    assertEq(JSON.stringify(arr), '[1,2,3,"abc"]');
    assertEq(isLatin1(JSON.stringify(arr)), true);

    // TwoByte
    arr = eval("[1, 2, 3, \"abc\u1200\"]");
    assertEq(JSON.stringify(arr), '[1,2,3,"abc\u1200"]');
}
testEvalHack();

function testEvalHackNotJSON() {
    // Latin1
    var arr = eval("[]; var q; [1, 2, 3, \"abc\"]");
    assertEq(JSON.stringify(arr), '[1,2,3,"abc"]');

    // TwoByte
    arr = eval("[]; var z; [1, 2, 3, \"abc\u1200\"]");
    assertEq(JSON.stringify(arr), '[1,2,3,"abc\u1200"]');

    try {
	eval("[1, 2, 3, \"abc\u2028\"]");
	throw new Error("U+2028 shouldn't eval");
    } catch (e) {
	assertEq(e instanceof SyntaxError, true,
		 "should have thrown a SyntaxError, instead got " + e);
    }
}
testEvalHackNotJSON();

function testQuote() {
    // Latin1
    var s = "abc--\x05-'\"-\n-\u00ff++";
    var res = JSON.stringify(s);
    assertEq(res, '"abc--\\u0005-\'\\"-\\n-\xFF++"');
    assertEq(isLatin1(res), true);

    // TwoByte
    s += "\uAAAA";
    assertEq(JSON.stringify(s), '"abc--\\u0005-\'\\"-\\n-\xFF++\uAAAA"');
}
testQuote();
