private getTestClasses()

in test-reporter/src/parsers/dotnet-trx/dotnet-trx-parser.ts [64:105]


  private getTestClasses(trx: TrxReport): TestClass[] {
    if (trx.TestRun.TestDefinitions === undefined || trx.TestRun.Results === undefined) {
      return []
    }

    const unitTests: {[id: string]: UnitTest} = {}
    for (const td of trx.TestRun.TestDefinitions) {
      for (const ut of td.UnitTest) {
        unitTests[ut.$.id] = ut
      }
    }

    const unitTestsResults = trx.TestRun.Results.flatMap(r => r.UnitTestResult).flatMap(result => ({
      result,
      test: unitTests[result.$.testId]
    }))

    const testClasses: {[name: string]: TestClass} = {}
    for (const r of unitTestsResults) {
      const className = r.test.TestMethod[0].$.className
      let tc = testClasses[className]
      if (tc === undefined) {
        tc = new TestClass(className)
        testClasses[tc.name] = tc
      }
      const error = this.getErrorInfo(r.result)
      const durationAttr = r.result.$.duration
      const duration = durationAttr ? parseNetDuration(durationAttr) : 0

      const resultTestName = r.result.$.testName
      const testName =
        resultTestName.startsWith(className) && resultTestName[className.length] === '.'
          ? resultTestName.substr(className.length + 1)
          : resultTestName

      const test = new Test(testName, r.result.$.outcome, duration, error)
      tc.tests.push(test)
    }

    const result = Object.values(testClasses)
    return result
  }