Package org.apache.sling.query.selector.parser

Source Code of org.apache.sling.query.selector.parser.SelectorTest

/*-
* 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.sling.query.selector.parser;

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

import org.apache.sling.query.selector.parser.Attribute;
import org.apache.sling.query.selector.parser.Modifier;
import org.apache.sling.query.selector.parser.SelectorParser;
import org.apache.sling.query.selector.parser.SelectorSegment;
import org.junit.Assert;
import org.junit.Test;

public class SelectorTest {
  @Test
  public void parseResourceType() {
    SelectorSegment selector = getFirstSegment("my/resource/type");
    Assert.assertEquals(selector.getType(), "my/resource/type");
  }

  @Test
  public void parseProperty() {
    SelectorSegment selector = getFirstSegment("[key=value]");
    Assert.assertEquals(Arrays.asList(pp("key", "value")), selector.getAttributes());
  }

  @Test
  public void parseProperties() {
    SelectorSegment selector = getFirstSegment("[key=value][key2=value2]");
    Assert.assertEquals(Arrays.asList(pp("key", "value"), pp("key2", "value2")), selector.getAttributes());
  }

  @Test
  public void parseResourceTypeAndName() {
    SelectorSegment selector = getFirstSegment("my/resource/type#some-name");
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals("some-name", selector.getName());
  }

  @Test
  public void parseResourceTypeAndProperty() {
    SelectorSegment selector = getFirstSegment("my/resource/type[key=value]");
    Assert.assertEquals(Arrays.asList(pp("key", "value")), selector.getAttributes());
    Assert.assertEquals("my/resource/type", selector.getType());
  }

  @Test
  public void parseResourceTypeAndNameAndProperty() {
    SelectorSegment selector = getFirstSegment("my/resource/type#some-name[key=value]");
    Assert.assertEquals(Arrays.asList(pp("key", "value")), selector.getAttributes());
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals("some-name", selector.getName());
  }

  @Test
  public void parseResourceTypeAndProperties() {
    SelectorSegment selector = getFirstSegment("my/resource/type[key=value][key2=value2]");
    Assert.assertEquals(Arrays.asList(pp("key", "value"), pp("key2", "value2")), selector.getAttributes());
    Assert.assertEquals("my/resource/type", selector.getType());
  }

  @Test
  public void parseResourceTypeAndNameAndProperties() {
    SelectorSegment selector = getFirstSegment("my/resource/type#some-name[key=value][key2=value2]");
    Assert.assertEquals(Arrays.asList(pp("key", "value"), pp("key2", "value2")), selector.getAttributes());
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals("some-name", selector.getName());
  }

  @Test
  public void parseFunction() {
    SelectorSegment selector = getFirstSegment(":eq(12)");
    Assert.assertEquals(Arrays.asList(f("eq", "12")), selector.getModifiers());
  }

  @Test
  public void parseNameAndFunction() {
    SelectorSegment selector = getFirstSegment("#some-name:eq(12)");
    Assert.assertEquals("some-name", selector.getName());
    Assert.assertEquals(Arrays.asList(f("eq", "12")), selector.getModifiers());
  }

  @Test
  public void parseEscapedNameAndFunction() {
    SelectorSegment selector = getFirstSegment("#'jcr:content':eq(12)");
    Assert.assertEquals("jcr:content", selector.getName());
    Assert.assertEquals(Arrays.asList(f("eq", "12")), selector.getModifiers());
  }

  @Test
  public void parseFunctionWithFilter() {
    SelectorSegment selector = getFirstSegment(":has([key=value])");
    Assert.assertEquals(Arrays.asList(f("has", "[key=value]")), selector.getModifiers());
  }

  @Test
  public void parseNameAndFunctionWithFilter() {
    SelectorSegment selector = getFirstSegment("#some-name:has([key=value])");
    Assert.assertEquals(Arrays.asList(f("has", "[key=value]")), selector.getModifiers());
    Assert.assertEquals("some-name", selector.getName());
  }

  @Test
  public void parseNestedFunction() {
    SelectorSegment selector = getFirstSegment(":not(:has(cq:Page))");
    Assert.assertEquals(Arrays.asList(f("not", ":has(cq:Page)")), selector.getModifiers());
  }

  @Test
  public void parseFunctionWithoutArgument() {
    SelectorSegment selector = getFirstSegment(":first");
    Assert.assertEquals(Arrays.asList(f("first", null)), selector.getModifiers());
  }

  @Test
  public void parseFunctions() {
    SelectorSegment selector = getFirstSegment(":eq(12):first");
    Assert.assertEquals(Arrays.asList(f("eq", "12"), f("first", null)), selector.getModifiers());
  }

  @Test
  public void parsePrimaryTypeAndFunction() {
    SelectorSegment selector = getFirstSegment("cq:Page:first");
    Assert.assertEquals("cq:Page", selector.getType());
    Assert.assertEquals(Arrays.asList(f("first", null)), selector.getModifiers());
  }

  @Test
  public void parsePrimaryTypeAndFunctions() {
    SelectorSegment selector = getFirstSegment("cq:Page:first:eq(12)");
    Assert.assertEquals("cq:Page", selector.getType());
    Assert.assertEquals(Arrays.asList(f("first", null), f("eq", "12")), selector.getModifiers());
  }

  @Test
  public void parseResourceTypeAndFunction() {
    SelectorSegment selector = getFirstSegment("my/resource/type:first");
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals(Arrays.asList(f("first", null)), selector.getModifiers());
  }

  @Test
  public void parseResourceTypeAndNameAndFunction() {
    SelectorSegment selector = getFirstSegment("my/resource/type#some-name:first");
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals(Arrays.asList(f("first", null)), selector.getModifiers());
    Assert.assertEquals("some-name", selector.getName());
  }

  @Test
  public void parseResourceTypeAndFunctions() {
    SelectorSegment selector = getFirstSegment("my/resource/type:first:eq(12)");
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals(Arrays.asList(f("first", null), f("eq", "12")), selector.getModifiers());
  }

  @Test
  public void parseResourceTypeAndPropertyAndFunction() {
    SelectorSegment selector = getFirstSegment("my/resource/type[key=value]:first");
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals(Arrays.asList(pp("key", "value")), selector.getAttributes());
    Assert.assertEquals(Arrays.asList(f("first", null)), selector.getModifiers());
  }

  @Test
  public void parseResourceTypeAndNameAndPropertyAndFunction() {
    SelectorSegment selector = getFirstSegment("my/resource/type#some-name[key=value]:first");
    Assert.assertEquals(selector.getType(), "my/resource/type");
    Assert.assertEquals(Arrays.asList(pp("key", "value")), selector.getAttributes());
    Assert.assertEquals(Arrays.asList(f("first", null)), selector.getModifiers());
    Assert.assertEquals("some-name", selector.getName());
  }

  @Test
  public void parseResourceTypeAndPropertiesAndFunction() {
    SelectorSegment selector = getFirstSegment("my/resource/type[key=value][key2=value2]:first");
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals(Arrays.asList(pp("key", "value"), pp("key2", "value2")), selector.getAttributes());
    Assert.assertEquals(Arrays.asList(f("first", null)), selector.getModifiers());
  }

  @Test
  public void parseResourceTypeAndPropertyAndFunctions() {
    SelectorSegment selector = getFirstSegment("my/resource/type[key=value]:first:eq(12)");
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals(Arrays.asList(pp("key", "value")), selector.getAttributes());
    Assert.assertEquals(Arrays.asList(f("first", null), f("eq", "12")), selector.getModifiers());
  }

  @Test
  public void parseResourceTypeAndPropertiesAndFunctions() {
    SelectorSegment selector = getFirstSegment("my/resource/type[key=value][key2=value2]:first:eq(12)");
    Assert.assertEquals("my/resource/type", selector.getType());
    Assert.assertEquals(Arrays.asList(pp("key", "value"), pp("key2", "value2")), selector.getAttributes());
    Assert.assertEquals(Arrays.asList(f("first", null), f("eq", "12")), selector.getModifiers());
  }

  @Test
  public void parseMultiSegments() {
    List<SelectorSegment> segments = getSegments("cq:Page cq:Page");
    Assert.assertEquals(getSegments("cq:Page", " ", "cq:Page"), segments);

    segments = getSegments("cq:Page > cq:Page");
    Assert.assertEquals(getSegments("cq:Page", ">", "cq:Page"), segments);

    segments = getSegments("cq:Page ~ cq:Page");
    Assert.assertEquals(getSegments("cq:Page", "~", "cq:Page"), segments);

    segments = getSegments("cq:Page + cq:Page");
    Assert.assertEquals(getSegments("cq:Page", "+", "cq:Page"), segments);

    segments = getSegments("cq:Page   cq:Page2 +  cq:Page3");
    Assert.assertEquals(getSegments("cq:Page", " ", "cq:Page2", "+", "cq:Page3"), segments);
  }

  private static Attribute pp(String key, String value) {
    return new Attribute(key, "=", value);
  }

  private static Modifier f(String functionId, String argument) {
    return new Modifier(functionId, argument);
  }

  private static List<SelectorSegment> getSegments(String selector) {
    return SelectorParser.parse(selector).get(0).getSegments();
  }

  private static SelectorSegment getFirstSegment(String selector) {
    return getSegments(selector).get(0);
  }

  private static List<SelectorSegment> getSegments(String... segments) {
    List<SelectorSegment> list = new ArrayList<SelectorSegment>();
    if (segments.length > 0) {
      list.add(getFirstSegment(segments[0]));
    }
    for (int i = 1; i < segments.length; i += 2) {
      SelectorSegment parsed = getFirstSegment(segments[i + 1]);
      char operator = segments[i].charAt(0);
      SelectorSegment segment = new SelectorSegment(parsed.getType(), null, parsed.getAttributes(),
          parsed.getModifiers(), operator);
      list.add(segment);
    }
    return list;
  }
}
TOP

Related Classes of org.apache.sling.query.selector.parser.SelectorTest

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.