#include <iostream> #include <j/cppunit/cppunit.hpp> #include <j/cppunit/assert.hpp> #include <j/lang/throwable.hpp> #include <j/lang/errno.hpp> using namespace j; using namespace j::lang; using namespace j::cppunit; class ThrowableChild : public Throwable { public: ThrowableChild() noexcept {}; ~ThrowableChild() noexcept {}; std::unique_ptr<Object> clone() const noexcept { return Throwable::clone(); } }; class ThrowableTest : public TestCase { public: ThrowableTest() {} ~ThrowableTest() {} void setUp() {} void tearDown() {} void testThrowable() { Throwable e; String exp = j::lang::Errno::message(j::lang::Errno::get()); String act = e.getMessage(); assertEquals(exp, act); } void testThrowableMsg() { String msg = "ERROR MESSAGE"; Throwable e(msg); assertEquals(msg, e.getMessage()); } void testThrowableCopy() { String msg = "ERROR MESSAGE 2"; Throwable e(msg); Throwable ee = e; assertEquals(msg, e.getMessage()); assertTrue(e != ee); assertFalse(e == ee); } void testThrowableMove() { String msg = "ERROR MESSAGE 3"; Throwable e(msg); Throwable ee = std::move(e); assertEquals(msg, ee.getMessage()); } void testThrowableToString() { String msg = "ERROR MESSAGE 3"; Throwable e(msg); assertEquals(msg, e.toString()); } void testOpEq() { String msg = "ERROR MESSAGE"; String msg2 = "ERROR MESSAGE 2"; Throwable e(msg); Throwable ee(msg2); ee = e; assertEquals(msg, ee.getMessage()); ee = ee; assertEquals(msg, ee.getMessage()); } void testOpEqMove() { String msg = "ERROR MESSAGE"; String msg2 = "ERROR MESSAGE 2"; Throwable e(msg); Throwable ee(msg2); ee = std::move(e); assertEquals(msg, ee.getMessage()); ee = std::move(ee); assertEquals(msg, ee.getMessage()); } void testClone() { ThrowableChild ch; std::unique_ptr<Object> ptr = ch.clone(); String str = ptr->toString(); assertTrue(str.length() > 0); } void suite() { RUN_TEST("new Throwable()", testThrowable); RUN_TEST("new Throwable(msg)", testThrowableMsg); RUN_TEST("copy", testThrowableCopy); RUN_TEST("move", testThrowableMove); RUN_TEST("toString()", testThrowableToString); RUN_TEST("operator=(const Throwable&)", testOpEq); RUN_TEST("operator=(const Throwable&&)", testOpEqMove); RUN_TEST("clone", testClone); } };