/* This file is part of MAUS: http://micewww.pp.rl.ac.uk/projects/maus
*
* MAUS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MAUS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MAUS. If not, see .
*
*/
#include
#include
#include
#include
#include
#include "gtest/gtest.h"
#include "src/common_cpp/Utils/Globals.hh"
#include "src/legacy/Interface/Squeak.hh"
#include "Utils/Exception.hh"
namespace {
class SqueakTest : public ::testing::Test {
protected:
SqueakTest() {}
virtual ~SqueakTest() {
Json::Value& cards = *MAUS::Globals::GetConfigurationCards();
int verbose_level = cards["verbose_level"].asInt();
Squeak::setStandardOutputs(verbose_level);
Squeak::setOutputs(verbose_level);
}
};
// Commented out as could not get to work with gcc 5
// A. Dobbs, 16/12/2015
// test mout(Squeak::errorLevel) and SetOutput(Squeak::errorLevel)
// TEST_F(SqueakTest, SqueakSetOutputMoutErrorLevelTest) {
// std::stringstream sstr;
// // debug, info, warning, error, fatal
// Squeak::errorLevel err[] = {Squeak::debug, Squeak::info, Squeak::warning,
// Squeak::error, Squeak::fatal};
// for (int i = 0; i < 5; ++i) {
// Squeak::setAnOutput(err[i], sstr);
// ASSERT_EQ(Squeak::mout(err[i]), sstr) << "errorLevel " << err[i]
// << " failed";
// Squeak::setAnOutput(err[i], std::cout);
// ASSERT_EQ(Squeak::mout(err[i]), std::cout) << "errorLevel " << err[i]
// << " failed";
// }
// }
// test mout(Squeal::exceptionLevel)
// TEST_F(SqueakTest, SqueakMoutExceptionTest) {
// std::stringstream sstr;
// MAUS::Exception::exceptionLevel exc[] = {
// MAUS::Exception::recoverable, MAUS::Exception::nonRecoverable};
// Squeak::errorLevel err[] = {Squeak::error, Squeak::fatal};
// for (int i = 0; i < 2; ++i) {
// Squeak::setAnOutput(err[i], sstr);
// ASSERT_EQ(Squeak::mout(exc[i]), sstr);
// Squeak::setAnOutput(err[i], std::cout);
// ASSERT_EQ(Squeak::mout(exc[i]), std::cout);
// }
// }
// test mout()
// TEST_F(SqueakTest, SqueakMoutDefaultTest) {
// std::stringstream sstr;
// Squeak::setAnOutput(Squeak::debug, sstr);
// ASSERT_EQ(Squeak::mout(), sstr);
// Squeak::setAnOutput(Squeak::debug, std::cout);
// ASSERT_EQ(Squeak::mout(), std::cout);
// }
void __TestStdOutputs(int test_value) {
int i = test_value;
if (i > static_cast(Squeak::debug)) {
EXPECT_EQ(std::cout.rdbuf(), Squeak::nullOut().rdbuf()) << test_value
<< " " << i << " " << static_cast(Squeak::debug);
} else {
EXPECT_EQ(std::cout.rdbuf(), Squeak::coutOut().rdbuf()) << test_value
<< " " << i << " " << static_cast(Squeak::debug);
}
if (i > static_cast(Squeak::info)) {
EXPECT_EQ(std::clog.rdbuf(), Squeak::nullOut().rdbuf()) << test_value
<< " " << i << " " << static_cast(Squeak::info);
} else {
EXPECT_EQ(std::clog.rdbuf(), Squeak::clogOut().rdbuf()) << test_value
<< " " << i << " " << static_cast(Squeak::info);
}
if (i > static_cast(Squeak::error)) {
EXPECT_EQ(std::cerr.rdbuf(), Squeak::nullOut().rdbuf()) << test_value
<< " " << i << " " << static_cast(Squeak::error);
} else {
EXPECT_EQ(std::cerr.rdbuf(), Squeak::cerrOut().rdbuf()) << test_value
<< " " << i << " " << static_cast(Squeak::error);
}
}
TEST_F(SqueakTest, ActivateCoutTest) {
Squeak::activateCout(true);
EXPECT_EQ(std::cout.rdbuf(), Squeak::coutOut().rdbuf());
EXPECT_EQ(Squeak::coutIsActive(), true);
Squeak::activateCout(false);
EXPECT_EQ(std::cout.rdbuf(), Squeak::nullOut().rdbuf());
EXPECT_EQ(Squeak::coutIsActive(), false);
std::cout << "IF YOU SEE THIS THERE IS AN ERROR" << std::endl;
Squeak::activateCout(true);
EXPECT_EQ(std::cout.rdbuf(), Squeak::coutOut().rdbuf());
EXPECT_EQ(Squeak::coutIsActive(), true);
}
TEST_F(SqueakTest, ActivateClogTest) {
Squeak::activateClog(true);
EXPECT_EQ(std::clog.rdbuf(), Squeak::clogOut().rdbuf());
EXPECT_EQ(Squeak::clogIsActive(), true);
Squeak::activateClog(false);
EXPECT_EQ(std::clog.rdbuf(), Squeak::nullOut().rdbuf());
EXPECT_EQ(Squeak::clogIsActive(), false);
std::clog << "IF YOU SEE THIS THERE IS AN ERROR" << std::endl;
Squeak::activateClog(true);
EXPECT_EQ(std::clog.rdbuf(), Squeak::clogOut().rdbuf());
EXPECT_EQ(Squeak::clogIsActive(), true);
}
TEST_F(SqueakTest, ActivateCerrTest) {
Squeak::activateCerr(true);
EXPECT_EQ(std::cerr.rdbuf(), Squeak::cerrOut().rdbuf());
EXPECT_EQ(Squeak::cerrIsActive(), true);
Squeak::activateCerr(false);
EXPECT_EQ(std::cerr.rdbuf(), Squeak::nullOut().rdbuf());
EXPECT_EQ(Squeak::cerrIsActive(), false);
std::cerr << "IF YOU SEE THIS THERE IS AN ERROR" << std::endl;
Squeak::activateCerr(true);
EXPECT_EQ(std::cerr.rdbuf(), Squeak::cerrOut().rdbuf());
EXPECT_EQ(Squeak::cerrIsActive(), true);
}
TEST_F(SqueakTest, SetStandardOutputsTest) {
for (int i = 0; i < 6; ++i) {
Squeak::setStandardOutputs(i);
__TestStdOutputs(i);
}
for (int i = 6; i > -1; --i) {
Squeak::setStandardOutputs(i);
__TestStdOutputs(i);
}
}
void __TestOutputs(int test_value) {
int i = test_value;
if (i > static_cast(Squeak::debug)) {
EXPECT_EQ(Squeak::mout(Squeak::debug).rdbuf(), Squeak::nullOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::debug);
} else {
EXPECT_EQ(Squeak::mout(Squeak::debug).rdbuf(), Squeak::coutOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::debug);
}
if (i > static_cast(Squeak::info)) {
EXPECT_EQ(Squeak::mout(Squeak::info).rdbuf(), Squeak::nullOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::info);
} else {
EXPECT_EQ(Squeak::mout(Squeak::info).rdbuf(), Squeak::clogOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::info);
}
if (i > static_cast(Squeak::warning)) {
EXPECT_EQ(Squeak::mout(Squeak::warning).rdbuf(), Squeak::nullOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::warning);
} else {
EXPECT_EQ(Squeak::mout(Squeak::warning).rdbuf(), Squeak::cerrOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::warning);
}
if (i > static_cast(Squeak::error)) {
EXPECT_EQ(Squeak::mout(Squeak::error).rdbuf(), Squeak::nullOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::error);
} else {
EXPECT_EQ(Squeak::mout(Squeak::error).rdbuf(), Squeak::cerrOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::error);
}
if (i > static_cast(Squeak::fatal)) {
EXPECT_EQ(Squeak::mout(Squeak::fatal).rdbuf(), Squeak::nullOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::fatal);
} else {
EXPECT_EQ(Squeak::mout(Squeak::fatal).rdbuf(), Squeak::cerrOut().rdbuf())
<< test_value << " " << i << " " << static_cast(Squeak::fatal);
}
}
TEST_F(SqueakTest, SetOutputsTest) {
for (int i = 0; i < 6; ++i) {
Squeak::setOutputs(i);
__TestOutputs(i);
}
for (int i = 6; i > -1; --i) {
Squeak::setOutputs(i);
__TestOutputs(i);
}
}
}