com.enonic.cms.core.content.index.queryexpression.QueryParserTest.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.core.content.index.queryexpression.QueryParserTest.java

Source

/*
 * Copyright 2000-2013 Enonic AS
 * http://www.enonic.com/license
 */
package com.enonic.cms.core.content.index.queryexpression;

import org.apache.commons.lang.StringUtils;
import org.junit.Test;

import com.enonic.cms.core.content.index.optimizer.LogicalOrOptimizer;

import static org.junit.Assert.*;

public class QueryParserTest {
    private QueryExpr parseQuery(String query) {
        return new QueryParser().parse(query);
    }

    private String parseQueryToString(String query) {
        return parseQuery(query).toString();
    }

    @Test
    public void testCharsInField() {
        QueryExpr test = parseQuery("@a.b.c/d.e.f/g-h-i/j_k_l/* = -2.1");
        assertEquals("@a.b.c/d.e.f/g-h-i/j_k_l/* = -2.1", test.toString());

        test = parseQuery("*/b/c/d/* = -2");
        assertEquals("*/b/c/d/* = -2", test.toString());

        test = parseQuery("* = -2");
        assertEquals("* = -2", test.toString());
    }

    @Test
    public void testCombinedLogicalOr() {
        QueryExpr test = parseQuery("a = 1 or b = 2 or c = 3");

        LogicalOrOptimizer logicalOrOptimizer = new LogicalOrOptimizer();
        Expression optExpr = logicalOrOptimizer.optimize(test.getExpr());

        assertEquals("or[a = 1, b = 2, c = 3]", optExpr.toString());

    }

    @Test
    public void testCombinedLogicalOrWithMetaFields() {
        QueryExpr test = parseQuery("status = 2 or publishfrom > 'mydate' or key = 3398");

        LogicalOrOptimizer logicalOrOptimizer = new LogicalOrOptimizer();
        Expression optExpr = logicalOrOptimizer.optimize(test.getExpr());

        assertEquals("or[status = 2, publishfrom > 'mydate', key = 3398]", optExpr.toString());

    }

    @Test
    public void testCombinedLogicalOrWithAndClause() {
        QueryExpr test = parseQuery("a = 1 and (b = 2 or c = 3)");

        LogicalOrOptimizer logicalOrOptimizer = new LogicalOrOptimizer();
        Expression optExpr = logicalOrOptimizer.optimize(test.getExpr());

        assertEquals("(a = 1 AND or[b = 2, c = 3])", optExpr.toString());

    }

    @Test
    public void testLikeOperator() {
        QueryExpr test = parseQuery("a like 'abc'");
        assertTrue(StringUtils.containsIgnoreCase(test.getExpr().toString(), "like"));
    }

    @Test
    public void testFulltextOperator() {
        QueryExpr test = parseQuery("a FT 'abc'");
        assertTrue(StringUtils.containsIgnoreCase(test.getExpr().toString(), "FT"));
    }

    @Test
    public void testAtAfterSlash() {
        QueryExpr test = parseQuery("data/topkey/@key = 1 or @key = 1");
    }

    @Test
    public void testFields() {
        assertEquals("a = 1", parseQueryToString("a = 1"));
        assertEquals("a/b = 1", parseQueryToString("a/b = 1"));
        assertEquals("a.b = 1", parseQueryToString("a.b = 1"));
    }

    @Test
    public void testNumberValue() {
        assertEquals("a = 4", parseQueryToString("a = 4"));
        assertEquals("a = 8", parseQueryToString("a = 8"));
    }

    @Test
    public void testStringValue() {
        assertEquals("a = ''", parseQueryToString("a = ''"));
        assertEquals("a = 'value'", parseQueryToString("a = 'value'"));
    }
}