description("Tests to ensure that we can use ES reserved words as property names.");

var reservedWords = ["true", "false", "null", "break", "case", "catch", "continue", "debugger", "default", "delete", "do", "else", "finally", "for",
                     "function", "if", "in", "instanceof", "new", "return", "switch", "this", "throw", "try", "typeof", "var", "void", "while", "with",
                     "class", "const", "enum", "export", "extends", "import", "super"];

var strictReservedWords = [
    "implements",
    "let",
    "private",
    "public",
    "yield",
    "interface",
    "package",
    "protected",
    "static"
];

var unreservedWords = [
    "abstract",
    "boolean",
    "byte",
    "char",
    "double",
    "final",
    "float",
    "goto",
    "int",
    "long",
    "native",
    "short",
    "synchronized",
    "throws",
    "transient",
    "volatile"
];


function testWordEvalAndFunction(str, strShouldThrow) {
    if (strShouldThrow) {
        shouldThrow(str);
        shouldThrow("(function(){"+str+"}); true");
    } else {
        shouldBeTrue(str);
        shouldBeTrue("(function(){"+str+"}); true");
    }
}

function testWord(word, strictPrefix, expectedResult) {
    testWordEvalAndFunction(strictPrefix + "var " + word + "; true", expectedResult);
    testWordEvalAndFunction(strictPrefix + "var " + word + " = 42; " + word + " === 42", expectedResult);
    testWordEvalAndFunction(strictPrefix + "function g(" + word + "){ " + strictPrefix + " }; true", expectedResult);
    testWordEvalAndFunction(strictPrefix + "/" + word + "/.test(function g(" + word + "){ " + strictPrefix + " })", expectedResult);
    testWordEvalAndFunction(strictPrefix + "try{}catch(" + word + "){}; true", expectedResult);
    testWordEvalAndFunction(strictPrefix + "function " + word + "(){ " + strictPrefix + " }; true", expectedResult);
    // These should be allowed for all words, even reserved ones.
    testWordEvalAndFunction(strictPrefix + "({ \"" + word + "\": 42 }." + word + " === 42)", false);
    testWordEvalAndFunction(strictPrefix + "({ " + word + ": 42 }." + word + " === 42)", false);
    testWordEvalAndFunction(strictPrefix + "({ get " + word + "(){}, set " + word + "(x){}, parsedOkay: 42 }.parsedOkay === 42)", false);
}

function testWordStrictAndNonStrict(word, condition) {
    testWord(word, '', condition == "keyword");
    testWord(word, '"use strict";', condition != "identifier");
}

for (var i = 0; i < reservedWords.length; i++)
    testWordStrictAndNonStrict(reservedWords[i], "keyword");
for (var i = 0; i < strictReservedWords.length; i++)
    testWordStrictAndNonStrict(strictReservedWords[i], "strict");
for (var i = 0; i < unreservedWords.length; i++)
    testWordStrictAndNonStrict(unreservedWords[i], "identifier");

// test access via window.
var yield = 42;
shouldBeTrue("window.yield === 42");
