From d5a3b181a9d799ecde038edada27aed73e2696fa Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Tue, 19 Oct 2010 23:29:56 -0600 Subject: [PATCH] unit-tests for some of the borderline if-def cases --- compat/testPreCompiler.cc | 82 +++++++++++++++++++++++++++++++++++++++ compat/testPreCompiler.h | 4 ++ 2 files changed, 86 insertions(+) diff --git a/compat/testPreCompiler.cc b/compat/testPreCompiler.cc index 3e22847bc7..0788fe0dd3 100644 --- a/compat/testPreCompiler.cc +++ b/compat/testPreCompiler.cc @@ -63,3 +63,85 @@ testPreCompiler::testIfDef() CPPUNIT_ASSERT(undefinedFalse); CPPUNIT_ASSERT(!undefinedTrue); } + +/** + * Test several ways of defining pre-compiler directives. + * Squid-3 uses #if FOO syntax for precompiler directives. + * These tests ensure that the inputs will work as expected + * when undefined macros are used in && conditions + */ +void +testPreCompiler::testIfDefAnd() +{ + /* Not Defined to exist at all == false - when used in a compound if */ +#undef UNDEFINED_FOO +#define ONE_FOO 1 + +#if UNDEFINED_FOO && ONE_FOO + bool undefinedAndTrueA = true; +#else + bool undefinedAndTrueA = false; +#endif +#if !UNDEFINED_FOO && ONE_FOO + bool undefinedAndFalseA = true; +#else + bool undefinedAndFalseA = false; +#endif + CPPUNIT_ASSERT(undefinedAndFalseA); + CPPUNIT_ASSERT(!undefinedAndTrueA); + +#if ONE_FOO && UNDEFINED_FOO + bool undefinedAndTrueB = true; +#else + bool undefinedAndTrueB = false; +#endif +#if ONE_FOO && !UNDEFINED_FOO + bool undefinedAndFalseB = true; +#else + bool undefinedAndFalseB = false; +#endif + CPPUNIT_ASSERT(undefinedAndFalseB); + CPPUNIT_ASSERT(!undefinedAndTrueB); +} + +/** + * Test several ways of defining pre-compiler directives. + * Squid-3 uses #if FOO syntax for precompiler directives. + * These tests ensure that the inputs will work as expected + * when undefined macros are used in || conditions + */ +void +testPreCompiler::testIfDefOr() +{ + /* Not Defined to exist at all == false - when used in a compound if */ +#undef UNDEFINED_FOO +#define ZERO_FOO 0 + +#if UNDEFINED_FOO || ZERO_FOO + bool undefinedOrTrueA = true; +#else + bool undefinedOrTrueA = false; +#endif +#if !UNDEFINED_FOO || ZERO_FOO + bool undefinedOrFalseA = true; +#else + bool undefinedOrFalseA = false; +#endif + CPPUNIT_ASSERT(undefinedOrFalseA); + CPPUNIT_ASSERT(!undefinedOrTrueA); + +#if ZERO_FOO || UNDEFINED_FOO + bool undefinedOrTrueB = true; +#else + bool undefinedOrTrueB = false; +#endif +#if ZERO_FOO || !UNDEFINED_FOO + bool undefinedOrFalseB = true; +#else + bool undefinedOrFalseB = false; +#endif + CPPUNIT_ASSERT(undefinedOrFalseB); + CPPUNIT_ASSERT(!undefinedOrTrueB); + +} + diff --git a/compat/testPreCompiler.h b/compat/testPreCompiler.h index 939a98e57b..5fd391acaf 100644 --- a/compat/testPreCompiler.h +++ b/compat/testPreCompiler.h @@ -11,10 +11,14 @@ class testPreCompiler : public CPPUNIT_NS::TestFixture { CPPUNIT_TEST_SUITE( testPreCompiler ); CPPUNIT_TEST( testIfDef ); + CPPUNIT_TEST( testIfDefAnd ); + CPPUNIT_TEST( testIfDefOr ); CPPUNIT_TEST_SUITE_END(); protected: void testIfDef(); + void testIfDefAnd(); + void testIfDefOr(); }; #endif /* SQUID_COMPAT_TESTS_TESTPRECOMPILER_H */ -- 2.47.2