Author: carnold
Date: Sun May 18 13:58:02 2008
New Revision: 657640

URL: http://svn.apache.org/viewvc?rev=657640&view=rev
Log:
LOGCXX-276: AndFilter and others defined but not implemented

Added:
    logging/log4cxx/trunk/src/main/cpp/andfilter.cpp
    logging/log4cxx/trunk/src/main/cpp/loggermatchfilter.cpp
    logging/log4cxx/trunk/src/main/include/log4cxx/filter/loggermatchfilter.h
    logging/log4cxx/trunk/src/test/cpp/filter/
    logging/log4cxx/trunk/src/test/cpp/filter/andfiltertest.cpp
    logging/log4cxx/trunk/src/test/cpp/filter/denyallfiltertest.cpp
    logging/log4cxx/trunk/src/test/cpp/filter/levelmatchfiltertest.cpp
    logging/log4cxx/trunk/src/test/cpp/filter/levelrangefiltertest.cpp
    logging/log4cxx/trunk/src/test/cpp/filter/loggermatchfiltertest.cpp
    logging/log4cxx/trunk/src/test/cpp/filter/stringmatchfiltertest.cpp
Modified:
    logging/log4cxx/trunk/src/changes/changes.xml
    logging/log4cxx/trunk/src/main/cpp/Makefile.am
    logging/log4cxx/trunk/src/main/include/log4cxx/filter/andfilter.h
    logging/log4cxx/trunk/src/main/include/log4cxx/filter/levelmatchfilter.h
    logging/log4cxx/trunk/src/test/cpp/Makefile.am

Modified: logging/log4cxx/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/changes/changes.xml?rev=657640&r1=657639&r2=657640&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/changes/changes.xml (original)
+++ logging/log4cxx/trunk/src/changes/changes.xml Sun May 18 13:58:02 2008
@@ -31,6 +31,7 @@
 <action issue="LOGCXX-271">MDC::put will not overwrite existing key value 
pair</action>
 <action issue="LOGCXX-272">Apache log4cxx 0.10.1 release</action>
 <action issue="LOGCXX-275">Headers cannot be included with very strict warning 
settings</action>
+<action issue="LOGCXX-276">AndFilter and others defined but not 
implemented</action>
 <action issue="LOGCXX-277">Reconnection not working for sockets</action>
 <action issue="LOGCXX-278">Threads for reconnecting sockets do not end cleanly 
when program exits</action>
 <action issue="LOGCXX-280">tests and sample code unnecessarily compiled during 
default make target</action>

Modified: logging/log4cxx/trunk/src/main/cpp/Makefile.am
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/Makefile.am?rev=657640&r1=657639&r2=657640&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/Makefile.am (original)
+++ logging/log4cxx/trunk/src/main/cpp/Makefile.am Sun May 18 13:58:02 2008
@@ -20,6 +20,7 @@
 
 liblog4cxx_la_SOURCES = \
         action.cpp \
+        andfilter.cpp \
         appenderattachableimpl.cpp \
         appenderskeleton.cpp \
         aprinitializer.cpp \
@@ -81,6 +82,7 @@
         linelocationpatternconverter.cpp \
         lineseparatorpatternconverter.cpp \
         literalpatternconverter.cpp \
+        loggermatchfilter.cpp \
         loggerpatternconverter.cpp \
         loggingeventpatternconverter.cpp \
         loader.cpp\

