Package net.infopeers.restrant.engine.parser

Source Code of net.infopeers.restrant.engine.parser.ParserManagerTest

package net.infopeers.restrant.engine.parser;

import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;
import net.infopeers.restrant.Params;
import net.infopeers.restrant.engine.PrefixedPlaceholderFormatter;
import net.infopeers.restrant.engine.params.EditableParams;
import net.infopeers.restrant.engine.params.ExtensionMultimapFactory;
import net.infopeers.restrant.util.GoogleCollectionExtensionMultimapFactory;

public class ParserManagerTest extends TestCase {


  private PrefixedPlaceholderFormatter phFormatter = new PrefixedPlaceholderFormatter();
  private ExtensionMultimapFactory exPolicy = new GoogleCollectionExtensionMultimapFactory();

  public void testSenario() throws Exception {

    List<PatternParser> parsers = new ArrayList<PatternParser>();
    TextUrlParser index = new TextUrlParser(
        "/ :action=index", phFormatter);
    parsers.add(index);
   
    TextUrlParser getter = new TextUrlParser(
        "/:controller?id=:id :action=get", phFormatter);
    parsers.add(getter);

    TextUrlParser byEditor = new TextUrlParser(
        "/:controller?editor=:editor :action=getByEditor", phFormatter);
    parsers.add(byEditor);

    TextUrlParser byRel = new TextUrlParser(
        "/:controller?mode=relation :action=getByRelation", phFormatter);
    parsers.add(byRel);

    TextUrlParser content = new TextUrlParser(
        "/:controller?content=:content&comment=:comment :action=post",
        phFormatter);
    parsers.add(content);

    TextUrlParser withDot = new TextUrlParser(
        "/:controller/:id.json :action=get",
        phFormatter);
    parsers.add(withDot);

    TextUrlParser perform = new TextUrlParser(
        "/:controller :action=perform", phFormatter);
    parsers.add(perform);

    //インデクス
    {
      ParserManager pm = new ParserManager(exPolicy) {

        EditableParams createParams() {
          TestParams params = new TestParams();
          return params;
        }
      };

      pm.setParsers(parsers);
      pm.select("/");
     
      //indexがコールされる
      assertEquals(index, pm.getSelectedParser());
    }
   
   
    //editorに値が入っている場合
    {
      ParserManager pm = new ParserManager(exPolicy) {

        EditableParams createParams() {
          TestParams params = new TestParams();
          params.addParams("editor", "testman");
          return params;
        }
      };

      pm.setParsers(parsers);
      pm.select("/contents");
     
      //byEditorがコールされる
      assertEquals(byEditor, pm.getSelectedParser());
    }

    //content、commentに値が入っている場合
    {
      ParserManager pm = new ParserManager(exPolicy) {

        EditableParams createParams() {
          TestParams params = new TestParams();
          params.addParams("content", "testcontent");
          params.addParams("comment", "");
          return params;
        }
      };
     
      pm.setParsers(parsers);
      pm.select("/contents");
     
      //contentがコールされる
      assertEquals(content, pm.getSelectedParser());
    }

    //editorに値が入っていて、他の値も存在する場合
    {
      ParserManager pm = new ParserManager(exPolicy) {

        EditableParams createParams() {
          TestParams params = new TestParams();
          params.addParams("editor", "testman");
          params.addParams("aaa", "bbb");
          return params;
        }
      };

      pm.setParsers(parsers);
      pm.select("/contents");
     
      //editorがコールされる
      assertEquals(byEditor, pm.getSelectedParser());
    }

   
    //パラメータが無い場合
    {
      ParserManager pm = new ParserManager(exPolicy) {

        EditableParams createParams() {
          TestParams params = new TestParams();
          return params;
        }
      };

      pm.setParsers(parsers);
      pm.select("/contents");
     
      //performがコールされる
      assertEquals(perform, pm.getSelectedParser());
    }
 
    //ドットの含まれているケース
    {
      ParserManager pm = new ParserManager(exPolicy) {

        EditableParams createParams() {
          TestParams params = new TestParams();
          return params;
        }
      };

      pm.setParsers(parsers);
      pm.select("/contents/1111.json");
     
      //withDotがコールされる
      assertEquals(withDot, pm.getSelectedParser());
     
      Params params = pm.getSelectedParam();
      assertNull(params.get("id.json"));
      assertEquals("1111", params.get("id"));
    }
  }
}
TOP

Related Classes of net.infopeers.restrant.engine.parser.ParserManagerTest

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.