Merge pull request #247 from titouanfreville/fix_formatter_injected_text
<fix>(PRETIFIER): fix s method
Этот коммит содержится в:
		
						коммит
						b6e87e0655
					
				
					 8 изменённых файлов: 213 добавлений и 58 удалений
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										предоставленный
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										предоставленный
									
									
								
							|  | @ -5,3 +5,4 @@ Gopkg.lock | ||||||
| Gopkg.toml | Gopkg.toml | ||||||
| 
 | 
 | ||||||
| .DS_Store | .DS_Store | ||||||
|  | .idea | ||||||
|  | @ -45,6 +45,7 @@ Feature: pretty formatter | ||||||
|       No steps |       No steps | ||||||
|       0s |       0s | ||||||
|     """ |     """ | ||||||
|  | 
 | ||||||
|   Scenario: Support of Feature Plus Scenario Outline |   Scenario: Support of Feature Plus Scenario Outline | ||||||
|     Given a feature "features/simple.feature" file: |     Given a feature "features/simple.feature" file: | ||||||
|     """ |     """ | ||||||
|  | @ -111,6 +112,7 @@ Feature: pretty formatter | ||||||
|       No steps |       No steps | ||||||
|       0s |       0s | ||||||
|     """ |     """ | ||||||
|  | 
 | ||||||
|   Scenario: Support of Feature Plus Scenario With Steps |   Scenario: Support of Feature Plus Scenario With Steps | ||||||
|     Given a feature "features/simple.feature" file: |     Given a feature "features/simple.feature" file: | ||||||
|     """ |     """ | ||||||
|  | @ -146,6 +148,7 @@ Feature: pretty formatter | ||||||
|       2 steps (1 passed, 1 failed) |       2 steps (1 passed, 1 failed) | ||||||
|       0s |       0s | ||||||
|     """ |     """ | ||||||
|  | 
 | ||||||
|   Scenario: Support of Feature Plus Scenario Outline With Steps |   Scenario: Support of Feature Plus Scenario Outline With Steps | ||||||
|     Given a feature "features/simple.feature" file: |     Given a feature "features/simple.feature" file: | ||||||
|     """ |     """ | ||||||
|  | @ -214,6 +217,7 @@ Feature: pretty formatter | ||||||
|       No steps |       No steps | ||||||
|       0s |       0s | ||||||
|     """ |     """ | ||||||
|  | 
 | ||||||
|   Scenario: Support of Docstrings |   Scenario: Support of Docstrings | ||||||
|     Given a feature "features/simple.feature" file: |     Given a feature "features/simple.feature" file: | ||||||
|     """ |     """ | ||||||
|  | @ -244,6 +248,7 @@ Feature: pretty formatter | ||||||
|       1 steps (1 passed) |       1 steps (1 passed) | ||||||
|       0s |       0s | ||||||
|     """ |     """ | ||||||
|  | 
 | ||||||
|   Scenario: Support of Undefined, Pending and Skipped status |   Scenario: Support of Undefined, Pending and Skipped status | ||||||
|     Given a feature "features/simple.feature" file: |     Given a feature "features/simple.feature" file: | ||||||
|     """ |     """ | ||||||
|  | @ -286,3 +291,41 @@ Feature: pretty formatter | ||||||
|         s.Step(`^undefined$`, undefined) |         s.Step(`^undefined$`, undefined) | ||||||
|       } |       } | ||||||
|     """ |     """ | ||||||
|  | 
 | ||||||
