| // 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/tools/kythe/kythe_facts.h" |
| |
| #include <sstream> |
| |
| #include "gmock/gmock.h" |
| #include "gtest/gtest.h" |
| |
| namespace verilog { |
| namespace kythe { |
| namespace { |
| |
| using ::testing::ElementsAre; |
| |
| TEST(SignatureTest, EmptyToString) { |
| const Signature s; |
| EXPECT_EQ(s.ToString(), ""); |
| EXPECT_THAT(s.Names(), ElementsAre("")); |
| } |
| |
| TEST(SignatureTest, ToString) { |
| const Signature s("foobar"); |
| EXPECT_EQ(s.ToString(), "foobar#"); |
| EXPECT_THAT(s.Names(), ElementsAre("foobar")); |
| } |
| |
| TEST(SignatureTest, WithParentToString) { |
| const Signature s1("foobar"); |
| const Signature s2(s1, "baz"); |
| EXPECT_EQ(s2.ToString(), "foobar#baz#"); |
| EXPECT_THAT(s2.Names(), ElementsAre("foobar", "baz")); |
| } |
| |
| TEST(SignatureTest, Equality) { |
| const Signature s1("aaa"); |
| const Signature s2("bbb"); |
| EXPECT_EQ(s1, s1); |
| EXPECT_EQ(s2, s2); |
| EXPECT_NE(s1, s2); |
| EXPECT_NE(s2, s1); |
| { |
| const Signature s3(s2, "ccc"); |
| EXPECT_NE(s1, s3); |
| EXPECT_NE(s3, s1); |
| EXPECT_NE(s2, s3); |
| EXPECT_NE(s3, s2); |
| } |
| } |
| |
| TEST(VNameTest, DefaultCtor) { |
| const VName vname; |
| std::ostringstream stream; |
| stream << vname; |
| EXPECT_EQ(stream.str(), |
| R"({ |
| "signature": "", |
| "path": "", |
| "language": "verilog", |
| "root": "", |
| "corpus": "" |
| })"); |
| } |
| |
| TEST(VNameTest, FilledCtor) { |
| const Signature s("s"); |
| const VName vname{.path = "/path/to/nowhere.lol", |
| .root = "root", |
| .signature = s, |
| .corpus = "http://corpus.code/corpus/"}; |
| { |
| std::ostringstream stream; |
| stream << vname; |
| EXPECT_EQ(stream.str(), R"({ |
| "signature": "s#", |
| "path": "/path/to/nowhere.lol", |
| "language": "verilog", |
| "root": "root", |
| "corpus": "http://corpus.code/corpus/" |
| })"); |
| EXPECT_EQ(vname, vname); |
| } |
| { |
| const VName vname2; |
| EXPECT_FALSE(vname == vname2); |
| EXPECT_FALSE(vname2 == vname); |
| } |
| } |
| |
| TEST(FactTest, FormatJSON) { |
| const Signature s("sss"); |
| const VName v{.path = "/path", .root = "", .signature = s, .corpus = ""}; |
| const Fact fact(v, "FactName", "FactValue"); |
| std::ostringstream stream; |
| stream << fact; |
| EXPECT_EQ(stream.str(), R"({ |
| "source": { |
| "signature": "sss#", |
| "path": "/path", |
| "language": "verilog", |
| "root": "", |
| "corpus": "" |
| }, |
| "fact_name": "FactName", |
| "fact_value": "FactValue" |
| })"); |
| } |
| |
| TEST(FactTest, Equality) { |
| const Signature s("sss"); |
| const VName v{.path = "/path", .root = "", .signature = s, .corpus = ""}; |
| const Fact fact1(v, "FactName", "FactValueA"); |
| const Fact fact2(v, "FactName", "FactValueB"); |
| EXPECT_EQ(fact1, fact1); |
| EXPECT_EQ(fact2, fact2); |
| EXPECT_NE(fact1, fact2); |
| EXPECT_NE(fact2, fact1); |
| } |
| |
| TEST(EdgeTest, FormatJSON) { |
| const Signature s1("sss"), s2("ttt"); |
| const VName v1{.path = "/path", .root = "", .signature = s1, .corpus = ""}; |
| const VName v2{.path = "/path", .root = "", .signature = s2, .corpus = ""}; |
| const Edge edge(v1, "EdgeName", v2); |
| std::ostringstream stream; |
| stream << edge; |
| EXPECT_EQ(stream.str(), R"({ |
| "source": { |
| "signature": "sss#", |
| "path": "/path", |
| "language": "verilog", |
| "root": "", |
| "corpus": "" |
| }, |
| "edge_kind": "EdgeName", |
| "target": { |
| "signature": "ttt#", |
| "path": "/path", |
| "language": "verilog", |
| "root": "", |
| "corpus": "" |
| }, |
| "fact_name": "/" |
| })"); |
| } |
| |
| TEST(EdgeTest, Equality) { |
| const Signature s1("sss"), s2("ttt"); |
| const VName v1{.path = "/path", .root = "", .signature = s1, .corpus = ""}; |
| const VName v2{.path = "/path", .root = "", .signature = s2, .corpus = ""}; |
| const Edge edge1(v1, "EdgeName", v2), edge2(v2, "Reverse", v1); |
| EXPECT_EQ(edge1, edge1); |
| EXPECT_EQ(edge2, edge2); |
| EXPECT_NE(edge1, edge2); |
| EXPECT_NE(edge2, edge1); |
| } |
| |
| } // namespace |
| } // namespace kythe |
| } // namespace verilog |