Edit

kc3-lang/angle/src/common/system_utils_unittest.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2019-10-20 21:44:36
    Hash : f939cb63
    Message : Revert "Reland "Add more test_utils functions."" This reverts commit 7923e234bc458eda5936b8cb4f09fa19e28c0452. Reason for revert: Fails compilation on rollers: [2097/6048] SOLINK ./lib_angle_unittests__library.cr.so FAILED: lib_angle_unittests__library.cr.so lib_angle_unittests__library.cr.so.TOC lib.unstripped/lib_angle_unittests__library.cr.so python "../../build/toolchain/gcc_solink_wrapper.py" --readelf="../../third_party/android_ndk/toolch...(too long) ld.lld: error: undefined symbol: glCreateShader >>> referenced by shader_utils.cpp >>> angle_util_static/shader_utils.o:(CompileShader(unsigned int, char const*)) in archive obj/third_party/angle/libangle_util_static.a ld.lld: error: undefined symbol: glShaderSource Original change's description: > Reland "Add more test_utils functions." > > This is a reland of 5fcfcea4a9379633a83a67fc1d94938cb31f2a9c > > Re-land uses static linking with angle_util. The root cause > of the CFI error wasn't solved. Static linking works around > the problem by not using any export rules. > > Original change's description: > > Add more test_utils functions. > > > > Includes methods for creating temporary files, deleting files, and > > reading files into a string. Also renames GetPathSeparator to mention > > it's only used for environment variables. Includes a new virtual type > > angle::Process that will be used to implement cross-platform async > > Process launching for tests. Also includes a way to specify a custom > > crash handler callback. > > > > Also adds a few unit tests for the new functionality. They are disabled > > on Android because the functions are not needed by the new test runner. > > > > Bug: angleproject:3162 > > Change-Id: I3e2c2e9837608884c98379fa0f78c9ffbe158d73 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1821940 > > Commit-Queue: Jamie Madill <jmadill@chromium.org> > > Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> > > Bug: chromium:1015810 > Bug: angleproject:3162 > Change-Id: I6a2c1e7b585a13ca846759f32da0777c00d7f7e6 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1869541 > Commit-Queue: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=ynovikov@chromium.org,jonahr@google.com,jmadill@chromium.org Change-Id: I975b2214411906cb981bffa04fa50e0a65ff8b4e No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:1015810, angleproject:3162 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1870811 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/common/system_utils_unittest.cpp
  • //
    // Copyright 2019 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.
    
    // system_utils_unittest.cpp: Unit tests for ANGLE's system utility functions
    
    #include "gmock/gmock.h"
    #include "gtest/gtest.h"
    
    #include "common/system_utils.h"
    #include "common/system_utils_unittest_helper.h"
    
    using namespace angle;
    
    namespace
    {
    #if defined(ANGLE_PLATFORM_WINDOWS)
    constexpr char kRunAppHelperExecutable[] = "angle_unittests_helper.exe";
    #else
    constexpr char kRunAppHelperExecutable[] = "angle_unittests_helper";
    #endif
    
    // Transforms various line endings into C/Unix line endings:
    //
    // - A\nB -> A\nB
    // - A\rB -> A\nB
    // - A\r\nB -> A\nB
    std::string NormalizeNewLines(const std::string &str)
    {
        std::string result;
    
        for (size_t i = 0; i < str.size(); ++i)
        {
            if (str[i] == '\r')
            {
                if (i + 1 < str.size() && str[i + 1] == '\n')
                {
                    ++i;
                }
                result += '\n';
            }
            else
            {
                result += str[i];
            }
        }
    
        return result;
    }
    
    // Test getting the executable path
    TEST(SystemUtils, ExecutablePath)
    {
    #if defined(ANGLE_PLATFORM_FUCHSIA)
        // TODO: fuchsia support. http://anglebug.com/3161
        return;
    #endif
    
        std::string executablePath = GetExecutablePath();
        EXPECT_NE("", executablePath);
    }
    
    // Test getting the executable directory
    TEST(SystemUtils, ExecutableDir)
    {
    #if defined(ANGLE_PLATFORM_FUCHSIA)
        // TODO: fuchsia support. http://anglebug.com/3161
        return;
    #endif
    
        std::string executableDir = GetExecutableDirectory();
        EXPECT_NE("", executableDir);
    
        std::string executablePath = GetExecutablePath();
        EXPECT_LT(executableDir.size(), executablePath.size());
        EXPECT_EQ(0, strncmp(executableDir.c_str(), executablePath.c_str(), executableDir.size()));
    }
    
    // Test setting environment variables
    TEST(SystemUtils, Environment)
    {
        constexpr char kEnvVarName[]  = "UNITTEST_ENV_VARIABLE";
        constexpr char kEnvVarValue[] = "The quick brown fox jumps over the lazy dog";
    
        bool setEnvDone = SetEnvironmentVar(kEnvVarName, kEnvVarValue);
        EXPECT_TRUE(setEnvDone);
    
        std::string readback = GetEnvironmentVar(kEnvVarName);
        EXPECT_EQ(kEnvVarValue, readback);
    
        bool unsetEnvDone = UnsetEnvironmentVar(kEnvVarName);
        EXPECT_TRUE(unsetEnvDone);
    
        readback = GetEnvironmentVar(kEnvVarName);
        EXPECT_EQ("", readback);
    }
    
    // Test running an external application and receiving its output
    TEST(SystemUtils, RunApp)
    {
    #if defined(ANGLE_PLATFORM_ANDROID)
        // TODO: android support. http://anglebug.com/3125
        return;
    #endif
    
    #if defined(ANGLE_PLATFORM_FUCHSIA)
        // TODO: fuchsia support. http://anglebug.com/3161
        return;
    #endif
    
        std::string executablePath = GetExecutableDirectory();
        EXPECT_NE(executablePath, "");
        executablePath += "/";
        executablePath += kRunAppHelperExecutable;
    
        std::vector<const char *> args = {executablePath.c_str(), kRunAppTestArg1, kRunAppTestArg2,
                                          nullptr};
    
        std::string stdoutOutput;
        std::string stderrOutput;
        int exitCode = EXIT_FAILURE;
    
        // Test that the application can be executed.
        bool ranApp = RunApp(args, &stdoutOutput, &stderrOutput, &exitCode);
        EXPECT_TRUE(ranApp);
        EXPECT_EQ(kRunAppTestStdout, NormalizeNewLines(stdoutOutput));
        EXPECT_EQ(kRunAppTestStderr, NormalizeNewLines(stderrOutput));
        EXPECT_EQ(EXIT_SUCCESS, exitCode);
    
        // Test that environment variables reach the cild.
        bool setEnvDone = SetEnvironmentVar(kRunAppTestEnvVarName, kRunAppTestEnvVarValue);
        EXPECT_TRUE(setEnvDone);
    
        ranApp = RunApp(args, &stdoutOutput, &stderrOutput, &exitCode);
        EXPECT_TRUE(ranApp);
        EXPECT_EQ("", stdoutOutput);
        EXPECT_EQ(kRunAppTestEnvVarValue, NormalizeNewLines(stderrOutput));
        EXPECT_EQ(EXIT_SUCCESS, exitCode);
    }
    
    }  // anonymous namespace