Tweak query tests
This commit is contained in:
parent
fa869cf3ed
commit
bd63fb2a0d
4 changed files with 44 additions and 19 deletions
7
Cargo.lock
generated
7
Cargo.lock
generated
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue