@@ -15,6 +15,7 @@ const path = require("path");
1515const { EventEmitter } = require ( "events" ) ;
1616const _ = require ( "lodash" ) ;
1717const fs = require ( "fs-extra" ) ;
18+ const { compileTagFilter } = require ( "src/utils/cli" ) ;
1819
1920const { NEW_BUILD_INSTRUCTION } = TestReaderEvents ;
2021
@@ -515,7 +516,7 @@ describe("test-reader/test-parser", () => {
515516 } ) ;
516517
517518 describe ( "parse" , ( ) => {
518- const parse_ = async ( { files, browserId, config, grep } = { } , loadFilesConfig ) => {
519+ const parse_ = async ( { files, browserId, config, grep, tag } = { } , loadFilesConfig ) => {
519520 loadFilesConfig = loadFilesConfig || makeConfigStub ( ) ;
520521 config = _ . defaults ( config , {
521522 desiredCapabilities : { } ,
@@ -524,7 +525,7 @@ describe("test-reader/test-parser", () => {
524525 const parser = new TestParser ( ) ;
525526 await parser . loadFiles ( [ ] , { config : loadFilesConfig } ) ;
526527
527- return parser . parse ( files || [ ] , { browserId, config, grep } ) ;
528+ return parser . parse ( files || [ ] , { browserId, config, grep, tag } ) ;
528529 } ;
529530
530531 beforeEach ( ( ) => {
@@ -616,6 +617,76 @@ describe("test-reader/test-parser", () => {
616617 } ) ;
617618 } ) ;
618619
620+ describe ( "tag" , ( ) => {
621+ it ( "should not set test filter to tree builder if grep not set" , async ( ) => {
622+ await parse_ ( ) ;
623+
624+ assert . notCalled ( TreeBuilder . prototype . addTestFilter ) ;
625+ } ) ;
626+
627+ describe ( "if set" , ( ) => {
628+ it ( "should set test filter to tree builder" , async ( ) => {
629+ await parse_ ( { tag : compileTagFilter ( "smoke" ) } ) ;
630+
631+ assert . calledOnceWith ( TreeBuilder . prototype . addTestFilter , sinon . match . func ) ;
632+ } ) ;
633+
634+ it ( "should set test filter to tree builder before applying filters" , async ( ) => {
635+ await parse_ ( { tag : compileTagFilter ( "smoke" ) } ) ;
636+
637+ assert . callOrder ( TreeBuilder . prototype . addTestFilter , TreeBuilder . prototype . applyFilters ) ;
638+ } ) ;
639+
640+ it ( "installed filter should accept matched test" , async ( ) => {
641+ await parse_ ( { tag : compileTagFilter ( "smoke" ) } ) ;
642+
643+ const filter = TreeBuilder . prototype . addTestFilter . lastCall . args [ 0 ] ;
644+ const test = { fullTitle : ( ) => "Some name" , tag : new Map ( [ [ "smoke" , false ] ] ) } ;
645+
646+ assert . isTrue ( filter ( test ) ) ;
647+ } ) ;
648+
649+ it ( "installed filter should accept matched test with and operator for tags" , async ( ) => {
650+ await parse_ ( { tag : compileTagFilter ( "smoke&slow" ) } ) ;
651+
652+ const filter = TreeBuilder . prototype . addTestFilter . lastCall . args [ 0 ] ;
653+ const test = {
654+ fullTitle : ( ) => "Some name" ,
655+ tag : new Map ( [
656+ [ "smoke" , false ] ,
657+ [ "slow" , false ] ,
658+ ] ) ,
659+ } ;
660+
661+ assert . isTrue ( filter ( test ) ) ;
662+ } ) ;
663+
664+ it ( "installed filter should accept matched test with or operator for tags" , async ( ) => {
665+ await parse_ ( { tag : compileTagFilter ( "smoke|slow" ) } ) ;
666+
667+ const filter = TreeBuilder . prototype . addTestFilter . lastCall . args [ 0 ] ;
668+ const test = {
669+ fullTitle : ( ) => "Some name" ,
670+ tag : new Map ( [
671+ [ "smoke" , false ] ,
672+ [ "fast" , false ] ,
673+ ] ) ,
674+ } ;
675+
676+ assert . isTrue ( filter ( test ) ) ;
677+ } ) ;
678+
679+ it ( "installed filter should ignore not matched test" , async ( ) => {
680+ await parse_ ( { tag : compileTagFilter ( "desktop" ) } ) ;
681+
682+ const filter = TreeBuilder . prototype . addTestFilter . lastCall . args [ 0 ] ;
683+ const test = { fullTitle : ( ) => "Some name" , tag : new Map ( [ [ "smoke" , false ] ] ) } ;
684+
685+ assert . isFalse ( filter ( test ) ) ;
686+ } ) ;
687+ } ) ;
688+ } ) ;
689+
619690 describe ( "grep" , ( ) => {
620691 it ( "should not set test filter to tree builder if grep not set" , async ( ) => {
621692 await parse_ ( ) ;
0 commit comments