/* ==================================================================== * Copyright (c) 2003-2006, Martin Hauner * http://subcommander.tigris.org * * Subcommander is licensed as described in the file doc/COPYING, which * you should have received as part of this distribution. * ==================================================================== */ #include "TextModelTest.h" // cppunit #include #include // sc #include "sublib/TextModelImpl.h" #include "sublib/Cursor.h" #include "sublib/Line.h" #include "util/String.h" TextModelTest::TextModelTest() : CppUnit::TestCase("TextModelTest") { } TextModelTest::~TextModelTest() { } void TextModelTest::setUp() { sc::String text("test"); _text = new TextModelImpl( text ); } void TextModelTest::tearDown() { delete _text; } CppUnit::Test *TextModelTest::suite() { CppUnit::TestSuite *newSuite = new CppUnit::TestSuite("TextModelTest"); newSuite->addTest(new CppUnit::TestCaller("testSingleCharAdd",&TextModelTest::testSingleCharAdd) ); newSuite->addTest(new CppUnit::TestCaller("testEmptyDelLeft",&TextModelTest::testEmptyDelLeft) ); newSuite->addTest(new CppUnit::TestCaller("testEmptyDelRight",&TextModelTest::testEmptyDelRight) ); newSuite->addTest(new CppUnit::TestCaller("testAddReturn",&TextModelTest::testAddReturn) ); newSuite->addTest(new CppUnit::TestCaller("testAddMultiLineLE",&TextModelTest::testAddMultiLineLE) ); newSuite->addTest(new CppUnit::TestCaller("testAddMultiLine",&TextModelTest::testAddMultiLine) ); newSuite->addTest(new CppUnit::TestCaller("testCalcNearestCursorPos",&TextModelTest::testCalcNearestCursorPos) ); return newSuite; } void TextModelTest::testSingleCharAdd() { Cursor null(0,0); Cursor c1 = _text->getCursor(); Cursor c2 = _text->getCursor2(); CPPUNIT_ASSERT( c1.equalPos(null) ); CPPUNIT_ASSERT( c2.equalPos(null) ); _text->addText( sc::String("1") ); Cursor pos(0,1); c1 = _text->getCursor(); c2 = _text->getCursor2(); CPPUNIT_ASSERT( c1.equalPos(pos) ); CPPUNIT_ASSERT( c2.equalPos(pos) ); } void TextModelTest::testEmptyDelLeft() { Cursor null(0,0); _text->removeTextLeft(); _text->undo(); Cursor c1 = _text->getCursor(); Cursor c2 = _text->getCursor2(); CPPUNIT_ASSERT( c1.equalPos(null) ); CPPUNIT_ASSERT( c2.equalPos(null) ); } void TextModelTest::testEmptyDelRight() { Cursor null(0,0); _text->removeTextRight(); _text->undo(); Cursor c1 = _text->getCursor(); Cursor c2 = _text->getCursor2(); CPPUNIT_ASSERT( c1.equalPos(null) ); CPPUNIT_ASSERT( c2.equalPos(null) ); } void TextModelTest::testAddReturn() { _text->addText( sc::String("\n") ); { CPPUNIT_ASSERT( 2 == _text->getLineCnt() ); const Line& res = _text->getLine(0); CPPUNIT_ASSERT_EQUAL( sc::String("\n"), res.getLine() ); const Line& res2 = _text->getLine(1); CPPUNIT_ASSERT_EQUAL( Line::getEmpty().getLine(), res2.getLine() ); } _text->undo(); { CPPUNIT_ASSERT( 1 == _text->getLineCnt() ); const Line& res = _text->getLine(0); CPPUNIT_ASSERT_EQUAL( Line::getEmpty().getLine(), res.getLine() ); } } void TextModelTest::testAddMultiLineLE() { _text->addText( sc::String("line1\nline2\n") ); CPPUNIT_ASSERT( 3 == _text->getLineCnt() ); _text->undo(); CPPUNIT_ASSERT( 1 == _text->getLineCnt() ); } void TextModelTest::testAddMultiLine() { _text->addText( sc::String("line1\nline2") ); CPPUNIT_ASSERT( 2 == _text->getLineCnt() ); _text->undo(); CPPUNIT_ASSERT( 1 == _text->getLineCnt() ); } void TextModelTest::testCalcNearestCursorPos() { Cursor in(10,0); Cursor out = _text->calcNearestCursorPos(in); CPPUNIT_ASSERT( out.equalPos(Cursor(-1,0)) ); _text->addText( sc::String("line1\nline2") ); out = _text->calcNearestCursorPos(in); CPPUNIT_ASSERT( out.equalPos(Cursor(1,0)) ); }