View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.hint;
19  
20  import lombok.AccessLevel;
21  import lombok.NoArgsConstructor;
22  import org.apache.shardingsphere.sql.parser.sql.dialect.segment.sqlserver.hint.TableHintLimitedSegment;
23  import org.apache.shardingsphere.sql.parser.sql.dialect.segment.sqlserver.hint.WithTableHintSegment;
24  import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
25  import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
26  import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.hint.ExpectedTableHint;
27  import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.hint.ExpectedWithTableHintClause;
28  import org.hamcrest.CoreMatchers;
29  import static org.hamcrest.CoreMatchers.is;
30  import static org.hamcrest.MatcherAssert.assertThat;
31  import static org.junit.jupiter.api.Assertions.assertNotNull;
32  import static org.junit.jupiter.api.Assertions.assertNull;
33  
34  /**
35   * With table hint clause assert.
36   **/
37  @NoArgsConstructor(access = AccessLevel.PRIVATE)
38  public final class WithTableHintClauseAssert {
39      
40      /**
41       * Assert actual with table hint segment is correct with expected table hint clause.
42       *
43       * @param assertContext assert context
44       * @param actual actual with table hint segment
45       * @param expected expected with table hint clause
46       */
47      public static void assertIs(final SQLCaseAssertContext assertContext, final WithTableHintSegment actual, final ExpectedWithTableHintClause expected) {
48          if (null == expected.getTableHint()) {
49              assertThat(assertContext.getText("with table hint clause  assertion error: "), actual.getTableHintLimitedSegments().size(), CoreMatchers.is(expected.getTableHint().size()));
50          } else {
51              int count = 0;
52              for (TableHintLimitedSegment each : actual.getTableHintLimitedSegments()) {
53                  assertTableHint(assertContext, each, expected.getTableHint().get(count));
54                  count++;
55              }
56          }
57          SQLSegmentAssert.assertIs(assertContext, actual, expected);
58      }
59      
60      /**
61       * Assert table hint.
62       *
63       * @param assertContext assert context
64       * @param actual actual table hint segment
65       * @param expected expected table hint
66       */
67      public static void assertTableHint(final SQLCaseAssertContext assertContext, final TableHintLimitedSegment actual, final ExpectedTableHint expected) {
68          if (null == expected) {
69              assertNull(actual, assertContext.getText("Actual table hint should not exist."));
70          } else {
71              assertNotNull(actual, assertContext.getText("Actual table hint should exist."));
72              assertThat(assertContext.getText("table hint value assertion error."), actual.getValue(), is(expected.getValue()));
73              SQLSegmentAssert.assertIs(assertContext, actual, expected);
74          }
75      }
76  }