package net.thucydides.core.reports.html.screenshots;
import net.thucydides.core.images.SimpleImageInfo;
import net.thucydides.core.model.FailureCause;
import net.thucydides.core.model.Screenshot;
import net.thucydides.core.util.ExtendedTemporaryFolder;
import net.thucydides.core.util.FileSystemUtils;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
public class WhenReformattingScreenshots {
@Rule
public ExtendedTemporaryFolder folder = new ExtendedTemporaryFolder();
private File screenshotDirectory;
@Before
public void setupWorkingDirectory() throws IOException {
screenshotDirectory = folder.newFolder("screenshots");
File screenshotsSourceDirectory = FileSystemUtils.getResourceAsFile("screenshots");
File[] screenshots = screenshotsSourceDirectory.listFiles();
for(File screenshot : screenshots) {
FileUtils.copyFileToDirectory(screenshot, screenshotDirectory);
}
}
@Test
public void should_resize_image_to_a_specified_height() throws IOException {
Screenshot screenshot = new Screenshot("google_page_1.png", "Google", 1200);
Screenshot expandedScreenshot = ScreenshotFormatter.forScreenshot(screenshot).inDirectory(screenshotDirectory).expandToHeight(1500);
int resultingHeight = new SimpleImageInfo(new File(screenshotDirectory, expandedScreenshot.getFilename())).getHeight();
assertThat(resultingHeight, is(1500));
assertThat(expandedScreenshot.getWidth(), is(1200));
}
@Test
public void should_keep_original_image_if_requested() throws IOException {
Screenshot screenshot = new Screenshot("google_page_1.png", "Google", 1200);
ScreenshotFormatter.forScreenshot(screenshot).
keepOriginals(true).
inDirectory(screenshotDirectory).expandToHeight(1500);
File backupScreenshot = new File(screenshotDirectory, "original_google_page_1.png");
assertThat(backupScreenshot.exists(), is(true));
}
@Test
public void should_not_keep_original_image_by_default() throws IOException {
Screenshot screenshot = new Screenshot("google_page_1.png", "Google", 1200);
ScreenshotFormatter.forScreenshot(screenshot).
inDirectory(screenshotDirectory).expandToHeight(1500);
File backupScreenshot = new File(screenshotDirectory, "original_google_page_1.png");
assertThat(backupScreenshot.exists(), is(false));
}
@Test
public void should_limit_image_resize_to_the_maximum_supported_height() throws IOException {
Screenshot screenshot = new Screenshot("google_page_1.png", "Google", 1200);
Screenshot expandedScreenshot = ScreenshotFormatter.forScreenshot(screenshot).inDirectory(screenshotDirectory).expandToHeight(30000);
int resultingHeight = new SimpleImageInfo(new File(screenshotDirectory, expandedScreenshot.getFilename())).getHeight();
assertThat(resultingHeight, is(4000));
assertThat(expandedScreenshot.getWidth(), is(1200));
}
@Test
public void should_not_resize_image_that_is_larger_than_the_specified_height() throws IOException {
Screenshot screenshot = new Screenshot("amazon.png", "Amazon", 1495);
Screenshot expandedScreenshot = ScreenshotFormatter.forScreenshot(screenshot).inDirectory(screenshotDirectory).expandToHeight(2000);
int resultingHeight = new SimpleImageInfo(new File(screenshotDirectory, expandedScreenshot.getFilename())).getHeight();
assertThat(resultingHeight, is(2236));
assertThat(expandedScreenshot.getWidth(), is(1495));
}
@Test
public void should_not_resize_image_if_target_height_is_larger_than_the_maximum_height() throws IOException {
Screenshot screenshot = new Screenshot("wikipedia.png", "Wikipedia", 805);
Screenshot expandedScreenshot = ScreenshotFormatter.forScreenshot(screenshot).inDirectory(screenshotDirectory).expandToHeight(4000);
int resultingHeight = new SimpleImageInfo(new File(screenshotDirectory, expandedScreenshot.getFilename())).getHeight();
assertThat(resultingHeight, is(29107));
assertThat(expandedScreenshot.getWidth(), is(805));
}
@Test
public void should_only_display_the_first_line_of_an_error_message_in_the_UI() {
String errorMessage = "<org.openqa.selenium.ElementNotVisibleException: Unable to locate element: {\"method\":\"name\",\"selector\":\"fieldDoesNotExist\"}; duration or timeout: 8 milliseconds\n" +
"For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html\n" +
"Build info: version: '2.6.0', revision: '13840', time: '2011-09-13 16:51:41'\n" +
"System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.7.1', java.version: '1.6.0_26'\n" +
"Driver info: driver.version: RemoteWebDriver\n" +
"Build info: version: '2.6.0', revision: '13840', time: '2011-09-13 16:51:41'\n" +
"System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.7.1', java.version: '1.6.0_26'\n" +
"Driver info: driver.version: unknown>";
Screenshot screenshot = new Screenshot("wikipedia.png", "Wikipedia", 805, new FailureCause(new AssertionError(errorMessage)));
assertThat(screenshot.getShortErrorMessage(), is("Unable to locate element: {'method':'name','selector':'fieldDoesNotExist'}; duration or timeout: 8 milliseconds"));
}
@Test
public void should_only_display_the_first_line_of_a_simple_error_message_in_the_UI() {
String errorMessage = "Something broke";
Screenshot screenshot = new Screenshot("wikipedia.png", "Wikipedia", 805, new FailureCause(new AssertionError(errorMessage)));
assertThat(screenshot.getShortErrorMessage(), is("Something broke"));
}
@Test
public void should_make_error_message_javascript_safe() {
String errorMessage = "Expected: \"red\" but: was red's color(\"reddish\")";
Screenshot screenshot = new Screenshot("wikipedia.png", "Wikipedia", 805, new FailureCause(new AssertionError(errorMessage)));
assertThat(screenshot.getShortErrorMessage(), is("Expected: "red" but: was red's color("reddish")"));
}
}