Package org.apache.wicket.util.parse.metapattern

Source Code of org.apache.wicket.util.parse.metapattern.MetaPatternTest

/*
* 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.util.parse.metapattern;


import java.util.regex.Matcher;

import junit.framework.TestCase;

import org.apache.wicket.util.parse.metapattern.parsers.CommaSeparatedVariableParser;
import org.apache.wicket.util.parse.metapattern.parsers.IntegerVariableAssignmentParser;
import org.apache.wicket.util.parse.metapattern.parsers.TagNameParser;
import org.apache.wicket.util.parse.metapattern.parsers.VariableAssignmentParser;

/**
* Test cases for this object
*
* @author Jonathan Locke
*/
public final class MetaPatternTest extends TestCase
{
  /**
   *
   */
  public void testSimple()
  {
    // Parse "variable = <number>"
    final Group variable = new Group(MetaPattern.VARIABLE_NAME);
    final IntegerGroup value = new IntegerGroup(MetaPattern.INTEGER);
    final MetaPattern variableAssignment = new MetaPattern(new MetaPattern[] { variable,
        MetaPattern.OPTIONAL_WHITESPACE, MetaPattern.EQUALS,
        MetaPattern.OPTIONAL_WHITESPACE, value });

    final Matcher matcher = variableAssignment.matcher("foo = 9");
    assertTrue(matcher.matches());
    assertEquals("foo", matcher.group(1));
    assertEquals("9", matcher.group(2));
  }

  /**
   * Test assignment of variables.
   */
  public void testVariableAssignmentParser()
  {
    VariableAssignmentParser parser = new VariableAssignmentParser("foo = 9");
    assertTrue(parser.matches());
    assertEquals("foo", parser.getKey());
    assertEquals("9", parser.getValue());

    parser = new VariableAssignmentParser("foo=9");
    assertTrue(parser.matches());
    assertEquals("foo", parser.getKey());
    assertEquals("9", parser.getValue());
  }

  /**
   * Test assignment of integers.
   */
  public void testIntegerVariableAssignmentParser()
  {
    IntegerVariableAssignmentParser parser = new IntegerVariableAssignmentParser("foo = 9");
    assertTrue(parser.matches());
    assertEquals("foo", parser.getVariable());
    assertEquals(9, parser.getIntValue());
    assertEquals(9, parser.getLongValue());

    parser = new IntegerVariableAssignmentParser("foo=9");
    assertTrue(parser.matches());
    assertEquals("foo", parser.getVariable());
    assertEquals(9, parser.getIntValue());
    assertEquals(9, parser.getLongValue());

    parser = new IntegerVariableAssignmentParser("foo=a");
    assertFalse(parser.matches());
  }

  /**
   * Test parsing of comma separated variables.
   */
  public void testCommaSeparatedVariableParser()
  {
    CommaSeparatedVariableParser parser = new CommaSeparatedVariableParser("a,b,c");
    assertTrue(parser.matches());
    assertEquals(3, parser.getValues().size());
    assertEquals("a", parser.getValues().get(0));
    assertEquals("b", parser.getValues().get(1));
    assertEquals("c", parser.getValues().get(2));

    // no whitespaces will be removed
    parser = new CommaSeparatedVariableParser(" a ,b, c , d ");
    assertTrue(parser.matches());
    assertEquals(4, parser.getValues().size());
    assertEquals(" a ", parser.getValues().get(0));
    assertEquals("b", parser.getValues().get(1));
    assertEquals(" c ", parser.getValues().get(2));
    assertEquals(" d ", parser.getValues().get(3));

    // It'll care for "" and '' but it'll not remove them
    parser = new CommaSeparatedVariableParser("'a ',\" b\",'c,d'");
    assertTrue(parser.matches());
    assertEquals(3, parser.getValues().size());
    assertEquals("'a '", parser.getValues().get(0));
    assertEquals("\" b\"", parser.getValues().get(1));
    assertEquals("'c,d'", parser.getValues().get(2));

    // But no escapes. Because no separator is following the 2nd "'",
    // it'll stop parsing the string.
    parser = new CommaSeparatedVariableParser("'a\'b, c");
    assertTrue(parser.matches());
    assertEquals(1, parser.getValues().size());
    assertEquals("'a'", parser.getValues().get(0));

    parser = new CommaSeparatedVariableParser("a");
    assertTrue(parser.matches());
    assertEquals(1, parser.getValues().size());
    assertEquals("a", parser.getValues().get(0));

    // Empty elements are not supported
    parser = new CommaSeparatedVariableParser("a,,");
    assertTrue(parser.matches());
    assertEquals(1, parser.getValues().size());
    assertEquals("a", parser.getValues().get(0));
  }

  /**
   * Test the tag parser.
   */
  public void testTagParser()
  {
    String tag = "name";
    TagNameParser parser = new TagNameParser(tag);
    assertEquals(true, parser.matcher().matches());
    assertEquals("name", parser.getName());
    assertNull(parser.getNamespace());

    tag = "namespace:name";
    parser = new TagNameParser(tag);
    assertEquals(true, parser.matcher().matches());
    assertEquals("name", parser.getName());
    assertEquals("namespace", parser.getNamespace());

    tag = "namespace:";
    parser = new TagNameParser(tag);
    assertEquals(false, parser.matcher().matches());

    tag = ":names";
    parser = new TagNameParser(tag);
    assertEquals(false, parser.matcher().matches());
  }
}
TOP

Related Classes of org.apache.wicket.util.parse.metapattern.MetaPatternTest

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.