Added: logging/log4cxx/trunk/src/main/cpp/andfilter.cpp
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/andfilter.cpp?rev=657640&view=auto
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/andfilter.cpp (added)
+++ logging/log4cxx/trunk/src/main/cpp/andfilter.cpp Sun May 18 13:58:02 2008
@@ -0,0 +1,67 @@
+/*
+ * 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 <log4cxx/filter/andfilter.h>
+#include <log4cxx/spi/loggingevent.h>
+#include <log4cxx/helpers/stringhelper.h>
+#include <log4cxx/helpers/optionconverter.h>
+
+using namespace log4cxx;
+using namespace log4cxx::filter;
+using namespace log4cxx::spi;
+using namespace log4cxx::helpers;
+
+IMPLEMENT_LOG4CXX_OBJECT(AndFilter)
+
+
+AndFilter::AndFilter()
+: headFilter(), tailFilter(), acceptOnMatch(true)
+{
+}
+
+void AndFilter::addFilter(const FilterPtr& filter) {
+    if (headFilter == NULL) {
+      headFilter = filter;
+      tailFilter = filter;
+    } else {
+      tailFilter->setNext(filter);
+    }
+}
+
+
+void AndFilter::setAcceptOnMatch(bool newValue) {
+    acceptOnMatch = newValue;
+}
+
+Filter::FilterDecision AndFilter::decide(
+   const spi::LoggingEventPtr& event) const
+{
+    bool accepted = true;
+    FilterPtr f(headFilter);
+    while (f != NULL) {
+      accepted = accepted && (Filter::ACCEPT == f->decide(event));
+      f = f->getNext();
+    }
+    if (accepted) {
+      if(acceptOnMatch) {
+        return Filter::ACCEPT;
+      }
+       return Filter::DENY;
+    }
+    return Filter::NEUTRAL;
+}
+

Added: logging/log4cxx/trunk/src/main/cpp/loggermatchfilter.cpp
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/loggermatchfilter.cpp?rev=657640&view=auto
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/loggermatchfilter.cpp (added)
+++ logging/log4cxx/trunk/src/main/cpp/loggermatchfilter.cpp Sun May 18 
13:58:02 2008
@@ -0,0 +1,75 @@
+/*
+ * 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 <log4cxx/logstring.h>
+#include <log4cxx/filter/loggermatchfilter.h>
+#include <log4cxx/spi/loggingevent.h>
+#include <log4cxx/helpers/stringhelper.h>
+#include <log4cxx/helpers/optionconverter.h>
+
+using namespace log4cxx;
+using namespace log4cxx::filter;
+using namespace log4cxx::spi;
+using namespace log4cxx::helpers;
+
+IMPLEMENT_LOG4CXX_OBJECT(LoggerMatchFilter)
+
+
+LoggerMatchFilter::LoggerMatchFilter()
+: acceptOnMatch(true), loggerToMatch(LOG4CXX_STR("root"))
+{
+}
+
+void LoggerMatchFilter::setLoggerToMatch(const LogString& value) {
+    loggerToMatch = value;
+}
+
+LogString LoggerMatchFilter::getLoggerToMatch() const {
+    return loggerToMatch;
+}
+
+void LoggerMatchFilter::setOption(const LogString& option,
+   const LogString& value)
+{
+
+   if (StringHelper::equalsIgnoreCase(option,
+                 LOG4CXX_STR("LOGGERTOMATCH"), LOG4CXX_STR("loggertomatch")))
+   {
+      setLoggerToMatch(value);
+   }
+   else if (StringHelper::equalsIgnoreCase(option,
+                LOG4CXX_STR("ACCEPTONMATCH"), LOG4CXX_STR("acceptonmatch")))
+   {
+      acceptOnMatch = OptionConverter::toBoolean(value, acceptOnMatch);
+   }
+}
+
+Filter::FilterDecision LoggerMatchFilter::decide(
+   const spi::LoggingEventPtr& event) const
+{
+    bool matchOccured = loggerToMatch == event->getLoggerName();
+    if (matchOccured) {
+      if (acceptOnMatch) {
+        return Filter::ACCEPT;
+      } else {
+        return Filter::DENY;
+      }
+    } else {
+      return Filter::NEUTRAL;
+    }
+}
+

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/filter/andfilter.h
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/filter/andfilter.h?rev=657640&r1=657639&r2=657640&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/filter/andfilter.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/filter/andfilter.h Sun May 
18 13:58:02 2008
@@ -95,9 +95,10 @@
             void addFilter(const log4cxx::spi::FilterPtr & filter);
 
             void setAcceptOnMatch(bool acceptOnMatch);
-
+            
             FilterDecision decide(const spi::LoggingEventPtr & event) const;
         };
+        LOG4CXX_PTR_DEF(AndFilter);
 
     }
 }

Modified: 
logging/log4cxx/trunk/src/main/include/log4cxx/filter/levelmatchfilter.h
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/filter/levelmatchfilter.h?rev=657640&r1=657639&r2=657640&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/filter/levelmatchfilter.h 
(original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/filter/levelmatchfilter.h 
Sun May 18 13:58:02 2008
@@ -99,4 +99,4 @@
 #pragma warning ( pop )
 #endif
 
-#endif // _LOG4CXX_FILTER_STRING_MATCH_FILTER_H
+#endif // _LOG4CXX_FILTER_LEVEL_MATCH_FILTER_H

Added: logging/log4cxx/trunk/src/main/include/log4cxx/filter/loggermatchfilter.h
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/filter/loggermatchfilter.h?rev=657640&view=auto
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/filter/loggermatchfilter.h 
(added)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/filter/loggermatchfilter.h 
Sun May 18 13:58:02 2008
@@ -0,0 +1,104 @@
+/*
+ * 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.
+ */
+
+#ifndef _LOG4CXX_FILTER_LOGGER_MATCH_FILTER_H
+#define _LOG4CXX_FILTER_LOGGER_MATCH_FILTER_H
+
+#if defined(_MSC_VER)
+#pragma warning ( push )
+#pragma warning ( disable: 4231 4251 4275 4786 )
+#endif
+
+
+#include <log4cxx/spi/filter.h>
+#include <log4cxx/level.h>
+
+namespace log4cxx
+{
+        class Level;
+
+        namespace filter
+        {
+/**
+   This is a very simple filter based on logger name matching.
+
+   <p>The filter admits two options <b>LoggerToMatch</b> and
+   <b>AcceptOnMatch</b>. If there is an exact match between the value
+   of the <b>LoggerToMatch</b> option and the logger of the [EMAIL PROTECTED]
+                spi::LoggingEvent LoggingEvent}, then the #decide method 
returns  [EMAIL PROTECTED]
+                spi::Filter#ACCEPT ACCEPT} in case the <b>AcceptOnMatch</b> 
option value is set
+   to <code>true</code>, if it is <code>false</code> then [EMAIL PROTECTED]
+   spi::filter::Filter#DENY} is returned. If there is no match, [EMAIL 
PROTECTED]
+   spi::filter::Filter#NEUTRAL} is returned.  A loggerToMatch of "root"
+   matches both the root logger and a logger named "root".
+
+   */
+
+                class LOG4CXX_EXPORT LoggerMatchFilter : public spi::Filter
+                {
+                private:
+                        bool acceptOnMatch;
+                        LogString loggerToMatch;
+
+                public:
+                        typedef spi::Filter BASE_CLASS;
+                        DECLARE_LOG4CXX_OBJECT(LoggerMatchFilter)
+                        BEGIN_LOG4CXX_CAST_MAP()
+                                LOG4CXX_CAST_ENTRY(LoggerMatchFilter)
+                                LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS)
+                        END_LOG4CXX_CAST_MAP()
+
+                        LoggerMatchFilter();
+
+                        /**
+                        Set options
+                        */
+                        virtual void setOption(const LogString& option,
+                                const LogString& value);
+
+                        void setLoggerToMatch(const LogString& levelToMatch);
+
+                        LogString getLoggerToMatch() const;
+
+                        inline void setAcceptOnMatch(bool acceptOnMatch1)
+                                { this->acceptOnMatch = acceptOnMatch1; }
+
+                        inline bool getAcceptOnMatch() const
+                                { return acceptOnMatch; }
+
+                        /**
+                        Return the decision of this filter.
+
+                        Returns [EMAIL PROTECTED] spi::Filter#NEUTRAL NEUTRAL} 
if the
+                        <b>LoggerToMatch</b> option is not set or if there is 
not match.
+                        Otherwise, if there is a match, then the returned 
decision is
+                        [EMAIL PROTECTED] spi::Filter#ACCEPT ACCEPT} if the 
<b>AcceptOnMatch</b>
+                        property is set to <code>true</code>. The returned 
decision is
+                        [EMAIL PROTECTED] spi::Filter#DENY DENY} if the
+                        <b>AcceptOnMatch</b> property is set to false.
+                        */
+                        FilterDecision decide(const spi::LoggingEventPtr& 
event) const;
+                }; // class LoggerMatchFilter
+            LOG4CXX_PTR_DEF(LoggerMatchFilter);
+        }  // namespace filter
+} // namespace log4cxx
+
+#if defined(_MSC_VER)
+#pragma warning ( pop )
+#endif
+
+#endif // _LOG4CXX_FILTER_LOGGER_MATCH_FILTER_H

