blob: 3507c8ec6df2ff5b8108e85661b49f1794442216 [file] [log] [blame] [edit]
// Copyright 2022 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 <zircon/types.h>
#include <zxtest/zxtest.h>
#include "tools/fidl/fidlc/include/fidl/source_file.h"
#include "tools/fidl/fidlc/include/fidl/token.h"
namespace {
using Kind = fidl::Token::Kind;
using Subkind = fidl::Token::Subkind;
TEST(TokenTests, SameToken) {
auto file = fidl::SourceFile("a", "a");
auto letter = fidl::SourceSpan(file.data().substr(0, 1), file);
auto token = fidl::Token(letter, 0, Kind::kIdentifier, Subkind::kNone, 0);
auto copy = fidl::Token(token);
EXPECT_TRUE(token.same_file_as(fidl::Token(copy)));
EXPECT_TRUE(token == copy);
EXPECT_FALSE(token != copy);
EXPECT_TRUE(token <= copy);
EXPECT_TRUE(token >= copy);
EXPECT_FALSE(token < copy);
EXPECT_FALSE(token > copy);
// Reverse operand order.
EXPECT_TRUE(copy == token);
EXPECT_FALSE(copy != token);
EXPECT_TRUE(copy <= token);
EXPECT_TRUE(copy >= token);
EXPECT_FALSE(copy < token);
EXPECT_FALSE(copy > token);
}
TEST(TokenTests, SameFileDifferentToken) {
auto file = fidl::SourceFile("a", "a a");
auto first = fidl::SourceSpan(file.data().substr(0, 1), file);
auto left = fidl::Token(first, 0, Kind::kIdentifier, Subkind::kNone, 0);
auto second = fidl::SourceSpan(file.data().substr(2, 1), file);
auto right = fidl::Token(second, 0, Kind::kIdentifier, Subkind::kNone, 1);
EXPECT_TRUE(left.same_file_as(right));
EXPECT_FALSE(left == right);
EXPECT_TRUE(left != right);
EXPECT_TRUE(left <= right);
EXPECT_FALSE(left >= right);
EXPECT_TRUE(left < right);
EXPECT_FALSE(left > right);
// Reverse operand order.
EXPECT_TRUE(right.same_file_as(left));
EXPECT_FALSE(right == left);
EXPECT_TRUE(right != left);
EXPECT_FALSE(right <= left);
EXPECT_TRUE(right >= left);
EXPECT_FALSE(right < left);
EXPECT_TRUE(right > left);
}
TEST(TokenTests, DifferentFileDifferentToken) {
auto file_a = fidl::SourceFile("a", "a");
auto letter_a = fidl::SourceSpan(file_a.data().substr(0, 1), file_a);
auto token_a = fidl::Token(letter_a, 0, Kind::kIdentifier, Subkind::kNone, 0);
auto file_b = fidl::SourceFile("b", "b");
auto letter_b = fidl::SourceSpan(file_b.data().substr(0, 1), file_b);
auto token_b = fidl::Token(letter_b, 0, Kind::kIdentifier, Subkind::kNone, 0);
EXPECT_FALSE(token_a.same_file_as(token_b));
EXPECT_FALSE(token_a == token_b);
EXPECT_TRUE(token_a != token_b);
EXPECT_TRUE(token_a <= token_b);
EXPECT_FALSE(token_a >= token_b);
EXPECT_TRUE(token_a < token_b);
EXPECT_FALSE(token_a > token_b);
// Reverse operand order.
EXPECT_FALSE(token_b.same_file_as(token_a));
EXPECT_FALSE(token_b == token_a);
EXPECT_TRUE(token_b != token_a);
EXPECT_FALSE(token_b <= token_a);
EXPECT_TRUE(token_b >= token_a);
EXPECT_FALSE(token_b < token_a);
EXPECT_TRUE(token_b > token_a);
}
} // namespace