| // Copyright 2017-2020 The Verible Authors. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| #include "verilog/formatting/verilog_token.h" | |
| #include "common/formatting/format_token.h" | |
| #include "common/text/token_info.h" | |
| #include "gtest/gtest.h" | |
| #include "verilog/parser/verilog_token_enum.h" | |
| namespace verilog { | |
| namespace formatter { | |
| namespace { | |
| using FTT = FormatTokenType; | |
| // Test that GetFormatTokenType() correctly converts a TokenInfo enum to FTT | |
| TEST(VerilogTokenTest, GetFormatTokenTypeTestUnknown) { | |
| const int FAKE_TOKEN = 9999; | |
| verible::TokenInfo token_info(FAKE_TOKEN, "FakeToken"); | |
| verible::PreFormatToken format_token(&token_info); | |
| EXPECT_EQ(FTT::unknown, GetFormatTokenType(verilog_tokentype(FAKE_TOKEN))); | |
| } | |
| struct GetFormatTokenTypeTestCase { | |
| verilog_tokentype token_info_type; | |
| FormatTokenType format_token_type; | |
| }; | |
| const GetFormatTokenTypeTestCase GetFormatTokenTypeTestCases[] = { | |
| {verilog_tokentype::PP_Identifier, FTT::identifier}, | |
| {verilog_tokentype::MacroIdItem, FTT::identifier}, | |
| {verilog_tokentype::MacroCallId, FTT::identifier}, | |
| {verilog_tokentype::TK_Ssetup, FTT::identifier}, | |
| {verilog_tokentype::TK_Sskew, FTT::identifier}, | |
| {verilog_tokentype::TK_Shold, FTT::identifier}, | |
| {verilog_tokentype::PP_include, FTT::keyword}, | |
| {verilog_tokentype::PP_TOKEN_CONCAT, FTT::binary_operator}, | |
| {verilog_tokentype::TK_INCR, FTT::unary_operator}, | |
| {verilog_tokentype::TK_PIPEARROW, FTT::binary_operator}, | |
| {verilog_tokentype::TK_SCOPE_RES, FTT::hierarchy}, | |
| {verilog_tokentype::TK_LE, FTT::binary_operator}, | |
| {verilog_tokentype('='), FTT::binary_operator}, // consistent with TK_LE | |
| {verilog_tokentype('.'), FTT::hierarchy}, | |
| {verilog_tokentype::TK_edge_descriptor, FTT::edge_descriptor}, | |
| {verilog_tokentype::TK_EOL_COMMENT, FTT::eol_comment}, | |
| {verilog_tokentype::TK_COMMENT_BLOCK, FTT::comment_block}, | |
| {verilog_tokentype('('), FTT::open_group}, | |
| {verilog_tokentype('['), FTT::open_group}, | |
| {verilog_tokentype('{'), FTT::open_group}, | |
| {verilog_tokentype::TK_LP, FTT::open_group}, | |
| {verilog_tokentype(')'), FTT::close_group}, | |
| {verilog_tokentype(']'), FTT::close_group}, | |
| {verilog_tokentype('}'), FTT::close_group}, | |
| {verilog_tokentype::MacroNumericWidth, FTT::numeric_literal}, | |
| {verilog_tokentype::TK_DecNumber, FTT::numeric_literal}, | |
| {verilog_tokentype::TK_RealTime, FTT::numeric_literal}, | |
| {verilog_tokentype::TK_TimeLiteral, FTT::numeric_literal}, | |
| {verilog_tokentype::TK_BinDigits, FTT::numeric_literal}, | |
| {verilog_tokentype::TK_OctDigits, FTT::numeric_literal}, | |
| {verilog_tokentype::TK_HexDigits, FTT::numeric_literal}, | |
| {verilog_tokentype::TK_UnBasedNumber, FTT::numeric_literal}, | |
| {verilog_tokentype::TK_DecBase, FTT::numeric_base}, | |
| {verilog_tokentype::TK_BinBase, FTT::numeric_base}, | |
| {verilog_tokentype::TK_OctBase, FTT::numeric_base}, | |
| {verilog_tokentype::TK_HexBase, FTT::numeric_base}, | |
| }; | |
| // Test that every type verilog_tokentype properly maps to its respective | |
| // FormatTokenType. | |
| // Yes, this is change-detector test, but it says that the included test cases | |
| // have actually been reviewed, whereas other entries in the map have not | |
| // necessarily been reviewed, and are just set to some default value. | |
| TEST(VerilogTokenTest, GetFormatTokenTypeTest) { | |
| for (const auto& test_case : GetFormatTokenTypeTestCases) { | |
| EXPECT_EQ(test_case.format_token_type, | |
| GetFormatTokenType(test_case.token_info_type)); | |
| } | |
| } | |
| // Given a FormatTokenType, test that IsComment returns true only for comments | |
| TEST(VerilogTokenTest, IsCommentFormatTokenTypeTest) { | |
| EXPECT_TRUE(IsComment(FTT::eol_comment)); | |
| EXPECT_TRUE(IsComment(FTT::comment_block)); | |
| EXPECT_FALSE(IsComment(FTT::binary_operator)); | |
| EXPECT_FALSE(IsComment(FTT::keyword)); | |
| } | |
| } // namespace | |
| } // namespace formatter | |
| } // namespace verilog |