Modified: logging/log4cxx/trunk/src/test/cpp/Makefile.am
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/Makefile.am?rev=657640&r1=657639&r2=657640&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/Makefile.am (original)
+++ logging/log4cxx/trunk/src/test/cpp/Makefile.am Sun May 18 13:58:02 2008
@@ -35,6 +35,14 @@
        defaultinit/testcase2.cpp\
        defaultinit/testcase3.cpp\
        defaultinit/testcase4.cpp
+    
+filter_tests = \
+    filter/andfiltertest.cpp\
+    filter/denyallfiltertest.cpp\
+    filter/levelmatchfiltertest.cpp\
+    filter/levelrangefiltertest.cpp\
+    filter/loggermatchfiltertest.cpp\
+    filter/stringmatchfiltertest.cpp
 
 helpers = \
         helpers/absolutetimedateformattestcase.cpp \
@@ -118,6 +126,7 @@
 testsuite_SOURCES = \
         $(customlogger_tests) \
         $(defaultinit_tests) \
+        $(filter_tests) \
         $(helpers) \
         $(net_tests) \
         $(pattern_tests) \

Added: logging/log4cxx/trunk/src/test/cpp/filter/andfiltertest.cpp
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/filter/andfiltertest.cpp?rev=657640&view=auto
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/filter/andfiltertest.cpp (added)
+++ logging/log4cxx/trunk/src/test/cpp/filter/andfiltertest.cpp Sun May 18 
13:58:02 2008
@@ -0,0 +1,179 @@
+/*
+ * 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 <log4cxx/filter/andfilter.h>
+#include <log4cxx/logger.h>
+#include <log4cxx/spi/filter.h>
+#include <log4cxx/spi/loggingevent.h>
+#include <log4cxx/filter/levelmatchfilter.h>
+#include <log4cxx/filter/denyallfilter.h>
+#include <log4cxx/filter/stringmatchfilter.h>
+#include "../logunit.h"
+
+using namespace log4cxx;
+using namespace log4cxx::filter;
+using namespace log4cxx::spi; 
+using namespace log4cxx::helpers;
+
+
+/**
+ * Unit tests for AndFilter.
+ */
+LOGUNIT_CLASS(AndFilterTest) {
+    LOGUNIT_TEST_SUITE(AndFilterTest);
+       LOGUNIT_TEST(test1);
+       LOGUNIT_TEST(test2);
+       LOGUNIT_TEST(test3);
+       LOGUNIT_TEST(test4);
+       LOGUNIT_TEST(test5);
+       LOGUNIT_TEST(test6);
+    LOGUNIT_TEST_SUITE_END();
+    
+public:
+    
+
+    /**
+     * Check that AndFilter.decide() returns Filter.ACCEPT if no filters added.
+     */
+    void test1() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.AndFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        FilterPtr filter(new AndFilter());
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+    }
+    
+    /**
+     * Check that AndFilter.decide() returns Filter.ACCEPT if
+     *    only nested filter returns Filter.ACCEPT.
+     */
+    void test2() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.AndFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        AndFilterPtr filter(new AndFilter());
+        LevelMatchFilterPtr filter1(new LevelMatchFilter());
+        filter1->setLevelToMatch(LOG4CXX_STR("info"));
+        Pool p;
+        filter1->activateOptions(p);
+        filter->addFilter(filter1);
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+    }
+
+    /**
+     * Check that AndFilter.decide() returns Filter.ACCEPT if
+     *    two nested filters return Filter.ACCEPT.
+     */
+    void test3() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.AndFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        AndFilterPtr filter(new AndFilter());
+        LevelMatchFilterPtr filter1(new LevelMatchFilter());
+        filter1->setLevelToMatch(LOG4CXX_STR("info"));
+        Pool p;
+        filter1->activateOptions(p);
+        filter->addFilter(filter1);
+        LevelMatchFilterPtr filter2(new LevelMatchFilter());
+        filter2->setLevelToMatch(LOG4CXX_STR("info"));
+        filter2->activateOptions(p);
+        filter->addFilter(filter2);
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+    }
+
+    /**
+     * Check that AndFilter.decide() returns Filter.DENY if
+     *    only nested filter returns Filter.ACCEPT
+     *    and acceptOnMatch is false.
+     */
+    void test4() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.AndFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        AndFilterPtr filter(new AndFilter());
+        LevelMatchFilterPtr filter1(new LevelMatchFilter());
+        filter1->setLevelToMatch(LOG4CXX_STR("info"));
+        Pool p;
+        filter1->activateOptions(p);
+        filter->addFilter(filter1);
+        filter->setAcceptOnMatch(false);
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
+    }
+
+    /**
+     * Check that AndFilter.decide() returns Filter.NEUTRAL if
+     *    nested filters return Filter.ACCEPT and Filter.DENY.
+     */
+    void test5() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.AndFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        AndFilterPtr filter(new AndFilter());
+        LevelMatchFilterPtr filter1(new LevelMatchFilter());
+        filter1->setLevelToMatch(LOG4CXX_STR("info"));
+        Pool p;
+        filter1->activateOptions(p);
+        filter->addFilter(filter1);
+        FilterPtr filter2(new DenyAllFilter());
+        filter2->activateOptions(p);
+        filter->addFilter(filter2);
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+
+    /**
+     * Check that AndFilter.decide() returns Filter.NEUTRAL if
+     *    nested filters return Filter.ACCEPT and Filter.NEUTRAL.
+     */
+    void test6() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.AndFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        AndFilterPtr filter(new AndFilter());
+        LevelMatchFilterPtr filter1(new LevelMatchFilter());
+        filter1->setLevelToMatch(LOG4CXX_STR("info"));
+        Pool p;
+        filter1->activateOptions(p);
+        filter->addFilter(filter1);
+        FilterPtr filter2(new StringMatchFilter());
+        filter2->activateOptions(p);
+        filter->addFilter(filter2);
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+};
+
+
+LOGUNIT_TEST_SUITE_REGISTRATION(AndFilterTest);
+

