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