File: test_result.cc

package info (click to toggle)
chromium 139.0.7258.127-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 6,122,156 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (136 lines) | stat: -rw-r--r-- 3,875 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/test/launcher/test_result.h"

#include <stddef.h>

#include <ostream>

#include "base/check_op.h"
#include "base/notreached.h"

namespace base {

TestResultPart::TestResultPart() = default;
TestResultPart::~TestResultPart() = default;

TestResultPart::TestResultPart(const TestResultPart& other) = default;
TestResultPart& TestResultPart::operator=(const TestResultPart& other) =
    default;
TestResultPart::TestResultPart(TestResultPart&& other) = default;
TestResultPart& TestResultPart::operator=(TestResultPart&& other) = default;

// static
bool TestResultPart::TypeFromString(const std::string& str, Type* type) {
  if (str == "success") {
    *type = kSuccess;
  } else if (str == "failure") {
    *type = kNonFatalFailure;
  } else if (str == "fatal_failure") {
    *type = kFatalFailure;
  } else if (str == "skip") {
    *type = kSkip;
  } else {
    return false;
  }
  return true;
}

std::string TestResultPart::TypeAsString() const {
  switch (type) {
    case kSuccess:
      return "success";
    case kNonFatalFailure:
      return "failure";
    case kFatalFailure:
      return "fatal_failure";
    case kSkip:
      return "skip";
  }
  return "unknown";
}

SubTestResult::SubTestResult() = default;

SubTestResult::SubTestResult(const SubTestResult& other) = default;
SubTestResult::SubTestResult(SubTestResult&& other) noexcept = default;
SubTestResult& SubTestResult::operator=(const SubTestResult& other) = default;
SubTestResult& SubTestResult::operator=(SubTestResult&& other) noexcept =
    default;

SubTestResult::~SubTestResult() = default;

std::string SubTestResult::FullName() const {
  return classname + "." + name + "__" + subname;
}

TestResult::TestResult() : status(TEST_UNKNOWN) {}

TestResult::~TestResult() = default;

TestResult::TestResult(const TestResult& other) = default;
TestResult::TestResult(TestResult&& other) = default;
TestResult& TestResult::operator=(const TestResult& other) = default;
TestResult& TestResult::operator=(TestResult&& other) = default;

std::string TestResult::StatusAsString() const {
  switch (status) {
    case TEST_UNKNOWN:
      return "UNKNOWN";
    case TEST_SUCCESS:
      return "SUCCESS";
    case TEST_FAILURE:
      return "FAILURE";
    case TEST_FAILURE_ON_EXIT:
      return "FAILURE_ON_EXIT";
    case TEST_CRASH:
      return "CRASH";
    case TEST_TIMEOUT:
      return "TIMEOUT";
    case TEST_SKIPPED:
      return "SKIPPED";
    case TEST_EXCESSIVE_OUTPUT:
      return "EXCESSIVE_OUTPUT";
    case TEST_NOT_RUN:
      return "NOTRUN";
      // Rely on compiler warnings to ensure all possible values are handled.
  }

  NOTREACHED();
}

std::string TestResult::GetTestName() const {
  size_t dot_pos = full_name.find('.');
  CHECK_NE(dot_pos, std::string::npos);
  return full_name.substr(dot_pos + 1);
}

std::string TestResult::GetTestCaseName() const {
  size_t dot_pos = full_name.find('.');
  CHECK_NE(dot_pos, std::string::npos);
  return full_name.substr(0, dot_pos);
}

void TestResult::AddLink(const std::string& name, const std::string& url) {
  auto [it, inserted] = links.insert({name, url});
  DCHECK(inserted) << name << " is already used as a link name. Ignoring...";
}

void TestResult::AddTag(const std::string& name, const std::string& value) {
  tags[name].push_back(value);
}

void TestResult::AddSubTestResult(SubTestResult sub_test_result) {
  sub_test_results.push_back(std::move(sub_test_result));
}

void TestResult::AddProperty(const std::string& name,
                             const std::string& value) {
  auto [it, inserted] = properties.insert({name, value});
  DCHECK(inserted) << name
                   << " is already used as a property name. Ignoring...";
}

}  // namespace base