add some features and expected output for pretty formatter
Этот коммит содержится в:
		
							родитель
							
								
									5bb581e3bd
								
							
						
					
					
						коммит
						edf592e2b9
					
				
					 8 изменённых файлов: 120 добавлений и 6 удалений
				
			
		
							
								
								
									
										11
									
								
								fmt.go
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								fmt.go
									
										
									
									
									
								
							|  | @ -306,16 +306,21 @@ func (f *basefmt) Summary() { | |||
| 			switch t := def.(type) { | ||||
| 			case *gherkin.Scenario: | ||||
| 				total++ | ||||
| 				if len(t.Steps) == 0 { | ||||
| 					undefined++ | ||||
| 				} | ||||
| 			case *gherkin.ScenarioOutline: | ||||
| 				for _, ex := range t.Examples { | ||||
| 					if examples, hasExamples := examples(ex); hasExamples { | ||||
| 						total += len(examples.TableBody) | ||||
| 						if len(t.Steps) == 0 { | ||||
| 							undefined += len(examples.TableBody) | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	passed = total | ||||
| 	var owner interface{} | ||||
| 	for _, undef := range f.undefined { | ||||
| 		if owner != undef.owner { | ||||
|  | @ -323,6 +328,7 @@ func (f *basefmt) Summary() { | |||
| 			owner = undef.owner | ||||
| 		} | ||||
| 	} | ||||
| 	passed = total - undefined | ||||
| 
 | ||||
| 	var steps, parts, scenarios []string | ||||
| 	nsteps := len(f.passed) + len(f.failed) + len(f.skipped) + len(f.undefined) + len(f.pending) | ||||
|  | @ -343,6 +349,9 @@ func (f *basefmt) Summary() { | |||
| 		passed -= undefined | ||||
| 		parts = append(parts, yellow(fmt.Sprintf("%d undefined", undefined))) | ||||
| 		steps = append(steps, yellow(fmt.Sprintf("%d undefined", len(f.undefined)))) | ||||
| 	} else if undefined > 0 { | ||||
| 		// there may be some scenarios without steps | ||||
| 		parts = append(parts, yellow(fmt.Sprintf("%d undefined", undefined))) | ||||
| 	} | ||||
| 	if len(f.skipped) > 0 { | ||||
| 		steps = append(steps, cyan(fmt.Sprintf("%d skipped", len(f.skipped)))) | ||||
|  |  | |||
|  | @ -58,7 +58,7 @@ func (f *pretty) Feature(ft *gherkin.Feature, p string, c []byte) { | |||
| 		fmt.Fprintln(f.out, "") | ||||
| 	} | ||||
| 	f.features = append(f.features, &feature{Path: p, Feature: ft}) | ||||
| 	fmt.Fprintln(f.out, whiteb(ft.Keyword+": ")+ft.Name) | ||||
| 	fmt.Fprintln(f.out, whiteb(ft.Keyword+":")+" "+ft.Name) | ||||
| 	if strings.TrimSpace(ft.Description) != "" { | ||||
| 		for _, line := range strings.Split(ft.Description, "\n") { | ||||
| 			fmt.Fprintln(f.out, s(f.indent)+strings.TrimSpace(line)) | ||||
|  | @ -115,7 +115,7 @@ func (f *pretty) printUndefinedScenario(sc *gherkin.Scenario) { | |||
| 	} | ||||
| 
 | ||||
| 	f.commentPos = f.longestStep(sc.Steps, f.length(sc)) | ||||
| 	text := s(f.indent) + whiteb(f.scenario.Keyword+": ") + sc.Name | ||||
| 	text := s(f.indent) + whiteb(f.scenario.Keyword+":") + " " + sc.Name | ||||
| 	text += s(f.commentPos-f.length(f.scenario)+1) + f.line(sc.Location) | ||||
| 	fmt.Fprintln(f.out, "\n"+text) | ||||
| } | ||||
|  | @ -209,7 +209,7 @@ func (f *pretty) printOutlineExample(outline *gherkin.ScenarioOutline) { | |||
| 	// an example table header | ||||
| 	if firstExample { | ||||
| 		fmt.Fprintln(f.out, "") | ||||
| 		fmt.Fprintln(f.out, s(f.indent*2)+whiteb(example.Keyword+": ")+example.Name) | ||||
| 		fmt.Fprintln(f.out, s(f.indent*2)+whiteb(example.Keyword+":")+" "+example.Name) | ||||
| 
 | ||||
| 		for i, cell := range example.TableHeader.Cells { | ||||
| 			val := cyan(cell.Value) | ||||
|  | @ -306,7 +306,7 @@ func (f *pretty) printStepKind(res *stepResult) { | |||
| 					f.commentPos = bgLen | ||||
| 				} | ||||
| 			} | ||||
| 			text := s(f.indent) + whiteb(f.scenario.Keyword+": ") + f.scenario.Name | ||||
| 			text := s(f.indent) + whiteb(f.scenario.Keyword+":") + " " + f.scenario.Name | ||||
| 			text += s(f.commentPos-f.length(f.scenario)+1) + f.line(f.scenario.Location) | ||||
| 			fmt.Fprintln(f.out, "\n"+text) | ||||
| 			f.scenarioKeyword = true | ||||
|  |  | |||
|  | @ -1 +1,5 @@ | |||
| Feature: empty feature | ||||
| <bold-white>Feature:</bold-white> empty feature | ||||
| 
 | ||||
| No scenarios | ||||
| No steps | ||||
| 0s | ||||
|  |  | |||
							
								
								
									
										8
									
								
								formatter-tests/pretty/empty_with_description
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										8
									
								
								formatter-tests/pretty/empty_with_description
									
										
									
									
									
										Обычный файл
									
								
							|  | @ -0,0 +1,8 @@ | |||
| <bold-white>Feature:</bold-white> empty feature | ||||
|   describes | ||||
|   an empty | ||||
|   feature | ||||
| 
 | ||||
| No scenarios | ||||
| No steps | ||||
| 0s | ||||
|  | @ -0,0 +1,7 @@ | |||
| <bold-white>Feature:</bold-white> empty feature | ||||
| 
 | ||||
|   <bold-white>Scenario:</bold-white> without steps <black># formatter-tests/features/empty_with_single_scenario_without_steps.feature:3</black> | ||||
| 
 | ||||
| 1 scenarios (<yellow>1 undefined</yellow>) | ||||
| No steps | ||||
| 0s | ||||
|  | @ -0,0 +1,10 @@ | |||
| <bold-white>Feature:</bold-white> empty feature | ||||
|   describes | ||||
|   an empty | ||||
|   feature | ||||
| 
 | ||||
|   <bold-white>Scenario:</bold-white> without steps <black># formatter-tests/features/empty_with_single_scenario_without_steps_and_description.feature:6</black> | ||||
| 
 | ||||
| 1 scenarios (<yellow>1 undefined</yellow>) | ||||
| No steps | ||||
| 0s | ||||
							
								
								
									
										11
									
								
								formatter-tests/pretty/single_scenario_with_passing_step
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										11
									
								
								formatter-tests/pretty/single_scenario_with_passing_step
									
										
									
									
									
										Обычный файл
									
								
							|  | @ -0,0 +1,11 @@ | |||
| <bold-white>Feature:</bold-white> single passing scenario | ||||
|   describes | ||||
|   a single scenario | ||||
|   feature | ||||
| 
 | ||||
|   <bold-white>Scenario:</bold-white> one step passing <black># formatter-tests/features/single_scenario_with_passing_step.feature:6</black> | ||||
|     <green>Given</green> <green>a passing step</green>     <black># formatters_print_test.go:35 -> github.com/DATA-DOG/godog.TestPrintingFormatters.func4</black> | ||||
| 
 | ||||
| 1 scenarios (<green>1 passed</green>) | ||||
| 1 steps (<green>1 passed</green>) | ||||
| 0s | ||||
|  | @ -1 +1,66 @@ | |||
| package godog | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| func TestPrintingFormatters(t *testing.T) { | ||||
| 	features, err := parseFeatures("", []string{"formatter-tests"}) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("failed to parse formatter features: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	var buf bytes.Buffer | ||||
| 	out := &tagColorWriter{w: &buf} | ||||
| 
 | ||||
| 	suite := &Suite{ | ||||
| 		features: features, | ||||
| 	} | ||||
| 
 | ||||
| 	suite.Step(`^(?:a )?failing step`, func() error { | ||||
| 		return fmt.Errorf("step failed") | ||||
| 	}) | ||||
| 	suite.Step(`^this step should fail`, func() error { | ||||
| 		return fmt.Errorf("step failed") | ||||
| 	}) | ||||
| 	suite.Step(`^(?:a )?pending step$`, func() error { | ||||
| 		return ErrPending | ||||
| 	}) | ||||
| 	suite.Step(`^(?:a )?passing step$`, func() error { | ||||
| 		return nil | ||||
| 	}) | ||||
| 
 | ||||
| 	for _, feat := range features { | ||||
| 		for name := range AvailableFormatters() { | ||||
| 			expectOutputPath := strings.Replace(feat.Path, "features", name, 1) | ||||
| 			expectOutputPath = strings.TrimRight(expectOutputPath, ".feature") | ||||
| 			if _, err := os.Stat(expectOutputPath); err != nil { | ||||
| 				continue | ||||
| 			} | ||||
| 
 | ||||
| 			buf.Reset()                          // flush the output | ||||
| 			suite.fmt = FindFmt(name)(name, out) // prepare formatter | ||||
| 			suite.features = []*feature{feat}    // set the feature | ||||
| 
 | ||||
| 			expectedOutput, err := ioutil.ReadFile(expectOutputPath) | ||||
| 			if err != nil { | ||||
| 				t.Fatal(err) | ||||
| 			} | ||||
| 
 | ||||
| 			suite.run() | ||||
| 			suite.fmt.Summary() | ||||
| 
 | ||||
| 			expected := string(expectedOutput) | ||||
| 			actual := buf.String() | ||||
| 
 | ||||
| 			if actual != expected { | ||||
| 				t.Fatalf("%s does not match to:\n%s", expectOutputPath, actual) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 gedi
						gedi