Hash :
49a8d05c
        
        Author :
  
        
        Date :
2024-09-05T17:41:07
        
      
Tests: Add end2end test .so library to AOSP build m[mm] external/angle:libangle_end2end_tests__library produces libangle_end2end_tests__library.so I tested that integration with Chromium wrappers works with some manual patches; no integration is included in this CL. googlest/gtest dependencies replaced with platform libgtest, libgmock TestSuite heavily depends on rapidjson so it is currently excluded, only the standard gtest implementation is included (--gtest_list_tests, --gtest_filter, --gtest_output etc) This also disables support for expectation files as it is piped through TestSuite instance. Bug: b/279980674 Change-Id: I35cb2328d74a3ac778e1d93bb4fe4ac044920b6a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5838526 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Roman Lavrov <romanl@google.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
//
// Copyright 2013 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 "gtest/gtest.h"
#if defined(ANGLE_HAS_RAPIDJSON)
#    include "test_utils/runner/TestSuite.h"
#endif  // defined(ANGLE_HAS_RAPIDJSON)
#include "util/OSWindow.h"
void ANGLEProcessTestArgs(int *argc, char *argv[]);
// Register* functions handle setting up special tests that need complex parameterization.
// GoogleTest relies heavily on static initialization to register test functions. This can
// cause all sorts of issues if the right variables aren't initialized in the right order.
// This register function needs to be called explicitly after static initialization and
// before the test launcher starts. This is a safer and generally better way to initialize
// tests. It's also more similar to how the dEQP Test harness works. In the future we should
// likely specialize more register functions more like dEQP instead of relying on static init.
void RegisterContextCompatibilityTests();
namespace
{
bool HasArg(int argc, char **argv, const char *arg)
{
    for (int i = 1; i < argc; ++i)
    {
        if (strstr(argv[i], arg) != nullptr)
        {
            return true;
        }
    }
    return false;
}
}  // namespace
int main(int argc, char **argv)
{
    if (!HasArg(argc, argv, "--list-tests") && !HasArg(argc, argv, "--gtest_list_tests") &&
        HasArg(argc, argv, "--use-gl"))
    {
        std::cerr << "--use-gl isn't supported by end2end tests - use *_EGL configs instead "
                     "(angle_test_enable_system_egl=true)\n";
        return EXIT_FAILURE;
    }
    // TODO(b/279980674): TestSuite depends on rapidjson which we don't have in aosp builds,
    // for now disable both TestSuite and expectations.
#if defined(ANGLE_HAS_RAPIDJSON)
    ANGLEProcessTestArgs(&argc, argv);
    auto registerTestsCallback = [] {
        if (!IsTSan())
        {
            RegisterContextCompatibilityTests();
        }
    };
    angle::TestSuite testSuite(&argc, argv, registerTestsCallback);
    constexpr char kTestExpectationsPath[] = "src/tests/angle_end2end_tests_expectations.txt";
    constexpr size_t kMaxPath = 512;
    std::array<char, kMaxPath> foundDataPath;
    if (!angle::FindTestDataPath(kTestExpectationsPath, foundDataPath.data(), foundDataPath.size()))
    {
        std::cerr << "Unable to find test expectations path (" << kTestExpectationsPath << ")\n";
        return EXIT_FAILURE;
    }
    // end2end test expectations only allow SKIP at the moment.
    testSuite.setTestExpectationsAllowMask(angle::GPUTestExpectationsParser::kGpuTestSkip |
                                           angle::GPUTestExpectationsParser::kGpuTestTimeout);
    if (!testSuite.loadAllTestExpectationsFromFile(std::string(foundDataPath.data())))
    {
        return EXIT_FAILURE;
    }
    return testSuite.run();
#else
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
#endif  // defined(ANGLE_HAS_RAPIDJSON)
}