# Copyright 2013 the V8 project authors. All rights reserved.
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This test verifies that keywords and reserved words match those specified in ES5 section 7.6.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS classifyIdentifier("x") is "identifier"
PASS classifyIdentifier("id") is "identifier"
PASS classifyIdentifier("identifier") is "identifier"
PASS classifyIdentifier("keyword") is "identifier"
PASS classifyIdentifier("strict") is "identifier"
PASS classifyIdentifier("use") is "identifier"
PASS classifyIdentifier("abstract") is "identifier"
PASS classifyIdentifier("boolean") is "identifier"
PASS classifyIdentifier("byte") is "identifier"
PASS classifyIdentifier("char") is "identifier"
PASS classifyIdentifier("double") is "identifier"
PASS classifyIdentifier("final") is "identifier"
PASS classifyIdentifier("float") is "identifier"
PASS classifyIdentifier("goto") is "identifier"
PASS classifyIdentifier("int") is "identifier"
PASS classifyIdentifier("long") is "identifier"
PASS classifyIdentifier("native") is "identifier"
PASS classifyIdentifier("short") is "identifier"
PASS classifyIdentifier("synchronized") is "identifier"
PASS classifyIdentifier("throws") is "identifier"
PASS classifyIdentifier("transient") is "identifier"
PASS classifyIdentifier("volatile") is "identifier"
PASS classifyIdentifier("break") is "keyword"
PASS classifyIdentifier("case") is "keyword"
PASS classifyIdentifier("catch") is "keyword"
PASS classifyIdentifier("continue") is "keyword"
PASS classifyIdentifier("debugger") is "keyword"
PASS classifyIdentifier("default") is "keyword"
PASS classifyIdentifier("delete") is "keyword"
PASS classifyIdentifier("do") is "keyword"
PASS classifyIdentifier("else") is "keyword"
PASS classifyIdentifier("finally") is "keyword"
PASS classifyIdentifier("for") is "keyword"
PASS classifyIdentifier("function") is "keyword"
PASS classifyIdentifier("if") is "keyword"
PASS classifyIdentifier("in") is "keyword"
PASS classifyIdentifier("instanceof") is "keyword"
PASS classifyIdentifier("new") is "keyword"
PASS classifyIdentifier("return") is "keyword"
PASS classifyIdentifier("switch") is "keyword"
PASS classifyIdentifier("this") is "keyword"
PASS classifyIdentifier("throw") is "keyword"
PASS classifyIdentifier("try") is "keyword"
PASS classifyIdentifier("typeof") is "keyword"
PASS classifyIdentifier("var") is "keyword"
PASS classifyIdentifier("void") is "keyword"
PASS classifyIdentifier("while") is "keyword"
PASS classifyIdentifier("with") is "keyword"
PASS classifyIdentifier("class") is "keyword"
PASS classifyIdentifier("const") is "keyword"
PASS classifyIdentifier("enum") is "keyword"
PASS classifyIdentifier("export") is "keyword"
PASS classifyIdentifier("extends") is "keyword"
PASS classifyIdentifier("import") is "keyword"
PASS classifyIdentifier("super") is "keyword"
PASS classifyIdentifier("implements") is "strict"
PASS classifyIdentifier("interface") is "strict"
PASS classifyIdentifier("let") is "strict"
PASS classifyIdentifier("package") is "strict"
PASS classifyIdentifier("private") is "strict"
PASS classifyIdentifier("protected") is "strict"
PASS classifyIdentifier("public") is "strict"
PASS classifyIdentifier("static") is "strict"
PASS classifyIdentifier("yield") is "strict"
PASS successfullyParsed is true

TEST COMPLETE

