1// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
2// -*- Mode: C++ -*-
3//
4// Copyright (C) 2013-2022 Red Hat, Inc.
5
6#include <iostream>
7#include "test-utils.h"
8
9using std::string;
10
11namespace abigail
12{
13namespace tests
14{
15
16/// Returns the absolute path to the source directory.
17///
18/// \return the absolute path tho the source directory.
19const char*
20get_src_dir()
21{
22#ifndef ABIGAIL_SRC_DIR
23#error the macro ABIGAIL_SRC_DIR must be set at compile time
24#endif
25
26  static __thread const char* s(ABIGAIL_SRC_DIR);
27  return s;
28}
29
30/// Returns the absolute path to the build directory.
31///
32/// \return the absolute path the build directory.
33const char*
34get_build_dir()
35{
36#ifndef ABIGAIL_BUILD_DIR
37#error the macro ABIGAIL_BUILD_DIR must be set at compile time
38#endif
39
40  static __thread const char* s(ABIGAIL_BUILD_DIR);
41  return s;
42}
43
44/// Emit test status on the standard output.
45///
46/// This function also increments passed, failed and total test
47/// numbers accordingly.
48///
49/// @param test_passed indicated if the test succeeded or not.
50///
51/// @param test_cmd the test command that was executed.  If the test
52/// failed, the exact command is displayed.
53///
54/// @param passed_count the number of passed tests.  This is going to
55/// be incremented if the test passes.
56///
57/// @param failed_count the number of failed tests.  This is going to
58/// be incremented if the test fails.
59///
60/// @param total_count the total number of tests.  This is going to be
61/// incremented.
62void
63emit_test_status_and_update_counters(bool test_passed,
64				     const std::string& test_cmd,
65				     unsigned& passed_count,
66				     unsigned& failed_count,
67				     unsigned& total_count)
68{
69  if (test_passed)
70    passed_count++;
71  else
72    {
73      std::cout << TEST_FAILURE_COLOR
74		<< "Test Failed: "
75		<< DEFAULT_TERMINAL_COLOR
76		<< test_cmd
77		<< std::endl;
78      failed_count++;
79    }
80  total_count++;
81}
82
83/// Emit the summary of the test.
84///
85/// @param total_count the total number of tests executed.
86///
87/// @param passed_count the number of tests that succeeded.
88///
89/// @param failed_count the number of tests that failed.
90void
91emit_test_summary(unsigned total_count,
92		  unsigned passed_count,
93		  unsigned failed_count)
94{
95  if (failed_count)
96    std::cout << TEST_FAILURE_COLOR << "FAILURE!";
97  else
98    std::cout << TEST_SUCCESS_COLOR << "SUCCESS!";
99  std::cout << DEFAULT_TERMINAL_COLOR << "\n";
100
101  std::cout << "Total number of tests executed: " << total_count
102	    << " Number of tests PASSED: " << passed_count
103	    << ", Number of tests FAILED: " << failed_count
104	    << ".\n";
105}
106}//end namespace tests
107}//end namespace abigail
108