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