blob: 3dd3801d790f84de03199dcb74b4e94848240e13 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/shell/parser/parser.h"
#include "gtest/gtest.h"
#include "src/developer/shell/parser/ast.h"
namespace shell::parser {
TEST(ParserTest, VariableDecl) {
const auto kTestString = "var s = 0";
auto parse = Parse(kTestString);
EXPECT_FALSE(parse->HasErrors());
EXPECT_EQ("Program(VariableDecl('var' Identifier('s') '=' Expression(Integer('0'))))",
parse->ToString(kTestString));
}
TEST(ParserTest, VariableDeclFail) {
const auto kTestString = "vars = 0";
auto parse = Parse(kTestString);
EXPECT_TRUE(parse->HasErrors());
EXPECT_EQ("Program(E[Unexpected 'vars = 0'])", parse->ToString(kTestString));
}
TEST(ParserTest, TwoVariableDecl) {
const auto kTestString =
"var x = 0;\n"
"var y = 0";
auto parse = Parse(kTestString);
EXPECT_FALSE(parse->HasErrors());
EXPECT_EQ(
"Program(VariableDecl('var' Identifier('x') '=' Expression(Integer('0'))) ';' "
"VariableDecl('var' Identifier('y') '=' Expression(Integer('0'))))",
parse->ToString(kTestString));
}
TEST(ParserTest, TwoVariableDeclFail) {
const auto kTestString =
"varx = 0;\n"
"var y = 0";
auto parse = Parse(kTestString);
EXPECT_TRUE(parse->HasErrors());
EXPECT_EQ("Program(E[Unexpected 'varx = 0;\nvar y = 0'])", parse->ToString(kTestString));
}
TEST(ParserTest, TwoVariableDeclTrailingChars) {
const auto kTestString =
"var x = 0;\n"
"var y = 0;\n"
"xxx";
auto parse = Parse(kTestString);
EXPECT_TRUE(parse->HasErrors());
EXPECT_EQ(
"Program(VariableDecl('var' Identifier('x') '=' Expression(Integer('0'))) ';' "
"VariableDecl('var' Identifier('y') '=' Expression(Integer('0'))) ';' E[Unexpected 'xxx'])",
parse->ToString(kTestString));
}
TEST(ParserTest, TwoVariableDeclConst) {
const auto kTestString =
"var x = 0;\n"
"const y = 0";
auto parse = Parse(kTestString);
EXPECT_FALSE(parse->HasErrors());
EXPECT_EQ(
"Program("
"VariableDecl('var' Identifier('x') '=' Expression(Integer('0'))) ';' "
"VariableDecl('const' Identifier('y') '=' Expression(Integer('0'))))",
parse->ToString(kTestString));
}
TEST(ParserTest, VariableDeclLongerInteger) {
const auto kTestString = "var s = 12345";
auto parse = Parse(kTestString);
EXPECT_FALSE(parse->HasErrors());
EXPECT_EQ("Program(VariableDecl('var' Identifier('s') '=' Expression(Integer('12345'))))",
parse->ToString(kTestString));
}
TEST(ParserTest, VariableDeclGroupedInteger) {
const auto kTestString = "var s = 12_345";
auto parse = Parse(kTestString);
EXPECT_FALSE(parse->HasErrors());
EXPECT_EQ("Program(VariableDecl('var' Identifier('s') '=' Expression(Integer('12' '_' '345'))))",
parse->ToString(kTestString));
}
TEST(ParserTest, VariableDeclHexInteger) {
const auto kTestString = "var s = 0xabfF0912";
auto parse = Parse(kTestString);
EXPECT_FALSE(parse->HasErrors());
EXPECT_EQ("Program(VariableDecl('var' Identifier('s') '=' Expression(Integer('0x' 'abfF0912'))))",
parse->ToString(kTestString));
}
TEST(ParserTest, VariableDeclGroupedHexInteger) {
const auto kTestString = "var s = 0xabfF_0912";
auto parse = Parse(kTestString);
EXPECT_FALSE(parse->HasErrors());
EXPECT_EQ(
"Program(VariableDecl('var' Identifier('s') '=' "
"Expression(Integer('0x' 'abfF' '_' '0912'))))",
parse->ToString(kTestString));
}
TEST(ParserTest, VariableDeclIntegerBadGroup) {
const auto kTestString = "var s = _0912";
auto parse = Parse(kTestString);
EXPECT_TRUE(parse->HasErrors());
EXPECT_EQ("Program(E[Unexpected 'var s = _0912'])", parse->ToString(kTestString));
}
TEST(ParserTest, VariableDeclIntegerZeroFirst) {
const auto kTestString = "var s = 0912";
auto parse = Parse(kTestString);
EXPECT_TRUE(parse->HasErrors());
EXPECT_EQ("Program(E[Unexpected 'var s = 0912'])", parse->ToString(kTestString));
}
TEST(ParserTest, VariableDeclIntegerHexNoMark) {
const auto kTestString = "var s = 0abc";
auto parse = Parse(kTestString);
EXPECT_TRUE(parse->HasErrors());
EXPECT_EQ(
"Program(VariableDecl('var' Identifier('s') '=' "
"Expression(Integer('0'))) E[Unexpected 'abc'])",
parse->ToString(kTestString));
}
} // namespace shell::parser