ferencd@0: // ferencd@0: // VMime library (http://www.vmime.org) ferencd@0: // Copyright (C) 2002-2013 Vincent Richard ferencd@0: // ferencd@0: // This program is free software; you can redistribute it and/or ferencd@0: // modify it under the terms of the GNU General Public License as ferencd@0: // published by the Free Software Foundation; either version 3 of ferencd@0: // the License, or (at your option) any later version. ferencd@0: // ferencd@0: // This program is distributed in the hope that it will be useful, ferencd@0: // but WITHOUT ANY WARRANTY; without even the implied warranty of ferencd@0: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ferencd@0: // General Public License for more details. ferencd@0: // ferencd@0: // You should have received a copy of the GNU General Public License along ferencd@0: // with this program; if not, write to the Free Software Foundation, Inc., ferencd@0: // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ferencd@0: // ferencd@0: // Linking this library statically or dynamically with other modules is making ferencd@0: // a combined work based on this library. Thus, the terms and conditions of ferencd@0: // the GNU General Public License cover the whole combination. ferencd@0: // ferencd@0: ferencd@0: #include "tests/testUtils.hpp" ferencd@0: ferencd@0: ferencd@0: VMIME_TEST_SUITE_BEGIN(stringProxyTest) ferencd@0: ferencd@0: VMIME_TEST_LIST_BEGIN ferencd@0: VMIME_TEST(testConstruct) ferencd@0: VMIME_TEST(testConstruct2) ferencd@0: ferencd@0: VMIME_TEST(testDetach) ferencd@0: ferencd@0: VMIME_TEST(testSet) ferencd@0: ferencd@0: VMIME_TEST(testExtract) ferencd@0: ferencd@0: VMIME_TEST(testOperatorLTLT1) ferencd@0: VMIME_TEST(testOperatorLTLT2) ferencd@0: VMIME_TEST_LIST_END ferencd@0: ferencd@0: ferencd@0: void testConstruct() ferencd@0: { ferencd@0: vmime::utility::stringProxy s; ferencd@0: ferencd@0: VASSERT_EQ("1", static_cast (0), s.length()); ferencd@0: VASSERT_EQ("2", static_cast (0), s.start()); ferencd@0: VASSERT_EQ("3", static_cast (0), s.end()); ferencd@0: } ferencd@0: ferencd@0: void testConstruct2() ferencd@0: { ferencd@0: vmime::string str("This is a test string."); ferencd@0: ferencd@0: vmime::utility::stringProxy s1(str); ferencd@0: ferencd@0: VASSERT_EQ("1", str.length(), s1.length()); ferencd@0: VASSERT_EQ("2", static_cast (0), s1.start()); ferencd@0: VASSERT_EQ("3", str.length(), s1.end()); ferencd@0: ferencd@0: vmime::utility::stringProxy s2(str, 10); ferencd@0: ferencd@0: VASSERT_EQ("4", str.length() - 10, s2.length()); ferencd@0: VASSERT_EQ("5", static_cast (10), s2.start()); ferencd@0: VASSERT_EQ("6", str.length(), s2.end()); ferencd@0: ferencd@0: vmime::utility::stringProxy s3(str, 10, 14); ferencd@0: ferencd@0: VASSERT_EQ("7", static_cast (4), s3.length()); ferencd@0: VASSERT_EQ("8", static_cast (10), s3.start()); ferencd@0: VASSERT_EQ("9", static_cast (14), s3.end()); ferencd@0: ferencd@0: VASSERT_EQ("10", 't', *s3.it_begin()); ferencd@0: VASSERT_EQ("11", 'e', *(s3.it_begin() + 1)); ferencd@0: VASSERT_EQ("12", 's', *(s3.it_begin() + 2)); ferencd@0: VASSERT_EQ("13", 't', *(s3.it_begin() + 3)); ferencd@0: } ferencd@0: ferencd@0: void testDetach() ferencd@0: { ferencd@0: vmime::utility::stringProxy s; ferencd@0: s = "foo"; ferencd@0: ferencd@0: s.detach(); ferencd@0: ferencd@0: VASSERT_EQ("1", static_cast (0), s.length()); ferencd@0: VASSERT_EQ("2", static_cast (0), s.start()); ferencd@0: VASSERT_EQ("3", static_cast (0), s.end()); ferencd@0: } ferencd@0: ferencd@0: void testSet() ferencd@0: { ferencd@0: vmime::string str("This is a test string."); ferencd@0: ferencd@0: vmime::utility::stringProxy s1; ferencd@0: s1.set(str); ferencd@0: ferencd@0: VASSERT_EQ("1", str.length(), s1.length()); ferencd@0: VASSERT_EQ("2", static_cast (0), s1.start()); ferencd@0: VASSERT_EQ("3", str.length(), s1.end()); ferencd@0: ferencd@0: vmime::utility::stringProxy s2; ferencd@0: s2.set(str, 10); ferencd@0: ferencd@0: VASSERT_EQ("4", str.length() - 10, s2.length()); ferencd@0: VASSERT_EQ("5", static_cast (10), s2.start()); ferencd@0: VASSERT_EQ("6", str.length(), s2.end()); ferencd@0: ferencd@0: vmime::utility::stringProxy s3; ferencd@0: s3.set(str, 10, 14); ferencd@0: ferencd@0: VASSERT_EQ("7", static_cast (4), s3.length()); ferencd@0: VASSERT_EQ("8", static_cast (10), s3.start()); ferencd@0: VASSERT_EQ("9", static_cast (14), s3.end()); ferencd@0: ferencd@0: VASSERT_EQ("10", 't', *s3.it_begin()); ferencd@0: VASSERT_EQ("11", 'e', *(s3.it_begin() + 1)); ferencd@0: VASSERT_EQ("12", 's', *(s3.it_begin() + 2)); ferencd@0: VASSERT_EQ("13", 't', *(s3.it_begin() + 3)); ferencd@0: } ferencd@0: ferencd@0: void testExtract() ferencd@0: { ferencd@0: vmime::string str("This is a test string."); ferencd@0: ferencd@0: vmime::utility::stringProxy s1(str, 10, 14); ferencd@0: ferencd@0: std::ostringstream oss1; ferencd@0: vmime::utility::outputStreamAdapter osa1(oss1); ferencd@0: ferencd@0: s1.extract(osa1); ferencd@0: ferencd@0: VASSERT_EQ("1", "test", oss1.str()); ferencd@0: ferencd@0: vmime::utility::stringProxy s2(str); ferencd@0: ferencd@0: std::ostringstream oss2; ferencd@0: vmime::utility::outputStreamAdapter osa2(oss2); ferencd@0: ferencd@0: s2.extract(osa2); ferencd@0: ferencd@0: VASSERT_EQ("2", str, oss2.str()); ferencd@0: } ferencd@0: ferencd@0: void testOperatorLTLT1() ferencd@0: { ferencd@0: vmime::string str("This is a test string."); ferencd@0: ferencd@0: vmime::utility::stringProxy s1(str, 10, 14); ferencd@0: ferencd@0: std::ostringstream oss1; ferencd@0: oss1 << s1; ferencd@0: ferencd@0: VASSERT_EQ("1", "test", oss1.str()); ferencd@0: ferencd@0: vmime::utility::stringProxy s2(str); ferencd@0: ferencd@0: std::ostringstream oss2; ferencd@0: oss2 << s2; ferencd@0: ferencd@0: VASSERT_EQ("2", str, oss2.str()); ferencd@0: } ferencd@0: ferencd@0: void testOperatorLTLT2() ferencd@0: { ferencd@0: vmime::string str("This is a test string."); ferencd@0: ferencd@0: vmime::utility::stringProxy s1(str, 10, 14); ferencd@0: ferencd@0: std::ostringstream oss1; ferencd@0: vmime::utility::outputStreamAdapter osa1(oss1); ferencd@0: ferencd@0: osa1 << s1; ferencd@0: ferencd@0: VASSERT_EQ("1", "test", oss1.str()); ferencd@0: ferencd@0: vmime::utility::stringProxy s2(str); ferencd@0: ferencd@0: std::ostringstream oss2; ferencd@0: vmime::utility::outputStreamAdapter osa2(oss2); ferencd@0: ferencd@0: osa2 << s2; ferencd@0: ferencd@0: VASSERT_EQ("2", str, oss2.str()); ferencd@0: } ferencd@0: ferencd@0: VMIME_TEST_SUITE_END ferencd@0: