summaryrefslogtreecommitdiff
path: root/gn/src/gn/args_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gn/src/gn/args_unittest.cc')
-rw-r--r--gn/src/gn/args_unittest.cc81
1 files changed, 81 insertions, 0 deletions
diff --git a/gn/src/gn/args_unittest.cc b/gn/src/gn/args_unittest.cc
new file mode 100644
index 00000000000..650db6daa27
--- /dev/null
+++ b/gn/src/gn/args_unittest.cc
@@ -0,0 +1,81 @@
+// Copyright 2015 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 "gn/args.h"
+
+#include "gn/scheduler.h"
+#include "gn/test_with_scope.h"
+#include "util/test/test.h"
+
+// Assertions for VerifyAllOverridesUsed() and DeclareArgs() with multiple
+// toolchains.
+TEST(ArgsTest, VerifyAllOverridesUsed) {
+ TestWithScope setup1, setup2;
+ Args args;
+ Scope::KeyValueMap key_value_map1;
+ Err err;
+ LiteralNode assignment1;
+
+ setup1.scope()->SetValue("a", Value(nullptr, true), &assignment1);
+ setup1.scope()->GetCurrentScopeValues(&key_value_map1);
+ EXPECT_TRUE(args.DeclareArgs(key_value_map1, setup1.scope(), &err));
+
+ LiteralNode assignment2;
+ setup2.scope()->SetValue("b", Value(nullptr, true), &assignment2);
+ Scope::KeyValueMap key_value_map2;
+ setup2.scope()->GetCurrentScopeValues(&key_value_map2);
+ EXPECT_TRUE(args.DeclareArgs(key_value_map2, setup2.scope(), &err));
+
+ // Override "a", shouldn't see any errors as "a" was defined.
+ args.AddArgOverride("a", Value(nullptr, true));
+ EXPECT_TRUE(args.VerifyAllOverridesUsed(&err));
+
+ // Override "a", & "b", shouldn't see any errors as both were defined.
+ args.AddArgOverride("b", Value(nullptr, true));
+ EXPECT_TRUE(args.VerifyAllOverridesUsed(&err));
+
+ // Override "a", "b" and "c", should fail as "c" was not defined.
+ args.AddArgOverride("c", Value(nullptr, true));
+ EXPECT_FALSE(args.VerifyAllOverridesUsed(&err));
+}
+
+// Ensure that arg overrides get only set after the they were declared.
+TEST(ArgsTest, VerifyOverrideScope) {
+ TestWithScope setup;
+ Args args;
+ Err err;
+
+ args.AddArgOverride("a", Value(nullptr, "avalue"));
+ args.AddArgOverride("current_os", Value(nullptr, "theiros"));
+
+ Scope::KeyValueMap toolchain_overrides;
+ toolchain_overrides["b"] = Value(nullptr, "bvalue");
+ toolchain_overrides["current_os"] = Value(nullptr, "myos");
+ args.SetupRootScope(setup.scope(), toolchain_overrides);
+
+ // Overrides of arguments not yet declared aren't applied yet.
+ EXPECT_EQ(nullptr, setup.scope()->GetValue("a"));
+ EXPECT_EQ(nullptr, setup.scope()->GetValue("b"));
+
+ // |current_os| is a system var. and already declared.
+ // Thus it should have our override value.
+ ASSERT_NE(nullptr, setup.scope()->GetValue("current_os"));
+ EXPECT_EQ(Value(nullptr, "myos"), *setup.scope()->GetValue("current_os"));
+
+ Scope::KeyValueMap key_value_map1;
+ key_value_map1["a"] = Value(nullptr, "avalue2");
+ key_value_map1["b"] = Value(nullptr, "bvalue2");
+ key_value_map1["c"] = Value(nullptr, "cvalue2");
+ EXPECT_TRUE(args.DeclareArgs(key_value_map1, setup.scope(), &err));
+
+ ASSERT_NE(nullptr, setup.scope()->GetValue("a"));
+ EXPECT_EQ(Value(nullptr, "avalue"), *setup.scope()->GetValue("a"));
+
+ ASSERT_NE(nullptr, setup.scope()->GetValue("b"));
+ EXPECT_EQ(Value(nullptr, "bvalue"), *setup.scope()->GetValue("b"));
+
+ // This wasn't overwritten, so it should have the default value.
+ ASSERT_NE(nullptr, setup.scope()->GetValue("c"));
+ EXPECT_EQ(Value(nullptr, "cvalue2"), *setup.scope()->GetValue("c"));
+}