diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/input_test.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/input_test.cpp')
-rw-r--r-- | Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/input_test.cpp | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/input_test.cpp b/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/input_test.cpp new file mode 100644 index 000000000..ca1878c5f --- /dev/null +++ b/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/input_test.cpp @@ -0,0 +1,178 @@ +// +// 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 "compiler/preprocessor/Input.h" +#include "compiler/preprocessor/Token.h" + +class InitTest : public PreprocessorTest +{ +}; + +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(0u, input.count()); + int lineNo = 0; + EXPECT_EQ(0u, input.read(NULL, 1, &lineNo)); +} + +TEST(InputTest, NullLength) +{ + const char* str[] = {"foo"}; + pp::Input input(1, str, NULL); + EXPECT_EQ(3u, input.length(0)); +} + +TEST(InputTest, NegativeLength) +{ + const char* str[] = {"foo"}; + int length[] = {-1}; + pp::Input input(1, str, length); + EXPECT_EQ(3u, 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(static_cast<size_t>(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; + int lineNo = 0; + pp::Input input1(count, str, NULL); + EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo)); + EXPECT_EQ('f', buf[0]); + EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo)); + EXPECT_EQ('o', buf[0]); + EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo)); + EXPECT_EQ('o', buf[0]); + EXPECT_EQ(0u, input1.read(buf, maxSize, &lineNo)); + + maxSize = 2; + pp::Input input2(count, str, NULL); + EXPECT_EQ(2u, input2.read(buf, maxSize, &lineNo)); + EXPECT_STREQ("fo", buf); + EXPECT_EQ(1u, input2.read(buf, maxSize, &lineNo)); + EXPECT_EQ('o', buf[0]); + EXPECT_EQ(0u, input2.read(buf, maxSize, &lineNo)); + + maxSize = 3; + pp::Input input3(count, str, NULL); + EXPECT_EQ(3u, input3.read(buf, maxSize, &lineNo)); + EXPECT_STREQ("foo", buf); + EXPECT_EQ(0u, input3.read(buf, maxSize, &lineNo)); + + maxSize = 4; + pp::Input input4(count, str, NULL); + EXPECT_EQ(3u, input4.read(buf, maxSize, &lineNo)); + EXPECT_STREQ("foo", buf); + EXPECT_EQ(0u, input4.read(buf, maxSize, &lineNo)); +} + +TEST(InputTest, ReadMultipleStrings) +{ + int count = 3; + const char* str[] = {"f", "o", "o"}; + char buf[4] = {'\0', '\0', '\0', '\0'}; + + int maxSize = 1; + int lineNo = 0; + pp::Input input1(count, str, NULL); + EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo)); + EXPECT_EQ('f', buf[0]); + EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo)); + EXPECT_EQ('o', buf[0]); + EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo)); + EXPECT_EQ('o', buf[0]); + EXPECT_EQ(0u, input1.read(buf, maxSize, &lineNo)); + + maxSize = 2; + pp::Input input2(count, str, NULL); + EXPECT_EQ(2u, input2.read(buf, maxSize, &lineNo)); + EXPECT_STREQ("fo", buf); + EXPECT_EQ(1u, input2.read(buf, maxSize, &lineNo)); + EXPECT_EQ('o', buf[0]); + EXPECT_EQ(0u, input2.read(buf, maxSize, &lineNo)); + + maxSize = 3; + pp::Input input3(count, str, NULL); + EXPECT_EQ(3u, input3.read(buf, maxSize, &lineNo)); + EXPECT_STREQ("foo", buf); + EXPECT_EQ(0u, input3.read(buf, maxSize, &lineNo)); + + maxSize = 4; + pp::Input input4(count, str, NULL); + EXPECT_EQ(3u, input4.read(buf, maxSize, &lineNo)); + EXPECT_STREQ("foo", buf); + EXPECT_EQ(0u, input4.read(buf, maxSize, &lineNo)); +} + +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'}; + size_t maxSize = 5; + int lineNo = 0; + + pp::Input input(count, str, length); + EXPECT_EQ(maxSize, input.read(buf, maxSize, &lineNo)); + EXPECT_STREQ("fobar", buf); +} + +TEST(InputTest, ReadStringsWithLineContinuation) +{ + int count = 2; + const char* str[] = {"foo\\", "\nba\\\r\nr"}; + int length[] = {4, 7}; + char buf[11] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'}; + size_t maxSize = 11; + int lineNo = 0; + + pp::Input input(count, str, length); + EXPECT_EQ(3u, input.read(buf, maxSize, &lineNo)); + EXPECT_EQ(0, lineNo); + EXPECT_EQ(2u, input.read(buf + 3, maxSize - 3, &lineNo)); + EXPECT_EQ(1, lineNo); + EXPECT_EQ(1u, input.read(buf + 5, maxSize - 5, &lineNo)); + EXPECT_EQ(2, lineNo); + EXPECT_STREQ("foobar", buf); +} |