Added: logging/log4cxx/trunk/src/test/cpp/filter/denyallfiltertest.cpp
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/filter/denyallfiltertest.cpp?rev=657640&view=auto
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/filter/denyallfiltertest.cpp (added)
+++ logging/log4cxx/trunk/src/test/cpp/filter/denyallfiltertest.cpp Sun May 18 
13:58:02 2008
@@ -0,0 +1,56 @@
+/*
+ * 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 <log4cxx/filter/denyallfilter.h>
+#include <log4cxx/logger.h>
+#include <log4cxx/spi/filter.h>
+#include <log4cxx/spi/loggingevent.h>
+#include "../logunit.h"
+
+using namespace log4cxx;
+using namespace log4cxx::filter;
+using namespace log4cxx::spi; 
+using namespace log4cxx::helpers;
+
+
+/**
+ * Unit tests for DenyAllFilter.
+ */
+LOGUNIT_CLASS(DenyAllFilterTest) {
+    LOGUNIT_TEST_SUITE(DenyAllFilterTest);
+       LOGUNIT_TEST(test1);
+    LOGUNIT_TEST_SUITE_END();
+
+    /**
+     * Check that DenyAllFilter.decide() returns Filter.DENY.
+     */
+    void test1() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.DenyAllFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        FilterPtr filter(new DenyAllFilter());
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
+    }
+
+};
+
+LOGUNIT_TEST_SUITE_REGISTRATION(DenyAllFilterTest);
+
+

