Tweak query tests

This commit is contained in:
Max Brunsfeld 2023-02-15 14:03:36 -08:00
parent fa869cf3ed
commit bd63fb2a0d
4 changed files with 44 additions and 19 deletions

7
Cargo.lock generated
View file

@ -584,6 +584,7 @@ dependencies = [
"tree-sitter-highlight",
"tree-sitter-loader",
"tree-sitter-tags",
"unindent",
"walkdir",
"webbrowser",
"which",
@ -647,6 +648,12 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
[[package]]
name = "unindent"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aa30f5ea51ff7edfc797c6d3f9ec8cbd8cfedef5371766b7181d33977f4814f"
[[package]]
name = "utf8-width"
version = "0.1.6"

View file

@ -3,7 +3,7 @@ name = "tree-sitter-cli"
description = "CLI tool for developing, testing, and using Tree-sitter parsers"
version = "0.20.7"
authors = ["Max Brunsfeld <maxbrunsfeld@gmail.com>"]
edition = "2018"
edition = "2021"
license = "MIT"
readme = "README.md"
keywords = ["incremental", "parsing"]
@ -73,6 +73,7 @@ rand = "0.8"
tempfile = "3"
pretty_assertions = "0.7.2"
ctor = "0.1"
unindent = "0.2"
[build-dependencies]
toml = "0.5"

View file

@ -2,6 +2,7 @@ use super::helpers::{
allocations,
fixtures::get_language,
query_helpers::{Match, Pattern},
ITERATION_COUNT,
};
use lazy_static::lazy_static;
use rand::{prelude::StdRng, SeedableRng};
@ -10,6 +11,7 @@ use tree_sitter::{
CaptureQuantifier, Language, Node, Parser, Point, Query, QueryCapture, QueryCursor, QueryError,
QueryErrorKind, QueryMatch, QueryPredicate, QueryPredicateArg, QueryProperty,
};
use unindent::Unindent;
lazy_static! {
static ref EXAMPLE_FILTER: Option<String> = env::var("TREE_SITTER_TEST_EXAMPLE_FILTER").ok();
@ -1920,20 +1922,28 @@ fn test_query_matches_within_point_range() {
let language = get_language("javascript");
let query = Query::new(language, "(identifier) @element").unwrap();
let source = "[a, b,\n c, d,\n e, f,\n g]";
let source = "
[
a, b,
c, d,
e, f,
g, h,
i, j,
k, l,
]
"
.unindent();
let mut parser = Parser::new();
parser.set_language(language).unwrap();
let tree = parser.parse(&source, None).unwrap();
let mut cursor = QueryCursor::new();
let matches = cursor
.set_point_range(Point::new(0, 0)..Point::new(1, 3))
.set_point_range(Point::new(1, 0)..Point::new(2, 3))
.matches(&query, tree.root_node(), source.as_bytes());
assert_eq!(
collect_matches(matches, &query, source),
collect_matches(matches, &query, &source),
&[
(0, vec![("element", "a")]),
(0, vec![("element", "b")]),
@ -1942,11 +1952,10 @@ fn test_query_matches_within_point_range() {
);
let matches = cursor
.set_point_range(Point::new(1, 0)..Point::new(2, 3))
.set_point_range(Point::new(2, 0)..Point::new(3, 3))
.matches(&query, tree.root_node(), source.as_bytes());
assert_eq!(
collect_matches(matches, &query, source),
collect_matches(matches, &query, &source),
&[
(0, vec![("element", "c")]),
(0, vec![("element", "d")]),
@ -1954,16 +1963,19 @@ fn test_query_matches_within_point_range() {
]
);
// Zero end point is treated like no end point.
let matches = cursor
.set_point_range(Point::new(2, 1)..Point::new(0, 0))
.set_point_range(Point::new(4, 1)..Point::new(0, 0))
.matches(&query, tree.root_node(), source.as_bytes());
assert_eq!(
collect_matches(matches, &query, source),
collect_matches(matches, &query, &source),
&[
(0, vec![("element", "e")]),
(0, vec![("element", "f")]),
(0, vec![("element", "g")]),
(0, vec![("element", "h")]),
(0, vec![("element", "i")]),
(0, vec![("element", "j")]),
(0, vec![("element", "k")]),
(0, vec![("element", "l")]),
]
);
});
@ -3634,17 +3646,22 @@ fn test_query_random() {
.parse(include_str!("helpers/query_helpers.rs"), None)
.unwrap();
// let start_seed = *SEED;
let start_seed = 0;
let end_seed = start_seed + *ITERATION_COUNT;
for i in 0..100 {
let seed = (start_seed + i) as u64;
for seed in start_seed..(start_seed + end_seed) {
let seed = seed as u64;
let mut rand = StdRng::seed_from_u64(seed);
let (pattern_ast, _) = Pattern::random_pattern_in_tree(&pattern_tree, &mut rand);
let pattern = pattern_ast.to_string();
let expected_matches = pattern_ast.matches_in_tree(&test_tree);
let query = Query::new(language, &pattern).unwrap();
let query = match Query::new(language, &pattern) {
Ok(query) => query,
Err(e) => {
panic!("failed to build query for pattern {pattern} - {e}. seed: {seed}");
}
};
let mut actual_matches = cursor
.matches(
&query,

View file

@ -3,7 +3,7 @@ name = "tree-sitter"
description = "Rust bindings to the Tree-sitter parsing library"
version = "0.20.9"
authors = ["Max Brunsfeld <maxbrunsfeld@gmail.com>"]
edition = "2018"
edition = "2021"
license = "MIT"
readme = "binding_rust/README.md"
keywords = ["incremental", "parsing"]