@@ -230,7 +230,7 @@ public void testXmlBlocksQuery() throws Exception {
230230 @ Test
231231 public void testEmptyQuery () throws Exception {
232232 try (final var query = TSQuery .EMPTY ) {
233- assertThat (query .isValid ()).isFalse ();
233+ assertThat (query .canAccess ()).isFalse ();
234234 assertThat (query .getPatternCount ()).isEqualTo (0 );
235235 assertThat (query .getCaptureCount ()).isEqualTo (0 );
236236 assertThat (query .getStringCount ()).isEqualTo (0 );
@@ -241,4 +241,129 @@ public void testEmptyQuery() throws Exception {
241241 public void testQueryConstructionError () throws Exception {
242242 new TSQuery (null , "not-empty" ).close ();
243243 }
244+
245+ @ Test
246+ public void testQueryQuantifierZero () {
247+ final var lang = TSLanguageJava .getInstance ();
248+ try (final var parser = new TSParser ()) {
249+ parser .setLanguage (lang );
250+ String javaSource = "public class Main { void a() {} void b() {} void c() {} void d() {} void e() {} }" ;
251+ String querySource = "(class_declaration name: (identifier) @class_name)" ;
252+
253+ try (final var tree = parser .parseString (javaSource ); final var query = new TSQuery (lang ,
254+ querySource ); final var cursor = new TSQueryCursor ()) {
255+
256+ assertThat (query .canAccess ()).isTrue ();
257+ assertThat (query .getErrorType ()).isEqualTo (TSQueryError .None );
258+
259+ cursor .exec (query , tree .getRootNode ());
260+
261+ // pattern 0 -> method_declaration
262+ // capture 1 -> invalid capture id, result must be TSQuantifier.Zero
263+ final var quantifier = query .getCaptureQuantifierForId (0 , 1 );
264+ assertThat (quantifier ).isNotNull ();
265+ assertThat (quantifier ).isEqualTo (TSQuantifier .Zero );
266+ }
267+ }
268+ }
269+
270+ @ Test
271+ public void testQueryQuantifierZeroOrOne () {
272+ final var lang = TSLanguageJava .getInstance ();
273+ try (final var parser = new TSParser ()) {
274+ parser .setLanguage (lang );
275+ String javaSource = "public class Main { void a() {} void b() {} void c() {} void d() {} void e() {} }" ;
276+ String querySource = "(class_declaration name: (identifier)? @class_name)" ;
277+
278+ try (final var tree = parser .parseString (javaSource ); final var query = new TSQuery (lang ,
279+ querySource ); final var cursor = new TSQueryCursor ()) {
280+
281+ assertThat (query .canAccess ()).isTrue ();
282+ assertThat (query .getErrorType ()).isEqualTo (TSQueryError .None );
283+
284+ cursor .exec (query , tree .getRootNode ());
285+
286+ // pattern 0 -> method_declaration
287+ // capture 0 -> @method_name
288+ final var quantifier = query .getCaptureQuantifierForId (0 , 0 );
289+ assertThat (quantifier ).isNotNull ();
290+ assertThat (quantifier ).isEqualTo (TSQuantifier .ZeroOrOne );
291+ }
292+ }
293+ }
294+
295+ @ Test
296+ public void testQueryQuantifierZeroOrMore () {
297+ final var lang = TSLanguageJava .getInstance ();
298+ try (final var parser = new TSParser ()) {
299+ parser .setLanguage (lang );
300+ String javaSource = "public class Main { void a() {} void b() {} void c() {} void d() {} void e() {} }" ;
301+ String querySource = "(method_declaration name: (identifier)* @method_name)" ;
302+
303+ try (final var tree = parser .parseString (javaSource ); final var query = new TSQuery (lang ,
304+ querySource ); final var cursor = new TSQueryCursor ()) {
305+
306+ assertThat (query .canAccess ()).isTrue ();
307+ assertThat (query .getErrorType ()).isEqualTo (TSQueryError .None );
308+
309+ cursor .exec (query , tree .getRootNode ());
310+
311+ // pattern 0 -> method_declaration
312+ // capture 0 -> @method_name
313+ final var quantifier = query .getCaptureQuantifierForId (0 , 0 );
314+ assertThat (quantifier ).isNotNull ();
315+ assertThat (quantifier ).isEqualTo (TSQuantifier .ZeroOrMore );
316+ }
317+ }
318+ }
319+
320+ @ Test
321+ public void testQueryQuantifierOne () {
322+ final var lang = TSLanguageJava .getInstance ();
323+ try (final var parser = new TSParser ()) {
324+ parser .setLanguage (lang );
325+ String javaSource = "public class Main { void a() {} void b() {} void c() {} void d() {} void e() {} }" ;
326+ String querySource = "(method_declaration name: (_) @method_name)" ;
327+
328+ try (final var tree = parser .parseString (javaSource ); final var query = new TSQuery (lang ,
329+ querySource ); final var cursor = new TSQueryCursor ()) {
330+
331+ assertThat (query .canAccess ()).isTrue ();
332+ assertThat (query .getErrorType ()).isEqualTo (TSQueryError .None );
333+
334+ cursor .exec (query , tree .getRootNode ());
335+
336+ // pattern 0 -> method_declaration
337+ // capture 0 -> @method_name
338+ final var quantifier = query .getCaptureQuantifierForId (0 , 0 );
339+ assertThat (quantifier ).isNotNull ();
340+ assertThat (quantifier ).isEqualTo (TSQuantifier .One );
341+ }
342+ }
343+ }
344+
345+ @ Test
346+ public void testQueryQuantifierOneOrMore () {
347+ final var lang = TSLanguageJava .getInstance ();
348+ try (final var parser = new TSParser ()) {
349+ parser .setLanguage (lang );
350+ String javaSource = "public class Main { void a() {} void b() {} void c() {} void d() {} void e() {} }" ;
351+ String querySource = "(method_declaration name: (identifier)+ @method_name)" ;
352+
353+ try (final var tree = parser .parseString (javaSource ); final var query = new TSQuery (lang ,
354+ querySource ); final var cursor = new TSQueryCursor ()) {
355+
356+ assertThat (query .canAccess ()).isTrue ();
357+ assertThat (query .getErrorType ()).isEqualTo (TSQueryError .None );
358+
359+ cursor .exec (query , tree .getRootNode ());
360+
361+ // pattern 0 -> method_declaration
362+ // capture 0 -> @method_name
363+ final var quantifier = query .getCaptureQuantifierForId (0 , 0 );
364+ assertThat (quantifier ).isNotNull ();
365+ assertThat (quantifier ).isEqualTo (TSQuantifier .OneOrMore );
366+ }
367+ }
368+ }
244369}
0 commit comments