package com.codeaffine.extras.jdt.internal.junitstatus; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.eclipse.jdt.junit.model.ITestCaseElement; import org.eclipse.jdt.junit.model.ITestElement; import org.eclipse.jdt.junit.model.ITestElement.ProgressState; import org.eclipse.jdt.junit.model.ITestElement.Result; import org.eclipse.jdt.junit.model.ITestElementContainer; import org.eclipse.jdt.junit.model.ITestRunSession; import org.junit.Before; import org.junit.Test; public class TestRunSessionInfoTest { private ITestRunSession testRunSession; private TestRunSessionInfo testRunSessionInfo; @Before public void setUp() { testRunSession = mockTestRunSession(); testRunSessionInfo = new TestRunSessionInfo( testRunSession ); } @Test(expected=NullPointerException.class) public void testConstructorWithNullArgument() { new TestRunSessionInfo( null ); } @Test public void testGetName() { when( testRunSession.getTestRunName() ).thenReturn( "test-run-name" ); String name = testRunSessionInfo.getName(); assertThat( name ).isEqualTo( testRunSession.getTestRunName() ); } @Test public void testGetTotalTestCountWithEmptyContainer() { setChildren( testRunSession, new ITestElement[ 0 ] ); int count = testRunSessionInfo.getTotalTestCount(); assertThat( count ).isEqualTo( 0 ); } @Test public void testGetTotalTestCountWithTestCaseInChildren() { setChildren( testRunSession, mock( ITestCaseElement.class ) ); int count = testRunSessionInfo.getTotalTestCount(); assertThat( count ).isEqualTo( 1 ); } @Test public void testGetTotalTestCountWithNonTestCaseInChilren() { setChildren( testRunSession, mock( ITestElement.class ) ); int count = testRunSessionInfo.getTotalTestCount(); assertThat( count ).isEqualTo( 0 ); } @Test public void testGetTotalTestCountWithTestCaseInNestedChilren() { ITestElementContainer nestedContainer = mock( ITestElementContainer.class ); setChildren( nestedContainer, mock( ITestCaseElement.class ) ); setChildren( testRunSession, nestedContainer ); int count = testRunSessionInfo.getTotalTestCount(); assertThat( count ).isEqualTo( 1 ); } @Test public void testGetFailedTestCount() { setChildren( testRunSession, new ITestElement[ 0 ] ); int count = testRunSessionInfo.getFailedTestCount(); assertThat( count ).isEqualTo( 0 ); } @Test public void testGetFailedTestCountWithFailureResult() { setChildren( testRunSession, mockTestCase( Result.FAILURE ), mockTestCase( Result.FAILURE ) ); int count = testRunSessionInfo.getFailedTestCount(); assertThat( count ).isEqualTo( 1 ); } @Test public void testGetFailedTestCountWithErrorResult() { setChildren( testRunSession, mockTestCase( Result.ERROR ), mockTestCase( Result.ERROR ) ); int count = testRunSessionInfo.getFailedTestCount(); assertThat( count ).isEqualTo( 1 ); } @Test public void testGetFailedTestCountWithOkResult() { setChildren( testRunSession, mockTestCase( Result.OK ) ); int count = testRunSessionInfo.getFailedTestCount(); assertThat( count ).isEqualTo( 0 ); } @Test public void testGetFailedTestCountWithUndefinedResult() { setChildren( testRunSession, mockTestCase( Result.UNDEFINED ) ); int count = testRunSessionInfo.getFailedTestCount(); assertThat( count ).isEqualTo( 0 ); } @Test public void testGetFailedTestCountWithErrorInNestedChilren() { ITestElementContainer nestedContainer = mock( ITestElementContainer.class ); setChildren( nestedContainer, mockTestCase( Result.ERROR ), mockTestCase( Result.ERROR ) ); setChildren( testRunSession, nestedContainer ); int count = testRunSessionInfo.getFailedTestCount(); assertThat( count ).isEqualTo( 1 ); } @Test public void testGetExecutedTestCount() { setChildren( testRunSession, mockTestCase( Result.UNDEFINED ) ); int count = testRunSessionInfo.getExecutedTestCount(); assertThat( count ).isEqualTo( 0 ); } @Test public void testGetExecutedTestCountWithEmptyContainer() { setChildren( testRunSession, new ITestElement[ 0 ] ); int count = testRunSessionInfo.getExecutedTestCount(); assertThat( count ).isEqualTo( 0 ); } @Test public void testGetExecutedTestCountWithErroredTest() { setChildren( testRunSession, mockTestCase( Result.ERROR ), mockTestCase( Result.ERROR ) ); int count = testRunSessionInfo.getExecutedTestCount(); assertThat( count ).isEqualTo( 1 ); } @Test public void testGetExecutedTestCountWithFailedTest() { setChildren( testRunSession, mockTestCase( Result.FAILURE ), mockTestCase( Result.FAILURE ) ); int count = testRunSessionInfo.getExecutedTestCount(); assertThat( count ).isEqualTo( 1 ); } @Test public void testGetExecutedTestCountWithIgnoredTest() { setChildren( testRunSession, mockTestCase( Result.IGNORED ), mockTestCase( Result.IGNORED ) ); int count = testRunSessionInfo.getExecutedTestCount(); assertThat( count ).isEqualTo( 1 ); } @Test public void testGetExecutedTestCountWithSucceededTest() { setChildren( testRunSession, mockTestCase( Result.OK ), mockTestCase( Result.OK ) ); int count = testRunSessionInfo.getExecutedTestCount(); assertThat( count ).isEqualTo( 1 ); } @Test public void testGetExecutedTestCountWithNestedChilren() { ITestElementContainer nestedContainer1 = mock( ITestElementContainer.class ); ITestElementContainer nestedContainer2 = mock( ITestElementContainer.class ); setChildren( nestedContainer1, mockTestCase( Result.OK ), mockTestCase( Result.OK ) ); setChildren( nestedContainer2, mockTestCase( Result.FAILURE ) ); setChildren( testRunSession, nestedContainer1, nestedContainer2 ); int count = testRunSessionInfo.getExecutedTestCount(); assertThat( count ).isEqualTo( 2 ); } @Test public void testGetTestRunStateWhenStopped() { when( testRunSession.getProgressState() ).thenReturn( ProgressState.STOPPED ); TestRunState testRunState = testRunSessionInfo.getTestRunState(); assertThat( testRunState ).isEqualTo( TestRunState.STOPPED ); } @Test public void testGetTestRunStateWhenStoppedAndFailedTests() { when( testRunSession.getProgressState() ).thenReturn( ProgressState.STOPPED ); when( testRunSession.getTestResult( true ) ).thenReturn( Result.FAILURE ); TestRunState testRunState = testRunSessionInfo.getTestRunState(); assertThat( testRunState ).isEqualTo( TestRunState.STOPPED ); } @Test public void testGetTestRunStateWhenFailedTests() { setChildren( testRunSession, mockTestCase( Result.FAILURE ), mockTestCase( Result.FAILURE ) ); TestRunState testRunState = testRunSessionInfo.getTestRunState(); assertThat( testRunState ).isEqualTo( TestRunState.FAILED ); } @Test public void testGetTestRunStateWhenErroredTests() { setChildren( testRunSession, mockTestCase( Result.ERROR ), mockTestCase( Result.ERROR ) ); TestRunState testRunState = testRunSessionInfo.getTestRunState(); assertThat( testRunState ).isEqualTo( TestRunState.FAILED ); } @Test public void testGetTestRunStateAfterFailedTestCountIncreased() { testRunSessionInfo.incFailedTestCount(); TestRunState testRunState = testRunSessionInfo.getTestRunState(); assertThat( testRunState ).isEqualTo( TestRunState.FAILED ); } @Test public void testGetTestRunStateWhenIgnoredTests() { when( testRunSession.getTestResult( true ) ).thenReturn( Result.IGNORED ); TestRunState testRunState = testRunSessionInfo.getTestRunState(); assertThat( testRunState ).isEqualTo( TestRunState.SUCCESS ); } @Test public void testGetTestRunStateWhenSucceededTests() { when( testRunSession.getTestResult( true ) ).thenReturn( Result.OK ); TestRunState testRunState = testRunSessionInfo.getTestRunState(); assertThat( testRunState ).isEqualTo( TestRunState.SUCCESS ); } @Test public void testGetTestRunStateWhenUndefinedSessionResult() { when( testRunSession.getTestResult( true ) ).thenReturn( Result.UNDEFINED ); TestRunState testRunState = testRunSessionInfo.getTestRunState(); assertThat( testRunState ).isEqualTo( TestRunState.SUCCESS ); } @Test public void testGetTestRunStateWithNullProgressStateAndTestResult() { when( testRunSession.getProgressState() ).thenReturn( null ); when( testRunSession.getTestResult( true ) ).thenReturn( null ); TestRunState testRunState = testRunSessionInfo.getTestRunState(); assertThat( testRunState ).isEqualTo( TestRunState.SUCCESS ); } @Test public void testEqualsSessionWithDifferentSession() { boolean equalsSession = testRunSessionInfo.equalsSession( mockTestRunSession() ); assertThat( equalsSession ).isFalse(); } @Test public void testEqualsSessionWithDifferentSame() { boolean equalsSession = testRunSessionInfo.equalsSession( testRunSession ); assertThat( equalsSession ).isTrue(); } @Test public void testtestEqualsSessionWithNullArgument() { boolean equalsSession = testRunSessionInfo.equalsSession( null ); assertThat( equalsSession ).isFalse(); } @Test public void testIncExecutedTestCount() { testRunSessionInfo.incExecutedTestCount(); assertThat( testRunSessionInfo.getExecutedTestCount() ).isEqualTo( 1 ); } @Test public void testIncFailedTestCount() { testRunSessionInfo.incFailedTestCount(); assertThat( testRunSessionInfo.getFailedTestCount() ).isEqualTo( 1 ); } private static ITestRunSession mockTestRunSession() { ITestRunSession result = mock( ITestRunSession.class ); when( result.getTestRunSession() ).thenReturn( result ); setChildren( result, new ITestElement[ 0 ] ); return result; } private static ITestCaseElement mockTestCase( Result testResult ) { ITestCaseElement result = mock( ITestCaseElement.class ); when( result.getTestResult( false ) ).thenReturn( testResult ); return result; } private static void setChildren( ITestElementContainer container, ITestElement... children ) { when( container.getChildren() ).thenReturn( children ); } }