1 //
2 // Copyright 2012 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6
7 #include "gtest/gtest.h"
8
9 #include "compiler/preprocessor/Token.h"
10
11 namespace angle
12 {
13
TEST(TokenTest,DefaultConstructor)14 TEST(TokenTest, DefaultConstructor)
15 {
16 pp::Token token;
17 EXPECT_EQ(0, token.type);
18 EXPECT_EQ(0u, token.flags);
19 EXPECT_EQ(0, token.location.line);
20 EXPECT_EQ(0, token.location.file);
21 EXPECT_EQ("", token.text);
22 }
23
TEST(TokenTest,Assignment)24 TEST(TokenTest, Assignment)
25 {
26 pp::Token token;
27 token.type = 1;
28 token.flags = 1;
29 token.location.line = 1;
30 token.location.file = 1;
31 token.text.assign("foo");
32
33 token = pp::Token();
34 EXPECT_EQ(0, token.type);
35 EXPECT_EQ(0u, token.flags);
36 EXPECT_EQ(0, token.location.line);
37 EXPECT_EQ(0, token.location.file);
38 EXPECT_EQ("", token.text);
39 }
40
TEST(TokenTest,Equals)41 TEST(TokenTest, Equals)
42 {
43 pp::Token token;
44 EXPECT_TRUE(token.equals(pp::Token()));
45
46 token.type = 1;
47 EXPECT_FALSE(token.equals(pp::Token()));
48 token.type = 0;
49
50 token.flags = 1;
51 EXPECT_FALSE(token.equals(pp::Token()));
52 token.flags = 0;
53
54 token.location.line = 1;
55 EXPECT_FALSE(token.equals(pp::Token()));
56 token.location.line = 0;
57
58 token.location.file = 1;
59 EXPECT_FALSE(token.equals(pp::Token()));
60 token.location.file = 0;
61
62 token.text.assign("foo");
63 EXPECT_FALSE(token.equals(pp::Token()));
64 token.text.clear();
65
66 EXPECT_TRUE(token.equals(pp::Token()));
67 }
68
TEST(TokenTest,HasLeadingSpace)69 TEST(TokenTest, HasLeadingSpace)
70 {
71 pp::Token token;
72 EXPECT_FALSE(token.hasLeadingSpace());
73 token.setHasLeadingSpace(true);
74 EXPECT_TRUE(token.hasLeadingSpace());
75 token.setHasLeadingSpace(false);
76 EXPECT_FALSE(token.hasLeadingSpace());
77 }
78
TEST(TokenTest,Write)79 TEST(TokenTest, Write)
80 {
81 pp::Token token;
82 token.text.assign("foo");
83 std::stringstream out1;
84 out1 << token;
85 EXPECT_TRUE(out1.good());
86 EXPECT_EQ("foo", out1.str());
87
88 token.setHasLeadingSpace(true);
89 std::stringstream out2;
90 out2 << token;
91 EXPECT_TRUE(out2.good());
92 EXPECT_EQ(" foo", out2.str());
93 }
94
95 } // namespace angle
96