| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package testparser |
| |
| import ( |
| "encoding/json" |
| "fmt" |
| "regexp" |
| "time" |
| ) |
| |
| var ( |
| dartSystemTestPreamblePattern = regexp.MustCompile(`^\[----------\] Test results JSON:$`) |
| ) |
| |
| type dartSystemTestResults struct { |
| TestGroups []TestGroup |
| } |
| |
| type TestGroup struct { |
| Name string |
| TestCases []TestCase |
| } |
| |
| type TestCase struct { |
| Name string |
| Result string |
| DurationInSeconds int |
| } |
| |
| func parseDartSystemTest(lines [][]byte) []TestCaseResult { |
| var jsonBytes = []byte{} |
| for _, line := range lines[1:] { |
| jsonBytes = append(jsonBytes, line...) |
| } |
| parsed := dartSystemTestResults{} |
| if err := json.Unmarshal(jsonBytes, &parsed); err != nil { |
| return []TestCaseResult{} |
| } |
| |
| var res []TestCaseResult |
| for _, testGroup := range parsed.TestGroups { |
| for _, testCase := range testGroup.TestCases { |
| var status TestCaseStatus |
| switch testCase.Result { |
| case "PASSED": |
| status = Pass |
| case "FAILED": |
| status = Fail |
| } |
| res = append(res, TestCaseResult{ |
| DisplayName: fmt.Sprintf("%s.%s", testGroup.Name, testCase.Name), |
| SuiteName: testGroup.Name, |
| CaseName: testCase.Name, |
| Status: status, |
| Duration: time.Duration(testCase.DurationInSeconds) * time.Second, |
| Format: "dart_system_test", |
| }) |
| } |
| } |
| return res |
| } |