| // 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 | |
| } |