Edit

kc3-lang/angle/src/tests/preprocessor_tests/input_test.cpp

Branch :

  • Show log

    Commit

  • Author : Corentin Wallez
    Date : 2015-08-31 16:24:10
    Hash : 2728f992
    Message : Make unittest #includes start from src This is will help avoid adding many include directories for the GN build. BUG=angleproject:929 Change-Id: If8f7e98526df3560b8e410ec86271a2da0c6889d Reviewed-on: https://chromium-review.googlesource.com/296480 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Tested-by: Corentin Wallez <cwallez@chromium.org>

  • src/tests/preprocessor_tests/input_test.cpp
  • //
    // 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);
    }