| // |
| // Copyright (c) 2012 The ANGLE Project 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 "PreprocessorTest.h" |
| #include "Input.h" |
| #include "Token.h" |
| |
| class InitTest : public PreprocessorTest |
| { |
| }; |
| |
| TEST_F(InitTest, NegativeCount) |
| { |
| EXPECT_FALSE(mPreprocessor.init(-1, NULL, NULL)); |
| } |
| |
| TEST_F(InitTest, ZeroCount) |
| { |
| EXPECT_TRUE(mPreprocessor.init(0, NULL, NULL)); |
| |
| pp::Token token; |
| mPreprocessor.lex(&token); |
| EXPECT_EQ(pp::Token::LAST, token.type); |
| } |
| |
| TEST_F(InitTest, NullString) |
| { |
| EXPECT_FALSE(mPreprocessor.init(1, NULL, NULL)); |
| } |
| |
| TEST(InputTest, DefaultConstructor) |
| { |
| pp::Input input; |
| EXPECT_EQ(0, input.count()); |
| EXPECT_EQ(0, input.read(NULL, 1)); |
| } |
| |
| TEST(InputTest, NullLength) |
| { |
| const char* str[] = {"foo"}; |
| pp::Input input(1, str, NULL); |
| EXPECT_EQ(3, input.length(0)); |
| } |
| |
| TEST(InputTest, NegativeLength) |
| { |
| const char* str[] = {"foo"}; |
| int length[] = {-1}; |
| pp::Input input(1, str, length); |
| EXPECT_EQ(3, input.length(0)); |
| } |
| |
| TEST(InputTest, ActualLength) |
| { |
| const char* str[] = {"foobar"}; |
| int length[] = {3}; |
| pp::Input input(1, str, length); |
| // Note that strlen(str[0]) != length[0]. |
| // Even then Input should just accept any non-negative number. |
| EXPECT_EQ(length[0], input.length(0)); |
| } |
| |
| TEST(InputTest, String) |
| { |
| const char* str[] = {"foo"}; |
| pp::Input input(1, str, NULL); |
| EXPECT_STREQ(str[0], input.string(0)); |
| } |
| |
| TEST(InputTest, ReadSingleString) |
| { |
| int count = 1; |
| const char* str[] = {"foo"}; |
| char buf[4] = {'\0', '\0', '\0', '\0'}; |
| |
| int maxSize = 1; |
| pp::Input input1(count, str, NULL); |
| EXPECT_EQ(1, input1.read(buf, maxSize)); |
| EXPECT_EQ('f', buf[0]); |
| EXPECT_EQ(1, input1.read(buf, maxSize)); |
| EXPECT_EQ('o', buf[0]); |
| EXPECT_EQ(1, input1.read(buf, maxSize)); |
| EXPECT_EQ('o', buf[0]); |
| EXPECT_EQ(0, input1.read(buf, maxSize)); |
| |
| maxSize = 2; |
| pp::Input input2(count, str, NULL); |
| EXPECT_EQ(2, input2.read(buf, maxSize)); |
| EXPECT_STREQ("fo", buf); |
| EXPECT_EQ(1, input2.read(buf, maxSize)); |
| EXPECT_EQ('o', buf[0]); |
| EXPECT_EQ(0, input2.read(buf, maxSize)); |
| |
| maxSize = 3; |
| pp::Input input3(count, str, NULL); |
| EXPECT_EQ(3, input3.read(buf, maxSize)); |
| EXPECT_STREQ("foo", buf); |
| EXPECT_EQ(0, input3.read(buf, maxSize)); |
| |
| maxSize = 4; |
| pp::Input input4(count, str, NULL); |
| EXPECT_EQ(3, input4.read(buf, maxSize)); |
| EXPECT_STREQ("foo", buf); |
| EXPECT_EQ(0, input4.read(buf, maxSize)); |
| } |
| |
| TEST(InputTest, ReadMultipleStrings) |
| { |
| int count = 3; |
| const char* str[] = {"f", "o", "o"}; |
| char buf[4] = {'\0', '\0', '\0', '\0'}; |
| |
| int maxSize = 1; |
| pp::Input input1(count, str, NULL); |
| EXPECT_EQ(1, input1.read(buf, maxSize)); |
| EXPECT_EQ('f', buf[0]); |
| EXPECT_EQ(1, input1.read(buf, maxSize)); |
| EXPECT_EQ('o', buf[0]); |
| EXPECT_EQ(1, input1.read(buf, maxSize)); |
| EXPECT_EQ('o', buf[0]); |
| EXPECT_EQ(0, input1.read(buf, maxSize)); |
| |
| maxSize = 2; |
| pp::Input input2(count, str, NULL); |
| EXPECT_EQ(2, input2.read(buf, maxSize)); |
| EXPECT_STREQ("fo", buf); |
| EXPECT_EQ(1, input2.read(buf, maxSize)); |
| EXPECT_EQ('o', buf[0]); |
| EXPECT_EQ(0, input2.read(buf, maxSize)); |
| |
| maxSize = 3; |
| pp::Input input3(count, str, NULL); |
| EXPECT_EQ(3, input3.read(buf, maxSize)); |
| EXPECT_STREQ("foo", buf); |
| EXPECT_EQ(0, input3.read(buf, maxSize)); |
| |
| maxSize = 4; |
| pp::Input input4(count, str, NULL); |
| EXPECT_EQ(3, input4.read(buf, maxSize)); |
| EXPECT_STREQ("foo", buf); |
| EXPECT_EQ(0, input4.read(buf, maxSize)); |
| } |
| |
| TEST(InputTest, ReadStringsWithLength) |
| { |
| int count = 2; |
| const char* str[] = {"foo", "bar"}; |
| // Note that the length for the first string is 2 which is less than |
| // strlen(str[0]. We want to make sure that the last character is ignored. |
| int length[] = {2, 3}; |
| char buf[6] = {'\0', '\0', '\0', '\0', '\0', '\0'}; |
| int maxSize = 5; |
| |
| pp::Input input(count, str, length); |
| EXPECT_EQ(maxSize, input.read(buf, maxSize)); |
| EXPECT_STREQ("fobar", buf); |
| } |
| |