Package org.sindice.siren.qparser.json

Source Code of org.sindice.siren.qparser.json.JsonQueryParserTest

/**
* Copyright 2014 National University of Ireland, Galway.
*
* This file is part of the SIREn project. Project and contact information:
*
*  https://github.com/rdelbru/SIREn
*
* Licensed 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.sindice.siren.qparser.json;

import static org.junit.Assert.assertEquals;

import org.apache.lucene.queryparser.flexible.core.QueryNodeException;
import org.apache.lucene.search.Query;
import org.junit.Test;
import org.sindice.siren.qparser.json.dsl.AbstractQuery;
import org.sindice.siren.qparser.json.dsl.BooleanQuery;
import org.sindice.siren.qparser.json.dsl.NodeQuery;
import org.sindice.siren.qparser.json.dsl.QueryBuilder;
import org.sindice.siren.qparser.json.dsl.TwigQuery;

public class JsonQueryParserTest {

  @Test(expected=ParseException.class)
  public void testEmptyQuery() throws QueryNodeException {
    final String query = "{ }";
    final JsonQueryParser parser = new JsonQueryParser();
    parser.parse(query, "");
  }

  @Test(expected=ParseException.class)
  public void testUnknownTopLevelField() throws QueryNodeException {
    final String query = "{ \"unknown\" : { } }";
    final JsonQueryParser parser = new JsonQueryParser();
    parser.parse(query, "");
  }

  @Test
  public void testMoreThanOneTopLevelQuery() throws QueryNodeException {
    final String query = "{ \"node\" : { \"query\" : \"aaa\" }, \"twig\" : { \"query\" : \"bbb\" } }";
    final JsonQueryParser parser = new JsonQueryParser();
    // must not failed as it will take only the first top-level field encountered
    parser.parse(query, "");
  }

  @Test(expected=ParseException.class)
  public void testNodeWithInvalidQuery() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"node\" : { \"query\" : 132 } }";
    parser.parse(query, "");
  }

  @Test(expected=ParseException.class)
  public void testNodeWithInvalidLevel() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"node\" : { \"query\" : \"aaa\", \"level\" : \"3\" } }";
    parser.parse(query, "");
  }

  @Test(expected=ParseException.class)
  public void testNodeWithInvalidRange1() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"node\" : { \"query\" : \"aaa\", \"range\" : 3 } }";
    parser.parse(query, "");
  }

  @Test(expected=ParseException.class)
  public void testNodeWithInvalidRange2() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"node\" : { \"query\" : \"aaa\", \"range\" : [3] } }";
    parser.parse(query, "");
  }

  @Test(expected=ParseException.class)
  public void testNodeWithInvalidRange3() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"node\" : { \"query\" : \"aaa\", \"range\" : [2.34, 3.45] } }";
    parser.parse(query, "");
  }

  @Test(expected=ParseException.class)
  public void testNodeWithNoQuery() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"node\" : { \"level\" : 1 } }";
    parser.parse(query, "");
  }

  @Test
  public void testNodeWithQuery() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final NodeQuery node = build.newNode("aaa");
    assertParser(node);
  }

  @Test
  public void testNodeWithLevelAndRange() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final NodeQuery node = build.newNode("aaa")
                           .setLevel(1)
                           .setRange(1, 2);
    assertParser(node);
  }

  @Test(expected=ParseException.class)
  public void testTwigWithInvalidChild() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"twig\" : { \"child\" : " +
        "{ \"occur\" : \"MUST\", \"node\" : { \"query\" : \"aaa\" } } " +
        "} }";
    parser.parse(query, "");
  }

  @Test(expected=ParseException.class)
  public void testTwigWithChildWithMissingOccur() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"twig\" : { \"child\" : " +
        "[ { \"node\" : { \"query\" : \"aaa\" } } ] " +
        "} }";
    parser.parse(query, "");
  }

  @Test
  public void testEmptyTwig() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final TwigQuery twig = build.newTwig();
    assertParser(twig);
  }

  @Test
  public void testTwigWithRootOnly() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final TwigQuery twig = build.newTwig("aaa");
    assertParser(twig);
  }

  @Test
  public void testTwigWithRootLevelAndRange() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final TwigQuery twig = build.newTwig("aaa")
                                .setLevel(2)
                                .setRange(2, 5);
    assertParser(twig);
  }

  @Test
  public void testTwigWithOneChild() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final TwigQuery twig = build.newTwig()
                                .with(build.newNode("aaa"));
    assertParser(twig);
  }

  @Test
  public void testTwigWithMultipleChildren() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final TwigQuery twig = build.newTwig()
                                .with(build.newNode("aaa"))
                                .without(build.newNode("bbb"))
                                .optional(build.newTwig()
                                               .with(build.newNode("ccc")));
    assertParser(twig);
  }

  @Test
  public void testTwigWithOneDescendant() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final TwigQuery twig = build.newTwig()
                                .with(build.newNode("aaa"), 2);
    assertParser(twig);
  }

  @Test
  public void testTwigWithChildAndDescendant() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final TwigQuery twig = build.newTwig()
                                .with(build.newNode("aaa"))
                                .without(build.newNode("bbb"), 2)
                                .optional(build.newTwig()
                                               .with(build.newNode("ccc")), 4);
    assertParser(twig);
  }

  @Test(expected=ParseException.class)
  public void testBooleanWithInvalidClause() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"boolean\" : " +
        "{ \"occur\" : \"MUST\", \"node\" : { \"query\" : \"aaa\" } } " +
        "}";
    parser.parse(query, "");
  }

  @Test(expected=ParseException.class)
  public void testBooleanWithMissingPropertyInClause() throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final String query = "{ \"boolean\" : [ " +
        "{ \"node\" : { \"query\" : \"aaa\" } } " +
        "] }";
    parser.parse(query, "");
  }

  @Test
  public void testBooleanWithOneClause() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final BooleanQuery bool = build.newBoolean()
                                   .with(build.newNode("aaa"));
    assertParser(bool);
  }

  @Test
  public void testBooleanWithMultipleClauses() throws QueryNodeException {
    final QueryBuilder build = new QueryBuilder();
    final BooleanQuery bool = build.newBoolean()
                                   .with(build.newNode("aaa"))
                                   .without(build.newNode("bbb"))
                                   .optional(build.newTwig("ccc").with(build.newNode("ddd")));
    assertParser(bool);
  }

  private static void assertParser(final AbstractQuery query) throws QueryNodeException {
    final JsonQueryParser parser = new JsonQueryParser();
    final Query output = parser.parse(query.toString(), "");
    assertEquals(query.toQuery(true), output);
  }

}
TOP

Related Classes of org.sindice.siren.qparser.json.JsonQueryParserTest

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.