/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.seam.example.ui.test.selenium;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import org.jboss.seam.example.common.test.selenium.SeamSeleniumTest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* This class tests functionality of UI example
*
* @author Martin Gencur
*
*/
public class SeleniumUITest extends SeamSeleniumTest
{
public static final String HOME_PAGE = "/index.seam";
public static final String HOME_PAGE_TITLE = "UI Example:";
public static final String SELECT_ITEMS_LINK = "xpath=//a[contains(@href,\"selectItems\")]";
public static final String FRAGMENT_LINK = "xpath=//a[contains(@href,\"fragment\")]";
public static final String FOTMATTED_TEXT_LINK = "xpath=//a[contains(@href,\"formattedText\")]";
public static final String BUTTON_AND_SLINK_LINK = "xpath=//a[contains(@href,\"linkAndButton\")]";
public static final String CACHE_LINK = "xpath=//a[contains(@href,\"cache\")]";
public static final String VALIDATE_EQUALITY_LINK = "xpath=//a[contains(@href,\"equalityValidator\")]";
public static final String VALIDATE_EQUALITY2_LINK = "xpath=//a[contains(@href,\"equalityValidatorWConvert\")]";
public static final String RESOURCE_DOWNLOAD_LINK = "xpath=//a[contains(@href,\"resource\")]";
@BeforeMethod
@Override
public void setUp()
{
super.setUp();
browser.open(CONTEXT_PATH + HOME_PAGE);
}
/**
* Place holder - just verifies that example deploys
*/
@Test
public void homePageLoadTest()
{
assertEquals("Unexpected page title.", HOME_PAGE_TITLE, browser.getTitle());
}
@Test(dependsOnMethods={"homePageLoadTest"})
public void selectItemsTest(){
String title = "Mr.";
String name = "Martin Gencur";
String continent = "Europe";
String age = "24";
String pet = "Dog (Needs lots of exercise)";
String colour1 = "Green", colour2 = "Yellow";
String book = "Pride and Prejudice by Jane Austin (British)";
String film = "Blade Runner directed by Ridley Scott";
browser.clickAndWait(SELECT_ITEMS_LINK);
browser.select(getProperty("SELECT_ITEMS_TITLE"), "label="+title);
browser.type(getProperty("SELECT_ITEMS_NAME"), name);
browser.select(getProperty("SELECT_ITEMS_CONTINENT"), "label="+continent);
browser.check(getProperty("SELECT_ITEMS_USER"));
browser.check(getProperty("SELECT_ITEMS_ADMIN"));
browser.check(getProperty("SELECT_ITEMS_MANAGER"));
browser.check(getProperty("SELECT_ITEMS_SUPERADMIN"));
browser.select(getProperty("SELECT_ITEMS_AGE"), "label="+age);
browser.select(getProperty("SELECT_ITEMS_PET"), "label="+pet);
browser.select(getProperty("SELECT_ITEMS_COLOURS"), "label="+colour1);
browser.select(getProperty("SELECT_ITEMS_COLOURS"), "label="+colour2);
browser.select(getProperty("SELECT_ITEMS_BOOK"), "label="+book);
browser.select(getProperty("SELECT_ITEMS_FILM"), "label="+film);
browser.clickAndWait(getProperty("SELECT_ITEMS_APPLY"));
browser.check(getProperty("SELECT_ITEMS_COUNTRY"));
browser.clickAndWait(getProperty("SELECT_ITEMS_APPLY"));
assertTrue("Page should contain \"Successfully updated\"", browser.isTextPresent("Successfully updated"));
}
@Test(dependsOnMethods={"homePageLoadTest"})
public void fragmentTest(){
browser.clickAndWait(FRAGMENT_LINK);
assertTrue("Page should contain \"fragment is rendered\"", browser.isTextPresent("This fragment is rendered whilst"));
}
@Test(dependsOnMethods={"homePageLoadTest"})
public void formattedTextTest(){
browser.clickAndWait(FOTMATTED_TEXT_LINK);
assertTrue("Page should contain information about Pete Muir working all the time on Seam", browser.isTextPresent("works on Seam, of course"));
}
@Test(dependsOnMethods={"homePageLoadTest"})
public void buttonAndLinkTest(){
browser.clickAndWait(BUTTON_AND_SLINK_LINK);
assertTrue("Page should contain \"A fragment to jump to\"", browser.isTextPresent("A fragment to jump to"));
browser.clickAndWait(getProperty("JUMP_LINK"));
browser.clickAndWait(getProperty("JUMP_BUTTON"));
browser.clickAndWait(getProperty("LINK_LINK"));
browser.clickAndWait(getProperty("DO_ACTION_LINK"));
assertTrue("Page should contain \"A simple action was performed\"", browser.isTextPresent("A simple action was performed"));
browser.clickAndWait(getProperty("DO_ACTION_BUTTON"));
assertTrue("Page should contain \"A simple action was performed\"", browser.isTextPresent("A simple action was performed"));
assertTrue("Page should contain disabled link", browser.isElementPresent(getProperty("DISABLED_DO_ACTION_LINK")));
assertTrue("Page should contain disabled button", browser.isElementPresent(getProperty("DISABLED_DO_ACTION_BUTTON")));
browser.clickAndWait(getProperty("BEGIN_CONVERSATION_LINK"));
browser.clickAndWait(getProperty("END_CONVERSATION_BUTTON"));
assertTrue("Page shouldn't contain \"A simple action was performed\"", !browser.isTextPresent("A simple action was performed"));
browser.clickAndWait(getProperty("ADD_PARAMETER_LINK"));
browser.clickAndWait(getProperty("ADD_PARAMETER_BUTTON"));
assertTrue("Page should contain \"Foo = bar\"", browser.isTextPresent("Foo = bar"));
}
@Test(dependsOnMethods={"homePageLoadTest"})
public void cacheTest(){
browser.clickAndWait(CACHE_LINK);
assertTrue("Page should contain some cached text", browser.isTextPresent("Some cached text"));
}
@Test(dependsOnMethods={"homePageLoadTest"})
public void validateEqualityTest(){
String name1 = "martin";
String name2 = "peter";
String age1 = "20";
String age2 = "30";
browser.clickAndWait(VALIDATE_EQUALITY_LINK);
browser.type(getProperty("NAME_INPUT"), name1);
browser.type(getProperty("NAME_VERIFICATION_INPUT"), name1);
browser.clickAndWait(getProperty("CHECK_NAME_BUTTON"));
assertTrue("Page should contain \"OK!\""+ "je tam:" + browser.getBodyText(), browser.isTextPresent("OK!"));
browser.type(getProperty("NAME_INPUT"), name1);
browser.type(getProperty("NAME_VERIFICATION_INPUT"), name2);
browser.clickAndWait(getProperty("CHECK_NAME_BUTTON"));
assertTrue("Page should contain \"Must be the same as name!\"", browser.isTextPresent("Must be the same as name!"));
browser.type(getProperty("MINIMUM_AGE_INPUT"), age1);
browser.type(getProperty("MAXIMUM_AGE_INPUT"), age2);
browser.clickAndWait(getProperty("CHECK_AGES_BUTTON"));
assertTrue("Page should contain \"OK!\"", browser.isTextPresent("OK!"));
browser.type(getProperty("MINIMUM_AGE_INPUT"), age1);
browser.type(getProperty("MAXIMUM_AGE_INPUT"), age1);
browser.clickAndWait(getProperty("CHECK_AGES_BUTTON"));
assertTrue("Page should contain \"Must be larger than minimum!\"", browser.isTextPresent("Must be larger than minimum!"));
browser.type(getProperty("MINIMUM_AGE_INPUT"), age2);
browser.type(getProperty("MAXIMUM_AGE_INPUT"), age1);
browser.clickAndWait(getProperty("CHECK_AGES_BUTTON"));
assertTrue("Page should contain \"Must be larger than minimum!\"", browser.isTextPresent("Must be larger than minimum!"));
}
@Test(dependsOnMethods={"homePageLoadTest"})
public void validateEquality2Test(){
String date1 = "2009-08-21";
String date2 = "2009-08-25";
browser.clickAndWait(VALIDATE_EQUALITY2_LINK);
browser.type(getProperty("DATE_INPUT"), date1);
browser.type(getProperty("DATE_VERIFICATION_INPUT"), date1);
browser.clickAndWait(getProperty("CHECK_DATE_BUTTON"));
assertTrue("Page should contain \"OK!\"", browser.isTextPresent("OK!"));
browser.type(getProperty("DATE_INPUT"), date1);
browser.type(getProperty("DATE_VERIFICATION_INPUT"), date2);
browser.clickAndWait(getProperty("CHECK_DATE_BUTTON"));
assertTrue("Page should contain \"Value does not equal that in 'date'\"", browser.isTextPresent("Value does not equal"));
//assertTrue("Page should contain information about Pete Muir working all the time on Seam", browser.isTextPresent("works on Seam, of course"));
}
@Test(dependsOnMethods={"homePageLoadTest"})
public void resourceDownloadTest(){
String textToFind1 = "abc";
String textToFind2 = "123";
browser.clickAndWait(RESOURCE_DOWNLOAD_LINK);
assertTrue( "File download failed: Restful with s:download \"Text\"", isDownloadWorking("/seam-ui/resources.seam?id=1", textToFind1));
assertTrue( "File download failed: Restful with s:download \"Numbers\"", isDownloadWorking("/seam-ui/resources.seam?id=2", textToFind2));
}
private boolean isDownloadWorking(String pathToFile, String textToFind)
{
try
{
URL downloadUrl = new URL("http://localhost:8080" + pathToFile);
BufferedReader r = new BufferedReader(new InputStreamReader(downloadUrl.openStream()));
String str;
StringBuffer sb = new StringBuffer();
while ((str = r.readLine()) != null)
{
sb.append(str);
}
return sb.toString().contains(textToFind);
}
catch (IOException e)
{
return false;
}
}
}