| /* ------------------------------------------------------------------ |
| * Copyright (C) 1998-2009 PacketVideo |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either |
| * express or implied. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * ------------------------------------------------------------------- |
| */ |
| #include "test_case.h" |
| |
| |
| //adopts a test case; we use "adopt" because we intend to take over |
| //the destruction of the passed object |
| void |
| test_case::adopt_test_case(test_case* new_case) |
| { |
| m_subtests.push_back(new_case); |
| } |
| |
| //the number of subtests |
| int |
| test_case::subtest_count(void) const |
| { |
| return m_subtests.size(); |
| } |
| |
| //runs all the subtests |
| void |
| test_case::run_subtests(void) |
| { |
| _VECTOR(test_case*, unit_test_allocator)::iterator iter = m_subtests.begin(); |
| for (; iter != m_subtests.end(); |
| ++iter) |
| { |
| (*iter)->run_test(); |
| m_last_result.add_result((*iter)->last_result()); |
| } |
| } |
| |
| //actually runs the test |
| void |
| test_case::run_test(void) |
| { |
| m_last_result.delete_contents(); |
| set_up(); |
| run_subtests(); |
| |
| test(); |
| tear_down(); |
| } |
| |
| //tests to see if the supplied condition is true; called by the |
| //test_is_true macro |
| void |
| test_case::test_is_true_stub(bool condition, |
| const _STRING& condition_name, |
| const _STRING& filename, |
| long line_number) |
| { |
| if (condition) |
| { |
| m_last_result.add_success(); |
| } |
| else |
| { |
| |
| _STRING message = "\""; |
| _APPEND(message, condition_name); |
| _APPEND(message, _STRING("\" evaluated to false.")); |
| |
| m_last_result.add_failure(test_problem(filename, |
| line_number, |
| message)); |
| } |
| } |
| |
| |
| //creates a test problem representing an inequality |
| test_problem |
| test_case::create_equality_problem_report(const _STRING& actual_message, |
| const _STRING& expected_message, |
| const _STRING& filename, |
| long line_number) |
| { |
| _STRING message = "Equality failed. Got "; |
| _APPEND(message, actual_message); |
| _APPEND(message, ", expected "); |
| _APPEND(message, expected_message); |
| return test_problem(filename, line_number, message); |
| } |
| |
| |
| //checks to see if two longs are equal |
| //tests to see if two longs are equal |
| void |
| test_case::test_int_is_equal_stub(long actual, |
| long expected, |
| const _STRING& filename, |
| long line_number) |
| { |
| if (actual == expected) |
| { |
| m_last_result.add_success(); |
| } |
| else |
| { |
| char temp[100]; |
| sprintf(temp, "%ld", actual); |
| _STRING actual_message(temp); |
| sprintf(temp, "%ld", expected); |
| _STRING expected_message(temp); |
| m_last_result.add_failure(create_equality_problem_report(actual_message, |
| expected_message, |
| filename, |
| line_number)); |
| } |
| } |
| |
| //replacement for stdio fabs routine |
| static double _fabs(double in) |
| { |
| if (in < 0) |
| return (-in); |
| else |
| return in; |
| } |
| |
| void |
| test_case::test_double_is_equal_stub(double actual, |
| double expected, |
| const _STRING& filename, |
| long line_number, |
| double tolerance) |
| { |
| if (_fabs(actual - expected) < _fabs(tolerance)) |
| { |
| m_last_result.add_success(); |
| } |
| else |
| { |
| char temp[100]; |
| sprintf(temp, "%f", actual); |
| _STRING actual_message(temp); |
| sprintf(temp, "%f", expected); |
| _STRING expected_message(temp); |
| |
| m_last_result.add_failure(create_equality_problem_report(actual_message, |
| expected_message, |
| filename, |
| line_number)); |
| } |
| } |
| |
| |
| //tests to see if two strings are equal |
| void |
| test_case::test_string_is_equal_stub(const _STRING& actual, |
| const _STRING& expected, |
| const _STRING& filename, |
| long line_number) |
| { |
| if (actual == expected) |
| { |
| m_last_result.add_success(); |
| } |
| else |
| { |
| _STRING actual_message = _STRING("\""); |
| _APPEND(actual_message, actual); |
| _APPEND(actual_message, "\""); |
| _STRING expected_message = _STRING("\""); |
| _APPEND(expected_message, expected); |
| _APPEND(expected_message, "\""); |
| |
| m_last_result.add_failure(create_equality_problem_report(actual_message, |
| expected_message, |
| filename, |
| line_number)); |
| } |
| } |
| |
| //sets up the test (here, does nothing) |
| void |
| test_case::set_up(void) |
| { |
| } |
| |
| //tears down the test (here, does nothing) |
| void |
| test_case::tear_down(void) |
| { |
| } |
| |
| //the test itself; here, does nothing |
| void |
| test_case::test(void) |
| { |
| } |
| |
| //construction |
| test_case::test_case(void) |
| { |
| _cmdLinePtr = NULL; |
| m_last_result.delete_contents(); |
| m_subtests.clear(); |
| } |
| |
| //destruction |
| test_case::~test_case(void) |
| { |
| m_last_result.delete_contents(); |
| |
| _VECTOR(test_case*, unit_test_allocator)::iterator iter = m_subtests.begin(); |
| |
| for (; iter != m_subtests.end(); |
| ++iter) |
| { |
| delete((*iter)); |
| (*iter) = NULL; |
| } |
| m_subtests.clear(); |
| } |
| |
| //the last result after testing |
| const test_result& |
| test_case::last_result(void) const |
| { |
| return m_last_result; |
| } |
| |