Package org.apache.wicket

Source Code of org.apache.wicket.VisitorTest$MarkedWebMarkupContainer

/*
* 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 org.junit.Assert;

import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.util.visit.ClassVisitFilter;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
import org.apache.wicket.util.visit.Visits;
import org.junit.Test;

/**
* <code>
* A
* +-B
* +-C
* | +-D
* | +-E
* |   +-F
* +-G
*   +-H
* </code>
*
* @author igor.vaynberg
*/
public class VisitorTest extends WicketTestCase
{
  /**
   * testVisit()
   */
  @Test
  public void visit()
  {
    final StringBuilder path = new StringBuilder();

    TestContainer container = new TestContainer();

    Visits.visit(container, new IVisitor<Component, Void>()
    {
      @Override
      public void component(Component component, IVisit<Void> visit)
      {
        path.append(component.getId());
      }
    });

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


  /**
   * testContinueTraversal()
   */
  @Test
  public void continueTraversal()
  {
    final StringBuilder path = new StringBuilder();

    TestContainer container = new TestContainer();

    container.visitChildren(new IVisitor<Component, Void>()
    {
      @Override
      public void component(Component component, IVisit<Void> visit)
      {
        path.append(component.getId());
      }
    });

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

  /**
   * testContinuePostOrder()
   */
  @Test
  public void continuePostOrder()
  {
    final StringBuilder path = new StringBuilder();

    TestContainer container = new TestContainer();
    FormComponent.visitComponentsPostOrder(container, new IVisitor<Component, Void>()
    {
      @Override
      public void component(Component component, IVisit<Void> visit)
      {
        path.append(component.getId());
      }
    });

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

  /**
   * testStop()
   */
  @Test
  public void stop()
  {
    final StringBuilder path = new StringBuilder();

    TestContainer container = new TestContainer();
    Object result = container.visitChildren(new IVisitor<Component, String>()
    {
      @Override
      public void component(Component component, IVisit<String> visit)
      {
        path.append(component.getId());
        if ("D".equals(component.getId()))
        {
          visit.stop("RESULT");
        }
      }
    });
    Assert.assertEquals("BCD", path.toString());
    Assert.assertEquals("RESULT", result);
  }

  /**
   * testDoNotGoDeeper1()
   */
  @Test
  public void doNotGoDeeper1()
  {
    final StringBuilder path = new StringBuilder();

    TestContainer container = new TestContainer();
    container.visitChildren(new IVisitor<Component, Void>()
    {
      @Override
      public void component(Component component, IVisit<Void> visit)
      {
        path.append(component.getId());
        if ("C".equals(component.getId()))
        {
          visit.dontGoDeeper();
        }
      }
    });
    Assert.assertEquals("BCGH", path.toString());
  }

  /**
   * testDoNotGoDeeper2()
   */
  @Test
  public void doNotGoDeeper2()
  {
    final StringBuilder path = new StringBuilder();

    TestContainer container = new TestContainer();
    container.visitChildren(new IVisitor<Component, Void>()
    {
      @Override
      public void component(Component component, IVisit<Void> visit)
      {
        path.append(component.getId());
        if ("E".equals(component.getId()))
        {
          visit.dontGoDeeper();
        }
      }
    });
    Assert.assertEquals("BCDEGH", path.toString());
  }

  /**
   * https://issues.apache.org/jira/browse/WICKET-3805
   *
   * Visit parents with arbitrary type
   */
  @Test
  public void testVisitParents()
  {
    TestContainer testContainer = new TestContainer();
    IVisitor<MarkupContainer, MarkerInterface> visitor = new IVisitor<MarkupContainer, MarkerInterface>()
    {
      @Override
      public void component(MarkupContainer object, IVisit<MarkerInterface> visit)
      {
        visit.stop((MarkerInterface)object);
      }
    };
    MarkerInterface markedParent = testContainer.get("G:H").visitParents(MarkupContainer.class,
      visitor, new ClassVisitFilter(MarkerInterface.class));
    assertEquals("G", markedParent.getId());
  }

  private static interface MarkerInterface
  {
    public String getId();
  }

  private static class MarkedWebMarkupContainer extends WebMarkupContainer
    implements
      MarkerInterface
  {
    private static final long serialVersionUID = 1L;

    public MarkedWebMarkupContainer(String id)
    {
      super(id);
    }
  }

  private static class TestContainer extends WebMarkupContainer
  {
    private static final long serialVersionUID = 1L;

    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 MarkedWebMarkupContainer("G");
      WebMarkupContainer h = new WebMarkupContainer("H");
      add(b);
      add(c);
      c.add(d);
      c.add(e);
      e.add(f);
      add(g);
      g.add(h);
    }

  }
}
TOP

Related Classes of org.apache.wicket.VisitorTest$MarkedWebMarkupContainer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.