Added: logging/log4cxx/trunk/src/test/cpp/filter/levelmatchfiltertest.cpp
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/filter/levelmatchfiltertest.cpp?rev=657640&view=auto
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/filter/levelmatchfiltertest.cpp (added)
+++ logging/log4cxx/trunk/src/test/cpp/filter/levelmatchfiltertest.cpp Sun May 
18 13:58:02 2008
@@ -0,0 +1,129 @@
+/*
+ * 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 <log4cxx/filter/levelmatchfilter.h>
+#include <log4cxx/logger.h>
+#include <log4cxx/spi/filter.h>
+#include <log4cxx/spi/loggingevent.h>
+#include "../logunit.h"
+
+using namespace log4cxx;
+using namespace log4cxx::filter;
+using namespace log4cxx::spi; 
+using namespace log4cxx::helpers;
+
+
+/**
+ * Unit tests for LevelMatchFilter.
+ */
+LOGUNIT_CLASS(LevelMatchFilterTest) {
+    LOGUNIT_TEST_SUITE(LevelMatchFilterTest);
+       LOGUNIT_TEST(test1);
+       LOGUNIT_TEST(test2);
+       LOGUNIT_TEST(test3);
+       LOGUNIT_TEST(test4);
+       LOGUNIT_TEST(test5);
+    LOGUNIT_TEST_SUITE_END();
+    
+public:
+    /**
+     * Check that LevelMatchFilter.decide() returns Filter.ACCEPT when level 
matches.
+     */
+    void test1() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.LevelMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelMatchFilterPtr filter(new LevelMatchFilter());
+        filter->setLevelToMatch(LOG4CXX_STR("info"));
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+    }
+
+    /**
+     * Check that LevelMatchFilter.decide() returns Filter.DENY
+     *    when level matches and acceptOnMatch = false.
+     */
+    void test2() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.LevelMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelMatchFilterPtr filter(new LevelMatchFilter());
+        filter->setLevelToMatch(LOG4CXX_STR("info"));
+        filter->setAcceptOnMatch(false);
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
+    }
+
+    /**
+     * Check that LevelMatchFilter.decide() returns Filter.NEUTRAL
+     *    when levelToMatch is unspecified.
+     */
+    void test3() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.LevelMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelMatchFilterPtr filter(new LevelMatchFilter());
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+
+    /**
+     * Check that LevelMatchFilter.decide() returns Filter.NEUTRAL
+     *    when event level is higher than level to match.
+     */
+    void test4() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.LevelMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelMatchFilterPtr filter(new LevelMatchFilter());
+        filter->setLevelToMatch(LOG4CXX_STR("debug"));
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+
+    /**
+     * Check that LevelMatchFilter.decide() returns Filter.NEUTRAL
+     *    when event level is lower than level to match.
+     */
+    void test5() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.LevelMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelMatchFilterPtr filter(new LevelMatchFilter());
+        filter->setLevelToMatch(LOG4CXX_STR("warn"));
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+};
+
+LOGUNIT_TEST_SUITE_REGISTRATION(LevelMatchFilterTest);
+
+

