1 module tests.match; 2 3 import unit_threaded; 4 import cucumber.keywords; 5 import cucumber.feature; 6 7 package string[] matchFuncCalls; 8 9 @Match(r"^I match a passing step$") 10 void passingStep1() { 11 matchFuncCalls ~= "passingStep1"; 12 } 13 14 @Match(r"^I also match a passing step$") 15 void passingStep2() { 16 matchFuncCalls ~= "passingStep2"; 17 } 18 19 @Match(r"^What about me. I also pass$") 20 void passingStep3() { 21 matchFuncCalls ~= "passingStep3"; 22 } 23 24 @Match(r"I match a failing step$") 25 void failingStep() { 26 matchFuncCalls ~= "failingStep"; 27 throw new Exception("Exception: step failed"); 28 } 29 30 private { 31 @Match(r"Never going to see me") 32 void privateStep(); 33 } 34 35 36 void testMatchPassing12() { 37 matchFuncCalls = []; 38 const results = runFeature!__MODULE__(["Feature: A feature", " Scenario: A Scenario:", 39 "I match a passing step", "I also match a passing step"]); 40 shouldEqual(results.numScenarios, 1); 41 shouldEqual(results.numPassing, 1); 42 shouldEqual(results.numFailing, 0); 43 shouldEqual(results.numPending, 0); 44 shouldEqual(results.numUndefined, 0); 45 shouldEqual(results.toString(), "1 scenario (1 passed)"); 46 shouldEqual(matchFuncCalls, ["passingStep1", "passingStep2"]); 47 } 48 49 void testMatchPassing3() { 50 matchFuncCalls = []; 51 const results = runFeature!__MODULE__(["What about me? I also pass"]); 52 shouldEqual(results.numScenarios, 1); 53 shouldEqual(results.numPassing, 1); 54 shouldEqual(results.numFailing, 0); 55 shouldEqual(results.numPending, 0); 56 shouldEqual(results.numUndefined, 0); 57 shouldEqual(results.toString(), "1 scenario (1 passed)"); 58 shouldEqual(matchFuncCalls, ["passingStep3"]); 59 } 60 61 void testMatchNotPassing() { 62 matchFuncCalls = []; 63 const results = runFeature!__MODULE__(["I match a failing step"]); 64 shouldEqual(results.numScenarios, 1); 65 shouldEqual(results.numPassing, 0); 66 shouldEqual(results.numFailing, 1); 67 shouldEqual(results.numPending, 0); 68 shouldEqual(results.numUndefined, 0); 69 shouldEqual(results.toString(), "1 scenario (1 failed)"); 70 shouldEqual(matchFuncCalls, ["failingStep"]); 71 } 72 73 74 void testUndefinedWithWrongString() { 75 matchFuncCalls = []; 76 const results = runFeature!__MODULE__(["totally invented string"]); 77 shouldEqual(results.numScenarios, 1); 78 shouldEqual(results.numPassing, 0); 79 shouldEqual(results.numFailing, 0); 80 shouldEqual(results.numPending, 0); 81 shouldEqual(results.numUndefined, 1); 82 shouldEqual(results.toString(), "1 scenario (1 undefined)"); 83 shouldEqual(matchFuncCalls, []); 84 } 85 86 87 @Match(r"Gotta match pending") 88 void pendingStep() { 89 pending(); 90 } 91 92 void testPending() { 93 matchFuncCalls = []; 94 const results = runFeature!__MODULE__(["Gotta match pending"]); 95 shouldEqual(results.numScenarios, 1); 96 shouldEqual(results.numPassing, 0); 97 shouldEqual(results.numFailing, 0); 98 shouldEqual(results.numPending, 1); 99 shouldEqual(results.toString(), "1 scenario (1 pending)"); 100 shouldEqual(matchFuncCalls, []); 101 }