blob: 0d0ce61151c8f45b8fdc35fc0bfc7bf9e0a6447d [file]
# Copyright (C) 2021 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""Unit tests for manager.py."""
import unittest
from webkitpy.api_tests.manager import Manager
from webkitpy.api_tests.test_expectations import PASS, FAIL, CRASH, TIMEOUT
from webkitexpectationspy.expectations import Expectation
class ManagerTest(unittest.TestCase):
def test_test_list_from_output(self):
gtest_list_tests_output = """WKWebViewDisableSelection.
DoubleClickDoesNotSelectWhenTextInteractionsAreDisabled
DragDoesNotSelectWhenTextInteractionsAreDisabled
Misc/ValueParametrizedTest.
ValueParametrizedTestsSupported/CatRed # GetParam() = (Cat, Red)
ValueParametrizedTestsSupported/CatGreen # GetParam() = (Cat, Green)
ValueParametrizedTestsSupported/DogRed # GetParam() = (Dog, Red)
ValueParametrizedTestsSupported/DogGreen # GetParam() = (Dog, Green)
A.
B
"""
expected_tests = [
"WKWebViewDisableSelection.DoubleClickDoesNotSelectWhenTextInteractionsAreDisabled",
"WKWebViewDisableSelection.DragDoesNotSelectWhenTextInteractionsAreDisabled",
"Misc/ValueParametrizedTest.ValueParametrizedTestsSupported/CatRed",
"Misc/ValueParametrizedTest.ValueParametrizedTestsSupported/CatGreen",
"Misc/ValueParametrizedTest.ValueParametrizedTestsSupported/DogRed",
"Misc/ValueParametrizedTest.ValueParametrizedTestsSupported/DogGreen",
"A.B",
]
got_tests = Manager._test_list_from_output(gtest_list_tests_output)
self.assertEqual(expected_tests, got_tests)
def test_test_list_from_output_mixed_gtest_and_swift(self):
mixed_output = """WKWebViewDisableSelection.
DoubleClickDoesNotSelectWhenTextInteractionsAreDisabled
TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()
TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptYieldsExpectedResponse()
"""
expected_tests = [
"TestWebKitAPI.WKWebViewDisableSelection.DoubleClickDoesNotSelectWhenTextInteractionsAreDisabled",
"TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()",
"TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptYieldsExpectedResponse()",
]
got_tests = Manager._test_list_from_output(mixed_output, prefix='TestWebKitAPI.')
self.assertEqual(expected_tests, got_tests)
def test_find_test_subset_gtest_full_name(self):
superset = ["TestWebKitAPI.WebKit.SomeTest"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["TestWebKitAPI.WebKit.SomeTest"]))
def test_find_test_subset_gtest_suite_and_test(self):
superset = ["TestWebKitAPI.WebKit.SomeTest"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["WebKit.SomeTest"]))
def test_find_test_subset_gtest_binary_and_suite(self):
superset = ["TestWebKitAPI.WebKit.SomeTest"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["TestWebKitAPI.WebKit"]))
def test_find_test_subset_gtest_suite_only(self):
superset = ["TestWebKitAPI.WebKit.SomeTest"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["WebKit"]))
def test_find_test_subset_gtest_wildcard(self):
superset = ["TestWebKitAPI.WebKit.SomeTest", "TestWebKitAPI.WebKit.OtherTest"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["WebKit.*"]))
def test_find_test_subset_swift_full_name(self):
superset = ["TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()"]))
def test_find_test_subset_swift_suite_and_test(self):
superset = ["TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()"]))
def test_find_test_subset_swift_binary_and_suite(self):
superset = ["TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["TestWebKitAPI.WKWebViewSwiftOverlayTests"]))
def test_find_test_subset_swift_suite_only(self):
superset = ["TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["WKWebViewSwiftOverlayTests"]))
def test_find_test_subset_swift_wildcard(self):
superset = [
"TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()",
"TestWebKitAPI.WKWebViewSwiftOverlayTests/otherTest()",
]
self.assertEqual(superset, Manager._find_test_subset(superset, ["WKWebViewSwiftOverlayTests/*"]))
def test_find_test_subset_parentheses_are_literal(self):
superset = ["TestWebKitAPI.Suite/testFunc()"]
self.assertEqual(superset, Manager._find_test_subset(superset, ["Suite/testFunc()"]))
self.assertEqual([], Manager._find_test_subset(superset, ["Suite/testFuncXY"]))
def test_find_test_subset_no_match(self):
superset = ["TestWebKitAPI.WebKit.SomeTest"]
self.assertEqual([], Manager._find_test_subset(superset, ["NonExistent"]))
def test_args_specify_individual_tests(self):
self.assertTrue(Manager._args_specify_individual_tests(["WebKit.SomeTest"]))
self.assertTrue(Manager._args_specify_individual_tests(["TestWebKitAPI.WebKit.SomeTest"]))
self.assertTrue(Manager._args_specify_individual_tests([
"TestWebKitAPI.WebKit.SomeTest",
"TestWebKitAPI.WKWebViewSwiftOverlayTests/evaluateJavaScriptWithNilResponse()",
]))
self.assertFalse(Manager._args_specify_individual_tests([]))
self.assertFalse(Manager._args_specify_individual_tests(["WebKit"]))
self.assertFalse(Manager._args_specify_individual_tests(["WebKit.SomeTest", "WebKit"]))
def test_expected_results_for_upload_no_expectation(self):
self.assertIsNone(Manager._expected_results_for_upload(None))
def test_expected_results_for_upload_pass(self):
self.assertIsNone(Manager._expected_results_for_upload(Expectation('TestWebKitAPI.WebKit.SomeTest', expected={PASS})))
def test_expected_results_for_upload_fail(self):
self.assertEqual('FAIL', Manager._expected_results_for_upload(Expectation('TestWebKitAPI.WebKit.SomeTest', expected={FAIL})))
def test_expected_results_for_upload_crash(self):
self.assertEqual('CRASH', Manager._expected_results_for_upload(Expectation('TestWebKitAPI.WebKit.SomeTest', expected={CRASH})))
def test_expected_results_for_upload_timeout(self):
self.assertEqual('TIMEOUT', Manager._expected_results_for_upload(Expectation('TestWebKitAPI.WebKit.SomeTest', expected={TIMEOUT})))
def test_expected_results_for_upload_flaky(self):
result = Manager._expected_results_for_upload(Expectation('TestWebKitAPI.WebKit.SomeTest', expected={PASS, FAIL}))
self.assertEqual({'PASS', 'FAIL'}, set(result.split()))