Added: logging/log4cxx/trunk/src/test/cpp/filter/levelrangefiltertest.cpp
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/filter/levelrangefiltertest.cpp?rev=657640&view=auto
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/filter/levelrangefiltertest.cpp (added)
+++ logging/log4cxx/trunk/src/test/cpp/filter/levelrangefiltertest.cpp Sun May 
18 13:58:02 2008
@@ -0,0 +1,149 @@
+/*
+ * 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 <log4cxx/filter/levelrangefilter.h>
+#include <log4cxx/logger.h>
+#include <log4cxx/spi/filter.h>
+#include <log4cxx/spi/loggingevent.h>
+#include "../logunit.h"
+
+using namespace log4cxx;
+using namespace log4cxx::filter;
+using namespace log4cxx::spi; 
+using namespace log4cxx::helpers;
+
+
+/**
+ * Unit tests for LevelRangeFilter.
+ */
+LOGUNIT_CLASS(LevelRangeFilterTest) {
+    LOGUNIT_TEST_SUITE(LevelRangeFilterTest);
+       LOGUNIT_TEST(test1);
+       LOGUNIT_TEST(test2);
+       LOGUNIT_TEST(test3);
+       LOGUNIT_TEST(test4);
+       LOGUNIT_TEST(test5);
+       LOGUNIT_TEST(test6);
+    LOGUNIT_TEST_SUITE_END();
+    
+public:
+    /**
+     * Check that LevelRangefilter->decide() returns Filter::DENY
+     *     when event level is below min level.
+     */
+    void test1() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.Filter::LevelRangeFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelRangeFilterPtr filter(new LevelRangeFilter());
+        filter->setLevelMin(Level::getWarn());
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
+    }
+
+    /**
+     * Check that LevelRangefilter->decide() returns Filter::DENY
+     *    when event level is above max level.
+     */
+    void test2() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.Filter::LevelRangeFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelRangeFilterPtr filter(new LevelRangeFilter());
+        filter->setLevelMax(Level::getDebug());
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
+    }
+
+    /**
+     * Check that LevelRangefilter->decide() returns Filter::ACCEPT
+     *    when event level is above min level.
+     */
+    void test3() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.Filter::LevelRangeFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelRangeFilterPtr filter(new LevelRangeFilter());
+        filter->setLevelMin(Level::getDebug());
+        filter->setAcceptOnMatch(true);
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+    }
+
+    /**
+     * Check that LevelRangefilter->decide() returns Filter::ACCEPT
+     *    when event level is below max level.
+     */
+    void test4() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.Filter::LevelRangeFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelRangeFilterPtr filter(new LevelRangeFilter());
+        filter->setLevelMax(Level::getError());
+        filter->setAcceptOnMatch(true);
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+    }
+
+    /**
+     * Check that LevelRangeFilter::decide() returns Filter::NEUTRAL
+     *    when event level is above min level and accept on match is false.
+     */
+    void test5() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.Filter::LevelRangeFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelRangeFilterPtr filter(new LevelRangeFilter());
+        filter->setLevelMin(Level::getDebug());
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+
+    /**
+     * Check that LevelRangeFilter::decide() returns Filter::NEUTRAL
+     *    when event level is below max level and accept on match is false.
+     */
+    void test6() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.Filter::LevelRangeFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LevelRangeFilterPtr filter(new LevelRangeFilter());
+        filter->setLevelMax(Level::getError());
+        Pool p;
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+};
+
+LOGUNIT_TEST_SUITE_REGISTRATION(LevelRangeFilterTest);
+

