blob: 830ad92e43b69ac8ca1482a1b1233051766b45de [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry5.integration.app1;
import org.testng.annotations.Test;
/**
* Tests for various Ajax related components, mixins and behaviors.
*/
public class AjaxTests extends App1TestCase
{
@Test
public void autocomplete_mixin()
{
openLinks("Autocomplete Mixin Demo");
// And that's as far as we can go currently, because
// of limitations in Selenium 0.8.3 and bugs in Selenium 0.9.2.
// also test Autocomplete with context
}
@Test
// TAP5-2440
public void autocomplete_mixin_on_required_field()
{
openLinks("Autocomplete Mixin Demo");
type("required", "foo");
clickAndWait(SUBMIT);
assertTextPresent("required: foo");
}
@Test
public void form_fragment()
{
openLinks("Form Fragment Demo", "Clear Errors");
type("name", "Fred");
// Put a value into the sub field, then hide it ...
type("sub", "subvalue");
// Really, you can't type in the field because it is not visible, but
// this checks that invisible fields are not processed.
type("email", "this field is ignored");
clickAndWait(SUBMIT);
assertText("name", "Fred");
assertText("email", "");
clickAndWait("link=Back");
clickAndWait("link=Clear Errors");
click("subscribeToEmail");
click("on");
// Type a value into the "always submit" field ...
type("sub", "subvalue");
// And the other fields ...
type("name", "Barney");
type("email", "rubble@bedrock.gov");
type("code", "ABC123");
// Now turn off the fragment for the "code" field
click("off");
// And hide the subcode fields (but they still always submit)
click("subVisible");
clickAndWait(SUBMIT);
assertText("name", "Barney");
assertText("email", "rubble@bedrock.gov");
assertText("code", "");
// .. but it still gets submitted, thanks to alwyassubmit=true
assertText("sub", "subvalue");
}
//TAP5-1551 - triggering hide on the inner fragment was also hiding the outer fragment
@Test
public void nested_form_fragment()
{
openLinks("Nested Form Fragment Demo");
assertTrue(isVisible("outertext1"));
assertTrue(isVisible("innertext1"));
assertTrue(isChecked("innertrigger1"));
click("innertrigger1");
assertTrue(isVisible("outertext1"));
assertFalse(isVisible("innertext1"));
}
/**
* Disabled; the functionality was not well thought out and has been removed; something similar may replace it
* in the future.
*/
@Test(enabled = false)
public void form_fragment_explicit_visible_bounds()
{
openLinks("Form Fragment Explicit Visible Bounds Demo");
//make sure we're on tab 1...
switchTabs(1);
type("value1", "Some text to check");
switchTabs(2);
type("value2", "Some other text to check");
clickAndWait("saveform");
assertTrue(isVisible("tab2"));
assertFieldValue("value2", "Some other text to check");
switchTabs(1);
assertFieldValue("value1", "Some text to check");
//make sure they don't save if not revealed...
type("value1", "new text that shouldn't save");
click("frag1check");
waitForInvisible("value1");
clickAndWait("saveform");
assertTrue(isVisible("tab1"));
assertFalse(isVisible("value1"));
click("frag1check");
waitForVisible("value1");
assertFieldValue("value1", "Some text to check");
switchTabs(2);
assertFieldValue("value2", "Some other text to check");
clickAndWait("link=Clear Saved State");
}
@Test(enabled = false)
public void form_fragment_visible_bound_validation()
{
openLinks("Form Fragment Explicit Visible Bounds Demo");
//make sure we're on the correct tab...
switchTabs(1);
//and that value1 is blank...
type("value1", "");
assertFieldValue("value1", "");
//submitting should result in error in value1...
click("saveform");
assertTextPresent("You must provide a value for Value1.");
//still wind up being able to submit here b/c there's no (good) way to highlight the error in the invisible tab.
//but the form should return with errors.
switchTabs(2);
clickAndWait("saveform");
assertTextPresent("You must provide a value for Value1.");
switchTabs(1);
click("frag1check");
waitForInvisible("value1");
clickAndWait("saveform");
assertFalse(isTextPresent("You must provide a value for Value1."));
switchTabs(1);
clickAndWait("saveform");
assertFalse(isTextPresent("You must provide a value for Value1."));
clickAndWait("link=Clear Saved State");
}
private void switchTabs(int tab)
{
click("link=Show Tab " + tab);
waitForVisible("tab" + tab);
}
@Test
public void ajax_form_loop()
{
openLinks("FormInjector Demo");
assertText("sum", "0.0");
click("link=Add another value");
waitForAjaxRequestsToComplete();
type("//input[@type='text'][1]", "5.1");
clickAndWait(SUBMIT);
assertText("sum", "5.1");
click("link=remove");
waitForAjaxRequestsToComplete();
clickAndWait(SUBMIT);
assertText("sum", "0.0");
}
@Test
public void remove_ajaxformloop_values_using_buttons_with_nested_elements()
{
openLinks("FormInjector Demo");
assertText("sum", "0.0");
click("link=Add another value");
waitForAjaxRequestsToComplete();
type("//input[@type='text'][1]", "5.1");
clickAndWait(SUBMIT);
assertText("sum", "5.1");
click("css=.glyphicon-trash");
waitForAjaxRequestsToComplete();
clickAndWait(SUBMIT);
assertText("sum", "0.0");
}
/**
* TAP5-240
*/
@Test
public void ajax_server_side_exception()
{
openLinks("Zone Demo");
click("link=Failure on the server side");
// Not more more testing can be done; there's no client-side console
// because Tapestry now favors the native console (when present),
// and the iframe containing the server-side Ajax exception is opaque.
}
/**
* TAP5-236
*/
@Test
public void progressive_display()
{
openLinks("ProgressiveDisplay Demo");
waitForElementToAppear("content1");
assertText("content1", "Progressive Display content #1.");
waitForElementToAppear("content2");
assertText("content2", "Music Library");
}
/**
* TAP5-2458
*/
@Test
public void redirect_from_page_activation_method()
{
openLinks("OnActivateRedirect Demo");
clickAndWait("link");
assertText("message", "Redirected from XHR");
}
}