|  |   # Ensure s will not break when injecting data from BeforeStep | ||||||
|  |   Scenario: Support data injection in BeforeStep | ||||||
|  |     Given a feature "features/inject.feature" file: | ||||||
|  |     """ | ||||||
|  |       Feature: inject long value | ||||||
|  | 
 | ||||||
|  |       Scenario: test scenario | ||||||
|  |         Given Ignore I save some value X under key Y | ||||||
|  |         And I allow variable injection | ||||||
|  |         When Ignore I use value {{Y}} | ||||||
|  |         Then Ignore Godog rendering should not break | ||||||
|  |         And Ignore test | ||||||
|  |           | key | val | | ||||||
|  |           | 1   | 2   | | ||||||
|  |           | 3   | 4   | | ||||||
|  |         And I disable variable injection | ||||||
|  |     """ | ||||||
|  |     When I run feature suite with formatter "pretty" | ||||||
|  |     Then the rendered output will be as follows: | ||||||
|  |     """ | ||||||
|  |       Feature: inject long value | ||||||
|  | 
 | ||||||
|  |         Scenario: test scenario                        # features/inject.feature:3 | ||||||
|  |           Given Ignore I save some value X under key Y # suite_context.go:0 -> SuiteContext.func7 | ||||||
|  |           And I allow variable injection               # suite_context.go:0 -> *suiteContext | ||||||
|  |           When Ignore I use value someverylonginjectionsoweacanbesureitsurpasstheinitiallongeststeplenghtanditwillhelptestsmethodsafety # suite_context.go:0 -> SuiteContext.func7 | ||||||
|  |           Then Ignore Godog rendering should not break # suite_context.go:0 -> SuiteContext.func7 | ||||||
|  |           And Ignore test                              # suite_context.go:0 -> SuiteContext.func7 | ||||||
|  |             | key | val | | ||||||
|  |             | 1   | 2   | | ||||||
|  |             | 3   | 4   | | ||||||
|  |           And I disable variable injection             # suite_context.go:0 -> *suiteContext | ||||||
|  | 
 | ||||||
|  |       1 scenarios (1 passed) | ||||||
|  |       6 steps (6 passed) | ||||||
|  |       0s | ||||||
|  |     """ | ||||||
|  | @ -2098,11 +2098,15 @@ | ||||||
|         "comments": [ |         "comments": [ | ||||||
|             { |             { | ||||||
|                 "value": "# Currently godog only supports comments on Feature and not", |                 "value": "# Currently godog only supports comments on Feature and not", | ||||||
|                 "line": 193 |                 "line": 196 | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "value": "# scenario and steps.", |                 "value": "# scenario and steps.", | ||||||
|                 "line": 194 |                 "line": 197 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "value": "# Ensure s will not break when injecting data from BeforeStep", | ||||||
|  |                 "line": 295 | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "elements": [ |         "elements": [ | ||||||
|  | @ -2223,17 +2227,17 @@ | ||||||
|                 "keyword": "Scenario", |                 "keyword": "Scenario", | ||||||
|                 "name": "Support of Feature Plus Scenario Outline", |                 "name": "Support of Feature Plus Scenario Outline", | ||||||
|                 "description": "", |                 "description": "", | ||||||
|                 "line": 48, |                 "line": 49, | ||||||
|                 "type": "scenario", |                 "type": "scenario", | ||||||
|                 "steps": [ |                 "steps": [ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Given ", |                         "keyword": "Given ", | ||||||
|                         "name": "a feature \"features/simple.feature\" file:", |                         "name": "a feature \"features/simple.feature\" file:", | ||||||
|                         "line": 49, |                         "line": 50, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "    Feature: simple feature\n        simple feature description\n\n    Scenario Outline: simple scenario\n        simple scenario description\n\n    Examples: simple examples\n    | status |\n    | pass   |\n    | fail   |", |                             "value": "    Feature: simple feature\n        simple feature description\n\n    Scenario Outline: simple scenario\n        simple scenario description\n\n    Examples: simple examples\n    | status |\n    | pass   |\n    | fail   |", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 50 |                             "line": 51 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2246,7 +2250,7 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "When ", |                         "keyword": "When ", | ||||||
|                         "name": "I run feature suite with formatter \"pretty\"", |                         "name": "I run feature suite with formatter \"pretty\"", | ||||||
|                         "line": 62, |                         "line": 63, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|                         }, |                         }, | ||||||
|  | @ -2258,11 +2262,11 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Then ", |                         "keyword": "Then ", | ||||||
|                         "name": "the rendered output will be as follows:", |                         "name": "the rendered output will be as follows:", | ||||||
|                         "line": 63, |                         "line": 64, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario Outline: simple scenario # features/simple.feature:4\n\n      Examples: simple examples\n        | status |\n        | pass   |\n        | fail   |\n\n  2 scenarios (2 undefined)\n  No steps\n  0s", |                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario Outline: simple scenario # features/simple.feature:4\n\n      Examples: simple examples\n        | status |\n        | pass   |\n        | fail   |\n\n  2 scenarios (2 undefined)\n  No steps\n  0s", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 64 |                             "line": 65 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2279,17 +2283,17 @@ | ||||||
|                 "keyword": "Scenario", |                 "keyword": "Scenario", | ||||||
|                 "name": "Support of Feature Plus Scenario Outline With Tags", |                 "name": "Support of Feature Plus Scenario Outline With Tags", | ||||||
|                 "description": "", |                 "description": "", | ||||||
|                 "line": 80, |                 "line": 81, | ||||||
|                 "type": "scenario", |                 "type": "scenario", | ||||||
|                 "steps": [ |                 "steps": [ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Given ", |                         "keyword": "Given ", | ||||||
|                         "name": "a feature \"features/simple.feature\" file:", |                         "name": "a feature \"features/simple.feature\" file:", | ||||||
|                         "line": 81, |                         "line": 82, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "    @TAG1\n    Feature: simple feature\n        simple feature description\n\n    @TAG2\n    Scenario Outline: simple scenario\n        simple scenario description\n\n    @TAG3\n    Examples: simple examples\n    | status |\n    | pass   |\n    | fail   |", |                             "value": "    @TAG1\n    Feature: simple feature\n        simple feature description\n\n    @TAG2\n    Scenario Outline: simple scenario\n        simple scenario description\n\n    @TAG3\n    Examples: simple examples\n    | status |\n    | pass   |\n    | fail   |", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 82 |                             "line": 83 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2302,7 +2306,7 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "When ", |                         "keyword": "When ", | ||||||
|                         "name": "I run feature suite with formatter \"pretty\"", |                         "name": "I run feature suite with formatter \"pretty\"", | ||||||
|                         "line": 97, |                         "line": 98, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|                         }, |                         }, | ||||||
|  | @ -2314,11 +2318,11 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Then ", |                         "keyword": "Then ", | ||||||
|                         "name": "the rendered output will be as follows:", |                         "name": "the rendered output will be as follows:", | ||||||
|                         "line": 98, |                         "line": 99, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario Outline: simple scenario # features/simple.feature:6\n\n      Examples: simple examples\n        | status |\n        | pass   |\n        | fail   |\n\n  2 scenarios (2 undefined)\n  No steps\n  0s", |                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario Outline: simple scenario # features/simple.feature:6\n\n      Examples: simple examples\n        | status |\n        | pass   |\n        | fail   |\n\n  2 scenarios (2 undefined)\n  No steps\n  0s", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 99 |                             "line": 100 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2335,17 +2339,17 @@ | ||||||
|                 "keyword": "Scenario", |                 "keyword": "Scenario", | ||||||
|                 "name": "Support of Feature Plus Scenario With Steps", |                 "name": "Support of Feature Plus Scenario With Steps", | ||||||
|                 "description": "", |                 "description": "", | ||||||
|                 "line": 114, |                 "line": 116, | ||||||
|                 "type": "scenario", |                 "type": "scenario", | ||||||
|                 "steps": [ |                 "steps": [ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Given ", |                         "keyword": "Given ", | ||||||
|                         "name": "a feature \"features/simple.feature\" file:", |                         "name": "a feature \"features/simple.feature\" file:", | ||||||
|                         "line": 115, |                         "line": 117, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "    Feature: simple feature\n        simple feature description\n\n    Scenario: simple scenario\n        simple scenario description\n\n    Given passing step\n    Then a failing step\n", |                             "value": "    Feature: simple feature\n        simple feature description\n\n    Scenario: simple scenario\n        simple scenario description\n\n    Given passing step\n    Then a failing step\n", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 116 |                             "line": 118 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2358,7 +2362,7 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "When ", |                         "keyword": "When ", | ||||||
|                         "name": "I run feature suite with formatter \"pretty\"", |                         "name": "I run feature suite with formatter \"pretty\"", | ||||||
|                         "line": 127, |                         "line": 129, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|                         }, |                         }, | ||||||
|  | @ -2370,11 +2374,11 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Then ", |                         "keyword": "Then ", | ||||||
|                         "name": "the rendered output will be as follows:", |                         "name": "the rendered output will be as follows:", | ||||||
|                         "line": 128, |                         "line": 130, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario: simple scenario # features/simple.feature:4\n      Given passing step      # suite_context.go:0 -\u003e SuiteContext.func2\n      Then a failing step     # suite_context.go:0 -\u003e *suiteContext\n      intentional failure\n\n  --- Failed steps:\n\n    Scenario: simple scenario # features/simple.feature:4\n      Then a failing step # features/simple.feature:8\n        Error: intentional failure\n\n\n  1 scenarios (1 failed)\n  2 steps (1 passed, 1 failed)\n  0s", |                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario: simple scenario # features/simple.feature:4\n      Given passing step      # suite_context.go:0 -\u003e SuiteContext.func2\n      Then a failing step     # suite_context.go:0 -\u003e *suiteContext\n      intentional failure\n\n  --- Failed steps:\n\n    Scenario: simple scenario # features/simple.feature:4\n      Then a failing step # features/simple.feature:8\n        Error: intentional failure\n\n\n  1 scenarios (1 failed)\n  2 steps (1 passed, 1 failed)\n  0s", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 129 |                             "line": 131 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2391,17 +2395,17 @@ | ||||||
|                 "keyword": "Scenario", |                 "keyword": "Scenario", | ||||||
|                 "name": "Support of Feature Plus Scenario Outline With Steps", |                 "name": "Support of Feature Plus Scenario Outline With Steps", | ||||||
|                 "description": "", |                 "description": "", | ||||||
|                 "line": 149, |                 "line": 152, | ||||||
|                 "type": "scenario", |                 "type": "scenario", | ||||||
|                 "steps": [ |                 "steps": [ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Given ", |                         "keyword": "Given ", | ||||||
|                         "name": "a feature \"features/simple.feature\" file:", |                         "name": "a feature \"features/simple.feature\" file:", | ||||||
|                         "line": 150, |                         "line": 153, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario Outline: simple scenario\n    simple scenario description\n\n      Given \u003cstatus\u003e step\n\n    Examples: simple examples\n    | status |\n    | passing |\n    | failing |\n", |                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario Outline: simple scenario\n    simple scenario description\n\n      Given \u003cstatus\u003e step\n\n    Examples: simple examples\n    | status |\n    | passing |\n    | failing |\n", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 151 |                             "line": 154 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2414,7 +2418,7 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "When ", |                         "keyword": "When ", | ||||||
|                         "name": "I run feature suite with formatter \"pretty\"", |                         "name": "I run feature suite with formatter \"pretty\"", | ||||||
|                         "line": 166, |                         "line": 169, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|                         }, |                         }, | ||||||
|  | @ -2426,11 +2430,11 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Then ", |                         "keyword": "Then ", | ||||||
|                         "name": "the rendered output will be as follows:", |                         "name": "the rendered output will be as follows:", | ||||||
|                         "line": 167, |                         "line": 170, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario Outline: simple scenario # features/simple.feature:4\n      Given \u003cstatus\u003e step             # suite_context.go:0 -\u003e SuiteContext.func2\n\n      Examples: simple examples\n        | status  |\n        | passing |\n        | failing |\n          intentional failure\n\n  --- Failed steps:\n\n    Scenario Outline: simple scenario # features/simple.feature:4\n      Given failing step # features/simple.feature:7\n        Error: intentional failure\n\n\n  2 scenarios (1 passed, 1 failed)\n  2 steps (1 passed, 1 failed)\n  0s", |                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario Outline: simple scenario # features/simple.feature:4\n      Given \u003cstatus\u003e step             # suite_context.go:0 -\u003e SuiteContext.func2\n\n      Examples: simple examples\n        | status  |\n        | passing |\n        | failing |\n          intentional failure\n\n  --- Failed steps:\n\n    Scenario Outline: simple scenario # features/simple.feature:4\n      Given failing step # features/simple.feature:7\n        Error: intentional failure\n\n\n  2 scenarios (1 passed, 1 failed)\n  2 steps (1 passed, 1 failed)\n  0s", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 168 |                             "line": 171 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2447,17 +2451,17 @@ | ||||||
|                 "keyword": "Scenario", |                 "keyword": "Scenario", | ||||||
|                 "name": "Support of Comments", |                 "name": "Support of Comments", | ||||||
|                 "description": "", |                 "description": "", | ||||||
|                 "line": 195, |                 "line": 198, | ||||||
|                 "type": "scenario", |                 "type": "scenario", | ||||||
|                 "steps": [ |                 "steps": [ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Given ", |                         "keyword": "Given ", | ||||||
|                         "name": "a feature \"features/simple.feature\" file:", |                         "name": "a feature \"features/simple.feature\" file:", | ||||||
|                         "line": 196, |                         "line": 199, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "    #Feature comment\n    Feature: simple feature\n      simple description\n\n      Scenario: simple scenario\n      simple feature description", |                             "value": "    #Feature comment\n    Feature: simple feature\n      simple description\n\n      Scenario: simple scenario\n      simple feature description", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 197 |                             "line": 200 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2470,7 +2474,7 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "When ", |                         "keyword": "When ", | ||||||
|                         "name": "I run feature suite with formatter \"pretty\"", |                         "name": "I run feature suite with formatter \"pretty\"", | ||||||
|                         "line": 205, |                         "line": 208, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|                         }, |                         }, | ||||||
|  | @ -2482,11 +2486,11 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Then ", |                         "keyword": "Then ", | ||||||
|                         "name": "the rendered output will be as follows:", |                         "name": "the rendered output will be as follows:", | ||||||
|                         "line": 206, |                         "line": 209, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "  Feature: simple feature\n    simple description\n\n    Scenario: simple scenario # features/simple.feature:5\n\n  1 scenarios (1 undefined)\n  No steps\n  0s", |                             "value": "  Feature: simple feature\n    simple description\n\n    Scenario: simple scenario # features/simple.feature:5\n\n  1 scenarios (1 undefined)\n  No steps\n  0s", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 207 |                             "line": 210 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2503,17 +2507,17 @@ | ||||||
|                 "keyword": "Scenario", |                 "keyword": "Scenario", | ||||||
|                 "name": "Support of Docstrings", |                 "name": "Support of Docstrings", | ||||||
|                 "description": "", |                 "description": "", | ||||||
|                 "line": 217, |                 "line": 221, | ||||||
|                 "type": "scenario", |                 "type": "scenario", | ||||||
|                 "steps": [ |                 "steps": [ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Given ", |                         "keyword": "Given ", | ||||||
|                         "name": "a feature \"features/simple.feature\" file:", |                         "name": "a feature \"features/simple.feature\" file:", | ||||||
|                         "line": 218, |                         "line": 222, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "    Feature: simple feature\n      simple description\n\n      Scenario: simple scenario\n      simple feature description\n\n      Given passing step\n      \"\"\" content type\n      step doc string\n      \"\"\"", |                             "value": "    Feature: simple feature\n      simple description\n\n      Scenario: simple scenario\n      simple feature description\n\n      Given passing step\n      \"\"\" content type\n      step doc string\n      \"\"\"", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 219 |                             "line": 223 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2526,7 +2530,7 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "When ", |                         "keyword": "When ", | ||||||
|                         "name": "I run feature suite with formatter \"pretty\"", |                         "name": "I run feature suite with formatter \"pretty\"", | ||||||
|                         "line": 231, |                         "line": 235, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|                         }, |                         }, | ||||||
|  | @ -2538,11 +2542,11 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Then ", |                         "keyword": "Then ", | ||||||
|                         "name": "the rendered output will be as follows:", |                         "name": "the rendered output will be as follows:", | ||||||
|                         "line": 232, |                         "line": 236, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "  Feature: simple feature\n    simple description\n\n    Scenario: simple scenario # features/simple.feature:4\n      Given passing step      # suite_context.go:0 -\u003e SuiteContext.func2\n        \"\"\"  content type\n        step doc string\n        \"\"\"\n\n  1 scenarios (1 passed)\n  1 steps (1 passed)\n  0s", |                             "value": "  Feature: simple feature\n    simple description\n\n    Scenario: simple scenario # features/simple.feature:4\n      Given passing step      # suite_context.go:0 -\u003e SuiteContext.func2\n        \"\"\"  content type\n        step doc string\n        \"\"\"\n\n  1 scenarios (1 passed)\n  1 steps (1 passed)\n  0s", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 233 |                             "line": 237 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2559,17 +2563,17 @@ | ||||||
|                 "keyword": "Scenario", |                 "keyword": "Scenario", | ||||||
|                 "name": "Support of Undefined, Pending and Skipped status", |                 "name": "Support of Undefined, Pending and Skipped status", | ||||||
|                 "description": "", |                 "description": "", | ||||||
|                 "line": 247, |                 "line": 252, | ||||||
|                 "type": "scenario", |                 "type": "scenario", | ||||||
|                 "steps": [ |                 "steps": [ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Given ", |                         "keyword": "Given ", | ||||||
|                         "name": "a feature \"features/simple.feature\" file:", |                         "name": "a feature \"features/simple.feature\" file:", | ||||||
|                         "line": 248, |                         "line": 253, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "  Feature: simple feature\n  simple feature description\n\n  Scenario: simple scenario\n  simple scenario description\n\n    Given passing step\n    And pending step\n    And undefined\n    And passing step\n", |                             "value": "  Feature: simple feature\n  simple feature description\n\n  Scenario: simple scenario\n  simple scenario description\n\n    Given passing step\n    And pending step\n    And undefined\n    And passing step\n", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 249 |                             "line": 254 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  | @ -2582,7 +2586,7 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "When ", |                         "keyword": "When ", | ||||||
|                         "name": "I run feature suite with formatter \"pretty\"", |                         "name": "I run feature suite with formatter \"pretty\"", | ||||||
|                         "line": 262, |                         "line": 267, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|                         }, |                         }, | ||||||
|  | @ -2594,11 +2598,67 @@ | ||||||
|                     { |                     { | ||||||
|                         "keyword": "Then ", |                         "keyword": "Then ", | ||||||
|                         "name": "the rendered output will be as follows:", |                         "name": "the rendered output will be as follows:", | ||||||
|                         "line": 263, |                         "line": 268, | ||||||
|                         "doc_string": { |                         "doc_string": { | ||||||
|                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario: simple scenario # features/simple.feature:4\n      Given passing step      # suite_context.go:0 -\u003e SuiteContext.func2\n      And pending step        # suite_context.go:0 -\u003e SuiteContext.func1\n        TODO: write pending definition\n      And undefined\n      And passing step        # suite_context.go:0 -\u003e SuiteContext.func2\n\n  1 scenarios (1 pending, 1 undefined)\n  4 steps (1 passed, 1 pending, 1 undefined, 1 skipped)\n  0s\n\n  You can implement step definitions for undefined steps with these snippets:\n\n  func undefined() error {\n    return godog.ErrPending\n  }\n\n  func FeatureContext(s *godog.Suite) {\n    s.Step(`^undefined$`, undefined)\n  }", |                             "value": "  Feature: simple feature\n    simple feature description\n\n    Scenario: simple scenario # features/simple.feature:4\n      Given passing step      # suite_context.go:0 -\u003e SuiteContext.func2\n      And pending step        # suite_context.go:0 -\u003e SuiteContext.func1\n        TODO: write pending definition\n      And undefined\n      And passing step        # suite_context.go:0 -\u003e SuiteContext.func2\n\n  1 scenarios (1 pending, 1 undefined)\n  4 steps (1 passed, 1 pending, 1 undefined, 1 skipped)\n  0s\n\n  You can implement step definitions for undefined steps with these snippets:\n\n  func undefined() error {\n    return godog.ErrPending\n  }\n\n  func FeatureContext(s *godog.Suite) {\n    s.Step(`^undefined$`, undefined)\n  }", | ||||||
|                             "content_type": "", |                             "content_type": "", | ||||||
|                             "line": 264 |                             "line": 269 | ||||||
|  |                         }, | ||||||
|  |                         "match": { | ||||||
|  |                             "location": "suite_context.go:0" | ||||||
|  |                         }, | ||||||
|  |                         "result": { | ||||||
|  |                             "status": "passed", | ||||||
|  |                             "duration": 0 | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 ] | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "id": "pretty-formatter;support-data-injection-in-beforestep", | ||||||
|  |                 "keyword": "Scenario", | ||||||
|  |                 "name": "Support data injection in BeforeStep", | ||||||
|  |                 "description": "", | ||||||
|  |                 "line": 296, | ||||||
|  |                 "type": "scenario", | ||||||
|  |                 "steps": [ | ||||||
|  |                     { | ||||||
|  |                         "keyword": "Given ", | ||||||
|  |                         "name": "a feature \"features/inject.feature\" file:", | ||||||
|  |                         "line": 297, | ||||||
|  |                         "doc_string": { | ||||||
|  |                             "value": "  Feature: inject long value\n\n  Scenario: test scenario\n    Given Ignore I save some value X under key Y\n    And I allow variable injection\n    When Ignore I use value {{Y}}\n    Then Ignore Godog rendering should not break\n    And Ignore test\n      | key | val |\n      | 1   | 2   |\n      | 3   | 4   |\n    And I disable variable injection", | ||||||
|  |                             "content_type": "", | ||||||
|  |                             "line": 298 | ||||||
|  |                         }, | ||||||
|  |                         "match": { | ||||||
|  |                             "location": "suite_context.go:0" | ||||||
|  |                         }, | ||||||
|  |                         "result": { | ||||||
|  |                             "status": "passed", | ||||||
|  |                             "duration": 0 | ||||||
|  |                         } | ||||||
|  |                     }, | ||||||
|  |                     { | ||||||
|  |                         "keyword": "When ", | ||||||
|  |                         "name": "I run feature suite with formatter \"pretty\"", | ||||||
|  |                         "line": 312, | ||||||
|  |                         "match": { | ||||||
|  |                             "location": "suite_context.go:0" | ||||||
|  |                         }, | ||||||
|  |                         "result": { | ||||||
|  |                             "status": "passed", | ||||||
|  |                             "duration": 0 | ||||||
|  |                         } | ||||||
|  |                     }, | ||||||
|  |                     { | ||||||
|  |                         "keyword": "Then ", | ||||||
|  |                         "name": "the rendered output will be as follows:", | ||||||
|  |                         "line": 313, | ||||||
|  |                         "doc_string": { | ||||||
|  |                             "value": "  Feature: inject long value\n\n    Scenario: test scenario                        # features/inject.feature:3\n      Given Ignore I save some value X under key Y # suite_context.go:0 -\u003e SuiteContext.func7\n      And I allow variable injection               # suite_context.go:0 -\u003e *suiteContext\n      When Ignore I use value someverylonginjectionsoweacanbesureitsurpasstheinitiallongeststeplenghtanditwillhelptestsmethodsafety # suite_context.go:0 -\u003e SuiteContext.func7\n      Then Ignore Godog rendering should not break # suite_context.go:0 -\u003e SuiteContext.func7\n      And Ignore test                              # suite_context.go:0 -\u003e SuiteContext.func7\n        | key | val |\n        | 1   | 2   |\n        | 3   | 4   |\n      And I disable variable injection             # suite_context.go:0 -\u003e *suiteContext\n\n  1 scenarios (1 passed)\n  6 steps (6 passed)\n  0s", | ||||||
|  |                             "content_type": "", | ||||||
|  |                             "line": 314 | ||||||
|                         }, |                         }, | ||||||
|                         "match": { |                         "match": { | ||||||
|                             "location": "suite_context.go:0" |                             "location": "suite_context.go:0" | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| <testsuites name="succeed" tests="78" skipped="0" failures="0" errors="0" time="0"> | <testsuites name="succeed" tests="79" skipped="0" failures="0" errors="0" time="0"> | ||||||
|   <testsuite name="JUnit XML formatter" tests="9" skipped="0" failures="0" errors="0" time="0"> |   <testsuite name="JUnit XML formatter" tests="9" skipped="0" failures="0" errors="0" time="0"> | ||||||
|     <testcase name="Support of Feature Plus Scenario Node" status="passed" time="0"></testcase> |     <testcase name="Support of Feature Plus Scenario Node" status="passed" time="0"></testcase> | ||||||
|     <testcase name="Support of Feature Plus Scenario Node With Tags" status="passed" time="0"></testcase> |     <testcase name="Support of Feature Plus Scenario Node With Tags" status="passed" time="0"></testcase> | ||||||
|  | @ -35,7 +35,7 @@ | ||||||
|     <testcase name="loaded feature should have a number of scenarios #3" status="passed" time="0"></testcase> |     <testcase name="loaded feature should have a number of scenarios #3" status="passed" time="0"></testcase> | ||||||
|     <testcase name="load a number of feature files" status="passed" time="0"></testcase> |     <testcase name="load a number of feature files" status="passed" time="0"></testcase> | ||||||
|   </testsuite> |   </testsuite> | ||||||
|   <testsuite name="pretty formatter" tests="9" skipped="0" failures="0" errors="0" time="0"> |   <testsuite name="pretty formatter" tests="10" skipped="0" failures="0" errors="0" time="0"> | ||||||
|     <testcase name="Support of Feature Plus Scenario Node" status="passed" time="0"></testcase> |     <testcase name="Support of Feature Plus Scenario Node" status="passed" time="0"></testcase> | ||||||
|     <testcase name="Support of Feature Plus Scenario Node With Tags" status="passed" time="0"></testcase> |     <testcase name="Support of Feature Plus Scenario Node With Tags" status="passed" time="0"></testcase> | ||||||
|     <testcase name="Support of Feature Plus Scenario Outline" status="passed" time="0"></testcase> |     <testcase name="Support of Feature Plus Scenario Outline" status="passed" time="0"></testcase> | ||||||
|  | @ -45,6 +45,7 @@ | ||||||
|     <testcase name="Support of Comments" status="passed" time="0"></testcase> |     <testcase name="Support of Comments" status="passed" time="0"></testcase> | ||||||
|     <testcase name="Support of Docstrings" status="passed" time="0"></testcase> |     <testcase name="Support of Docstrings" status="passed" time="0"></testcase> | ||||||
|     <testcase name="Support of Undefined, Pending and Skipped status" status="passed" time="0"></testcase> |     <testcase name="Support of Undefined, Pending and Skipped status" status="passed" time="0"></testcase> | ||||||
|  |     <testcase name="Support data injection in BeforeStep" status="passed" time="0"></testcase> | ||||||
|   </testsuite> |   </testsuite> | ||||||
|   <testsuite name="run background" tests="3" skipped="0" failures="0" errors="0" time="0"> |   <testsuite name="run background" tests="3" skipped="0" failures="0" errors="0" time="0"> | ||||||
|     <testcase name="should run background steps" status="passed" time="0"></testcase> |     <testcase name="should run background steps" status="passed" time="0"></testcase> | ||||||
|  |  | ||||||
|  | @ -2,9 +2,9 @@ | ||||||
| ...................................................................... 140 | ...................................................................... 140 | ||||||
| ...................................................................... 210 | ...................................................................... 210 | ||||||
| ...................................................................... 280 | ...................................................................... 280 | ||||||
| .......................                                                303 | ..........................                                             306 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 78 scenarios (78 passed) | 79 scenarios (79 passed) | ||||||
| 303 steps (303 passed) | 306 steps (306 passed) | ||||||
| 0s | 0s | ||||||
							
								
								
									
										4
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								go.mod
									
										
									
									
									
								
							|  | @ -3,7 +3,7 @@ module github.com/cucumber/godog | ||||||
| go 1.13 | go 1.13 | ||||||
| 
 | 
 | ||||||
| require ( | require ( | ||||||
| 	github.com/DATA-DOG/go-txdb v0.1.3 | 	github.com/DATA-DOG/go-txdb v0.1.3 // indirect | ||||||
| 	github.com/go-sql-driver/mysql v1.5.0 | 	github.com/go-sql-driver/mysql v1.5.0 // indirect | ||||||
| 	github.com/stretchr/testify v1.4.0 | 	github.com/stretchr/testify v1.4.0 | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -43,6 +43,7 @@ func SuiteContext(s *Suite, additionalContextInitializers ...func(suite *Suite)) | ||||||
| 	s.Step(`^I run feature suite$`, c.iRunFeatureSuite) | 	s.Step(`^I run feature suite$`, c.iRunFeatureSuite) | ||||||
| 	s.Step(`^I run feature suite with tags "([^"]*)"$`, c.iRunFeatureSuiteWithTags) | 	s.Step(`^I run feature suite with tags "([^"]*)"$`, c.iRunFeatureSuiteWithTags) | ||||||
| 	s.Step(`^I run feature suite with formatter "([^"]*)"$`, c.iRunFeatureSuiteWithFormatter) | 	s.Step(`^I run feature suite with formatter "([^"]*)"$`, c.iRunFeatureSuiteWithFormatter) | ||||||
|  | 	s.Step(`^(?:I )(allow|disable) variable injection`, c.iSetVariableInjectionTo) | ||||||
| 	s.Step(`^(?:a )?feature "([^"]*)"(?: file)?:$`, c.aFeatureFile) | 	s.Step(`^(?:a )?feature "([^"]*)"(?: file)?:$`, c.aFeatureFile) | ||||||
| 	s.Step(`^the suite should have (passed|failed)$`, c.theSuiteShouldHave) | 	s.Step(`^the suite should have (passed|failed)$`, c.theSuiteShouldHave) | ||||||
| 
 | 
 | ||||||
|  | @ -97,6 +98,46 @@ func SuiteContext(s *Suite, additionalContextInitializers ...func(suite *Suite)) | ||||||
| 	s.Step(`^(?:a )?failing nested multistep$`, func() Steps { | 	s.Step(`^(?:a )?failing nested multistep$`, func() Steps { | ||||||
| 		return Steps{"passing step", "passing multistep", "failing multistep"} | 		return Steps{"passing step", "passing multistep", "failing multistep"} | ||||||
| 	}) | 	}) | ||||||
|  | 	// Default recovery step | ||||||
|  | 	s.Step(`Ignore.*`, func() error { | ||||||
|  | 		return nil | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	s.BeforeStep(c.inject) | ||||||
|  | } | ||||||
|  | func (s *suiteContext) inject(step *gherkin.Step) { | ||||||
|  | 	if !s.allowInjection { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	step.Text = injectAll(step.Text) | ||||||
|  | 	args := step.Argument | ||||||
|  | 	if args != nil { | ||||||
|  | 		switch arg := args.(type) { | ||||||
|  | 		case *gherkin.DataTable: | ||||||
|  | 			for i := 0; i < len(arg.Rows); i++ { | ||||||
|  | 				for n, cell := range arg.Rows[i].Cells { | ||||||
|  | 					arg.Rows[i].Cells[n].Value = injectAll(cell.Value) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		case *gherkin.DocString: | ||||||
|  | 			arg.Content = injectAll(arg.Content) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func injectAll(inTo string) string { | ||||||
|  | 	re := regexp.MustCompile(`{{[^{}]+}}`) | ||||||
|  | 	return re.ReplaceAllStringFunc( | ||||||
|  | 		inTo, | ||||||
|  | 		func(key string) string { | ||||||
|  | 			injectRegex := regexp.MustCompile(`^{{.+}}$`) | ||||||
|  | 			if injectRegex.MatchString(key) { | ||||||
|  | 				return "someverylonginjectionsoweacanbesureitsurpasstheinitiallongeststeplenghtanditwillhelptestsmethodsafety" | ||||||
|  | 			} | ||||||
|  | 			return key | ||||||
|  | 		}, | ||||||
|  | 	) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type firedEvent struct { | type firedEvent struct { | ||||||
|  | @ -110,6 +151,7 @@ type suiteContext struct { | ||||||
| 	extraCIs       []func(suite *Suite) | 	extraCIs       []func(suite *Suite) | ||||||
| 	events         []*firedEvent | 	events         []*firedEvent | ||||||
| 	out            bytes.Buffer | 	out            bytes.Buffer | ||||||
|  | 	allowInjection bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (s *suiteContext) ResetBeforeEachScenario(interface{}) { | func (s *suiteContext) ResetBeforeEachScenario(interface{}) { | ||||||
|  | @ -121,6 +163,12 @@ func (s *suiteContext) ResetBeforeEachScenario(interface{}) { | ||||||
| 	SuiteContext(s.testedSuite, s.extraCIs...) | 	SuiteContext(s.testedSuite, s.extraCIs...) | ||||||
| 	// reset all fired events | 	// reset all fired events | ||||||
| 	s.events = []*firedEvent{} | 	s.events = []*firedEvent{} | ||||||
|  | 	s.allowInjection = false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *suiteContext) iSetVariableInjectionTo(to string) error { | ||||||
|  | 	s.allowInjection = to == "allow" | ||||||
|  | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (s *suiteContext) iRunFeatureSuiteWithTags(tags string) error { | func (s *suiteContext) iRunFeatureSuiteWithTags(tags string) error { | ||||||
|  | @ -141,7 +189,6 @@ func (s *suiteContext) iRunFeatureSuiteWithFormatter(name string) error { | ||||||
| 	if f == nil { | 	if f == nil { | ||||||
| 		return fmt.Errorf(`formatter "%s" is not available`, name) | 		return fmt.Errorf(`formatter "%s" is not available`, name) | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	s.testedSuite.fmt = f("godog", colors.Uncolored(&s.out)) | 	s.testedSuite.fmt = f("godog", colors.Uncolored(&s.out)) | ||||||
| 	if err := s.parseFeatures(); err != nil { | 	if err := s.parseFeatures(); err != nil { | ||||||
| 		return err | 		return err | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								utils.go
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								utils.go
									
										
									
									
									
								
							|  | @ -20,6 +20,9 @@ var ( | ||||||
| 
 | 
 | ||||||
| // repeats a space n times | // repeats a space n times | ||||||
| func s(n int) string { | func s(n int) string { | ||||||
|  | 	if n < 0 { | ||||||
|  | 		n = 1 | ||||||
|  | 	} | ||||||
| 	return strings.Repeat(" ", n) | 	return strings.Repeat(" ", n) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Fredrik Lönnblad
						Fredrik Lönnblad