Search in sources :

Example 1 with DefaultTestMethodDescriptor

use of org.gradle.api.internal.tasks.testing.DefaultTestMethodDescriptor in project gradle by gradle.

the class TestNGTestResultProcessorAdapter method onConfigurationFailure.

@Override
public void onConfigurationFailure(ITestResult testResult) {
    synchronized (lock) {
        if (!failedConfigurations.add(testResult)) {
            // workaround for bug in TestNG 6.2 (apparently fixed in some 6.3.x): listener is notified twice per event
            return;
        }
    }
    // Synthesise a test for the broken configuration method
    TestDescriptorInternal test = new DefaultTestMethodDescriptor(idGenerator.generateId(), testResult.getMethod().getTestClass().getName(), testResult.getMethod().getMethodName());
    resultProcessor.started(test, new TestStartEvent(testResult.getStartMillis()));
    resultProcessor.failure(test.getId(), testResult.getThrowable());
    resultProcessor.completed(test.getId(), new TestCompleteEvent(testResult.getEndMillis(), TestResult.ResultType.FAILURE));
}
Also used : DefaultTestMethodDescriptor(org.gradle.api.internal.tasks.testing.DefaultTestMethodDescriptor) TestDescriptorInternal(org.gradle.api.internal.tasks.testing.TestDescriptorInternal) TestStartEvent(org.gradle.api.internal.tasks.testing.TestStartEvent) TestCompleteEvent(org.gradle.api.internal.tasks.testing.TestCompleteEvent)

Example 2 with DefaultTestMethodDescriptor

use of org.gradle.api.internal.tasks.testing.DefaultTestMethodDescriptor in project gradle by gradle.

the class TestNGTestResultProcessorAdapter method onTestFinished.

private void onTestFinished(ITestResult iTestResult, TestResult.ResultType resultType) {
    Object testId;
    TestStartEvent startEvent = null;
    synchronized (lock) {
        testId = testMethodId.remove(iTestResult);
        if (testId == null) {
            // This can happen when a method fails which this method depends on
            testId = idGenerator.generateId();
            Object parentId = testMethodParentId.get(iTestResult.getMethod());
            startEvent = new TestStartEvent(iTestResult.getStartMillis(), parentId);
        }
    }
    if (startEvent != null) {
        // Synthesize a start event
        resultProcessor.started(new DefaultTestMethodDescriptor(testId, iTestResult.getTestClass().getName(), iTestResult.getName()), startEvent);
    }
    if (resultType == TestResult.ResultType.FAILURE) {
        resultProcessor.failure(testId, iTestResult.getThrowable());
    }
    resultProcessor.completed(testId, new TestCompleteEvent(iTestResult.getEndMillis(), resultType));
}
Also used : DefaultTestMethodDescriptor(org.gradle.api.internal.tasks.testing.DefaultTestMethodDescriptor) TestStartEvent(org.gradle.api.internal.tasks.testing.TestStartEvent) TestCompleteEvent(org.gradle.api.internal.tasks.testing.TestCompleteEvent)

Example 3 with DefaultTestMethodDescriptor

use of org.gradle.api.internal.tasks.testing.DefaultTestMethodDescriptor in project gradle by gradle.

the class TestNGTestResultProcessorAdapter method onTestStart.

@Override
public void onTestStart(ITestResult iTestResult) {
    TestDescriptorInternal testInternal;
    Object parentId;
    synchronized (lock) {
        String name = calculateTestCaseName(iTestResult);
        testInternal = new DefaultTestMethodDescriptor(idGenerator.generateId(), iTestResult.getTestClass().getName(), name);
        Object oldTestId = testMethodId.put(iTestResult, testInternal.getId());
        assert oldTestId == null : "Apparently some other test has started but it hasn't finished. " + "Expect the resultProcessor to break. " + "Don't expect to see this assertion stack trace due to the current architecture";
        parentId = testMethodParentId.get(iTestResult.getMethod());
        assert parentId != null;
    }
    resultProcessor.started(testInternal, new TestStartEvent(iTestResult.getStartMillis(), parentId));
    if (iTestResult.getThrowable() instanceof UnrepresentableParameterException) {
        throw (UnrepresentableParameterException) iTestResult.getThrowable();
    }
}
Also used : DefaultTestMethodDescriptor(org.gradle.api.internal.tasks.testing.DefaultTestMethodDescriptor) TestDescriptorInternal(org.gradle.api.internal.tasks.testing.TestDescriptorInternal) TestStartEvent(org.gradle.api.internal.tasks.testing.TestStartEvent)

Example 4 with DefaultTestMethodDescriptor

use of org.gradle.api.internal.tasks.testing.DefaultTestMethodDescriptor in project gradle by gradle.

the class XCTestScraper method text.

