/*
 * Copyright (c) 2006, 2021 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation
//
package org.eclipse.persistence.jpa.tests.jpql.tools;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import jpql.query.Address;
import jpql.query.Alias;
import jpql.query.CodeAssist;
import jpql.query.Customer;
import jpql.query.Employee;
import jpql.query.Product;
import org.eclipse.persistence.jpa.jpql.ExpressionTools;
import org.eclipse.persistence.jpa.jpql.utility.CollectionTools;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import static org.eclipse.persistence.jpa.jpql.parser.Expression.*;

/**
 * This unit-test tests the JPQL content assist at various position within a JPQL query, which can
 * be complete, incomplete or invalid.
 *
 * @version 2.5.1
 * @since 2.3
 * @author Pascal Filion
 */
@SuppressWarnings("nls")
public abstract class AbstractContentAssistTest extends ContentAssistTest {

    /**
     * Creates the list of possible identifiers representing the clauses that is between the given
     * range of clauses.
     *
     * @param afterIdentifier The lower part of the range, which indicates from where to start, this
     * JPQL identifier is not added to the list
     * @param beforeIdentifier The upper part of the range, which indicates when to stop, this JPQL
     * identifier is not added to the list
     * @param subquery Determines whether the range is within a subquery or from the top-level query,
     * which filters out some JPQL identifiers
     * @return The list of JPQL identifiers representing the clauses within the specified range
     */
    protected List<String> clauses(String afterIdentifier, String beforeIdentifier, boolean subquery) {

        List<String> proposals = new ArrayList<>();

        if (afterIdentifier == SELECT) {

            if (beforeIdentifier != FROM) {
                proposals.add(FROM);
            }

            if (beforeIdentifier != FROM &&
                beforeIdentifier != WHERE) {

                proposals.add(WHERE);
            }

            if (beforeIdentifier != FROM  &&
                beforeIdentifier != WHERE &&
                beforeIdentifier != GROUP_BY) {

                proposals.add(GROUP_BY);
            }

            if (beforeIdentifier != FROM     &&
                beforeIdentifier != WHERE    &&
                beforeIdentifier != GROUP_BY &&
                beforeIdentifier != HAVING) {

                proposals.add(HAVING);
            }

            if (!subquery) {
                if (beforeIdentifier != FROM     &&
                    beforeIdentifier != WHERE    &&
                    beforeIdentifier != GROUP_BY &&
                    beforeIdentifier != HAVING   &&
                    beforeIdentifier != ORDER_BY) {

                    proposals.add(ORDER_BY);
                }
            }
        }
        else if (afterIdentifier == FROM) {

            if (beforeIdentifier != WHERE) {
                proposals.add(WHERE);
            }

            if (beforeIdentifier != WHERE &&
                beforeIdentifier != GROUP_BY) {

                proposals.add(GROUP_BY);
            }

            if (beforeIdentifier != WHERE    &&
                beforeIdentifier != GROUP_BY &&
                beforeIdentifier != HAVING) {

                proposals.add(HAVING);
            }

            if (!subquery) {
                if (beforeIdentifier != WHERE    &&
                    beforeIdentifier != GROUP_BY &&
                    beforeIdentifier != HAVING   &&
                    beforeIdentifier != ORDER_BY) {

                    proposals.add(ORDER_BY);
                }
            }
        }
        else if (afterIdentifier == WHERE) {

            if (beforeIdentifier != GROUP_BY) {
                proposals.add(GROUP_BY);
            }

            if (beforeIdentifier != GROUP_BY &&
                beforeIdentifier != HAVING) {

                proposals.add(HAVING);
            }

            if (!subquery) {
                if (beforeIdentifier != GROUP_BY &&
                    beforeIdentifier != HAVING   &&
                    beforeIdentifier != ORDER_BY) {

                    proposals.add(ORDER_BY);
                }
            }
        }
        else if (afterIdentifier == GROUP_BY) {

            if (beforeIdentifier != HAVING) {
                proposals.add(HAVING);
            }

            if (!subquery) {
                if (beforeIdentifier != HAVING   &&
                    beforeIdentifier != ORDER_BY) {

                    proposals.add(ORDER_BY);
                }
            }
        }
        else if (afterIdentifier == HAVING) {
            if (!subquery) {
                if (beforeIdentifier != ORDER_BY) {
                    proposals.add(ORDER_BY);
                }
            }
        }

        return proposals;
    }

    /**
     * Creates the list of JPQL identifiers of the clauses owned by the <code><b>FROM</b></code> clause.
     *
     * @param afterIdentifier The lower part of the range
     * @return The list of the clauses within the <code><b>FROM</b></code> clause that is within the
     * specified range
     */
    protected List<String> fromClauseInternalClauses(String afterIdentifier) {

        if (afterIdentifier == FROM) {

            List<String> proposals = joinIdentifiers();

            if (isJPA2_1()) {
                proposals.add(ON);
            }

            return proposals;
        }

        return Collections.emptyList();
    }

    protected Iterable<String> functionProposals() {

        List<String> identifiers = CollectionTools.list(
            bnfAccessor.conditionalExpressionsFunctions().iterator()
        );

        Collections.sort(identifiers);
        return identifiers;
    }

    /**
     * Determines whether a <code><b>JOIN FETCH</b></code> expression can be identified with an
     * identification variable.
     *
     * @return <code>true</code> if it can be identified by an identification variable;
     * <code>false</code> otherwise
     */
    protected abstract boolean isJoinFetchIdentifiable();

    @Test
    public final void test_Avg_01() {
        String jpqlQuery = "SELECT ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, AVG);
    }

