private getTestRun()

in test-reporter/src/parsers/dart-json/dart-json-parser.ts [85:130]


  private getTestRun(path: string, content: string): TestRun {
    const lines = content.split(/\n\r?/g)
    const events = lines
      .map((str, i) => {
        if (str.trim() === '') {
          return null
        }
        try {
          return JSON.parse(str)
        } catch (e) {
          const col = e.columnNumber !== undefined ? `:${e.columnNumber}` : ''
          throw new Error(`Invalid JSON at ${path}:${i + 1}${col}\n\n${e}`)
        }
      })
      .filter(evt => evt != null) as ReportEvent[]

    let success = false
    let totalTime = 0
    const suites: {[id: number]: TestSuite} = {}
    const tests: {[id: number]: TestCase} = {}

    for (const evt of events) {
      if (isSuiteEvent(evt)) {
        suites[evt.suite.id] = new TestSuite(evt.suite)
      } else if (isGroupEvent(evt)) {
        suites[evt.group.suiteID].groups[evt.group.id] = new TestGroup(evt.group)
      } else if (isTestStartEvent(evt) && evt.test.url !== null) {
        const test: TestCase = new TestCase(evt)
        const suite = suites[evt.test.suiteID]
        const group = suite.groups[evt.test.groupIDs[evt.test.groupIDs.length - 1]]
        group.tests.push(test)
        tests[evt.test.id] = test
      } else if (isTestDoneEvent(evt) && !evt.hidden && tests[evt.testID]) {
        tests[evt.testID].testDone = evt
      } else if (isErrorEvent(evt) && tests[evt.testID]) {
        tests[evt.testID].error = evt
      } else if (isMessageEvent(evt) && tests[evt.testID]) {
        tests[evt.testID].print.push(evt)
      } else if (isDoneEvent(evt)) {
        success = evt.success
        totalTime = evt.time
      }
    }

    return new TestRun(path, Object.values(suites), success, totalTime)
  }