diff options
Diffstat (limited to 'src/test/cpp/fileappendertestcase.cpp')
-rw-r--r-- | src/test/cpp/fileappendertestcase.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/test/cpp/fileappendertestcase.cpp b/src/test/cpp/fileappendertestcase.cpp new file mode 100644 index 0000000..dadf034 --- /dev/null +++ b/src/test/cpp/fileappendertestcase.cpp @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 "fileappendertestcase.h" +#include <log4cxx/helpers/objectptr.h> +#include <log4cxx/fileappender.h> +#include "insertwide.h" + +using namespace log4cxx; +using namespace log4cxx::helpers; + +WriterAppender* FileAppenderAbstractTestCase::createWriterAppender() const { + return createFileAppender(); +} + + +/** + Unit tests of log4cxx::FileAppender + */ +class FileAppenderTestCase : public FileAppenderAbstractTestCase +{ + LOGUNIT_TEST_SUITE(FileAppenderTestCase); + // + // tests inherited from AppenderSkeletonTestCase + // + LOGUNIT_TEST(testDefaultThreshold); + LOGUNIT_TEST(testSetOptionThreshold); + + // tests defined here + LOGUNIT_TEST(testSetDoubleBackslashes); + LOGUNIT_TEST(testStripDuplicateBackslashes); + + LOGUNIT_TEST_SUITE_END(); + + + + +public: + + FileAppender* createFileAppender() const { + return new log4cxx::FileAppender(); + } + + void testSetDoubleBackslashes() { + FileAppender appender; + appender.setOption(LOG4CXX_STR("FILE"), LOG4CXX_STR("output\\\\temp")); + const File& file = appender.getFile(); + LOGUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("output\\temp"), file.getPath()); + } + + /** + * Tests that double backslashes in filespecs are stripped + * on calls to setOption. + * + */ + void testStripDoubleBackslashes() { + + FileAppender appender; + appender.setOption(LOG4CXX_STR("FILE"), LOG4CXX_STR("output\\\\temp")); + const File& file = appender.getFile(); + LOGUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("output\\temp"), file.getPath()); + } + + /** + * Tests stripDuplicateBackslashes + * + * + */ + void testStripDuplicateBackslashes() { + LOGUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("\\foo\\bar\\foo"), + FileAppender::stripDuplicateBackslashes(LOG4CXX_STR("\\foo\\bar\\foo"))); + LOGUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("\\foo\\bar\\foo\\"), + FileAppender::stripDuplicateBackslashes(LOG4CXX_STR("\\\\foo\\\\bar\\\\foo\\\\"))); + LOGUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("\\foo\\bar\\foo\\"), + FileAppender::stripDuplicateBackslashes(LOG4CXX_STR("\\foo\\bar\\foo\\"))); + // + // UNC's should either start with two backslashes and contain additional singles + // or four back slashes and addition doubles + LOGUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("\\\\foo\\bar\\foo"), + FileAppender::stripDuplicateBackslashes(LOG4CXX_STR("\\\\\\\\foo\\\\bar\\\\foo"))); + LOGUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("\\\\foo\\bar\\foo"), + FileAppender::stripDuplicateBackslashes(LOG4CXX_STR("\\\\foo\\bar\\foo"))); + // + // it it starts with doubles but has no other path component + // then it is a file path + LOGUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("\\foo.log"), + FileAppender::stripDuplicateBackslashes(LOG4CXX_STR("\\\\foo.log"))); + // + // it it starts with quads but has no other path component + // then it is a UNC + LOGUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("\\\\foo.log"), + FileAppender::stripDuplicateBackslashes(LOG4CXX_STR("\\\\\\\\foo.log"))); + } + +}; + +LOGUNIT_TEST_SUITE_REGISTRATION(FileAppenderTestCase); |