Path: blob/main_old/src/tests/preprocessor_tests/input_test.cpp
1693 views
//1// Copyright 2012 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//56#include "compiler/preprocessor/Input.h"7#include "PreprocessorTest.h"8#include "compiler/preprocessor/Token.h"910namespace angle11{1213class InitTest : public PreprocessorTest14{15public:16InitTest() : PreprocessorTest(SH_GLES2_SPEC) {}17};1819TEST_F(InitTest, ZeroCount)20{21EXPECT_TRUE(mPreprocessor.init(0, nullptr, nullptr));2223pp::Token token;24mPreprocessor.lex(&token);25EXPECT_EQ(pp::Token::LAST, token.type);26}2728TEST_F(InitTest, NullString)29{30EXPECT_FALSE(mPreprocessor.init(1, nullptr, nullptr));31}3233TEST(InputTest, DefaultConstructor)34{35pp::Input input;36EXPECT_EQ(0u, input.count());37int lineNo = 0;38EXPECT_EQ(0u, input.read(nullptr, 1, &lineNo));39}4041TEST(InputTest, NullLength)42{43const char *str[] = {"foo"};44pp::Input input(1, str, nullptr);45EXPECT_EQ(3u, input.length(0));46}4748TEST(InputTest, NegativeLength)49{50const char *str[] = {"foo"};51int length[] = {-1};52pp::Input input(1, str, length);53EXPECT_EQ(3u, input.length(0));54}5556TEST(InputTest, ActualLength)57{58const char *str[] = {"foobar"};59int length[] = {3};60pp::Input input(1, str, length);61// Note that strlen(str[0]) != length[0].62// Even then Input should just accept any non-negative number.63EXPECT_EQ(static_cast<size_t>(length[0]), input.length(0));64}6566TEST(InputTest, String)67{68const char *str[] = {"foo"};69pp::Input input(1, str, nullptr);70EXPECT_STREQ(str[0], input.string(0));71}7273TEST(InputTest, ReadSingleString)74{75int count = 1;76const char *str[] = {"foo"};77char buf[4] = {'\0', '\0', '\0', '\0'};7879int maxSize = 1;80int lineNo = 0;81pp::Input input1(count, str, nullptr);82EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo));83EXPECT_EQ('f', buf[0]);84EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo));85EXPECT_EQ('o', buf[0]);86EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo));87EXPECT_EQ('o', buf[0]);88EXPECT_EQ(0u, input1.read(buf, maxSize, &lineNo));8990maxSize = 2;91pp::Input input2(count, str, nullptr);92EXPECT_EQ(2u, input2.read(buf, maxSize, &lineNo));93EXPECT_STREQ("fo", buf);94EXPECT_EQ(1u, input2.read(buf, maxSize, &lineNo));95EXPECT_EQ('o', buf[0]);96EXPECT_EQ(0u, input2.read(buf, maxSize, &lineNo));9798maxSize = 3;99pp::Input input3(count, str, nullptr);100EXPECT_EQ(3u, input3.read(buf, maxSize, &lineNo));101EXPECT_STREQ("foo", buf);102EXPECT_EQ(0u, input3.read(buf, maxSize, &lineNo));103104maxSize = 4;105pp::Input input4(count, str, nullptr);106EXPECT_EQ(3u, input4.read(buf, maxSize, &lineNo));107EXPECT_STREQ("foo", buf);108EXPECT_EQ(0u, input4.read(buf, maxSize, &lineNo));109}110111TEST(InputTest, ReadMultipleStrings)112{113int count = 3;114const char *str[] = {"f", "o", "o"};115char buf[4] = {'\0', '\0', '\0', '\0'};116117int maxSize = 1;118int lineNo = 0;119pp::Input input1(count, str, nullptr);120EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo));121EXPECT_EQ('f', buf[0]);122EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo));123EXPECT_EQ('o', buf[0]);124EXPECT_EQ(1u, input1.read(buf, maxSize, &lineNo));125EXPECT_EQ('o', buf[0]);126EXPECT_EQ(0u, input1.read(buf, maxSize, &lineNo));127128maxSize = 2;129pp::Input input2(count, str, nullptr);130EXPECT_EQ(2u, input2.read(buf, maxSize, &lineNo));131EXPECT_STREQ("fo", buf);132EXPECT_EQ(1u, input2.read(buf, maxSize, &lineNo));133EXPECT_EQ('o', buf[0]);134EXPECT_EQ(0u, input2.read(buf, maxSize, &lineNo));135136maxSize = 3;137pp::Input input3(count, str, nullptr);138EXPECT_EQ(3u, input3.read(buf, maxSize, &lineNo));139EXPECT_STREQ("foo", buf);140EXPECT_EQ(0u, input3.read(buf, maxSize, &lineNo));141142maxSize = 4;143pp::Input input4(count, str, nullptr);144EXPECT_EQ(3u, input4.read(buf, maxSize, &lineNo));145EXPECT_STREQ("foo", buf);146EXPECT_EQ(0u, input4.read(buf, maxSize, &lineNo));147}148149TEST(InputTest, ReadStringsWithLength)150{151int count = 2;152const char *str[] = {"foo", "bar"};153// Note that the length for the first string is 2 which is less than154// strlen(str[0]. We want to make sure that the last character is ignored.155int length[] = {2, 3};156char buf[6] = {'\0', '\0', '\0', '\0', '\0', '\0'};157size_t maxSize = 5;158int lineNo = 0;159160pp::Input input(count, str, length);161EXPECT_EQ(maxSize, input.read(buf, maxSize, &lineNo));162EXPECT_STREQ("fobar", buf);163}164165TEST(InputTest, ReadStringsWithLineContinuation)166{167int count = 2;168const char *str[] = {"foo\\", "\nba\\\r\nr"};169int length[] = {4, 7};170char buf[11] = {'\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'};171size_t maxSize = 11;172int lineNo = 0;173174pp::Input input(count, str, length);175EXPECT_EQ(3u, input.read(buf, maxSize, &lineNo));176EXPECT_EQ(0, lineNo);177EXPECT_EQ(2u, input.read(buf + 3, maxSize - 3, &lineNo));178EXPECT_EQ(1, lineNo);179EXPECT_EQ(1u, input.read(buf + 5, maxSize - 5, &lineNo));180EXPECT_EQ(2, lineNo);181EXPECT_STREQ("foobar", buf);182}183184} // namespace angle185186187