Skip to content

Commit

Permalink
visitor tests
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/wicket/branches/wicket-1.4.x@926153 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
Igor Vaynberg committed Mar 22, 2010
1 parent 4e1f1d5 commit 37b30cb
Showing 1 changed file with 157 additions and 0 deletions.
157 changes: 157 additions & 0 deletions wicket/src/test/java/org/apache/wicket/VisitorTest.java
@@ -0,0 +1,157 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.wicket;

import junit.framework.Assert;

import org.apache.wicket.Component.IVisitor;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.FormComponent;

/**
* <code>
* A
* +-B
* +-C
* | +-D
* | +-E
* | +-F
* +-G
* </code>
*
* @author igor.vaynberg
*/
public class VisitorTest extends WicketTestCase
{

public void testContinueTraversal()
{
final StringBuilder path = new StringBuilder();

TestContainer container = new TestContainer();
container.visitChildren(new IVisitor<Component>()
{
public Object component(Component component)
{
path.append(component.getId());
return CONTINUE_TRAVERSAL;
}
});

Assert.assertEquals("BCDEFG", path.toString());
}

public void testContinuePostOrder()
{
final StringBuilder path = new StringBuilder();

TestContainer container = new TestContainer();
FormComponent.visitComponentsPostOrder(container, new IVisitor<Component>()
{
public Object component(Component component)
{
path.append(component.getId());
return CONTINUE_TRAVERSAL;
}
});

Assert.assertEquals("BDFECGA", path.toString());
}

public void testDoNotGoDeeper1()
{
final StringBuilder path = new StringBuilder();

TestContainer container = new TestContainer();
Object result = container.visitChildren(new IVisitor<Component>()
{
public Object component(Component component)
{
path.append(component.getId());
if ("D".equals(component.getId()))
{
return "RESULT";
}
return CONTINUE_TRAVERSAL;
}
});
Assert.assertEquals("BCD", path.toString());
Assert.assertEquals("RESULT", result);
}

public void testStop()
{
final StringBuilder path = new StringBuilder();

TestContainer container = new TestContainer();
container.visitChildren(new IVisitor<Component>()
{
public Object component(Component component)
{
path.append(component.getId());
if ("C".equals(component.getId()))
{
return CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
}
return CONTINUE_TRAVERSAL;
}
});
Assert.assertEquals("BCG", path.toString());
}

public void testDoNotGoDeeper2()
{
final StringBuilder path = new StringBuilder();

TestContainer container = new TestContainer();
container.visitChildren(new IVisitor<Component>()
{
public Object component(Component component)
{
path.append(component.getId());
if ("E".equals(component.getId()))
{
return CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
}
return CONTINUE_TRAVERSAL;
}
});
Assert.assertEquals("BCDEG", path.toString());
}


private static class TestContainer extends WebMarkupContainer
{
public TestContainer()
{
super("A");
WebMarkupContainer b = new WebMarkupContainer("B");
WebMarkupContainer c = new WebMarkupContainer("C");
WebMarkupContainer d = new WebMarkupContainer("D");
WebMarkupContainer e = new WebMarkupContainer("E");
WebMarkupContainer f = new WebMarkupContainer("F");
WebMarkupContainer g = new WebMarkupContainer("G");
add(b);
add(c);
c.add(d);
c.add(e);
e.add(f);
add(g);
}

}
}

0 comments on commit 37b30cb

Please sign in to comment.