github.com/rendon/cf@v0.0.0-20220806233241-5cb5d3939c03/test.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"time"
     7  
     8  	log "github.com/Sirupsen/logrus"
     9  	"github.com/codegangsta/cli"
    10  	"github.com/fatih/color"
    11  )
    12  
    13  func test(c *cli.Context) {
    14  	settings, err := ReadKeyValueYamlFile(".settings.yml")
    15  	if err != nil {
    16  		log.Fatalf("No '.settings.yml' file found.")
    17  	}
    18  	lang, ok := settings["lang"].(string)
    19  	if !ok {
    20  		log.Fatalf("No 'lang' field found in settings file.")
    21  	}
    22  	sourceFile, ok := settings["sourceFile"].(string)
    23  	if !ok {
    24  		log.Fatalf("No 'sourceFile' field found in settings file.")
    25  	}
    26  	tests, ok := settings["tests"].(int)
    27  	if !ok {
    28  		log.Fatalf("No 'tests' field found in settings file.")
    29  	}
    30  	validator, ok := settings["validator"].(string)
    31  	if !ok {
    32  		validator = validatorLines
    33  	}
    34  
    35  	if langs[lang] == nil {
    36  		log.Fatalf("Language %q not supported.", lang)
    37  	}
    38  
    39  	if err = langs[lang].Setup(sourceFile); err != nil {
    40  		log.Fatalf("Failed to setup source file: %s", err)
    41  	}
    42  
    43  	green := color.New(color.FgGreen).SprintFunc()
    44  	red := color.New(color.FgRed).SprintFunc()
    45  	failureCount := 0
    46  	for i := 1; i <= tests; i++ {
    47  		in := fmt.Sprintf(".in%d.txt", i)
    48  		out := fmt.Sprintf(".out%d.txt", i)
    49  		fmt.Printf("Test #%d: ", i)
    50  		if c.GlobalBool("verbose") {
    51  			fmt.Println()
    52  		}
    53  
    54  		start := time.Now()
    55  		passed, err := langs[lang].Run(sourceFile, in, out, validator)
    56  		if err != nil {
    57  			log.Fatalf("Test %d failed: %s", i, err)
    58  		}
    59  		end := time.Now()
    60  		if passed {
    61  			fmt.Printf("%s %.3fs\n", green("PASSED"), end.Sub(start).Seconds())
    62  		} else {
    63  			fmt.Printf("%s %.3fs\n", red("FAILED"), end.Sub(start).Seconds())
    64  			failureCount++
    65  		}
    66  	}
    67  
    68  	fmt.Println()
    69  	if failureCount == 0 {
    70  		fmt.Printf("%s\n", green("Well done!"))
    71  	} else {
    72  		fmt.Fprintf(os.Stderr, "%s\n", red("Try again!"))
    73  		os.Exit(1)
    74  	}
    75  }