Added: logging/log4cxx/trunk/src/test/cpp/filter/loggermatchfiltertest.cpp
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/filter/loggermatchfiltertest.cpp?rev=657640&view=auto
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/filter/loggermatchfiltertest.cpp (added)
+++ logging/log4cxx/trunk/src/test/cpp/filter/loggermatchfiltertest.cpp Sun May 
18 13:58:02 2008
@@ -0,0 +1,109 @@
+/*
+ * 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 <log4cxx/filter/loggermatchfilter.h>
+#include <log4cxx/logger.h>
+#include <log4cxx/spi/filter.h>
+#include <log4cxx/spi/loggingevent.h>
+#include "../logunit.h"
+
+using namespace log4cxx;
+using namespace log4cxx::filter;
+using namespace log4cxx::spi; 
+using namespace log4cxx::helpers;
+
+
+/**
+ * Unit tests for LoggerMatchFilter.
+ */
+LOGUNIT_CLASS(LoggerMatchFilterTest) {
+    LOGUNIT_TEST_SUITE(LoggerMatchFilterTest);
+       LOGUNIT_TEST(test1);
+       LOGUNIT_TEST(test2);
+       LOGUNIT_TEST(test3);
+       LOGUNIT_TEST(test4);
+    LOGUNIT_TEST_SUITE_END();
+    
+public:
+    /**
+     * Check that LoggerMatchFilter::decide() with unspecified level
+     *    returns Filter::ACCEPT for root logger.
+     */
+    void test1() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("root"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        FilterPtr filter(new LoggerMatchFilter());
+        Pool p; 
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+    }
+
+    /**
+     * Check that LoggerMatchFilter::decide() with unspecified level
+     *    returns Filter::DENY for root logger when accept on match is false.
+     */
+    void test2() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("root"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LoggerMatchFilterPtr filter(new LoggerMatchFilter());
+        filter->setAcceptOnMatch(false);
+        Pool p; 
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
+    }
+
+    /**
+     * Check that LoggerMatchFilter::decide() with unspecified level
+     *    returns Filter::NEUTRAL for non-root logger.
+     */
+    void test3() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.LoggerMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        FilterPtr filter(new LoggerMatchFilter());
+        Pool p; 
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+
+    /**
+     * Check that LoggerMatchFilter::decide()
+     *    returns Filter::ACCEPT for matching logger.
+     */
+    void test4() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.LoggerMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        LoggerMatchFilterPtr filter(new LoggerMatchFilter());
+        
filter->setLoggerToMatch(LOG4CXX_STR("org.apache.log4j.filter.LoggerMatchFilterTest"));
+        Pool p; 
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+    }
+
+};
+
+LOGUNIT_TEST_SUITE_REGISTRATION(LoggerMatchFilterTest);

