Support result formatting
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
parent
8ae5fa912b
commit
ca943e1dc8
8 changed files with 456 additions and 225 deletions
91
internal/parser/parser.go
Normal file
91
internal/parser/parser.go
Normal file
|
@ -0,0 +1,91 @@
|
|||
package parser
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/csv"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
func ParseSuite(filePath string, format string) (map[string]bool, error) {
|
||||
switch format {
|
||||
case "csv":
|
||||
return parseSuiteCSV(filePath)
|
||||
case "json":
|
||||
return parseSuiteJSON(filePath)
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown format: %s", format)
|
||||
}
|
||||
}
|
||||
|
||||
func parseSuiteCSV(filePath string) (map[string]bool, error) {
|
||||
data, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to read suite file: %w", err)
|
||||
}
|
||||
|
||||
rr := csv.NewReader(bytes.NewReader(data))
|
||||
records, err := rr.ReadAll()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse suite file: %w", err)
|
||||
}
|
||||
|
||||
indexName := -1
|
||||
indexStatus := -1
|
||||
tests := make(map[string]bool)
|
||||
|
||||
for i, recs := range records {
|
||||
if i == 0 {
|
||||
for j, rec := range recs {
|
||||
if rec == "Name" {
|
||||
indexName = j
|
||||
} else if rec == "Status" {
|
||||
indexStatus = j
|
||||
}
|
||||
}
|
||||
|
||||
if indexName == -1 || indexStatus == -1 {
|
||||
return nil, fmt.Errorf("invalid csv format, couldn't find 'Name' and 'Status' fields")
|
||||
}
|
||||
}
|
||||
|
||||
tests[recs[indexName]] = recs[indexStatus] == "passed"
|
||||
}
|
||||
|
||||
return tests, nil
|
||||
}
|
||||
|
||||
type suiteNode struct {
|
||||
Name string `json:"name"`
|
||||
Status string `json:"status"`
|
||||
Children []suiteNode `json:"children"`
|
||||
}
|
||||
|
||||
func parseSuiteJSON(filePath string) (map[string]bool, error) {
|
||||
data, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to read suite file: %w", err)
|
||||
}
|
||||
|
||||
var suiteNode suiteNode
|
||||
if err = json.Unmarshal(data, &suiteNode); err != nil {
|
||||
return nil, fmt.Errorf("failed to parse suite file: %w", err)
|
||||
}
|
||||
|
||||
tests := make(map[string]bool)
|
||||
parseSuiteNode(suiteNode, tests)
|
||||
|
||||
return tests, nil
|
||||
}
|
||||
|
||||
func parseSuiteNode(node suiteNode, res map[string]bool) {
|
||||
if node.Status != "" {
|
||||
res[node.Name] = node.Status == "passed"
|
||||
return
|
||||
}
|
||||
|
||||
for _, child := range node.Children {
|
||||
parseSuiteNode(child, res)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue