| // Copyright (C) 2019 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package com.google.gerrit.index.query.testing; |
| |
| import static com.google.common.base.Preconditions.checkArgument; |
| import static com.google.common.truth.Truth.assertAbout; |
| import static java.util.Objects.requireNonNull; |
| |
| import com.google.common.truth.FailureMetadata; |
| import com.google.common.truth.Subject; |
| import com.google.gerrit.index.query.QueryParser; |
| import org.antlr.runtime.tree.Tree; |
| |
| public class TreeSubject extends Subject { |
| public static TreeSubject assertThat(Tree actual) { |
| return assertAbout(TreeSubject::new).that(actual); |
| } |
| |
| private final Tree tree; |
| |
| private TreeSubject(FailureMetadata failureMetadata, Tree tree) { |
| super(failureMetadata, tree); |
| this.tree = tree; |
| } |
| |
| public void hasType(int expectedType) { |
| isNotNull(); |
| check("getType()").that(typeName(tree.getType())).isEqualTo(typeName(expectedType)); |
| } |
| |
| public void hasText(String expectedText) { |
| requireNonNull(expectedText); |
| isNotNull(); |
| check("getText()").that(tree.getText()).isEqualTo(expectedText); |
| } |
| |
| public void hasNoChildren() { |
| isNotNull(); |
| check("getChildCount()").that(tree.getChildCount()).isEqualTo(0); |
| } |
| |
| public void hasChildCount(int expectedChildCount) { |
| checkArgument( |
| expectedChildCount > 0, "expected child count must be positive: %s", expectedChildCount); |
| isNotNull(); |
| check("getChildCount()").that(tree.getChildCount()).isEqualTo(expectedChildCount); |
| } |
| |
| public TreeSubject child(int childIndex) { |
| isNotNull(); |
| return check("getChild(%s)", childIndex) |
| .about(TreeSubject::new) |
| .that(tree.getChild(childIndex)); |
| } |
| |
| private static String typeName(int type) { |
| checkArgument( |
| type >= 0 && type < QueryParser.tokenNames.length, |
| "invalid token type %s, max is %s", |
| type, |
| QueryParser.tokenNames.length - 1); |
| return QueryParser.tokenNames[type]; |
| } |
| } |