1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "testing/gtest/include/gtest/gtest.h"
6#include "tools/gn/test_with_scope.h"
7#include "tools/gn/value.h"
8
9TEST(Value, ToString) {
10  Value strval(NULL, "hi\" $me\\you\\$\\\"");
11  EXPECT_EQ("hi\" $me\\you\\$\\\"", strval.ToString(false));
12  EXPECT_EQ("\"hi\\\" \\$me\\you\\\\\\$\\\\\\\"\"", strval.ToString(true));
13
14  // Void type.
15  EXPECT_EQ("<void>", Value().ToString(false));
16
17  // Test lists, bools, and ints.
18  Value listval(NULL, Value::LIST);
19  listval.list_value().push_back(Value(NULL, "hi\"me"));
20  listval.list_value().push_back(Value(NULL, true));
21  listval.list_value().push_back(Value(NULL, false));
22  listval.list_value().push_back(Value(NULL, static_cast<int64>(42)));
23  // Printing lists always causes embedded strings to be quoted (ignoring the
24  // quote flag), or else they wouldn't make much sense.
25  EXPECT_EQ("[\"hi\\\"me\", true, false, 42]", listval.ToString(false));
26  EXPECT_EQ("[\"hi\\\"me\", true, false, 42]", listval.ToString(true));
27
28  // Scopes.
29  TestWithScope setup;
30  Scope* scope = new Scope(setup.scope());
31  Value scopeval(NULL, scoped_ptr<Scope>(scope));
32  EXPECT_EQ("{ }", scopeval.ToString(false));
33
34  scope->SetValue("a", Value(NULL, static_cast<int64>(42)), NULL);
35  scope->SetValue("b", Value(NULL, "hello, world"), NULL);
36  EXPECT_EQ("{\n  a = 42\n  b = \"hello, world\"\n}", scopeval.ToString(false));
37}
38
39