package com.simpligility.maven.plugins.android.standalonemojos; import java.io.File; import java.util.Arrays; import org.apache.maven.model.Build; import org.apache.maven.project.MavenProject; import org.easymock.EasyMock; import org.junit.Ignore; import org.junit.runner.RunWith; import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; import com.simpligility.maven.plugins.android.AbstractAndroidMojoTestCase; import com.simpligility.maven.plugins.android.CommandExecutor; import com.simpligility.maven.plugins.android.config.ConfigHandler; import com.simpligility.maven.plugins.android.standalonemojos.UIAutomatorMojo; /** * Test the UIAutomator mojo. Tests options' default values and parsing. We do not test the command line that is passed * to the adb bridge, it should be possible to mock it though. * * @author Stéphane Nicolas - snicolas@octo.com * */ @Ignore("This test has to be migrated to be an IntegrationTest using AbstractAndroidMojoIntegrationTest") @RunWith( PowerMockRunner.class ) @PrepareForTest( { CommandExecutor.Factory.class, ConfigHandler.class } ) public class UIAutomatorMojoTest extends AbstractAndroidMojoTestCase< UIAutomatorMojo > { @Override public String getPluginGoalName() { return "uiautomator"; } /** * Tests all options, checks if their default values are correct. * * @throws Exception */ public void testDefaultUIAutomatorConfig() throws Exception { // given UIAutomatorMojo mojo = createMojo( "ui-automator-config-project0" ); final ConfigHandler cfh = new ConfigHandler( mojo, this.session, this.execution ); cfh.parseConfiguration(); // when Boolean automatorSkip = Whitebox.getInternalState( mojo, "parsedSkip" ); // then assertTrue( "UIAutomator skip parameter should be true", automatorSkip ); } /** * Tests all options, checks if their default values are correct. * * @throws Exception */ public void testDefaultUnskippedUIAutomatorConfig() throws Exception { // given UIAutomatorMojo mojo = createMojo( "ui-automator-config-project1" ); MavenProject project = EasyMock.createNiceMock( MavenProject.class ); Whitebox.setInternalState( mojo, "project", project ); File projectBaseDir = new File( getBasedir() ); Build projectBuild = new Build(); String buildName = "ui-automator-config-project1-15.4.3.1011"; projectBuild.setFinalName( buildName ); projectBuild.setDirectory( "target/" ); projectBuild.setSourceDirectory( "src/" ); projectBuild.setOutputDirectory( "classes/" ); EasyMock.expect( project.getBasedir() ).andReturn( projectBaseDir ).anyTimes(); EasyMock.expect( project.getBuild() ).andReturn( projectBuild ).anyTimes(); PowerMock.replay( project ); // when final ConfigHandler cfh = new ConfigHandler( mojo, this.session, this.execution ); cfh.parseConfiguration(); // then Boolean automatorSkip = Whitebox.getInternalState( mojo, "parsedSkip" ); Boolean automatorDebug = Whitebox.getInternalState( mojo, "parsedDebug" ); String automatorJarFile = Whitebox.getInternalState( mojo, "parsedJarFile" ); String[] automatorTestClassOrMethods = Whitebox.getInternalState( mojo, "parsedTestClassOrMethods" ); Boolean automatorTakeScreenshotOnFailure = Whitebox.getInternalState( mojo, "parsedTakeScreenshotOnFailure" ); String automatorScreenshotsPathOnDevice = Whitebox.getInternalState( mojo, "parsedScreenshotsPathOnDevice" ); Boolean automatorCreateReport = Whitebox.getInternalState( mojo, "parsedCreateReport" ); String automatorReportSuffix = Whitebox.getInternalState( mojo, "parsedReportSuffix" ); String automatorPropertiesKeyPrefix = Whitebox.getInternalState( mojo, "parsedPropertiesKeyPrefix" ); assertFalse( "UIAutomator skip parameter should be false", automatorSkip ); assertFalse( "UIAutomator debug parameter should be false", automatorDebug ); String expectedJarFile = buildName + ".jar"; assertNotNull( "UIAutomator jarFile parameter should be not null", automatorJarFile ); assertEquals( "UIAutomator jarFile parameter should be equal to artifact name", expectedJarFile, automatorJarFile ); assertNull( "UIAutomator testClassOrMethods parameter should be null", automatorTestClassOrMethods ); assertFalse( "UIAutomator takeScreenshotOnFailure parameter should be equal false", automatorTakeScreenshotOnFailure ); assertEquals( "UIAutomator screenshotsPath on device be equal /sdcard/uiautomator-screenshots/", "/sdcard/uiautomator-screenshots/", automatorScreenshotsPathOnDevice ); assertFalse( "UIAutomator createReport parameter should be false", automatorCreateReport ); assertNull( "UIAutomator reportSuffix parameter should be null", automatorReportSuffix ); assertNull( "UIAutomator propertiesKeyPrefix parameter should be null", automatorPropertiesKeyPrefix ); } /** * Tests all options, checks if they are parsed correctly. * * @throws Exception */ public void testCustomUIAutomatorConfig() throws Exception { // given UIAutomatorMojo mojo = createMojo( "ui-automator-config-project2" ); MavenProject project = EasyMock.createNiceMock( MavenProject.class ); Whitebox.setInternalState( mojo, "project", project ); File projectBaseDir = new File( getBasedir() ); Build projectBuild = new Build(); String buildName = "ui-automator-config-project1-15.4.3.1011"; projectBuild.setFinalName( buildName ); projectBuild.setDirectory( "target/" ); projectBuild.setSourceDirectory( "src/" ); projectBuild.setOutputDirectory( "classes/" ); EasyMock.expect( project.getBasedir() ).andReturn( projectBaseDir ).anyTimes(); EasyMock.expect( project.getBuild() ).andReturn( projectBuild ).anyTimes(); PowerMock.replay( project ); // when final ConfigHandler cfh = new ConfigHandler( mojo, this.session, this.execution ); cfh.parseConfiguration(); // then Boolean automatorSkip = Whitebox.getInternalState( mojo, "parsedSkip" ); Boolean automatorDebug = Whitebox.getInternalState( mojo, "parsedDebug" ); String automatorJarFile = Whitebox.getInternalState( mojo, "parsedJarFile" ); String[] automatorTestClassOrMethods = Whitebox.getInternalState( mojo, "parsedTestClassOrMethods" ); Boolean automatorTakeScreenshotOnFailure = Whitebox.getInternalState( mojo, "parsedTakeScreenshotOnFailure" ); String automatorScreenshotsPathOnDevice = Whitebox.getInternalState( mojo, "parsedScreenshotsPathOnDevice" ); Boolean automatorCreateReport = Whitebox.getInternalState( mojo, "parsedCreateReport" ); String automatorReportSuffix = Whitebox.getInternalState( mojo, "parsedReportSuffix" ); String automatorPropertiesKeyPrefix = Whitebox.getInternalState( mojo, "parsedPropertiesKeyPrefix" ); assertFalse( "UIAutomator skip parameter should be false", automatorSkip ); assertFalse( "UIAutomator debug parameter should be false", automatorDebug ); assertNotNull( "UIAutomator jarFile parameter should be not null", automatorJarFile ); String expectedJarFile = buildName + ".jar"; assertEquals( "UIAutomator jarFile parameter should be equal to artifact name", expectedJarFile, automatorJarFile ); assertNotNull( "UIAutomator jarFile parameter should be not null", automatorTestClassOrMethods ); String[] expectedTestClassOrMethods = new String[] { "a", "b#c" }; assertTrue( "UIAutomator testClassOrMethods parameter should be equal [a,b#c]", Arrays.equals( expectedTestClassOrMethods, automatorTestClassOrMethods ) ); assertTrue( "UIAutomator takeScreenshotOnFailure parameter should be equal true", automatorTakeScreenshotOnFailure ); assertEquals( "UIAutomator screenshotsPath on device be equal /mnt/sdcard/screenshots/", "/mnt/sdcard/screenshots/", automatorScreenshotsPathOnDevice ); assertTrue( "UIAutomator createReport parameter should be true", automatorCreateReport ); String expectedReportSuffix = "-mySpecialReport"; assertEquals( "UIAutomator reportSuffix parameter should be equal to "+expectedReportSuffix, expectedReportSuffix, automatorReportSuffix ); String expectedPropertiesKeyPrefix = "UIA"; assertEquals( "UIAutomator propertiesKeyPrefix should be equal to " + expectedPropertiesKeyPrefix, expectedPropertiesKeyPrefix, automatorPropertiesKeyPrefix); } }