blob: ac982ddba122b5bc81c81fcc29af8fcaf3afc1c0 [file] [log] [blame]
// Copyright 2009-2013 The Apache Software Foundation
//
// 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;
public class MixinTests extends App1TestCase
{
@Test
public void render_notification_mixin()
{
openLinks("RenderNotification Demo");
assertTextSeries("//ul[@id='list']//li[%d]", 1, "before item render", "item body in template",
"after item render");
}
@Test
public void renderclientid_mixin()
{
openLinks("RenderClientId Mixin");
assertText("divwithid", "Div Content");
}
@Test
public void mixin_ordering()
{
// echo => <original>-before, temporaryvaluefromechovaluemixin,
// <original>-after
// echo2 => echo2-<original>-before, "3", echo2-<original>-after
// echo3 => echo3-<original>-before, "world", echo3-<original>-after
// order1: echo, echo2, echo3
openLinks("Mixin Ordering Demo");
assertMixinOrder(1, 0, 1, 2, 3, true);
// order2: echo3, echo2, echo
assertMixinOrder(2, 2, 3, 0, 1, true);
// order3: echo2, echo3, echo
assertMixinOrder(3, 3, 0, 2, 1, true);
// order4: echo3, echo, echo2
assertMixinOrder(4, 3, 1, 0, 2, true);
// order5: echo2, echo, echo3
assertMixinOrder(5, 2, 0, 1, 3, true);
// order6: echo, echo3, echo2, TextOnlyOnDisabled
assertMixinOrder(6, 0, 3, 1, 2, false);
// make sure mixin after and mixin before constraints don't interfere...
// order7: echo, echo2 <corecomponent> echoafter2, echoafter
assertMixinOrder(7, 0, 1, -1, 2, true);
assertText("order7_before_but_after",
"afterrender_for_mixinafter_isreally_justbefore_corecomponent_afterrender-before");
assertText("order7_after_but_before",
"afterrender_for_mixinafter_isreally_justbefore_corecomponent_afterrender-after");
// echoafter2 should have for its value at the point it renders
// the value that echo2 sets, since the core component isn't changing
// its value.
assertText("order7_before_but_after2", "3-before");
assertText("order7_after_but_before2", "3-after");
}
private void assertMixinOrder(int orderNum, int echo1From, int echo2From, int echo3From, int fieldFrom,
boolean isField)
{
assertEchoMixins("order" + orderNum, "batman", echo1From, echo2From, echo3From, fieldFrom, isField);
}
/**
* asserts that the "echo value" mixins are properly functioning (ie
*
* @BindParameter, and mixin ordering).
* each integer value specifies the echo mixin number (echovalue => 1,
* echovalue2 => 2, echovalue3 => 3; 0 is the original value)
* from which the specified echo mixin is expected to "receive" its value.
* So if echo1From is 2, then the "original value"
* printed by echo1 is expected to be the value set by echo2. If a given
* "from" is < 0, checking the corresponding mixin values is disabled.
*/
private void assertEchoMixins(String fieldName, String originalValue, int echo1From, int echo2From, int echo3From,
int fieldFrom, boolean isField)
{
String[] vals =
{ originalValue, "temporaryvaluefromechovaluemixin", "3", "world" };
String before = fieldName + "_before";
String after = fieldName + "_after";
if (echo1From > -1)
{
assertText(before, vals[echo1From] + "-before");
assertText(after, vals[echo1From] + "-after");
}
if (echo2From > -1)
{
assertText(before + "2", "echo2-" + vals[echo2From] + "-before");
assertText(after + "2", "echo2-" + vals[echo2From] + "-after");
}
if (echo3From > -1)
{
assertText(before + "3", "echo3-" + vals[echo3From] + "-before");
assertText(after + "3", "echo3-" + vals[echo3From] + "-after");
}
if (isField)
assertFieldValue(fieldName, vals[fieldFrom]);
else
assertText(fieldName, vals[fieldFrom]);
}
}