Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

wicket/ExWicketTester/Source

拡張Wicketテスタのソース

package com.cm55.third.wicket.test;

import java.io.*;
import java.util.*;

import junit.framework.*;

import org.apache.wicket.*;
import org.apache.wicket.feedback.*;
import org.apache.wicket.markup.html.form.*;
import org.apache.wicket.markup.html.panel.*;
import org.apache.wicket.protocol.http.*;
import org.apache.wicket.util.tester.*;

/**
 * 拡張Wicketテスタ
 */
public class ExWicketTester  {

  /** Wicketのテスター */
  protected WicketTester wicketTester;
  
  /** 作成 */
  public ExWicketTester() {
    wicketTester = new WicketTester();
  }
  
  /** WebApplicationを指定して作成 */
  public ExWicketTester(WebApplication application) {
    wicketTester = new WicketTester(application);
  }
  
  /**
   * Formに対するテスターを作成する
   * @param form フォーム
   * @return ExFormTester
   */
  public <T extends Form<?>> ExFormTester<T> newFormTester(T form) {
    String path = form.getPageRelativePath();  
    if (path.length() == 0) {
      throw new IllegalArgumentException("指定フォームはページ上にありません");
    }    
    return new ExFormTester<T>(wicketTester.newFormTester(path));
  }

  /** ページの描画開始 */
  @SuppressWarnings("unchecked")
  public  <C extends Page> C startPage(Class<C> pageClass) {
    return (C)wicketTester.startPage(pageClass);
  }
  
  /** ページの描画開始 */
  @SuppressWarnings("unchecked")
  public <T extends Page> T startPage(T page) {
    return (T)wicketTester.startPage(page);
  }
  
  /** パネルの描画開始。ExTestPanelSourceを指定する */
  @SuppressWarnings("unchecked")
  public <T extends Panel> T startPanel(final ExTestPanelSource testPanelSource) {
    return (T)wicketTester.startPanel(new TestPanelSource() {
      public Panel getTestPanel(final String panelId) {
        return testPanelSource.getTestPanel(panelId);
      }
    });
  }

  /** 最後に描画したページを取得 */
  @SuppressWarnings("unchecked")
  public <T extends Page> T getLastRenderedPage() {
    return (T)wicketTester.getLastRenderedPage();
  }

  /** 何らかのエラーメッセージがある */
  public void assertHasErrorMessage() {
    List<Serializable> messages = wicketTester.getMessages(FeedbackMessage.ERROR);
    Assert.assertTrue("expect some error message, but contains none.",
        messages.size() != 0);
  }
  
  ////////////////////////////////////////////////////////////////////////////
  // 以下は単純なWicketTesterのラッパ
  ////////////////////////////////////////////////////////////////////////////
  
  public void assertRenderedPage(Class<? extends Page> expectedRenderedPageClass) {
    wicketTester.assertRenderedPage(expectedRenderedPageClass);
  }
  
  public void assertErrorMessages(String[] expectedErrorMessages) {
    wicketTester.assertErrorMessages(expectedErrorMessages);
  }
  
  public void assertInvisible(String path) {
    wicketTester.assertInvisible(path);
  }
  
  public void assertNoErrorMessage() {
    wicketTester.assertNoErrorMessage();
  }
  
  public void assertVisible(String path) {
    wicketTester.assertVisible(path);
  }
  
  public void assertLabel(String path, String expectedLabelText) {
    wicketTester.assertLabel(path, expectedLabelText);
  }
  
  public FormTester newFormTester(String path) {
    return wicketTester.newFormTester(path);
  }
  
  public void clickLink(String path) {
    wicketTester.clickLink(path);
  }
}

package com.cm55.third.wicket.test;

import org.apache.wicket.*;
import org.apache.wicket.markup.html.form.*;
import org.apache.wicket.util.tester.*;

/**
 * 拡張フォームテスタ
 */
public class ExFormTester<T extends Form<?>> {

  /** Wicket本体のフォームテスタ */
  protected FormTester formTester;
  
  /**
   * Wicketのフォームテスタとフォームを指定する。
   * @param formTester
   * @param form
   */
  @SuppressWarnings("unchecked")
  ExFormTester(FormTester formTester) {
    this.formTester = formTester;
  }
  
  /** フォームを取得 */
  @SuppressWarnings("unchecked")
  public T getForm() {
    return (T)formTester.getForm();
  }
    
  /** フォーム内コンポーネントのIDを指定して値を設定 */
  public void setValue(String id, String value) {
    formTester.setValue(id, value);
  }
  
  /** フォーム内コンポーネントの値を設定 */
  public void setValue(Component component, String value) {
    formTester.setValue(componentRelativePath(component), value);
  }
  
  /** フォームをサブミット */
  public void submit() {
    formTester.submit();
  }
  
  /** フォーム内コンポーネントを指定してサブミット */
  public void submit(Component component) {
    componentRelativePath(component);
    formTester.submit(component.getId());
  }
  
  /**
   * 指定されたコンポーネントについて、フォームからの相対パスを取得
   * @param component コンポーネント
   * @return フォームからの相対パス、コロン区切り
   */
  private String componentRelativePath(Component component) {
    // フォームのページからの相対パスとコンポーネントのページからの相対パスを取得し
    // その差分がコンポーネントのフォームからの相対パスとなる。
    String formPath = getForm().getPageRelativePath();    
    String componentPath = component.getPageRelativePath();
    if (!componentPath.startsWith(formPath)) {
      throw new IllegalArgumentException("指定コンポーネントはフォーム上にありません");
    }
    String path = componentPath.substring(formPath.length() + 1);    
    return path;
  }  
}

package com.cm55.third.wicket.test;

import org.apache.wicket.*;
import org.apache.wicket.markup.html.panel.*;

/**
 * テスト対象パネルの取得用インターフェース
 * @param <T> パネルのタイプ
 */
public interface ExTestPanelSource<T extends Panel> extends IClusterable {
  public T getTestPanel(final String panelId);
}