content: /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to you under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.calcite.test;
  
  import org.apache.calcite.sql.parser.StringAndPos;
  import org.apache.calcite.sql.test.SqlTestFactory;
  import org.apache.calcite.sql.test.SqlValidatorTester;
  import org.apache.calcite.sql.validate.SqlValidator;
  
  /**
   * An abstract base class for implementing tests against {@link SqlValidator}.
   *
   * <p>A derived class can refine this test in two ways. First, it can add
   * {@code testXxx()} methods, to test more functionality.
   *
   * <p>Second, it can override the {@link #fixture()} method to return a
   * different implementation of the {@link SqlValidatorFixture} object. This
   * encapsulates the differences between test environments, for example, which
   * SQL parser or validator to use.
   */
  public class SqlValidatorTestCase {
    public static final SqlValidatorFixture FIXTURE =
        new SqlValidatorFixture(SqlValidatorTester.DEFAULT,
            SqlTestFactory.INSTANCE, StringAndPos.of("?"), false, false);
  
    /** Creates a test case. */
    public SqlValidatorTestCase() {
    }
  
    //~ Methods ----------------------------------------------------------------
  
    /** Creates a test fixture. Derived classes can override this method to
     * run the same set of tests in a different testing environment. */
    public SqlValidatorFixture fixture() {
      return FIXTURE;
    }
  
    /**
     * Creates a test context with a SQL query.
     * Default catalog: {@link org.apache.calcite.test.catalog.MockCatalogReaderSimple#init()}.
     */
    public final SqlValidatorFixture sql(String sql) {
      return fixture().withSql(sql);
    }
  
    /** Creates a test context with a SQL expression. */
    public final SqlValidatorFixture expr(String sql) {
      return fixture().withExpr(sql);
    }
  
    /** Creates a test context with a SQL expression.
     * If an error occurs, the error is expected to span the entire expression. */
    public final SqlValidatorFixture wholeExpr(String sql) {
      return expr(sql).withWhole(true);
    }
  
    public final SqlValidatorFixture winSql(String sql) {
      return sql(sql);
    }
  
    public final SqlValidatorFixture win(String sql) {
      return sql("select * from emp " + sql);
    }
  
    public SqlValidatorFixture winExp(String sql) {
      return winSql("select " + sql + " from emp window w as (order by deptno)");
    }
  
    public SqlValidatorFixture winExp2(String sql) {
      return winSql("select " + sql + " from emp");
    }
  
  }
  