Added: logging/log4cxx/trunk/src/test/cpp/filter/stringmatchfiltertest.cpp
URL: 
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/test/cpp/filter/stringmatchfiltertest.cpp?rev=657640&view=auto
==============================================================================
--- logging/log4cxx/trunk/src/test/cpp/filter/stringmatchfiltertest.cpp (added)
+++ logging/log4cxx/trunk/src/test/cpp/filter/stringmatchfiltertest.cpp Sun May 
18 13:58:02 2008
@@ -0,0 +1,133 @@
+/*
+ * 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 <log4cxx/filter/stringmatchfilter.h>
+#include <log4cxx/logger.h>
+#include <log4cxx/spi/filter.h>
+#include <log4cxx/spi/loggingevent.h>
+#include "../logunit.h"
+
+using namespace log4cxx;
+using namespace log4cxx::filter;
+using namespace log4cxx::spi; 
+using namespace log4cxx::helpers;
+
+
+/**
+ * Unit tests for StringMatchFilter.
+ */
+LOGUNIT_CLASS(StringMatchFilterTest) {
+    LOGUNIT_TEST_SUITE(StringMatchFilterTest);
+       LOGUNIT_TEST(test1);
+       LOGUNIT_TEST(test2);
+       LOGUNIT_TEST(test3);
+       LOGUNIT_TEST(test4);
+    LOGUNIT_TEST_SUITE_END();
+    
+public:
+
+    /**
+     * Check that StringMatchFilter.decide() returns Filter.NEUTRAL
+     *   when string to match is unspecified.
+     */
+    void test1() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.StringMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        FilterPtr filter(new StringMatchFilter());
+        Pool p; 
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+
+    /**
+     * Check that StringMatchFilter.decide() returns Filter.NEUTRAL
+     *   when string to match does not appear in message.
+     */
+    void test2() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.StringMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        StringMatchFilterPtr filter(new StringMatchFilter());
+        filter->setStringToMatch(LOG4CXX_STR("Monde"));
+        Pool p; 
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+
+    /**
+     * Check that StringMatchFilter.decide() returns Filter.ACCEPT
+     *   when string to match does appear in message.
+     */
+    void test3() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.StringMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        StringMatchFilterPtr filter(new StringMatchFilter());
+        filter->setStringToMatch(LOG4CXX_STR("World"));
+        Pool p; 
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+    }
+
+    /**
+     * Check that StringMatchFilter.decide() returns Filter.DENY
+     *   when string to match does appear in message and
+     *   accept on match is false.
+     */
+    void test4() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.StringMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        StringMatchFilterPtr filter(new StringMatchFilter());
+        filter->setStringToMatch(LOG4CXX_STR("World"));
+        filter->setAcceptOnMatch(false);
+        Pool p; 
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
+    }
+
+    /**
+     * Check that StringMatchFilter.decide() returns Filter.NEUTRAL
+     *   when string to match does appear in message but differs in case.
+     */
+    void test5() {
+        LoggingEventPtr event(new LoggingEvent(
+                LOG4CXX_STR("org.apache.log4j.filter.StringMatchFilterTest"),
+                Level::getInfo(), 
+                LOG4CXX_STR("Hello, World"), 
+                LOG4CXX_LOCATION));
+        StringMatchFilterPtr filter(new StringMatchFilter());
+        filter->setStringToMatch(LOG4CXX_STR("world"));
+        Pool p; 
+        filter->activateOptions(p);
+        LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
+    }
+
+};
+
+
+LOGUNIT_TEST_SUITE_REGISTRATION(StringMatchFilterTest);
+
+


Reply via email to