blob: 25dd4a59b7647e2167da12a5656008c171c30d8e [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/error.h"
#include <gtest/gtest.h>
#include "src/developer/shell/parser/ast_test.h"
#include "src/developer/shell/parser/combinators.h"
#include "src/developer/shell/parser/text_match.h"
namespace shell::parser {
TEST(ErrorTest, Insert) {
const char* kTestString = "smith";
auto result =
Seq(Alt(Token("bob"), ErInsert("Expected bob")), Token("smith"))(ParseResult(kTestString));
ASSERT_TRUE(result);
EXPECT_EQ(5u, result.offset());
EXPECT_EQ(1u, result.errors());
EXPECT_EQ("(E[Expected bob] 'smith')",
result.Reduce<ast::TestNode>().node()->ToString(kTestString));
}
TEST(ErrorTest, Skip) {
const char* kTestString = "bobsmith";
auto result = Seq(Alt(Token("jed"), ErSkip("Unexpected bob", Token("bob"))),
Token("smith"))(ParseResult(kTestString));
ASSERT_TRUE(result);
EXPECT_EQ(8u, result.offset());
EXPECT_EQ(1u, result.errors());
EXPECT_EQ("(E[Unexpected bob] 'smith')",
result.Reduce<ast::TestNode>().node()->ToString(kTestString));
}
TEST(ErrorTest, SkipMatchMacro) {
const char* kTestString = "jedbobsmith";
auto result = Seq(Alt(Token("fred"), ErSkip("Unexpected '%MATCH%'", OnePlus(AnyCharBut("s")))),
Token("smith"))(ParseResult(kTestString));
ASSERT_TRUE(result);
EXPECT_EQ(11u, result.offset());
EXPECT_EQ(1u, result.errors());
EXPECT_EQ("(E[Unexpected 'jedbob'] 'smith')",
result.Reduce<ast::TestNode>().node()->ToString(kTestString));
}
} // namespace shell::parser