    @Test
    public final void test_Avg_02() {
        String jpqlQuery = "SELECT A";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, AVG);
    }

    @Test
    public final void test_Avg_03() {
        String jpqlQuery = "SELECT AV";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, AVG);
    }

    @Test
    public final void test_Avg_04() {
        String jpqlQuery = "SELECT AVG";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, AVG);
    }

    @Test
    public final void test_Avg_05() {

        String jpqlQuery = "SELECT AVG(";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_06() {

        String jpqlQuery = "SELECT AVG() From Employee e";
        int position = "SELECT AVG(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_07() {

        String jpqlQuery = "SELECT AVG(DISTINCT ) From Employee e";
        int position = "SELECT AVG(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_08() {
        String jpqlQuery = "SELECT AVG(D ) From Employee e";
        int position = "SELECT AVG(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Avg_09() {
        String jpqlQuery = "SELECT AVG(DI ) From Employee e";
        int position = "SELECT AVG(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Avg_10() {
        String jpqlQuery = "SELECT AVG(DIS ) From Employee e";
        int position = "SELECT AVG(DIS".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Avg_11() {
        String jpqlQuery = "SELECT AVG(DISTINCT e) From Employee e";
        int position = "SELECT AVG(".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Avg_12() {
        String jpqlQuery = "SELECT AVG(DISTINCT e) From Employee e";
        int position = "SELECT AVG(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Avg_13() {
        String jpqlQuery = "SELECT AVG(DISTINCT e) From Employee e";
        int position = "SELECT AVG(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Avg_14() {

        String jpqlQuery = "SELECT AVG(DISTINCT e) From Employee e";
        int position = "SELECT AVG(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_15() {

        String jpqlQuery = "SELECT AVG(DISTINCT e) From Employee e";
        int position = "SELECT AVG(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_16() {
        String jpqlQuery = "SELECT AVG(DISTINCT e) From Employee emp";
        int position = "SELECT AVG(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_17() {

        String jpqlQuery = "SELECT AVG() From Employee emp";
        int position = "SELECT AVG(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_18() {

        String jpqlQuery = "SELECT AVG(e) From Employee emp";
        int position = "SELECT AVG(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_19() {
        String jpqlQuery = "SELECT AVG(em) From Employee emp";
        int position = "SELECT AVG(em".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Avg_20() {
        String jpqlQuery = "SELECT AVG(emp) From Employee emp";
        int position = "SELECT AVG(emp".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Avg_21() {

        String jpqlQuery = "SELECT AVG(emp) From Employee emp";
        int position = "SELECT AVG(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_22() {
        String jpqlQuery = "SELECT AVG(emp) From Employee emp";
        int position = "SELECT AVG(em".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Avg_23() {

        String jpqlQuery = "SELECT AVG( From Employee emp";
        int position = "SELECT AVG(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Avg_24() {

        String jpqlQuery = "SELECT AVG(e From Employee emp";
        int position = "SELECT AVG(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Between_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, BETWEEN, NOT_BETWEEN);
    }

    @Test
    public final void test_Between_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber B";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BET";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETW";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEEN";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, BETWEEN, NOT_BETWEEN);
    }

    @Test
    public final void test_Between_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber NOT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NOT_BETWEEN);
    }

    @Test
    public final void test_Between_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber NOT ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NOT_BETWEEN);
    }

    @Test
    public final void test_Between_12() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber NOT B";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NOT_BETWEEN);
    }

    @Test
    public final void test_Between_13() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEEN 1 ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AND);
    }

    @Test
    public final void test_Between_14() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEEN 1 A";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AND);
    }

    @Test
    public final void test_Between_15() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEEN 1 AN";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AND);
    }

    @Test
    public final void test_Between_16() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEEN 1 AND";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AND);
    }

    @Test
    public final void test_Between_17() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEEN 1 AND ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, AND);
    }

    @Test
    public final void test_Between_18() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber B";
        int position = "SELECT e FROM Employee e WHERE e.roomNumber ".length();
        testHasTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_19() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BE";
        int position = "SELECT e FROM Employee e WHERE e.roomNumber ".length();
        testHasTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_20() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BET";
        int position = "SELECT e FROM Employee e WHERE e.roomNumber ".length();
        testHasTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_21() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETW";
        int position = "SELECT e FROM Employee e WHERE e.roomNumber ".length();
        testHasTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_22() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWE";
        int position = "SELECT e FROM Employee e WHERE e.roomNumber ".length();
        testHasTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_32() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEE";
        int position = "SELECT e FROM Employee e WHERE e.roomNumber ".length();
        testHasTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_Between_33() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEEN";
        int position = "SELECT e FROM Employee e WHERE e.roomNumber ".length();
        testHasTheseProposals(jpqlQuery, position, BETWEEN);
    }

    @Test
    public final void test_CollectionMember_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, MEMBER);
    }

    @Test
    public final void test_CollectionMember_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MEMBER, NOT_MEMBER);
    }

    @Test
    public final void test_CollectionMember_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e N";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NOT_MEMBER);
    }

    @Test
    public final void test_CollectionMember_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e NO";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NOT_MEMBER);
    }

    @Test
    public final void test_CollectionMember_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NOT_MEMBER);
    }

    @Test
    public final void test_CollectionMember_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NOT_MEMBER);
    }

    @Test
    public final void test_CollectionMember_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT M";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NOT_MEMBER, NOT_MEMBER_OF);
    }

    @Test
    public final void test_CollectionMember_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT ME";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NOT_MEMBER, NOT_MEMBER_OF);
    }

    @Test
    public final void test_CollectionMember_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT MEM";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NOT_MEMBER, NOT_MEMBER_OF);
    }

    @Test
    public final void test_CollectionMember_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e NOT MEMB";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NOT_MEMBER, NOT_MEMBER_OF);
    }

    @Test
    public final void test_CollectionMember_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e NOT MEMBE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NOT_MEMBER, NOT_MEMBER_OF);
    }

    @Test
    public final void test_CollectionMember_12() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT MEMBER";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, MEMBER, MEMBER_OF, NOT_MEMBER, NOT_MEMBER_OF);
    }

    @Test
    public final void test_CollectionMember_13() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT MEMBER ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, "e", OF);
    }

    @Test
    public final void test_CollectionMember_14() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT MEMBER O";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, OF);
    }

    @Test
    public final void test_CollectionMember_15() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT MEMBER OF";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, MEMBER, MEMBER_OF, NOT_MEMBER_OF, NOT_MEMBER);
    }

    @Test
    public final void test_CollectionMember_16() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name M";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MEMBER);
    }

    @Test
    public final void test_CollectionMember_17() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name ME";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MEMBER);
    }

    @Test
    public final void test_CollectionMember_18() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name MEM";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MEMBER);
    }

    @Test
    public final void test_CollectionMember_19() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name MEMB";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MEMBER);
    }

    @Test
    public final void test_CollectionMember_20() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name MEMBE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MEMBER);
    }

    @Test
    public final void test_CollectionMember_21() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name MEMBER";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MEMBER);
    }

    @Test
    public final void test_CollectionMember_22() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name MEMBER ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, "e", OF);
    }

    @Test
    public final void test_CollectionMember_23() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name MEMBER O";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, OF);
    }

    @Test
    public final void test_CollectionMember_24() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name MEMBER OF";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, MEMBER, MEMBER_OF, NOT_MEMBER, NOT_MEMBER_OF);
    }

    @Test
    public final void test_CollectionMember_25() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name MEMBER OF ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, "e");
    }

    @Test
    public final void test_CollectionMember_26() {
        String jpqlQuery = "SELECT e FROM Employee e JOIN e.employees emp WHERE e MEMBER OF ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, "e", "emp");
    }

    @Test
    public final void test_CollectionMember_27() {
        String jpqlQuery = "SELECT e FROM Employee e JOIN e.employees emp WHERE e MEMBER ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, "e", "emp", OF);
    }

    @Test
    public final void test_CollectionMember_28() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name MEMBER OF e.employees";
        int position = jpqlQuery.length() - "EMBER OF e.employees".length();
        testHasOnlyTheseProposals(jpqlQuery, position, MEMBER, MEMBER_OF, NOT_MEMBER, NOT_MEMBER_OF);
    }

    @Test
    public final void test_CollectionMember_29() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MEMBER, NOT_MEMBER);
    }

    @Test
    public final void test_CollectionMemberDeclaration_01() {
        String jpqlQuery = "SELECT e FROM Employee e, I";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IN);
    }

    @Test
    public final void test_CollectionMemberDeclaration_02() {
        String jpqlQuery = "SELECT e FROM ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IN);
    }

    @Test
    public final void test_CollectionMemberDeclaration_03() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.names) AS f";
        int position = jpqlQuery.length() - "e, IN(e.names) AS f".length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IN);
    }

    @Test
    public final void test_CollectionMemberDeclaration_04() {
        String jpqlQuery = "SELECT e FROM Employee e, ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IN);
    }

    @Test
    public final void test_CollectionMemberDeclaration_05() {
        String jpqlQuery = "SELECT e FROM Employee e, IN";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IN);
    }

    @Test
    public final void test_CollectionMemberDeclaration_06() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, AS);
        testDoesNotHaveTheseProposals(jpqlQuery, position, IN);
    }

    @Test
    public final void test_CollectionMemberDeclaration_07() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) A";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_CollectionMemberDeclaration_08() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_CollectionMemberDeclaration_09() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_CollectionMemberDeclaration_10() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS n";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_CollectionMemberDeclaration_11() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS n";
        int position = "SELECT e FROM Employee e, ".length();
        testHasTheseProposals(jpqlQuery, position, IN);
    }

    @Test
    public final void test_CollectionMemberDeclaration_12() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS n";
        int position = "SELECT e FROM Employee e, I".length();
        testHasOnlyTheseProposals(jpqlQuery, position, IN);
    }

    @Test
    public final void test_CollectionMemberDeclaration_13() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS n";
        int position = "SELECT e FROM Employee e, IN".length();
        testHasTheseProposals(jpqlQuery, position, IN);
    }

    @Test
    public final void test_CollectionMemberDeclaration_14() {

        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS n";
        int position = "SELECT e FROM Employee e, IN(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.collectionMemberDeclarationParameters());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_CollectionMemberDeclaration_16() {

        String jpqlQuery = "SELECT e FROM Employee e, IN(";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.collectionMemberDeclarationParameters());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_CollectionMemberDeclaration_17() {

        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS n";
        int position = "SELECT e FROM Employee e, IN(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.collectionMemberDeclarationParameters());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_CollectionMemberDeclaration_18() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS n";
        int position = "SELECT e FROM Employee e, IN(e.name) ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_CollectionMemberDeclaration_19() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS n";
        int position = "SELECT e FROM Employee e, IN(e.name) A".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_CollectionMemberDeclaration_20() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(e.name) AS n";
        int position = "SELECT e FROM Employee e, IN(e.name) AS ".length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_CollectionMemberDeclaration_23() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(K";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, KEY);
    }

    @Test
    public final void test_CollectionMemberDeclaration_24() {
        String jpqlQuery = "SELECT e FROM Employee e, IN(KEY(a)) AS a";
        int position = "SELECT e FROM Employee e, IN(K".length();
        testHasOnlyTheseProposals(jpqlQuery, position, KEY);
    }

    @Test
    public final void test_Comparison_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, bnfAccessor.comparators());
    }

    @Test
    public final void test_Comparison_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, bnfAccessor.comparators());
    }

    @Test
    public final void test_Comparison_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber <";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, bnfAccessor.comparators());
    }

    @Test
    public final void test_Comparison_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber >";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, bnfAccessor.comparators());
    }

    @Test
    public final void test_Comparison_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber =";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, bnfAccessor.comparators());
    }

    @Test
    public final void test_Comparison_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber <=";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, bnfAccessor.comparators());
    }

    @Test
    public final void test_Comparison_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber >=";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, bnfAccessor.comparators());
    }

    @Test
    public final void test_Comparison_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber <>";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, bnfAccessor.comparators());
    }

    @Test
    public final void test_Comparison_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber IS ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, bnfAccessor.comparators());
    }

    @Test
    public final void test_Comparison_10() {

        String jpqlQuery = "delete from Address as a where current_date ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, bnfAccessor.comparators());
        CollectionTools.addAll(proposals, bnfAccessor.arithmetics());
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsCompoundFunctions());

        // These are filtered out
        proposals.remove(IS_EMPTY);
        proposals.remove(IS_NOT_EMPTY);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    protected final void test_CompoundFunction(String identifier) {

        String jpqlQuery = "SELECT e FROM Employee e " + identifier + " e.roomNumber ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsAggregates());
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsCompoundFunctions());

        // These are filtered out
        proposals.remove(AND);
        proposals.remove(OR);
        proposals.remove(IS_EMPTY);
        proposals.remove(IS_NOT_EMPTY);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_CompoundFunction_01() {
        test_CompoundFunction(WHERE);
    }

    @Test
    public final void test_CompoundFunction_02() {
        test_CompoundFunction(HAVING);
    }

    @Test
    public final void test_CompoundFunction_03() {
        test_CompoundFunction("WHERE CASE WHEN");
    }

    @Test
    public final void test_Concat_34() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE CONCAT(e.name, AS e)";
        int position = "SELECT e FROM Employee e WHERE CONCAT(e.name, ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalConcatExpressionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Concat_35() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CONCAT(e.name, AS e)";
        int position = "SELECT e FROM Employee e WHERE CONCAT(e.name, A".length();
        Iterable<String> proposals = filter(bnfAccessor.internalConcatExpressionFunctions(), "A");
        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Concat_36() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CONCAT(e.name, AS e.name)";
        int position = "SELECT e FROM Employee e WHERE CONCAT(e.name, AS e.".length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_Concat_37() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CONCAT(e.name, S)";
        int position = "SELECT e FROM Employee e WHERE CONCAT(e.name, S".length();
        Iterable<String> proposals = filter(bnfAccessor.internalConcatExpressionFunctions(), "S");
        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Concat_38() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE CONCAT(e.name, ()";
        int position = "SELECT e FROM Employee e WHERE CONCAT(e.name, (".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalConcatExpressionFunctions());
        CollectionTools.addAll(proposals, bnfAccessor.internalConcatExpressionClauses());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Concat_39() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE CONCAT(e.name, (S)";
        int position = "SELECT e FROM Employee e WHERE CONCAT(e.name, (S".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalConcatExpressionFunctions(), "S"));
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalConcatExpressionClauses(), "S"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    protected final void test_ConditionalClause_01(String identifier) {
        test_ConditionalClause_01(identifier, ExpressionTools.EMPTY_STRING);
    }

    protected final void test_ConditionalClause_01(String identifier, String prepend) {
        String jpqlQuery = "SELECT e FROM Employee e " + prepend;
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, identifier);
    }

    protected final void test_ConditionalClause_02(String identifier) {
        test_ConditionalClause_02(identifier, ExpressionTools.EMPTY_STRING);
    }

    protected final void test_ConditionalClause_02(String identifier, String prepend) {
        String jpqlQuery = "SELECT e FROM Employee e "+ prepend + identifier + " COUNT(e) >= 5";
        int position = ("SELECT e FROM Employee e " + prepend).length();
        testHasTheseProposals(jpqlQuery, position, identifier);
    }

    protected final void test_ConditionalClause_03(String identifier) {
        test_ConditionalClause_03(identifier, ExpressionTools.EMPTY_STRING);
    }

    protected final void test_ConditionalClause_03(String identifier, String prepend) {

        String fragment = "SELECT e FROM Employee e " + prepend;

        for (int index = 0, count = identifier.length(); index <= count; index++) {

            String jpqlQuery = fragment + identifier.substring(0, index);

            for (int positionIndex = fragment.length(), count2 = jpqlQuery.length(); positionIndex <= count2; positionIndex++) {
                testHasTheseProposals(jpqlQuery, positionIndex, identifier);
            }
        }
    }

    protected final void test_ConditionalClause_04(String identifier) {
        test_ConditionalClause_04(identifier, ExpressionTools.EMPTY_STRING);
    }

    protected final void test_ConditionalClause_04(String identifier, String prepend) {

        String jpqlQuery = "SELECT e FROM Employee e " + prepend + identifier + " (e.name = 'Pascal') ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, clauses(identifier, null, false));

        testHasTheseProposals(jpqlQuery, position, proposals);
    }

    protected final void test_ConditionalClause_05(String identifier) {
        test_ConditionalClause_05(identifier, ExpressionTools.EMPTY_STRING);
    }

    protected final void test_ConditionalClause_05(String identifier, String prepend) {

        String jpqlQuery = "SELECT e FROM Employee e " + prepend + identifier + " e.roomNumber ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, clauses(identifier, null, false));

        testDoesNotHaveTheseProposals(jpqlQuery, position, proposals);
    }

    protected final void test_ConditionalClause_06(String identifier) {
        test_ConditionalClause_06(identifier, ExpressionTools.EMPTY_STRING);
    }

    protected final void test_ConditionalClause_06(String identifier, String prepend) {

        String jpqlQuery = "SELECT e FROM Employee e " + prepend + identifier + " AVG(e.age) ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, clauses(identifier, null, false));

        testDoesNotHaveTheseProposals(jpqlQuery, position, proposals);
    }

    protected final void test_ConditionalClause_07(String identifier) {
        test_ConditionalClause_07(identifier, ExpressionTools.EMPTY_STRING);
    }

    protected final void test_ConditionalClause_07(String identifier, String prepend) {

        String jpqlQuery = "SELECT e FROM Employee e " + prepend + identifier + " ?1 ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, clauses(identifier, null, false));

        testDoesNotHaveTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_ConditionalExpression_01() throws Exception {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, nonTransientFieldNames(Employee.class));
    }

    @Test
    public final void test_Constructor_01() {
        String jpqlQuery = "SELECT ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_02() {
        String jpqlQuery = "SELECT N";
        int position = "SELECT ".length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_03() {
        String jpqlQuery = "SELECT N";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_04() {
        String jpqlQuery = "SELECT e, NEW (";
        int position = "SELECT e, ".length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_05() {
        String jpqlQuery = "SELECT e, NEW (";
        int position = "SELECT e, N".length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_06() {

        String jpqlQuery = "SELECT NEW String() From Employee e";
        int position = "SELECT NEW String(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.constructorItemFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Constructor_07() {

        String jpqlQuery = "SELECT NEW String(e) From Employee e";
        int position = "SELECT NEW String(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, filter(bnfAccessor.constructorItemFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Constructor_08() {
        String jpqlQuery = "SELECT e, NEW java.lang.String(e.name)";
        int position = "SELECT e, N".length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_09() {
        String jpqlQuery = "SELECT e, NEW java.lang.String(e.name)";
        int position = "SELECT e, NE".length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_10() {
        String jpqlQuery = "SELECT e, NEW(java.lang.String)";
        int position = "SELECT e, NEW".length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_11() {
        String jpqlQuery = "SELECT new com.titan.domain.Name(c.firstName, c.lastName) FROM Customer c";
        int position = "SELECT new com.titan.domain.Name(c.".length();
        testHasTheseProposals(jpqlQuery, position, "firstName", "hasGoodCredit", "id", "lastName", "address", "home");
    }

    @Test
    public final void test_Constructor_12() {

        String jpqlQuery = "SELECT new com.titan.domain.Name(c.firstName, c.lastName) FROM Customer c";
        int position = "SELECT new com.titan.domain.Name(c.firstName, ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("c");
        CollectionTools.addAll(proposals, bnfAccessor.constructorItemFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Constructor_13() {

        String jpqlQuery = "SELECT new com.titan.domain.Name(c.firstName, c.lastName) FROM Customer c";
        int position = "SELECT new com.titan.domain.Name(c.firstName, c".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("c");
        CollectionTools.addAll(proposals, filter(bnfAccessor.constructorItemFunctions(), "c"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Constructor_15() {
        String jpqlQuery = "SELECT NE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_16() {
        String jpqlQuery = "SELECT e, NE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_17() {
        String jpqlQuery = "SELECT e, NEW";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_18() {
        String jpqlQuery = "SELECT NE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_19() {
        String jpqlQuery = "SELECT NEW";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_20() {
        String jpqlQuery = "SELECT e, NEW";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Constructor_21() {
        String jpqlQuery = "SELECT e, NEW java.lang.String(e.name)";
        int position = "SELECT e, ".length();
        testHasTheseProposals(jpqlQuery, position, NEW);
    }

    @Test
    public final void test_Count_01() {
        String jpqlQuery = "SELECT ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, COUNT);
    }

    @Test
    public final void test_Count_02() {
        String jpqlQuery = "SELECT C";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, COUNT);
    }

    @Test
    public final void test_Count_03() {
        String jpqlQuery = "SELECT CO";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, COUNT);
    }

    @Test
    public final void test_Count_04() {
        String jpqlQuery = "SELECT COU";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, COUNT);
    }

    @Test
    public final void test_Count_05() {
        String jpqlQuery = "SELECT COUN";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, COUNT);
    }

    @Test
    public final void test_Count_06() {
        String jpqlQuery = "SELECT COUNT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, COUNT);
    }

    @Test
    public final void test_Count_07() {

        String jpqlQuery = "SELECT COUNT(";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.countFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_08() {

        String jpqlQuery = "SELECT COUNT() From Employee e";
        int position = "SELECT COUNT(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.countFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_09() {

        String jpqlQuery = "SELECT COUNT(DISTINCT ) From Employee e";
        int position = "SELECT COUNT(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.countFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_10() {
        String jpqlQuery = "SELECT COUNT(D ) From Employee e";
        int position = "SELECT COUNT(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Count_11() {
        String jpqlQuery = "SELECT COUNT(DI ) From Employee e";
        int position = "SELECT COUNT(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Count_12() {
        String jpqlQuery = "SELECT COUNT(DIS ) From Employee e";
        int position = "SELECT COUNT(DIS".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Count_13() {
        String jpqlQuery = "SELECT COUNT(DISTINCT e) From Employee e";
        int position = "SELECT COUNT(".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Count_14() {
        String jpqlQuery = "SELECT COUNT(DISTINCT e) From Employee e";
        int position = "SELECT COUNT(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Count_15() {
        String jpqlQuery = "SELECT COUNT(DISTINCT e) From Employee e";
        int position = "SELECT COUNT(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Count_16() {

        String jpqlQuery = "SELECT COUNT(DISTINCT e) From Employee e";
        int position = "SELECT COUNT(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.countFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_17() {

        String jpqlQuery = "SELECT COUNT(DISTINCT e) From Employee e";
        int position = "SELECT COUNT(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, filter(bnfAccessor.countFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_18() {

        String jpqlQuery = "SELECT COUNT(DISTINCT e) From Employee emp";
        int position = "SELECT COUNT(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.countFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_19() {
        String jpqlQuery = "SELECT COUNT() From Employee emp";
        int position = "SELECT COUNT(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.countFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_20() {

        String jpqlQuery = "SELECT COUNT(e) From Employee emp";
        int position = "SELECT COUNT(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.countFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_21() {

        String jpqlQuery = "SELECT COUNT(em) From Employee emp";
        int position = "SELECT COUNT(em".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.countFunctions(), "em"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_22() {

        String jpqlQuery = "SELECT COUNT(emp) From Employee emp";
        int position = "SELECT COUNT(emp".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.countFunctions(), "emp"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_23() {

        String jpqlQuery = "SELECT COUNT(emp) From Employee emp";
        int position = "SELECT COUNT(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.countFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_24() {

        String jpqlQuery = "SELECT COUNT(emp) From Employee emp";
        int position = "SELECT COUNT(em".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.countFunctions(), "em"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_25() {

        String jpqlQuery = "SELECT COUNT( From Employee emp";
        int position = "SELECT COUNT(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.countFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Count_26() {

        String jpqlQuery = "SELECT COUNT(e From Employee emp";
        int position = "SELECT COUNT(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.countFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_DateTime_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hiredTime < ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE C";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CU";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CUR";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURR";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURREN";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_D";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_DATE);
    }

    @Test
    public final void test_DateTime_12() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_DA";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_DATE);
    }

    @Test
    public final void test_DateTime_13() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_DAT";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_DATE);
    }

    @Test
    public final void test_DateTime_14() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_DATE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_15() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_T";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_16() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_TI";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_17() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_TIM";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_18() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_TIME";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_19() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_TIMES";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_20() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_TIMEST";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_21() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_TIMESTA";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_22() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_TIMESTAM";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_DateTime_23() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE CURRENT_TIMESTAMP";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
    }

    @Test
    public final void test_Delete_01() {
        String jpqlQuery = "D";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_02() {
        String jpqlQuery = "DE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_03() {
        String jpqlQuery = "DEL";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_04() {
        String jpqlQuery = "DELE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_05() {
        String jpqlQuery = "DELET";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_06() {
        String jpqlQuery = "DELETE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_07() {
        String jpqlQuery = "DELETE ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_08() {
        String jpqlQuery = "DELETE F";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_09() {
        String jpqlQuery = "DELETE FR";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_10() {
        String jpqlQuery = "DELETE FRO";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_11() {
        String jpqlQuery = "DELETE FROM";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_12() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_13() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DE".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_14() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DEL".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_15() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DELE".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_16() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DELET".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_17() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DELETE".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_18() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DELETE ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_19() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DELETE F".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_20() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DELETE FR".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_21() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DELETE FRO".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_22() {
        String jpqlQuery = "DELETE FROM Employee";
        int position = "DELETE FROM".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_23() {
        String jpqlQuery = "DELETE FROM Employee e WHERE";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_24() {
        String jpqlQuery = "DELETE FROM WHERE";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, DELETE_FROM);
    }

    @Test
    public final void test_Delete_25() throws Exception {
        String jpqlQuery = "DELETE FROM ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, entityNames());
    }

    @Test
    public final void test_Delete_26() throws Exception {
        String jpqlQuery = "DELETE FROM P";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(entityNames(), "P"));
    }

    @Test
    public final void test_Delete_27() {
        String jpqlQuery = "DELETE FROM Employee WHERE n";
        int position = "DELETE FROM Employee ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Delete_28() {
        String jpqlQuery = "DELETE FROM Employee A WHERE";
        int position = jpqlQuery.length() - " WHERE".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Delete_29() {
        String jpqlQuery = "DELETE FROM Employee A ";
        int position = jpqlQuery.length() - 1;
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Delete_30() {
        String jpqlQuery = "DELETE FROM Employee AS e ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, WHERE);
    }

    @Test
    public final void test_Delete_31() {
        String jpqlQuery = "DELETE FROM Employee AS e W";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, WHERE);
    }

    @Test
    public final void test_Delete_32() {
        String jpqlQuery = "DELETE FROM Employee AS e WH";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, WHERE);
    }

    @Test
    public final void test_Delete_33() {
        String jpqlQuery = "DELETE FROM Employee AS e WHE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, WHERE);
    }

    @Test
    public final void test_Delete_34() {
        String jpqlQuery = "DELETE FROM Employee AS e WHER";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, WHERE);
    }

    @Test
    public final void test_Delete_35() {
        String jpqlQuery = "DELETE FROM Employee AS e WHERE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, WHERE);
    }

    @Test
    public final void test_EmptyCollectionComparison_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers I";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS N";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS NO";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_NULL, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS NOT";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_EMPTY, IS_NOT_NULL);
    }

    @Test
    public final void test_EmptyCollectionComparison_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS NOT ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_EMPTY, IS_NOT_NULL);
    }

    @Test
    public final void test_EmptyCollectionComparison_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS NOT E";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS NOT EM";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS NOT EMP";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_12() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS NOT EMPT";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_13() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS NOT EMPTY";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_14() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS E";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_15() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS EM";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_16() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS EMP";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_17() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS EMPT";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_18() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.phoneNumbers IS EMPTY";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_19() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_20() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_21() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name I";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_22() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_23() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS N";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_24() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NO";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_25() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_26() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_27() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT E";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_28() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT EM";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_29() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT EMP";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_30() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT EMPT";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_31() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT EMPTY";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_32() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS E";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_33() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS EM";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_34() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS EMP";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_35() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS EMPT";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_EMPTY);
    }

    @Test
    public final void test_EmptyCollectionComparison_36() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS EMPTY";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_EMPTY, IS_NOT_EMPTY);
    }

    @Test
    public final void test_From_01() {
        String jpqlQuery = "SELECT ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_02() {
        String jpqlQuery = "SELECT F";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_03() {
        String jpqlQuery = "SELECT AVG(e.roomNumber)";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_04() {
        String jpqlQuery = "SELECT AVG(e.roomNumber) ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_05() {
        String jpqlQuery = "SELECT AVG(e.roomNumber) F";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_06() {
        String jpqlQuery = "SELECT f ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_07() {
        String jpqlQuery = "SELECT a, ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_08() {
        String jpqlQuery = "SELECT AVG( ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_09() {
        String jpqlQuery = "SELECT AVG(a ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_10() {
        String jpqlQuery = "SELECT AVG(e.roomNumber ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_11() {
        String jpqlQuery = "SELECT F F";
        int position = "SELECT F".length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_12() {

        String jpqlQuery = "SELECT e FROM Address a," +
                           "              Employee emp JOIN emp.customers emp_c, " +
                           "              Address ea " +
                           "WHERE ALL(SELECT a e";

        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_From_13() {
        String jpqlQuery = "SELECT e F";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_14() {
        String jpqlQuery = "SELECT e F, E";
        int position = "SELECT e F".length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_From_15() {

        String jpqlQuery = "SELECT e FROM Address a," +
                           "              Employee emp JOIN emp.customers emp_c, " +
                           "              Address ea " +
                           "WHERE ALL(SELECT a w";

        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromAs_01() {
        String jpqlQuery = "SELECT o FROM Countries ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_FromAs_02() {
        String jpqlQuery = "SELECT o FROM Countries A";
        int position = "SELECT o FROM Countries ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_FromAs_03() {
        String jpqlQuery = "SELECT e FROM Employee AS";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_FromAs_04() {
        String jpqlQuery = "SELECT o FROM Countries j";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromAs_05() {
        String jpqlQuery = "SELECT e FROM Employee AS e";
        int position = "SELECT e FROM Employee ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_FromAs_06() {
        String jpqlQuery = "SELECT o FROM Countries o ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_FromAs_07() {
        String jpqlQuery = "SELECT e FROM Employee AS e";
        int position = "SELECT e FROM Employee A".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_FromAs_08() {
        String jpqlQuery = "SELECT o FROM Countries A o";
        int position = "SELECT o FROM Countries A".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_FromAs_09() {
        String jpqlQuery = "SELECT e FROM Employee AS e";
        int position = "SELECT e FROM Employee AS".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_FromAs_10() {
        String jpqlQuery = "SELECT o FROM Countries AS o";
        int position = "SELECT o FROM Countries AS ".length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromAs_11() {
        // To test GROUP BY is not added
        String jpqlQuery = "SELECT o FROM Countries g";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromAs_12() {
        // To test HAVING is not added
        String jpqlQuery = "SELECT o FROM Countries h";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromAs_13() {
        // To test ORDER BY is not added
        String jpqlQuery = "SELECT o FROM Countries o";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromAs_14() {
        // To test GROUP BY/ORDER BY are not added
        String jpqlQuery = "SELECT o FROM Countries b";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromAs_15() {
        // To test UNION is not added (specific to EclipseLink 2.4 or later)
        String jpqlQuery = "SELECT o FROM Countries u";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromAs_16() {
        // To test START WITH is not added (specific to EclipseLink 2.5 or later)
        String jpqlQuery = "SELECT o FROM Countries s";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromAs_17() {
        // To test AS OF is not added (specific to EclipseLink 2.5 or later)
        String jpqlQuery = "SELECT o FROM Countries AS o";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromClause_01() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e";
        int position = "SELECT e FROM ".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        // Not supported for the first "root" object
        proposals.remove(IN);
        proposals.remove(TABLE);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_02() throws Exception {

        String jpqlQuery = "SELECT i FROM Investment i";
        int position = "SELECT i FROM I".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(entityNames(), "I"));
        CollectionTools.addAll(proposals, filter(classNames(), "I"));
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalFromClauseIdentifiers(), "I"));

        // Not supported for the first "root" object
        proposals.remove(IN);
        proposals.remove(TABLE);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_03() throws Exception {

        String jpqlQuery = "SELECT t FROM Tax t";
        int position = "SELECT t FROM T".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(entityNames(), "T"));
        CollectionTools.addAll(proposals, filter(classNames(), "T"));
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalFromClauseIdentifiers(), "T"));

        // Not supported for the first "root" object
        proposals.remove(IN);
        proposals.remove(TABLE);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_04() throws Exception {

        String jpqlQuery = "SELECT AVG(e.roomNumber) FROM ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        // Not supported for the first "root" object
        proposals.remove(IN);
        proposals.remove(TABLE);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_05() throws Exception {

        String jpqlQuery = "SELECT e FROM ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        // Not supported for the first "root" object
        proposals.remove(IN);
        proposals.remove(TABLE);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_06() throws Exception {

        String jpqlQuery = "SELECT e FROM E";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(entityNames(), "E"));
        CollectionTools.addAll(proposals, filter(classNames(), "E"));
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalFromClauseIdentifiers(), "E"));

        // Not supported for the first "root" object
        proposals.remove(IN);
        proposals.remove(TABLE);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_07() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e, ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_08() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e, Address a";
        int position = "SELECT e FROM ".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        // Not supported for the first "root" object
        proposals.remove(IN);
        proposals.remove(TABLE);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_09() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        testDoesNotHaveTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_10() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e, Address a ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        testDoesNotHaveTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_11() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e ";
        int position = "SELECT e FROM ".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        // Not supported for the first "root" object
        proposals.remove(IN);
        proposals.remove(TABLE);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_12() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e ";
        int position = "SELECT e FROM E".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(entityNames(), "E"));
        CollectionTools.addAll(proposals, filter(classNames(), "E"));
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalFromClauseIdentifiers(), "E"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_13() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e ";
        int position = "SELECT e FROM Employee".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(entityNames(), "Employee"));
        CollectionTools.addAll(proposals, filter(classNames(), "Employee"));
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalFromClauseIdentifiers(), "Employee"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_14() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e, Address a ";
        int position = "SELECT e FROM Employee e, ".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_15() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e, Address a ";
        int position = "SELECT e FROM Employee e, A".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(entityNames(), "A"));
        CollectionTools.addAll(proposals, filter(classNames(), "A"));
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalFromClauseIdentifiers(), "A"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_16() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e, I";
        int position = "SELECT e FROM Employee e, I".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(entityNames(), "I"));
        CollectionTools.addAll(proposals, filter(classNames(), "I"));
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalFromClauseIdentifiers(), "I"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_17() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e, A";
        int position = "SELECT e FROM Employee e, A".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(entityNames(), "A"));
        CollectionTools.addAll(proposals, filter(classNames(), "A"));
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalFromClauseIdentifiers(), "A"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_18() {
        String jpqlQuery = "SELECT e FROM Employee e";
        int position = "SELECT e FROM Employee ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_FromClause_19() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e, , Address a";
        int position = "SELECT e FROM Employee e,".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_20() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e, , Address a";
        int position = "SELECT e FROM Employee e, ".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_21() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e,, Address a";
        int position = "SELECT e FROM Employee e,".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, entityNames());
        CollectionTools.addAll(proposals, classNames());
        CollectionTools.addAll(proposals, bnfAccessor.internalFromClauseIdentifiers());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_22() {

        String jpqlQuery = "SELECT e FROM Employee e J";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(fromClauseInternalClauses(FROM), "J"));
        CollectionTools.addAll(proposals, filter(clauses(FROM, null, false), "J"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_23() {

        String jpqlQuery = "SELECT e FROM Employee e E";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(fromClauseInternalClauses(FROM), "e"));
        CollectionTools.addAll(proposals, filter(clauses(FROM, null, false), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_FromClause_24() {
        String jpqlQuery = "SELECT e FROM Employee e Order b, Address e";
        int position = "SELECT e FROM Employee e Order b".length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_FromClause_25() {
        String jpqlQuery = "SELECT e FROM Employee e Order b WHERE e.name = 'JPQL'";
        int position = "SELECT e FROM Employee e Order b".length();
        testHasNoProposals(jpqlQuery, position);
    }

    protected final void test_Function(String fragment,
                                       String ending,
                                       boolean subqueryAllowed) throws Exception {

        test_Function(fragment, ending, subqueryAllowed, new TweakFunctionIdentifiers());
    }

    protected final void test_Function(String fragment,
                                       String ending,
                                       boolean subqueryAllowed,
                                       TweakFunctionIdentifiers tweaker) throws Exception {

        // Test all functions (example: MAX)
        for (String identifier : functionProposals()) {

            // Test by cutting the identifier from all the characters making the identifier up to cutting none
            for (int index = 0; index <= identifier.length(); index++) {

                String identifierFragment = identifier.substring(0, index);
                String jpqlQuery = fragment + identifierFragment + ending;

                // Now move the cursor position from the beginning of the fragment identifier to the end of it
                for (int positionIndex = 0; positionIndex <= index; positionIndex++) {

                    int position = fragment.length() + positionIndex;
                    String filter = identifier.substring(0, positionIndex);

                    List<String> proposals = new ArrayList<>();
                    CollectionTools.addAll(proposals, filter(functionProposals(), filter));
                    CollectionTools.addAll(proposals, filter(new String[] { "e" }, filter));

                    if (subqueryAllowed) {
                        CollectionTools.addAll(proposals, filter(new String[] { SELECT }, filter));
                    }

                    tweaker.tweak(proposals, identifier, identifierFragment, positionIndex);

                    // Now to the test
                    try {
                        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
                    }
                    catch (AssertionError e) {
                        StringBuilder sb = new StringBuilder();
                        sb.append(e.getMessage());
                        sb.append(" \"");
                        sb.append(jpqlQuery.substring(0, position));
                        sb.append("|");
                        sb.append(jpqlQuery.substring(position, jpqlQuery.length()));
                        sb.append("\" [");
                        sb.append(position);
                        sb.append("]");
                        Assert.fail(sb.toString());
                    }
                    finally {
                        tearDown();
                    }
                }
            }
        }
    }

    @Test
    public final void test_Function_01() throws Exception {
        String fragment = "select e from Employee e where ";
        test_Function(fragment, ExpressionTools.EMPTY_STRING, false);
    }

    @Test
    public final void test_Function_02() throws Exception {
        String fragment = "select e from Employee e where ";
        test_Function(fragment, "(", false);
    }

    @Test
    public final void test_Function_03() throws Exception {
        String fragment = "select e from Employee e where (";
        test_Function(fragment, ExpressionTools.EMPTY_STRING, true);
    }

    @Test
    public final void test_Function_04() throws Exception {
        String fragment = "select e from Employee e where (";
        test_Function(fragment, "(", true);
    }

    @Test
    public final void test_Function_05() throws Exception {
        String fragment = "select e from Employee e where (";
        test_Function(fragment, ")", true);
    }

    @Test
    public final void test_Function_06() throws Exception {
        String fragment = "select e from Employee e where ";
        test_Function(fragment, " + ABS(e.roomNumber)", false);
    }

    @Test
    public final void test_GroupBy_01() {
        String jpqlQuery = "SELECT e FROM Employee e ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_02() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP BY e.name";
        int position = "SELECT e FROM Employee e ".length();
        testHasTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_03() {
        String jpqlQuery = "SELECT e FROM Employee e G";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_04() {
        String jpqlQuery = "SELECT e FROM Employee e GR";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_05() {
        String jpqlQuery = "SELECT e FROM Employee e GRO";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_06() {
        String jpqlQuery = "SELECT e FROM Employee e GROU";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_07() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_08() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_09() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP B";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_10() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP BY";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (e.name = 'Pascal') ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_12() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (e.name = 'Pascal') G";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_13() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_14() {
        String jpqlQuery = "SELECT e FROM Employee e, GROUP";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_GroupBy_15() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP, Address a";
        int position = "SELECT e FROM Employee e GROUP".length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_Having_01() {
        test_ConditionalClause_01(HAVING);
    }

    @Test
    public final void test_Having_02() {
        test_ConditionalClause_02(HAVING);
    }

    @Test
    public final void test_Having_03() {
        test_ConditionalClause_03(HAVING);
    }

    @Test
    public final void test_Having_04() {
        test_ConditionalClause_04(HAVING);
    }

    @Test
    public final void test_Having_05() {
        test_ConditionalClause_05(HAVING);
    }

    @Test
    public final void test_Having_06() {
        test_ConditionalClause_06(HAVING);
    }
    @Test
    public final void test_Having_07() {
        test_ConditionalClause_07(HAVING);
    }

    @Test
    public final void test_Having_08() {

        String fragment = "SELECT e FROM Employee e WHERE (e.name = 'Pascal') ";

        for (int index = 0, count = HAVING.length(); index <= count; index++) {

            String jpqlQuery = fragment + HAVING.substring(0, index);

            for (int positionIndex = fragment.length(), count2 = jpqlQuery.length(); positionIndex <= count2; positionIndex++) {
                testHasTheseProposals(jpqlQuery, positionIndex, HAVING);
            }
        }
    }

    @Test
    public final void test_IncompleteCollectionExpressionVisitor_01() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP B";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_IncompleteCollectionExpressionVisitor_02() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER B";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_IncompleteCollectionExpressionVisitor_03() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER B HAVING e.name = 'JPQL'";
        int position = "SELECT e FROM Employee e ORDER B".length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_IncompleteCollectionExpressionVisitor_04() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP B HAVING e.name = 'JPQL'";
        int position = "SELECT e FROM Employee e GROUP B".length();
        testHasOnlyTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_IncompleteCollectionExpressionVisitor_05() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP B HAVING e.name = 'JPQL'";
        int position = "SELECT e FROM Employee e GROUP B".length();
        testHasOnlyTheseProposals(jpqlQuery, position, GROUP_BY);
    }

    @Test
    public final void test_IncompleteCollectionExpressionVisitor_06() {
        String jpqlQuery = "SELECT e FROM Employee e HAVING e.name = 'JPQL' ORDER B";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_IncompleteCollectionExpressionVisitor_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ALL(SELECT a FROM Address a HAVING e.name = 'JPQL' ORDER B";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_IncompleteCollectionExpressionVisitor_08() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP B ORT b a";
        int position = "SELECT e FROM Employee e GROUP B".length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_Invalid_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS e.name";
        int position = "SELECT e FROM Employee e WHERE e.name IS e.".length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_Invalid_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS CONCAT(";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_Is_01() {
        String jpqlQuery = "select e from Employee e where e.managerEmployee is not ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_NULL);
    }

    @Test
    public final void test_Is_02() {
        String jpqlQuery = "select e from Employee e where e.department is ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_Is_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS e.name";
        int position = "SELECT e FROM Employee e WHERE e.name IS ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_Is_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS WHERE";
        int position = "SELECT e FROM Employee e WHERE e.name IS ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_Is_05() {
        String jpqlQuery = "select e from Employee e where (SELECT a FROM Address a) is ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_Join_01() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = "SELECT pub FROM Publisher pub ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_02() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = "SELECT pub FROM Publisher pub L".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_03() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = "SELECT pub FROM Publisher pub LE".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_04() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = "SELECT pub FROM Publisher pub LEF".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_05() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_06() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_07() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT J".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_08() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT JO".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_09() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT JOI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_10() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT JOIN";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_11() {
        String jpqlQuery = "SELECT pub FROM Publisher pub JOIN";
        int position = "SELECT pub FROM Publisher pub ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_12() {
        String jpqlQuery = "SELECT pub FROM Publisher pub JOIN";
        int position = "SELECT pub FROM Publisher pub J".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_13() {
        String jpqlQuery = "SELECT pub FROM Publisher pub JOIN";
        int position = "SELECT pub FROM Publisher pub JO".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_14() {
        String jpqlQuery = "SELECT pub FROM Publisher pub JOIN";
        int position = "SELECT pub FROM Publisher pub JOI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_15() {
        String jpqlQuery = "SELECT pub FROM Publisher pub JOIN";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_16() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_17() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub L".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_18() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LE".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_19() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEF".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_20() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_21() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_22() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT O".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_23() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT OU".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_24() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT OUT".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_25() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT OUTE".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_26() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT OUTER".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_27() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT OUTER ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_28() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT OUTER J".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_29() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT OUTER JO".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_30() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT OUTER JOI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_31() {
        String jpqlQuery = "SELECT pub FROM Publisher pub LEFT OUTER JOIN";
        int position = "SELECT pub FROM Publisher pub LEFT OUTER JOIN".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_32() {
        String jpqlQuery = "SELECT pub FROM Publisher pub JOIN pub.magazines AS mag";
        int position = "SELECT pub FROM Publisher pub JOIN pub.magazines ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Join_33() {
        String jpqlQuery = "SELECT pub FROM Publisher pub JOIN pub.magazines AS mag";
        int position = "SELECT pub FROM Publisher pub JOIN pub.magazines A".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Join_34() {
        String jpqlQuery = "SELECT pub FROM Publisher pub JOIN pub.magazines AS mag";
        int position = "SELECT pub FROM Publisher pub JOIN pub.magazines AS".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Join_35() {
        String jpqlQuery = "SELECT e FROM Employee e INNER JOIN e.magazines mags";
        int position = "SELECT e FROM Employee e ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_36() {

        String jpqlQuery = "SELECT e FROM Employee e INNER JOIN e.magazines mags ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, fromClauseInternalClauses(FROM));
        CollectionTools.addAll(proposals, clauses(FROM, null, false));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Join_37() {

        String jpqlQuery = "SELECT e FROM Employee e INNER JOIN e.mags mags";
        int position = "SELECT e FROM Employee e INNER".length();

        if (isJoinFetchIdentifiable()) {
            testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
        }
        else {
            testHasOnlyTheseProposals(jpqlQuery, position, joinOnlyIdentifiers());
        }
    }

    @Test
    public final void test_Join_38() {
        String jpqlQuery = "SELECT o from Countries o JOIN o.locationsList e LEFT ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(joinIdentifiers(), "LEFT "));
    }

    @Test
    public final void test_Join_39() {
        String jpqlQuery = "SELECT o from Countries o JOIN o.locationsList e LEFT OUTER JOIN FETCH  ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, "o", "e");
    }

    @Test
    public final void test_Join_40() {
        String jpqlQuery = "select o.city from Address o ,";
        int position = "select o.city from Address o ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, joinIdentifiers());
    }

    @Test
    public final void test_Join_41() {
        String jpqlQuery = "SELECT o from Countries o JOIN o.locationsList ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Join_42() {
        String jpqlQuery = "SELECT o from Countries o JOIN o.locationsList A";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Join_43() {
        String jpqlQuery = "SELECT o from Countries o JOIN o.locationsList J";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Join_44() {
        String jpqlQuery = "SELECT o from Countries o JOIN o.locationsList J LEFT JOIN ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, "o", "J");
    }

    @Test
    public final void test_Join_45() {
        String jpqlQuery = "SELECT o from Countries o JOIN o.locationsList J LEFT JOIN L";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, "o");
    }

    @Test
    public final void test_Keyword_01() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = TRUE";
        int position = "UPDATE Employee e SET e.isEnrolled = ".length();
        testHasTheseProposals(jpqlQuery, position, TRUE);
    }

    @Test
    public final void test_Keyword_02() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = TRUE";
        int position = "UPDATE Employee e SET e.isEnrolled = T".length();
        testHasTheseProposals(jpqlQuery, position, TRUE);
    }

    @Test
    public final void test_Keyword_03() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = TRUE";
        int position = "UPDATE Employee e SET e.isEnrolled = TR".length();
        testHasTheseProposals(jpqlQuery, position, TRUE);
    }

    @Test
    public final void test_Keyword_04() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = TRUE";
        int position = "UPDATE Employee e SET e.isEnrolled = TRU".length();
        testHasTheseProposals(jpqlQuery, position, TRUE);
    }

    @Test
    public final void test_Keyword_05() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = TRUE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, TRUE, FALSE, NULL);
    }

    @Test
    public final void test_Keyword_06() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = FALSE";
        int position = "UPDATE Employee e SET e.isEnrolled = ".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_07() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = FALSE";
        int position = "UPDATE Employee e SET e.isEnrolled = F".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_08() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = FALSE";
        int position = "UPDATE Employee e SET e.isEnrolled = FA".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_09() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = FALSE";
        int position = "UPDATE Employee e SET e.isEnrolled = FAL".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_10() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = FALSE";
        int position = "UPDATE Employee e SET e.isEnrolled = FALS".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_11() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = FALSE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, TRUE, FALSE, NULL);
    }

    @Test
    public final void test_Keyword_12() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = NULL";
        int position = "UPDATE Employee e SET e.isEnrolled = ".length();
        testHasTheseProposals(jpqlQuery, position, NULL);
    }

    @Test
    public final void test_Keyword_13() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = NULL";
        int position = "UPDATE Employee e SET e.isEnrolled = N".length();
        testHasTheseProposals(jpqlQuery, position, NULL);
    }

    @Test
    public final void test_Keyword_14() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = NULL";
        int position = "UPDATE Employee e SET e.isEnrolled = NU".length();
        testHasTheseProposals(jpqlQuery, position, NULL);
    }

    @Test
    public final void test_Keyword_15() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = NULL";
        int position = "UPDATE Employee e SET e.isEnrolled = NUL".length();
        testHasTheseProposals(jpqlQuery, position, NULL);
    }

    @Test
    public final void test_Keyword_16() {
        String jpqlQuery = "UPDATE Employee e SET e.isEnrolled = NULL";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NULL, TRUE, FALSE, NULLIF);
    }

    @Test
    public final void test_Keyword_17() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = TRUE";
        int position = "SELECT e FROM Employee e WHERE e.hired = ".length();
        testHasTheseProposals(jpqlQuery, position, TRUE);
    }

    @Test
    public final void test_Keyword_18() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = TRUE";
        int position = "SELECT e FROM Employee e WHERE e.hired = T".length();
        testHasTheseProposals(jpqlQuery, position, TRUE);
    }

    @Test
    public final void test_Keyword_19() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = TRUE";
        int position = "SELECT e FROM Employee e WHERE e.hired = TR".length();
        testHasTheseProposals(jpqlQuery, position, TRUE);
    }

    @Test
    public final void test_Keyword_20() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = TRUE";
        int position = "SELECT e FROM Employee e WHERE e.hired = TRU".length();
        testHasTheseProposals(jpqlQuery, position, TRUE);
    }

    @Test
    public final void test_Keyword_21() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = TRUE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, TRUE, FALSE, NULL);
    }

    @Test
    public final void test_Keyword_22() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = FALSE";
        int position = "SELECT e FROM Employee e WHERE e.hired = ".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_23() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = FALSE";
        int position = "SELECT e FROM Employee e WHERE e.hired = F".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_24() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = FALSE";
        int position = "SELECT e FROM Employee e WHERE e.hired = FA".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_25() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = FALSE";
        int position = "SELECT e FROM Employee e WHERE e.hired = FAL".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_26() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = FALSE";
        int position = "SELECT e FROM Employee e WHERE e.hired = FALS".length();
        testHasTheseProposals(jpqlQuery, position, FALSE);
    }

    @Test
    public final void test_Keyword_27() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = FALSE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, TRUE, FALSE, NULL);
    }

    @Test
    public final void test_Keyword_28() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = NULL";
        int position = "SELECT e FROM Employee e WHERE e.hired = ".length();
        testHasTheseProposals(jpqlQuery, position, NULL);
    }

    @Test
    public final void test_Keyword_29() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = NULL";
        int position = "SELECT e FROM Employee e WHERE e.hired = N".length();
        testHasTheseProposals(jpqlQuery, position, NULL);
    }

    @Test
    public final void test_Keyword_30() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = NULL";
        int position = "SELECT e FROM Employee e WHERE e.hired = NU".length();
        testHasTheseProposals(jpqlQuery, position, NULL);
    }

    @Test
    public final void test_Keyword_31() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = NULL";
        int position = "SELECT e FROM Employee e WHERE e.hired = NUL".length();
        testHasTheseProposals(jpqlQuery, position, NULL);
    }

    @Test
    public final void test_Keyword_32() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = NULL";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, NULL, TRUE, FALSE, NULLIF);
    }

    @Test
    public final void test_Keyword_33() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NULL, TRUE, FALSE);
    }

    @Test
    public final void test_Keyword_34() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired =";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NULL, TRUE, FALSE);
    }

    @Test
    public final void test_Keyword_35() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NULL, TRUE, FALSE);
    }

    @Test
    public final void test_Keyword_36() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE e.hired = NULL ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, bnfAccessor.logicalIdentifiers());
        CollectionTools.addAll(proposals, clauses(WHERE, null, false));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Like_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, LIKE, NOT_LIKE);
    }

    @Test
    public final void test_Like_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LIKE, NOT_LIKE);
    }

    @Test
    public final void test_Like_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name L";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, LIKE);
    }

    @Test
    public final void test_Like_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name LI";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, LIKE);
    }

    @Test
    public final void test_Like_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name LIKE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, LIKE, NOT_LIKE);
    }

    @Test
    public final void test_Like_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name N";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NO";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT LIKE";
        int position = "SELECT e FROM Employee e WHERE e.name ".length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT LIKE";
        int position = "SELECT e FROM Employee e WHERE e.name N".length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT LIKE";
        int position = "SELECT e FROM Employee e WHERE e.name NO".length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_12() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT LIKE";
        int position = "SELECT e FROM Employee e WHERE e.name NOT ".length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_13() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT LIKE";
        int position = "SELECT e FROM Employee e WHERE e.name NOT L".length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_14() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT LIKE";
        int position = "SELECT e FROM Employee e WHERE e.name NOT LI".length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_15() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT LIKE";
        int position = "SELECT e FROM Employee e WHERE e.name NOT LIK".length();
        testHasTheseProposals(jpqlQuery, position, NOT_LIKE);
    }

    @Test
    public final void test_Like_16() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name NOT LIKE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, LIKE, NOT_LIKE);
    }

    @Test
    public final void test_Locate_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE L";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE LO";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE LOC";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE LOCA";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE LOCAT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE LOCATE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE LOCATE(";
        int position = jpqlQuery.length() - 1;
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (L";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (LO";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_12() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (LOC";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_13() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (LOCA";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_14() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (LOCAT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_15() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (LOCATE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_16() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (LOCATE)";
        int position = jpqlQuery.length() - 1;
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Locate_17() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ()";
        int position = jpqlQuery.length() - 1;
        testHasTheseProposals(jpqlQuery, position, LOCATE);
    }

    @Test
    public final void test_Logical_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.roomNumber BETWEEN 1 AND 3 ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, AND, OR);
    }

    @Test
    public final void test_Max_01() {
        String jpqlQuery = "SELECT ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MAX);
    }

    @Test
    public final void test_Max_02() {
        String jpqlQuery = "SELECT M";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MAX);
    }

    @Test
    public final void test_Max_03() {
        String jpqlQuery = "SELECT MA";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MAX);
    }

    @Test
    public final void test_Max_04() {
        String jpqlQuery = "SELECT MAX";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MAX);
    }

    @Test
    public final void test_Max_05() {

        String jpqlQuery = "SELECT MAX(";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_06() {

        String jpqlQuery = "SELECT MAX() From Employee e";
        int position = "SELECT MAX(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_07() {

        String jpqlQuery = "SELECT MAX(DISTINCT ) From Employee e";
        int position = "SELECT MAX(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_08() {
        String jpqlQuery = "SELECT MAX(D ) From Employee e";
        int position = "SELECT MAX(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Max_09() {
        String jpqlQuery = "SELECT MAX(DI ) From Employee e";
        int position = "SELECT MAX(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Max_10() {
        String jpqlQuery = "SELECT MAX(DIS ) From Employee e";
        int position = "SELECT MAX(DIS".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Max_11() {
        String jpqlQuery = "SELECT MAX(DISTINCT e) From Employee e";
        int position = "SELECT MAX(".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Max_12() {
        String jpqlQuery = "SELECT MAX(DISTINCT e) From Employee e";
        int position = "SELECT MAX(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Max_13() {
        String jpqlQuery = "SELECT MAX(DISTINCT e) From Employee e";
        int position = "SELECT MAX(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Max_14() {

        String jpqlQuery = "SELECT MAX(DISTINCT e) From Employee e";
        int position = "SELECT MAX(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_15() {

        String jpqlQuery = "SELECT MAX(DISTINCT e) From Employee e";
        int position = "SELECT MAX(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_16() {

        String jpqlQuery = "SELECT MAX(DISTINCT e) From Employee emp";
        int position = "SELECT MAX(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_17() {

        String jpqlQuery = "SELECT MAX() From Employee emp";
        int position = "SELECT MAX(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_18() {

        String jpqlQuery = "SELECT MAX(e) From Employee emp";
        int position = "SELECT MAX(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_19() {
        String jpqlQuery = "SELECT MAX(em) From Employee emp";
        int position = "SELECT MAX(em".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Max_20() {
        String jpqlQuery = "SELECT MAX(emp) From Employee emp";
        int position = "SELECT MAX(emp".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Max_21() {

        String jpqlQuery = "SELECT MAX(emp) From Employee emp";
        int position = "SELECT MAX(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_22() {
        String jpqlQuery = "SELECT MAX(emp) From Employee emp";
        int position = "SELECT MAX(em".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Max_23() {

        String jpqlQuery = "SELECT MAX( From Employee emp";
        int position = "SELECT MAX(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Max_24() {

        String jpqlQuery = "SELECT MAX(e From Employee emp";
        int position = "SELECT MAX(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_01() {
        String jpqlQuery = "SELECT ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MIN);
    }

    @Test
    public final void test_Min_02() {
        String jpqlQuery = "SELECT M";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MIN);
    }

    @Test
    public final void test_Min_03() {
        String jpqlQuery = "SELECT MI";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MIN);
    }

    @Test
    public final void test_Min_04() {
        String jpqlQuery = "SELECT MIN";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, MIN);
    }

    @Test
    public final void test_Min_05() {

        String jpqlQuery = "SELECT MIN(";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_06() {

        String jpqlQuery = "SELECT MIN() From Employee e";
        int position = "SELECT MIN(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_07() {

        String jpqlQuery = "SELECT MIN(DISTINCT ) From Employee e";
        int position = "SELECT MIN(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_08() {
        String jpqlQuery = "SELECT MIN(D ) From Employee e";
        int position = "SELECT MIN(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Min_09() {
        String jpqlQuery = "SELECT MIN(DI ) From Employee e";
        int position = "SELECT MIN(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Min_10() {
        String jpqlQuery = "SELECT MIN(DIS ) From Employee e";
        int position = "SELECT MIN(DIS".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Min_11() {
        String jpqlQuery = "SELECT MIN(DISTINCT e) From Employee e";
        int position = "SELECT MIN(".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Min_12() {
        String jpqlQuery = "SELECT MIN(DISTINCT e) From Employee e";
        int position = "SELECT MIN(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Min_13() {
        String jpqlQuery = "SELECT MIN(DISTINCT e) From Employee e";
        int position = "SELECT MIN(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Min_14() {

        String jpqlQuery = "SELECT MIN(DISTINCT e) From Employee e";
        int position = "SELECT MIN(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_15() {

        String jpqlQuery = "SELECT MIN(DISTINCT e) From Employee e";
        int position = "SELECT MIN(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_16() {

        String jpqlQuery = "SELECT MIN(DISTINCT e) From Employee emp";
        int position = "SELECT MIN(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_17() {

        String jpqlQuery = "SELECT MIN() From Employee emp";
        int position = "SELECT MIN(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_18() {

        String jpqlQuery = "SELECT MIN(e) From Employee emp";
        int position = "SELECT MIN(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_19() {
        String jpqlQuery = "SELECT MIN(em) From Employee emp";
        int position = "SELECT MIN(em".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Min_20() {
        String jpqlQuery = "SELECT MIN(emp) From Employee emp";
        int position = "SELECT MIN(emp".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Min_21() {

        String jpqlQuery = "SELECT MIN(emp) From Employee emp";
        int position = "SELECT MIN(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_22() {
        String jpqlQuery = "SELECT MIN(emp) From Employee emp";
        int position = "SELECT MIN(em".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Min_23() {

        String jpqlQuery = "SELECT MIN( From Employee emp";
        int position = "SELECT MIN(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Min_24() {

        String jpqlQuery = "SELECT MIN(e From Employee emp";
        int position = "SELECT MIN(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_NullComparison_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name I";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS N";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NO";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT N";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT NU";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT NUL";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NOT_NULL);
    }

    @Test
    public final void test_NullComparison_12() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name IS NOT NULL";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, IS_NULL, IS_NOT_NULL);
    }

    @Test
    public final void test_Object_01() {
        String jpqlQuery = "SELECT O FROM Employee e";
        int position = "SELECT O".length() - 1;
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_02() {
        String jpqlQuery = "SELECT OB FROM Employee e";
        int position = "SELECT O".length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_03() {
        String jpqlQuery = "SELECT OBJ FROM Employee e";
        int position = "SELECT O".length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_04() {
        String jpqlQuery = "SELECT OBJE FROM Employee e";
        int position = "SELECT O".length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_05() {
        String jpqlQuery = "SELECT OBJEC FROM Employee e";
        int position = "SELECT O".length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_12() {
        String jpqlQuery = "SELECT OBJECT";
        testHasTheseProposals(jpqlQuery, jpqlQuery.length(), OBJECT);
    }

    @Test
    public final void test_Object_13() {
        String jpqlQuery = "SELECT ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_14() {
        String jpqlQuery = "SELECT O";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_15() {
        String jpqlQuery = "SELECT OB";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_16() {
        String jpqlQuery = "SELECT OBJ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_17() {
        String jpqlQuery = "SELECT OBJE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_18() {
        String jpqlQuery = "SELECT OBJEC";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_19() {
        String jpqlQuery = "SELECT OBJECT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, OBJECT);
    }

    @Test
    public final void test_Object_20() {
        String jpqlQuery = "SELECT DISTINCT OBJECT(a) FROM Address a";
        int position = "SELECT DISTINCT OBJECT(a".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "a");
    }

    @Test
    public final void test_OptionalClauses_01() {

        String jpqlQuery = "SELECT e FROM Employee e ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, fromClauseInternalClauses(FROM));
        CollectionTools.addAll(proposals, clauses(FROM, null, false));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_OptionalClauses_02() {

        String jpqlQuery = "SELECT e FROM Employee e HAVING e.name = 'Oracle'";
        int position = "SELECT e FROM Employee e ".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, fromClauseInternalClauses(FROM));
        CollectionTools.addAll(proposals, clauses(FROM, ORDER_BY, false));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_OptionalClauses_03() {

        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name";
        int position = "SELECT e FROM Employee e ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add(ORDER_BY);
        CollectionTools.addAll(proposals, fromClauseInternalClauses(FROM));
        CollectionTools.addAll(proposals, clauses(FROM, ORDER_BY, false));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_OptionalClauses_04() {

        String jpqlQuery = "SELECT e FROM Employee e GROUP BY e.name";
        int position = "SELECT e FROM Employee e ".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, fromClauseInternalClauses(FROM));
        CollectionTools.addAll(proposals, clauses(FROM, HAVING, false));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_OptionalClauses_05() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name = 'Oracle' ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, bnfAccessor.logicalIdentifiers());
        CollectionTools.addAll(proposals, clauses(WHERE, null, false));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_OptionalClauses_06() {

        String jpqlQuery = "SELECT e FROM Employee e A";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(fromClauseInternalClauses(FROM), "A"));
        CollectionTools.addAll(proposals, filter(clauses(FROM, null, false), "A"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_OptionalClauses_07() {
        String jpqlQuery = "SELECT e FROM Employee e";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_OrderBy_01() {
        String jpqlQuery = "SELECT e FROM Employee e ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_02() {
        String jpqlQuery = "SELECT e FROM Employee e O";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_03() {
        String jpqlQuery = "SELECT e FROM Employee e OR";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_04() {
        String jpqlQuery = "SELECT e FROM Employee e ORD";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_05() {
        String jpqlQuery = "SELECT e FROM Employee e ORDE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_06() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_07() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_08() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER B";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_09() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (e.name = 'Pascal') ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (e.name = 'Pascal') O";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_12() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP BY e.name ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_13() {
        String jpqlQuery = "SELECT e FROM Employee e GROUP BY e.name O";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_14() {
        String jpqlQuery = "SELECT e FROM Employee e HAVING COUNT(e) >= 5 ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_15() {
        String jpqlQuery = "SELECT e FROM Employee e HAVING COUNT(e) >= 5 O";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_16() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (e.name = 'Pascal') GROUP BY e.name ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_17() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (e.name = 'Pascal') GROUP BY e.name O";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_18() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (e.name = 'Pascal') GROUP BY e.name HAVING COUNT(e) >= 5 ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderBy_19() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE (e.name = 'Pascal') GROUP BY e.name HAVING COUNT(e) >= 5 O";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_OrderByItem_01() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, ASC);
    }

    @Test
    public final void test_OrderByItem_02() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ASC);
    }

    @Test
    public final void test_OrderByItem_03() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name A";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ASC);
    }

    @Test
    public final void test_OrderByItem_04() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name AS";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, ASC);
    }

    @Test
    public final void test_OrderByItem_05() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name ASC";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, ASC, DESC);
    }

    @Test
    public final void test_OrderByItem_06() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name D";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, DESC);
    }

    @Test
    public final void test_OrderByItem_07() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name DE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, DESC);
    }

    @Test
    public final void test_OrderByItem_08() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name DE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, DESC);
    }

    @Test
    public final void test_OrderByItem_09() {
        String jpqlQuery = "SELECT e FROM Employee e ORDER BY e.name DESC";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, ASC, DESC);
    }

    @Test
    public final void test_Query_01() {
        String jpqlQuery = ExpressionTools.EMPTY_STRING;
        int position = 0;
        testHasOnlyTheseProposals(jpqlQuery, position, SELECT, UPDATE, DELETE_FROM);
    }

    @Test
    public final void test_Query_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name SEL";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, SELECT, UPDATE, DELETE_FROM);
    }

    @Test
    public final void test_Query_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name DEL";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, SELECT, UPDATE, DELETE_FROM);
    }

    @Test
    public final void test_Query_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.name UP";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, SELECT, UPDATE, DELETE_FROM);
    }

    @Test
    public final void test_Restriction_01() {

        String jpqlQuery = "SELECT AVG(e.name) FROM Employee e";
        int position = "SELECT AVG(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Restriction_02() {

        String jpqlQuery = "SELECT AVG(e.name) FROM Employee e";
        int position = "SELECT AVG(e".length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        List<String> selectProposals = new ArrayList<>();
        CollectionTools.addAll(selectProposals, filter(bnfAccessor.selectItemIdentifiers(), "e"));
        selectProposals.removeAll(proposals);

        testDoesNotHaveTheseProposals(jpqlQuery, position, selectProposals);
    }

    @Test
    public final void test_Restriction_03() {
        String jpqlQuery = "SELECT AVG(e.name) FROM Employee e";
        int position = "SELECT AVG(e.".length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, bnfAccessor.selectItemIdentifiers());
    }

    @Test
    public final void test_Restriction_04() {
        String jpqlQuery = "SELECT o FROM Countries AS o";
        int position = jpqlQuery.length();
        testDoesNotHaveTheseProposals(jpqlQuery, position, ORDER_BY);
    }

    @Test
    public final void test_ResultVariable_01() {
        String jpqlQuery = "SELECT ABS(a.city)  FROM Address AS a";
        int position = "SELECT ABS(a.city) ".length();
        testHasTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_ResultVariable_02() {
        String jpqlQuery = "SELECT ABS(a.city) AS FROM Address AS a";
        int position = "SELECT ABS(a.city) A ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_ResultVariable_03() {
        String jpqlQuery = "SELECT ABS(a.city) AS FROM Address AS a";
        int position = "SELECT ABS(a.city) AS".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_ResultVariable_04() {
        String jpqlQuery = "SELECT ABS(a.city) AS FROM Address AS a";
        int position = "SELECT ABS(a.city) AS ".length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_ResultVariable_05() {

        String jpqlQuery = "SELECT AS FROM Address AS a";
        int position = "SELECT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add(DISTINCT);
        proposals.add("a");
        CollectionTools.addAll(proposals, bnfAccessor.selectItemFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_ResultVariable_06() {

        String jpqlQuery = "SELECT AS FROM Address AS a";
        int position = "SELECT A".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("a");
        CollectionTools.addAll(proposals, filter(bnfAccessor.selectItemFunctions(), "A"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_ResultVariable_07() {
        String jpqlQuery = "SELECT AS FROM Address AS a";
        int position = "SELECT AS".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(bnfAccessor.selectItemFunctions(), "AS"));
    }

    @Test
    public final void test_ResultVariable_08() {
        String jpqlQuery = "SELECT e a FROM Address AS a";
        int position = "SELECT e ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_ResultVariable_09() {

        String jpqlQuery = "SELECT a.id FROM Address AS a";
        int position = "SELECT a.id ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add(AS);
        proposals.add(FROM);
        CollectionTools.addAll(proposals, bnfAccessor.selectItemAggregates());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_ResultVariable_10() {

        String jpqlQuery = "SELECT a.zipcode, a.id FROM Address AS a";
        int position = "SELECT a.zipcode, a.id ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add(AS);
        proposals.add(FROM);
        CollectionTools.addAll(proposals, bnfAccessor.selectItemAggregates());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    @Ignore
    public final void test_ResultVariable_11() {

        String jpqlQuery = "SELECT a.zipcode , a.id FROM Address AS a";
        int position = "SELECT a.zipcode ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add(AS);
        CollectionTools.addAll(proposals, bnfAccessor.selectItemAggregates());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_ResultVariable_12() {

        String jpqlQuery = "SELECT (SELECT e From Employee e) FROM Address AS a";
        int position = "SELECT (SELECT e From Employee e) ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add(AS);
        proposals.add(FROM);
        CollectionTools.addAll(proposals, bnfAccessor.selectItemAggregates());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Select_01() {

        String jpqlQuery = "SELECT ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.selectItemFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Select_02() {

        String jpqlQuery = "SELECT e";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, filter(bnfAccessor.selectItemFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Select_03() {

        String jpqlQuery = "SELECT  FROM Employee e";
        int position = "SELECT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add(DISTINCT);
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.selectItemFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Select_04() {
        String jpqlQuery = "SELECT AV FROM Employee e";
        int position = "SELECT AV".length();
        testHasOnlyTheseProposals(jpqlQuery, position, AVG);
    }

    @Test
    public final void test_Select_05() {
        String jpqlQuery = "SELECT e,";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, bnfAccessor.selectItemFunctions());
    }

    @Test
    public final void test_Select_06() {
        String jpqlQuery = "SELECT e, ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, bnfAccessor.selectItemFunctions());
    }

    @Test
    public final void test_Select_07() {

        String jpqlQuery = "SELECT AVG(e.age)  FROM Employee e";
        int position = "SELECT AVG(e.age) ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add(AS);
        proposals.add(FROM);
        CollectionTools.addAll(proposals, bnfAccessor.selectItemAggregates());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Select_08() {

        String jpqlQuery = SELECT;

        for (int position = 1, count = jpqlQuery.length(); position < count; position++) {
            testHasOnlyTheseProposals(jpqlQuery, position, SELECT);
        }
    }

    @Test
    public final void test_SelectItem_01() {

        String jpqlQuery = "SELECT o,  FROM Address o";
        int position = "SELECT o, ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("o");
        CollectionTools.addAll(proposals, bnfAccessor.selectItemFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_SelectItem_02() {
        String jpqlQuery = "SELECT O, CASE WHEN c.firstName = 'Pascal' THEN 'P' ELSE 'JPQL' END FROM Customer c";
        int position = "SELECT O".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(bnfAccessor.selectItemIdentifiers(), "O"));
    }

    @Test
    public final void test_StateFieldPath_01() throws Exception {
        String jpqlQuery = "SELECT c. FROM CodeAssist c";
        int position = "SELECT c.".length();
        testHasOnlyTheseProposals(jpqlQuery, position, singledValuedObjectFieldNames(CodeAssist.class));
    }

    @Test
    public final void test_StateFieldPath_02() throws Exception {
        String jpqlQuery = "SELECT c.name FROM CodeAssist c";
        int position = "SELECT c.n".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(singledValuedObjectFieldNames(CodeAssist.class), "n"));
    }

    @Test
    public final void test_StateFieldPath_03() throws Exception {
        String jpqlQuery = "SELECT c.name FROM CodeAssist c";
        int position = "SELECT c.name".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(singledValuedObjectFieldNames(CodeAssist.class), "name"));
    }

    @Test
    public final void test_StateFieldPath_04() throws Exception {
        String jpqlQuery = "SELECT c.manager.name FROM CodeAssist c";
        int position = "SELECT c.m".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(singledValuedObjectFieldNames(CodeAssist.class), "m"));
    }

    @Test
    public final void test_StateFieldPath_05() throws Exception {
        String jpqlQuery = "SELECT c.manager.name FROM CodeAssist c";
        int position = "SELECT c.manager".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(singledValuedObjectFieldNames(CodeAssist.class), "manager"));
    }

    @Test
    public final void test_StateFieldPath_06() throws Exception {
        String jpqlQuery = "SELECT c.manager.name FROM CodeAssist c";
        int position = "SELECT c.manager.".length();
        testHasOnlyTheseProposals(jpqlQuery, position, singledValuedObjectFieldNames(Employee.class));
    }

    @Test
    public final void test_StateFieldPath_07() throws Exception {
        String jpqlQuery = "SELECT c.manager.name FROM CodeAssist c";
        int position = "SELECT c.manager.name".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(singledValuedObjectFieldNames(Employee.class), "name"));
    }

    @Test
    public final void test_StateFieldPath_08() {
        String jpqlQuery = "SELECT c.employees. FROM CodeAssist c";
        int position = "SELECT c.employees.".length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_StateFieldPath_09() throws Exception {
        String jpqlQuery = "SELECT e. FROM CodeAssist c JOIN c.employees e";
        int position = "SELECT e.".length();
        testHasOnlyTheseProposals(jpqlQuery, position, singledValuedObjectFieldNames(Employee.class));
    }

    @Test
    public final void test_StateFieldPath_10() throws Exception {
        String jpqlQuery = "SELECT e. FROM CodeAssist c, IN (c.employees) e";
        int position = "SELECT e.".length();
        testHasOnlyTheseProposals(jpqlQuery, position, singledValuedObjectFieldNames(Employee.class));
    }

    @Test
    public final void test_StateFieldPath_11() throws Exception {
        String jpqlQuery = "SELECT a.alias FROM CodeAssist c, IN (c.customerMap) cust, IN(KEY(cust).aliases) a";
        int position = "SELECT a.".length();
        testHasOnlyTheseProposals(jpqlQuery, position, singledValuedObjectFieldNames(Alias.class));
    }

    @Test
    public final void test_StateFieldPath_12() {
        String jpqlQuery = "SELECT a.alias FROM CodeAssist c, IN (c.customerMap) cust, IN(KEY(cust).aliases) a";
        int position = "SELECT a.alias".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "alias");
    }

    @Test
    public final void test_StateFieldPath_13() throws Exception {
        String jpqlQuery = "SELECT a.alias FROM CodeAssist c, IN (c.customerMap) cust, IN(KEY(cust).aliases) a";
        int position = "SELECT a.alias FROM CodeAssist c, IN (c.".length();
        testHasOnlyTheseProposals(jpqlQuery, position, relationshipAndCollectionFieldNames(CodeAssist.class));
    }

    @Test
    public final void test_StateFieldPath_14() {
        String jpqlQuery = "SELECT a.alias FROM CodeAssist c, IN (c.customerMap) cust, IN(KEY(cust).aliases) a";
        int position = "SELECT a.alias FROM CodeAssist c, IN (c.customerMap) cust, IN(KEY(".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "cust");
    }

    @Test
    public final void test_StateFieldPath_15() throws Exception {
        String jpqlQuery = "SELECT a.alias FROM CodeAssist c, IN (c.customerMap) cust, IN(KEY(cust).aliases) a";
        int position = "SELECT a.alias FROM CodeAssist c, IN (c.customerMap) cust, IN(KEY(cust).".length();
        testHasOnlyTheseProposals(jpqlQuery, position, relationshipAndCollectionFieldNames(Customer.class));
    }

    @Test
    public final void test_StateFieldPath_16() throws Exception {
        String jpqlQuery = "SELECT c FROM CodeAssist c WHERE ALL(SELECT e FROM c.";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, relationshipAndCollectionFieldNames(CodeAssist.class));
    }

    @Test
    public final void test_StateFieldPath_17() throws Exception {
        String jpqlQuery = "SELECT c FROM CodeAssist c WHERE ALL(SELECT e FROM c.employees e";
        int position = "SELECT c FROM CodeAssist c WHERE ALL(SELECT e FROM c.employees".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(relationshipAndCollectionFieldNames(CodeAssist.class), "employees"));
    }

    @Test
    public final void test_StateFieldPath_18() throws Exception {
        String jpqlQuery = "update Employee e set e.name = 'JPQL' where (select a from address a where a.";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, nonTransientFieldNames(Address.class));
    }

    @Test
    public final void test_StateFieldPath_19() throws Exception {
        String jpqlQuery = "select O from Product O where O.";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, singledValuedObjectFieldNames(Product.class));
    }

    @Test
    public final void test_Subquery_01() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)";
        int position = "SELECT e FROM Employee e WHERE e.salary > (".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.comparisonExpressionFunctions());
        CollectionTools.addAll(proposals, bnfAccessor.comparisonExpressionClauses());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Subquery_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)";
        int position = "SELECT e FROM Employee e WHERE e.salary > (S".length();
        testHasTheseProposals(jpqlQuery, position, SELECT);
    }

    @Test
    public final void test_Subquery_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)";
        int position = "SELECT e FROM Employee e WHERE e.salary > (SE".length();
        testHasOnlyTheseProposals(jpqlQuery, position, SELECT);
    }

    @Test
    public final void test_Subquery_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)";
        int position = "SELECT e FROM Employee e WHERE e.salary > (SEL".length();
        testHasOnlyTheseProposals(jpqlQuery, position, SELECT);
    }

    @Test
    public final void test_Subquery_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)";
        int position = "SELECT e FROM Employee e WHERE e.salary > (SELE".length();
        testHasOnlyTheseProposals(jpqlQuery, position, SELECT);
    }

    @Test
    public final void test_Subquery_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)";
        int position = "SELECT e FROM Employee e WHERE e.salary > (SELEC".length();
        testHasOnlyTheseProposals(jpqlQuery, position, SELECT);
    }

    @Test
    public final void test_Subquery_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)";
        int position = "SELECT e FROM Employee e WHERE e.salary > (SELECT".length();
        testHasTheseProposals(jpqlQuery, position, SELECT);
    }

    @Test
    public final void test_Subquery_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT ";
        int position = "SELECT e FROM Employee e WHERE e.salary > (SELECT".length();
        testHasOnlyTheseProposals(jpqlQuery, position, SELECT);
    }

    @Test
    public final void test_Subquery_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT A";
        int position = "SELECT e FROM Employee e WHERE e.salary > (SELECT A".length();
        testHasOnlyTheseProposals(jpqlQuery, position, ABS, AVG);
    }

    @Test
    public final void test_Subquery_10() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)";
        int position = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add(FROM);
        CollectionTools.addAll(proposals, bnfAccessor.selectItemAggregates());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Subquery_11() {
        String jpqlQuery = "select e from Employee e where (sel";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, SELECT);
    }

    @Test
    public final void test_Subquery_12() {

        String jpqlQuery = "select s from Employee s where (s";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add("s");
        proposals.add(SELECT);
        CollectionTools.addAll(proposals, filter(bnfAccessor.conditionalExpressionsFunctions(), "s"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Subquery_13() {

        String jpqlQuery = "select e from Employee e where (";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        proposals.add(SELECT);
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Subquery_StateFieldPath_01() throws Exception {

        String jpqlQuery = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)";
        int position = "SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.".length();

        testHasOnlyTheseProposals(
            jpqlQuery,
            position,
            singledValuedObjectFieldNames(Employee.class, acceptableType(AVG))
        );
    }

    @Test
    public final void test_Substring_01() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_02() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE S";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_03() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE SU";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_04() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE SUB";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_05() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE SUBS";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE SUBST";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE SUBSTR";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE SUBSTR";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE SUBSTRI";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE SUBSTRIN";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Substring_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE SUBSTRING";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUBSTRING);
    }

    @Test
    public final void test_Sum_01() {
        String jpqlQuery = "SELECT ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUM);
    }

    @Test
    public final void test_Sum_02() {
        String jpqlQuery = "SELECT S";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUM);
    }

    @Test
    public final void test_Sum_03() {
        String jpqlQuery = "SELECT SU";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUM);
    }

    @Test
    public final void test_Sum_04() {
        String jpqlQuery = "SELECT SUM";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SUM);
    }

    @Test
    public final void test_Sum_05() {

        String jpqlQuery = "SELECT SUM(";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_06() {

        String jpqlQuery = "SELECT SUM() From Employee e";
        int position = "SELECT SUM(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_07() {

        String jpqlQuery = "SELECT SUM(DISTINCT ) From Employee e";
        int position = "SELECT SUM(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_08() {
        String jpqlQuery = "SELECT SUM(D ) From Employee e";
        int position = "SELECT SUM(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Sum_09() {
        String jpqlQuery = "SELECT SUM(DI ) From Employee e";
        int position = "SELECT SUM(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Sum_10() {
        String jpqlQuery = "SELECT SUM(DIS ) From Employee e";
        int position = "SELECT SUM(DIS".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Sum_11() {
        String jpqlQuery = "SELECT SUM(DISTINCT e) From Employee e";
        int position = "SELECT SUM(".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Sum_12() {
        String jpqlQuery = "SELECT SUM(DISTINCT e) From Employee e";
        int position = "SELECT SUM(D".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Sum_13() {
        String jpqlQuery = "SELECT SUM(DISTINCT e) From Employee e";
        int position = "SELECT SUM(DI".length();
        testHasOnlyTheseProposals(jpqlQuery, position, DISTINCT);
    }

    @Test
    public final void test_Sum_14() {

        String jpqlQuery = "SELECT SUM(DISTINCT e) From Employee e";
        int position = "SELECT SUM(DISTINCT ".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_15() {

        String jpqlQuery = "SELECT SUM(DISTINCT e) From Employee e";
        int position = "SELECT SUM(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("e");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_16() {

        String jpqlQuery = "SELECT SUM(DISTINCT e) From Employee emp";
        int position = "SELECT SUM(DISTINCT e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_17() {

        String jpqlQuery = "SELECT SUM() From Employee emp";
        int position = "SELECT SUM(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_18() {

        String jpqlQuery = "SELECT SUM(e) From Employee emp";
        int position = "SELECT SUM(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_19() {
        String jpqlQuery = "SELECT SUM(em) From Employee emp";
        int position = "SELECT SUM(em".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Sum_20() {
        String jpqlQuery = "SELECT SUM(emp) From Employee emp";
        int position = "SELECT SUM(emp".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Sum_21() {

        String jpqlQuery = "SELECT SUM(emp) From Employee emp";
        int position = "SELECT SUM(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_22() {
        String jpqlQuery = "SELECT SUM(emp) From Employee emp";
        int position = "SELECT SUM(em".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "emp");
    }

    @Test
    public final void test_Sum_23() {

        String jpqlQuery = "SELECT SUM( From Employee emp";
        int position = "SELECT SUM(".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        proposals.add(DISTINCT);
        CollectionTools.addAll(proposals, bnfAccessor.internalAggregateFunctionFunctions());

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Sum_24() {

        String jpqlQuery = "SELECT SUM(e From Employee emp";
        int position = "SELECT SUM(e".length();

        List<String> proposals = new ArrayList<>();
        proposals.add("emp");
        CollectionTools.addAll(proposals, filter(bnfAccessor.internalAggregateFunctionFunctions(), "e"));

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_Trim_06() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, TRAILING);
    }

    @Test
    public final void test_Trim_07() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(B";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, BOTH);
    }

    @Test
    public final void test_Trim_08() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(BO";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, BOTH);
    }

    @Test
    public final void test_Trim_09() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(BOT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, BOTH);
    }

    @Test
    public final void test_Trim_10() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(BOTH";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, BOTH);
    }

    @Test
    public final void test_Trim_11() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(L";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LEADING);
    }

    @Test
    public final void test_Trim_12() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(LE";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LEADING);
    }

    @Test
    public final void test_Trim_13() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(LEA";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LEADING);
    }

    @Test
    public final void test_Trim_14() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(LEAD";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LEADING);
    }

    @Test
    public final void test_Trim_15() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(LEADI";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LEADING);
    }

    @Test
    public final void test_Trim_16() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(LEADIN";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, LEADING);
    }

    @Test
    public final void test_Trim_17() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(LEADING";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, LEADING);
    }

    @Test
    public final void test_Trim_18() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(T";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, TRAILING);
    }

    @Test
    public final void test_Trim_19() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TR";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, TRAILING);
    }

    @Test
    public final void test_Trim_20() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRA";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, TRAILING);
    }

    @Test
    public final void test_Trim_21() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAI";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, TRAILING);
    }

    @Test
    public final void test_Trim_22() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAIL";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, TRAILING);
    }

    @Test
    public final void test_Trim_23() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILI";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, TRAILING);
    }

    @Test
    public final void test_Trim_24() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILIN";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, TRAILING);
    }

    @Test
    public final void test_Trim_25() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILING";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, TRAILING);
    }

    @Test
    public final void test_Trim_26() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILING 'd' ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_Trim_27() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILING 'd' F";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_Trim_28() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILING 'd' FR";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_Trim_29() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILING 'd' FRO";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_Trim_30() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILING 'd' FROM";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_Trim_31() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILING 'd' FROM ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, "e");
    }

    @Test
    public final void test_Trim_32() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE TRIM(TRAILING 'd' FROM";
        int position = jpqlQuery.length() - 1;
        testHasOnlyTheseProposals(jpqlQuery, position, FROM);
    }

    @Test
    public final void test_Update_01() {
        String jpqlQuery = "U";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_02() {
        String jpqlQuery = "UP";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_03() {
        String jpqlQuery = "UPD";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_04() {
        String jpqlQuery = "UPDA";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_05() {
        String jpqlQuery = "UPDAT";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_06() {
        String jpqlQuery = UPDATE;
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_07() {
        String jpqlQuery = "UPDATE Employee";
        int position = "U".length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_08() {
        String jpqlQuery = "UPDATE Employee";
        int position = "UP".length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_09() {
        String jpqlQuery = "UPDATE Employee";
        int position = "UPD".length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_10() {
        String jpqlQuery = "UPDATE Employee";
        int position = "UPDA".length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_11() {
        String jpqlQuery = "UPDATE Employee";
        int position = "UPDAT".length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_12() {
        String jpqlQuery = "UPDATE Employee";
        int position = "UPDATE".length();
        testHasTheseProposals(jpqlQuery, position, UPDATE);
    }

    @Test
    public final void test_Update_13() {
        String jpqlQuery = "UPDATE Employee e ";
        int position = jpqlQuery.length();
        testHasTheseProposals(jpqlQuery, position, SET);
    }

    @Test
    public final void test_Update_14() {
        String jpqlQuery = "UPDATE Employee e S";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, SET);
    }

    @Test
    public final void test_Update_15() {
        String jpqlQuery = "UPDATE Employee e SE";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, SET);
    }

    @Test
    public final void test_Update_16() {
        String jpqlQuery = "UPDATE Employee e SET";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, SET);
    }

    @Test
    public final void test_Update_17() {
        String jpqlQuery = "UPDATE SET";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_Update_18() throws Exception {
        String jpqlQuery = "UPDATE S";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(entityNames(), "S"));
    }

    @Test
    public final void test_Update_19() {
        String jpqlQuery = "UPDATE Employee S";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, SET);
    }

    @Test
    public final void test_Update_20() {
        String jpqlQuery = "UPDATE Employee S SET";
        int position = "UPDATE Employee S".length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_Update_21() {
        String jpqlQuery = "UPDATE Z";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_Update_22() throws Exception {
        String jpqlQuery = "UPDATE A";
        int position = "UPDATE A".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(entityNames(), "A"));
    }

    @Test
    public final void test_Update_23() {
        String jpqlQuery = "UPDATE Employee e SET ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, "e");
    }

    @Test
    public final void test_Update_24() {
        String jpqlQuery = "UPDATE Employee SET e";
        int position = "UPDATE Employee SET ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "employee");
    }

    @Test
    public final void test_Update_25() throws Exception {
        String jpqlQuery = "UPDATE ";
        int position = jpqlQuery.length();
        testHasOnlyTheseProposals(jpqlQuery, position, entityNames());
    }

    @Test
    public final void test_Update_26() throws Exception {
        String jpqlQuery = "UPDATE Alias a";
        int position = "UPDATE ".length();
        testHasOnlyTheseProposals(jpqlQuery, position, entityNames());
    }

    @Test
    public final void test_Update_27() {
        String jpqlQuery = "UPDATE Alias a";
        int position = "UPDATE Al".length();
        testHasOnlyTheseProposals(jpqlQuery, position, "Alias");
    }

    @Test
    public final void test_Update_28() {
        String jpqlQuery = "UPDATE Employee A SET";
        int position = "UPDATE Employee A ".length();
        testHasTheseProposals(jpqlQuery, position, SET);
    }

    @Test
    public final void test_Update_30() {
        String jpqlQuery = "UPDATE Employee A ";
        int position = jpqlQuery.length() - 1;
        testHasOnlyTheseProposals(jpqlQuery, position, AS);
    }

    @Test
    public final void test_Update_31() {
        String jpqlQuery = "UPDATE Employee AS ";
        int position = jpqlQuery.length();
        testHasNoProposals(jpqlQuery, position);
    }

    @Test
    public final void test_Update_32() throws Exception {
        String jpqlQuery = "UPDATE Employee AS e SET e.";
        int position = "UPDATE Employee AS e SET e.".length();
        testHasTheseProposals(jpqlQuery, position, singledValuedObjectFieldNames(Employee.class));
    }

    @Test
    public final void test_When_01() {
        test_ConditionalClause_01(WHEN, "WHERE CASE ");
    }

    @Test
    public final void test_When_02() {
        test_ConditionalClause_02(WHEN, "WHERE CASE ");
    }

    @Test
    public final void test_When_03() {
        test_ConditionalClause_03(WHEN, "WHERE CASE ");
    }

    @Test
    public final void test_When_04() {
        test_ConditionalClause_04(WHEN, "WHERE CASE ");
    }

    @Test
    public final void test_When_05() {
        test_ConditionalClause_05(WHEN, "WHERE CASE ");
    }

    @Test
    public final void test_When_06() {
        test_ConditionalClause_06(WHEN, "WHERE CASE ");
    }

    @Test
    public final void test_When_07() {
        test_ConditionalClause_07(WHEN, "WHERE CASE ");
    }

    @Test
    public final void test_When_08() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE CASE WHEN (e.name = 'Pascal') ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        proposals.add(THEN);
        CollectionTools.addAll(proposals, bnfAccessor.logicalIdentifiers());

        // Filtered out
        proposals.remove(IS_EMPTY);
        proposals.remove(IS_NOT_EMPTY);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_When_09() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE CASE WHEN e.roomNumber ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsAggregates());
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsCompoundFunctions());

        // Filtered out
        proposals.remove(IS_EMPTY);
        proposals.remove(IS_NOT_EMPTY);
        proposals.remove(AND);
        proposals.remove(OR);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_When_10() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE CASE WHEN e.phoneNumbers ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsCompoundFunctions());

        // Filtered out
        proposals.remove(LIKE);
        proposals.remove(NOT_LIKE);
        proposals.remove(BETWEEN);
        proposals.remove(NOT_BETWEEN);
        proposals.remove(LIKE);
        proposals.remove(NOT_LIKE);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_When_11() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE CASE WHEN AVG(e.age) ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsAggregates());
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsCompoundFunctions());

        // Filtered out
        proposals.remove(IS_EMPTY);
        proposals.remove(IS_NOT_EMPTY);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_When_12() {

        String jpqlQuery = "SELECT e FROM Employee e WHERE CASE WHEN ?1 ";
        int position = jpqlQuery.length();

        List<String> proposals = new ArrayList<>();
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsAggregates());
        CollectionTools.addAll(proposals, bnfAccessor.conditionalExpressionsCompoundFunctions());

        // Filtered out
        proposals.remove(IS_EMPTY);
        proposals.remove(IS_NOT_EMPTY);

        testHasOnlyTheseProposals(jpqlQuery, position, proposals);
    }

    @Test
    public final void test_When_13() {

        String fragment = "SELECT e FROM Employee e WHERE CASE WHEN (e.name = 'Pascal') ";

        for (int index = 0, count = THEN.length(); index <= count; index++) {

            String jpqlQuery = fragment + THEN.substring(0, index);

            for (int positionIndex = fragment.length(), count2 = jpqlQuery.length(); positionIndex <= count2; positionIndex++) {
                testHasTheseProposals(jpqlQuery, positionIndex, THEN);
            }
        }
    }

    @Test
    public final void test_When_14() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE WHEN";
        int position = "SELECT e FROM Employee e WHERE W".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(bnfAccessor.conditionalExpressionsFunctions(), "W"));
    }

    @Test
    public final void test_When_15() {
        String jpqlQuery = "SELECT e FROM Employee e WHERE THEN";
        int position = "SELECT e FROM Employee e WHERE T".length();
        testHasOnlyTheseProposals(jpqlQuery, position, filter(bnfAccessor.conditionalExpressionsFunctions(), "T"));
    }

    @Test
    public final void test_Where_01() {
        test_ConditionalClause_01(WHERE);
    }

    @Test
    public final void test_Where_02() {
        test_ConditionalClause_02(WHERE);
    }

    @Test
    public final void test_Where_03() {
        test_ConditionalClause_03(WHERE);
    }

    @Test
    public final void test_Where_04() {
        test_ConditionalClause_04(WHERE);
    }

    @Test
    public final void test_Where_05() {
        test_ConditionalClause_05(WHERE);
    }

    @Test
    public final void test_Where_06() {
        test_ConditionalClause_06(WHERE);
    }

    @Test
    public final void test_Where_07() {
        test_ConditionalClause_07(WHERE);
    }

    protected class TweakFunctionIdentifiers {

        protected void tweak(List<String> proposals,
                             String identifier,
                             String identifierFragment,
                             int positionIndex) {

            // Special case for ALL/SOME/ANY
            if (identifier.equals(ALL) && identifier.equals(identifierFragment)) {
                if (!proposals.contains(SOME)) {
                    proposals.add(SOME);
                }
                if (!proposals.contains(ANY)) {
                    proposals.add(ANY);
                }
            }
            else if (identifier.equals(ANY) && identifier.equals(identifierFragment)) {
                if (!proposals.contains(ALL)) {
                    proposals.add(ALL);
                }
                if (!proposals.contains(SOME)) {
                    proposals.add(SOME);
                }
            }
            else if (identifier.equals(SOME) && identifier.equals(identifierFragment)) {
                if (!proposals.contains(ALL)) {
                    proposals.add(ALL);
                }
                if (!proposals.contains(ANY)) {
                    proposals.add(ANY);
                }
            }

            // Special case for CURRENT_DATE/CURRENT_TIME/CURRENT_TIMESTAMP
            else if (identifier.equals(CURRENT_DATE) && identifier.equals(identifierFragment)) {
                if (!proposals.contains(CURRENT_TIME)) {
                    proposals.add(CURRENT_TIME);
                }
                if (!proposals.contains(CURRENT_TIMESTAMP)) {
                    proposals.add(CURRENT_TIMESTAMP);
                }
            }
            else if (identifier.equals(CURRENT_TIME) && identifier.equals(identifierFragment)) {
                if (!proposals.contains(CURRENT_DATE)) {
                    proposals.add(CURRENT_DATE);
                }
                if (!proposals.contains(CURRENT_TIMESTAMP)) {
                    proposals.add(CURRENT_TIMESTAMP);
                }
            }
            else if (identifier.equals(CURRENT_TIMESTAMP) && identifier.equals(identifierFragment)) {
                if (!proposals.contains(CURRENT_DATE)) {
                    proposals.add(CURRENT_DATE);
                }
                if (!proposals.contains(CURRENT_TIME)) {
                    proposals.add(CURRENT_TIME);
                }
            }
            else if (identifier.equals(CURRENT_TIME) && identifierFragment.equals(CURRENT_TIMESTAMP) ||
                     identifier.equals(CURRENT_TIMESTAMP) && identifierFragment.equals(CURRENT_TIME)) {

                if (!proposals.contains(CURRENT_DATE)) {
                    proposals.add(CURRENT_DATE);
                }
            }

            // Special case for EXISTS/NOT EXISTS
            else if (identifier.equals(EXISTS) && identifier.equals(identifierFragment) && positionIndex > 0) {
                if (!proposals.contains(NOT_EXISTS)) {
                    proposals.add(NOT_EXISTS);
                }
            }

            // Special case for TRUE/FALSE/NULL
            else if (identifier.equals(TRUE) && identifier.equals(identifierFragment)) {
                if (!proposals.contains(FALSE)) {
                    proposals.add(FALSE);
                }
                if (!proposals.contains(NULL)) {
                    proposals.add(NULL);
                }
            }
            else if (identifier.equals(FALSE) && identifier.equals(identifierFragment)) {
                if (!proposals.contains(TRUE)) {
                    proposals.add(TRUE);
                }
                if (!proposals.contains(NULL)) {
                    proposals.add(NULL);
                }
            }
            else if (identifier.equals(NULL) && identifier.equals(identifierFragment)) {
                if (!proposals.contains(FALSE)) {
                    proposals.add(FALSE);
                }
                if (!proposals.contains(TRUE)) {
                    proposals.add(TRUE);
                }
            }
            else if (identifier.equals(NULLIF) && identifierFragment.equals(NULL)) {
                if (!proposals.contains(FALSE)) {
                    proposals.add(FALSE);
                }
                if (!proposals.contains(TRUE)) {
                    proposals.add(TRUE);
                }
            }
        }
    }
}
