| // Copyright 2018 The Chromium 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 "tools/gn/metadata.h" |
| #include "tools/gn/test_with_scope.h" |
| #include "util/test/test.h" |
| |
| TEST(MetadataTest, SetContents) { |
| Metadata metadata; |
| |
| ASSERT_TRUE(metadata.contents().empty()); |
| |
| Value a_expected(nullptr, Value::LIST); |
| a_expected.list_value().push_back(Value(nullptr, "foo")); |
| Value b_expected(nullptr, Value::LIST); |
| b_expected.list_value().push_back(Value(nullptr, true)); |
| |
| Metadata::Contents contents; |
| contents.insert(std::pair<std::string_view, Value>("a", a_expected)); |
| contents.insert(std::pair<std::string_view, Value>("b", b_expected)); |
| |
| metadata.set_contents(std::move(contents)); |
| |
| ASSERT_EQ(metadata.contents().size(), 2); |
| auto a_actual = metadata.contents().find("a"); |
| auto b_actual = metadata.contents().find("b"); |
| ASSERT_FALSE(a_actual == metadata.contents().end()); |
| ASSERT_FALSE(b_actual == metadata.contents().end()); |
| ASSERT_EQ(a_actual->second, a_expected); |
| ASSERT_EQ(b_actual->second, b_expected); |
| } |
| |
| TEST(MetadataTest, Walk) { |
| TestWithScope setup; |
| Metadata metadata; |
| metadata.set_source_dir(SourceDir("/usr/home/files/")); |
| |
| Value a_expected(nullptr, Value::LIST); |
| a_expected.list_value().push_back(Value(nullptr, "foo.cpp")); |
| a_expected.list_value().push_back(Value(nullptr, "bar.h")); |
| |
| metadata.contents().insert( |
| std::pair<std::string_view, Value>("a", a_expected)); |
| |
| std::vector<std::string> data_keys; |
| data_keys.emplace_back("a"); |
| std::vector<std::string> walk_keys; |
| std::vector<Value> next_walk_keys; |
| std::vector<Value> results; |
| |
| std::vector<Value> expected; |
| expected.emplace_back(Value(nullptr, "foo.cpp")); |
| expected.emplace_back(Value(nullptr, "bar.h")); |
| |
| std::vector<Value> expected_walk_keys; |
| expected_walk_keys.emplace_back(nullptr, ""); |
| |
| Err err; |
| EXPECT_TRUE(metadata.WalkStep(setup.settings()->build_settings(), data_keys, |
| walk_keys, SourceDir(), &next_walk_keys, |
| &results, &err)); |
| EXPECT_FALSE(err.has_error()); |
| EXPECT_EQ(next_walk_keys, expected_walk_keys); |
| EXPECT_EQ(results, expected); |
| } |
| |
| TEST(MetadataTest, WalkWithRebase) { |
| TestWithScope setup; |
| Metadata metadata; |
| metadata.set_source_dir(SourceDir("/usr/home/files/")); |
| |
| Value a_expected(nullptr, Value::LIST); |
| a_expected.list_value().push_back(Value(nullptr, "foo.cpp")); |
| a_expected.list_value().push_back(Value(nullptr, "foo/bar.h")); |
| |
| metadata.contents().insert( |
| std::pair<std::string_view, Value>("a", a_expected)); |
| |
| std::vector<std::string> data_keys; |
| data_keys.emplace_back("a"); |
| std::vector<std::string> walk_keys; |
| std::vector<Value> next_walk_keys; |
| std::vector<Value> results; |
| |
| std::vector<Value> expected; |
| expected.emplace_back(Value(nullptr, "../home/files/foo.cpp")); |
| expected.emplace_back(Value(nullptr, "../home/files/foo/bar.h")); |
| |
| std::vector<Value> expected_walk_keys; |
| expected_walk_keys.emplace_back(nullptr, ""); |
| |
| Err err; |
| EXPECT_TRUE(metadata.WalkStep(setup.settings()->build_settings(), data_keys, |
| walk_keys, SourceDir("/usr/foo_dir/"), |
| &next_walk_keys, &results, &err)); |
| EXPECT_FALSE(err.has_error()); |
| EXPECT_EQ(next_walk_keys, expected_walk_keys); |
| EXPECT_EQ(results, expected); |
| } |
| |
| TEST(MetadataTest, WalkWithRebaseNonString) { |
| TestWithScope setup; |
| Metadata metadata; |
| metadata.set_source_dir(SourceDir("/usr/home/files/")); |
| |
| Value a(nullptr, Value::LIST); |
| Value inner_list(nullptr, Value::LIST); |
| Value inner_scope(nullptr, Value::SCOPE); |
| inner_list.list_value().push_back(Value(nullptr, "foo.cpp")); |
| inner_list.list_value().push_back(Value(nullptr, "foo/bar.h")); |
| a.list_value().push_back(inner_list); |
| |
| std::unique_ptr<Scope> scope(new Scope(setup.settings())); |
| scope->SetValue("a1", Value(nullptr, "foo2.cpp"), nullptr); |
| scope->SetValue("a2", Value(nullptr, "foo/bar2.h"), nullptr); |
| inner_scope.SetScopeValue(std::move(scope)); |
| a.list_value().push_back(inner_scope); |
| |
| metadata.contents().insert(std::pair<std::string_view, Value>("a", a)); |
| std::vector<std::string> data_keys; |
| data_keys.emplace_back("a"); |
| std::vector<std::string> walk_keys; |
| std::vector<Value> next_walk_keys; |
| std::vector<Value> results; |
| |
| std::vector<Value> expected; |
| Value inner_list_expected(nullptr, Value::LIST); |
| Value inner_scope_expected(nullptr, Value::SCOPE); |
| inner_list_expected.list_value().push_back( |
| Value(nullptr, "../home/files/foo.cpp")); |
| inner_list_expected.list_value().push_back( |
| Value(nullptr, "../home/files/foo/bar.h")); |
| expected.push_back(inner_list_expected); |
| |
| std::unique_ptr<Scope> scope_expected(new Scope(setup.settings())); |
| scope_expected->SetValue("a1", Value(nullptr, "../home/files/foo2.cpp"), |
| nullptr); |
| scope_expected->SetValue("a2", Value(nullptr, "../home/files/foo/bar2.h"), |
| nullptr); |
| inner_scope_expected.SetScopeValue(std::move(scope_expected)); |
| expected.push_back(inner_scope_expected); |
| |
| std::vector<Value> expected_walk_keys; |
| expected_walk_keys.emplace_back(nullptr, ""); |
| |
| Err err; |
| EXPECT_TRUE(metadata.WalkStep(setup.settings()->build_settings(), data_keys, |
| walk_keys, SourceDir("/usr/foo_dir/"), |
| &next_walk_keys, &results, &err)); |
| EXPECT_FALSE(err.has_error()); |
| EXPECT_EQ(next_walk_keys, expected_walk_keys); |
| EXPECT_EQ(results, expected); |
| } |
| |
| TEST(MetadataTest, WalkKeysToWalk) { |
| TestWithScope setup; |
| Metadata metadata; |
| metadata.set_source_dir(SourceDir("/usr/home/files/")); |
| |
| Value a_expected(nullptr, Value::LIST); |
| a_expected.list_value().push_back(Value(nullptr, "//target")); |
| |
| metadata.contents().insert( |
| std::pair<std::string_view, Value>("a", a_expected)); |
| |
| std::vector<std::string> data_keys; |
| std::vector<std::string> walk_keys; |
| walk_keys.emplace_back("a"); |
| std::vector<Value> next_walk_keys; |
| std::vector<Value> results; |
| |
| std::vector<Value> expected_walk_keys; |
| expected_walk_keys.emplace_back(nullptr, "//target"); |
| |
| Err err; |
| EXPECT_TRUE(metadata.WalkStep(setup.settings()->build_settings(), data_keys, |
| walk_keys, SourceDir(), &next_walk_keys, |
| &results, &err)); |
| EXPECT_FALSE(err.has_error()); |
| EXPECT_EQ(next_walk_keys, expected_walk_keys); |
| EXPECT_TRUE(results.empty()); |
| } |
| |
| TEST(MetadataTest, WalkNoContents) { |
| TestWithScope setup; |
| Metadata metadata; |
| metadata.set_source_dir(SourceDir("/usr/home/files/")); |
| |
| std::vector<std::string> data_keys; |
| std::vector<std::string> walk_keys; |
| std::vector<Value> next_walk_keys; |
| std::vector<Value> results; |
| |
| std::vector<Value> expected_walk_keys; |
| expected_walk_keys.emplace_back(nullptr, ""); |
| |
| Err err; |
| EXPECT_TRUE(metadata.WalkStep(setup.settings()->build_settings(), data_keys, |
| walk_keys, SourceDir(), &next_walk_keys, |
| &results, &err)); |
| EXPECT_FALSE(err.has_error()); |
| EXPECT_EQ(next_walk_keys, expected_walk_keys); |
| EXPECT_TRUE(results.empty()); |
| } |
| |
| TEST(MetadataTest, WalkNoKeysWithContents) { |
| TestWithScope setup; |
| Metadata metadata; |
| metadata.set_source_dir(SourceDir("/usr/home/files/")); |
| |
| Value a_expected(nullptr, Value::LIST); |
| a_expected.list_value().push_back(Value(nullptr, "//target")); |
| |
| metadata.contents().insert( |
| std::pair<std::string_view, Value>("a", a_expected)); |
| |
| std::vector<std::string> data_keys; |
| std::vector<std::string> walk_keys; |
| std::vector<Value> next_walk_keys; |
| std::vector<Value> results; |
| |
| std::vector<Value> expected_walk_keys; |
| expected_walk_keys.emplace_back(nullptr, ""); |
| |
| Err err; |
| EXPECT_TRUE(metadata.WalkStep(setup.settings()->build_settings(), data_keys, |
| walk_keys, SourceDir(), &next_walk_keys, |
| &results, &err)); |
| EXPECT_FALSE(err.has_error()); |
| EXPECT_EQ(next_walk_keys, expected_walk_keys); |
| EXPECT_TRUE(results.empty()); |
| } |