@Override
public void text(String textFragment) {
    textBuilder.append(textFragment);
    if (!textFragment.endsWith(SystemProperties.getInstance().getLineSeparator())) {
        return;
    }
    String text = textBuilder.toString();
    textBuilder = new StringBuilder();
    synchronized (testDescriptors) {
        Scanner scanner = new Scanner(text).useDelimiter("'");
        if (scanner.hasNext()) {
            String token = scanner.next().trim();
            if (token.equals("Test Suite")) {
                // Test Suite 'PassingTestSuite' started at 2017-10-30 10:45:47.828
                String testSuite = scanner.next();
                if (testSuite.equals("All tests") || testSuite.equals("Selected tests") || testSuite.endsWith(".xctest")) {
                    // ignore these test suites
                    return;
                }
                String status = scanner.next();
                boolean started = status.contains("started at");
                if (started) {
                    // Using DefaultTestClassDescriptor to fake JUnit test
                    TestDescriptorInternal testDescriptor = new DefaultTestClassDescriptor(idGenerator.generateId(), testSuite);
                    processor.started(testDescriptor, new TestStartEvent(clock.getCurrentTime()));
                    testDescriptors.push(new XCTestDescriptor(testDescriptor));
                } else {
                    XCTestDescriptor xcTestDescriptor = testDescriptors.pop();
                    lastDescriptor = xcTestDescriptor.getDescriptorInternal();
                    TestDescriptorInternal testDescriptor = xcTestDescriptor.getDescriptorInternal();
                    TestResult.ResultType resultType = TestResult.ResultType.SUCCESS;
                    boolean failed = status.contains("failed at");
                    if (failed) {
                        resultType = TestResult.ResultType.FAILURE;
                    }
                    processor.completed(testDescriptor.getId(), new TestCompleteEvent(clock.getCurrentTime(), resultType));
                }
            } else if (token.equals("Test Case")) {
                // (macOS) Looks like: Test Case '-[AppTest.PassingTestSuite testCanPassTestCaseWithAssertion]' started.
                // (Linux) Looks like: Test Case 'PassingTestSuite.testCanPassTestCaseWithAssertion' started.
                String testSuiteAndCase = scanner.next();
                String[] splits = testSuiteAndCase.replace('[', ' ').replace(']', ' ').split("[. ]");
                String testSuite;
                String testCase;
                if (OperatingSystem.current().isMacOsX()) {
                    testSuite = splits[2];
                    testCase = splits[3];
                } else {
                    testSuite = splits[0];
                    testCase = splits[1];
                }
                String status = scanner.next().trim();
                boolean started = status.contains("started");
                if (started) {
                    TestDescriptorInternal testDescriptor = new DefaultTestMethodDescriptor(idGenerator.generateId(), testSuite, testCase);
                    processor.started(testDescriptor, new TestStartEvent(clock.getCurrentTime()));
                    testDescriptors.push(new XCTestDescriptor(testDescriptor));
                } else {
                    XCTestDescriptor xcTestDescriptor = testDescriptors.pop();
                    lastDescriptor = xcTestDescriptor.getDescriptorInternal();
                    TestDescriptorInternal testDescriptor = xcTestDescriptor.getDescriptorInternal();
                    TestResult.ResultType resultType = TestResult.ResultType.SUCCESS;
                    boolean failed = status.contains("failed");
                    if (failed) {
                        resultType = TestResult.ResultType.FAILURE;
                        processor.failure(testDescriptor.getId(), new Throwable(Joiner.on(TextUtil.getPlatformLineSeparator()).join(xcTestDescriptor.getMessages())));
                    }
                    processor.completed(testDescriptor.getId(), new TestCompleteEvent(clock.getCurrentTime(), resultType));
                }
            } else {
                XCTestDescriptor xcTestDescriptor = testDescriptors.peek();
                if (xcTestDescriptor != null) {
                    TestDescriptorInternal testDescriptor = xcTestDescriptor.getDescriptorInternal();
                    processor.output(testDescriptor.getId(), new DefaultTestOutputEvent(destination, text));
                    Matcher failureMessageMatcher = TEST_FAILURE_PATTERN.matcher(text);
                    if (failureMessageMatcher.find()) {
                        String testSuite = failureMessageMatcher.group(2);
                        String testCase = failureMessageMatcher.group(3);
                        String message = failureMessageMatcher.group(4);
                        if (testDescriptor.getClassName().equals(testSuite) && testDescriptor.getName().equals(testCase)) {
                            xcTestDescriptor.getMessages().add(message);
                        }
                    }
                // If no current test can be associated to the output, the last known descriptor is used.
                // See https://bugs.swift.org/browse/SR-1127 for more information.
                } else if (lastDescriptor != null) {
                    processor.output(lastDescriptor.getId(), new DefaultTestOutputEvent(destination, text));
                }
            }
        }
    }
}
Also used : Scanner(java.util.Scanner) Matcher(java.util.regex.Matcher) TestResult(org.gradle.api.tasks.testing.TestResult) TestStartEvent(org.gradle.api.internal.tasks.testing.TestStartEvent) DefaultTestOutputEvent(org.gradle.api.internal.tasks.testing.DefaultTestOutputEvent) DefaultTestMethodDescriptor(org.gradle.api.internal.tasks.testing.DefaultTestMethodDescriptor) TestDescriptorInternal(org.gradle.api.internal.tasks.testing.TestDescriptorInternal) DefaultTestClassDescriptor(org.gradle.api.internal.tasks.testing.DefaultTestClassDescriptor) TestCompleteEvent(org.gradle.api.internal.tasks.testing.TestCompleteEvent)

Aggregations

DefaultTestMethodDescriptor (org.gradle.api.internal.tasks.testing.DefaultTestMethodDescriptor)4 TestStartEvent (org.gradle.api.internal.tasks.testing.TestStartEvent)4 TestCompleteEvent (org.gradle.api.internal.tasks.testing.TestCompleteEvent)3 TestDescriptorInternal (org.gradle.api.internal.tasks.testing.TestDescriptorInternal)3 Scanner (java.util.Scanner)1 Matcher (java.util.regex.Matcher)1 DefaultTestClassDescriptor (org.gradle.api.internal.tasks.testing.DefaultTestClassDescriptor)1 DefaultTestOutputEvent (org.gradle.api.internal.tasks.testing.DefaultTestOutputEvent)1 TestResult (org.gradle.api.tasks.testing.TestResult)1