From 7b449f7abe1e398ce28441293b609fd891c8df2f Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Wed, 15 Feb 2012 08:20:06 +0000 Subject: [PATCH] Ability to register line# for testing Factored file/ line storage and formatting into common class. Used in a static registry so failure messages can be asserted to have the file/ line in. --- include/internal/catch_common.h | 27 +- include/internal/catch_runner_impl.hpp | 2 +- .../catch_test_case_registry_impl.hpp | 4 +- include/reporters/catch_reporter_basic.hpp | 6 +- include/reporters/catch_reporter_junit.hpp | 2 +- projects/SelfTest/ExceptionTests.cpp | 27 +- projects/SelfTest/TestMain.cpp | 6 +- projects/SelfTest/catch_self_test.hpp | 72 +++-- .../CatchSelfTest.xcodeproj/project.pbxproj | 7 +- .../CatchSelfTest/catch_self_test.cpp | 42 +++ .../iOSTest/iOSTest.xcodeproj/project.pbxproj | 263 ++++++++++++++++++ 11 files changed, 418 insertions(+), 40 deletions(-) create mode 100644 projects/XCode4/CatchSelfTest/CatchSelfTest/catch_self_test.cpp create mode 100644 projects/XCode4/iOSTest/iOSTest.xcodeproj/project.pbxproj diff --git a/include/internal/catch_common.h b/include/internal/catch_common.h index ea2c53f0..48ce4a5b 100644 --- a/include/internal/catch_common.h +++ b/include/internal/catch_common.h @@ -80,11 +80,36 @@ namespace Catch std::for_each( container.begin(), container.end(), function ); } + struct SourceLineInfo + { + SourceLineInfo + ( + const std::string& file, + std::size_t line + ) + : file( file ), + line( line ) + {} + + std::string file; + std::size_t line; + }; + + inline std::ostream& operator << ( std::ostream& os, const SourceLineInfo& info ) + { +#ifndef __GNUG__ + os << info.file << "(" << info.line << "): "; +#else + os << info.file << ":" << info.line << ": "; +#endif + return os; + } + ATTRIBUTE_NORETURN inline void throwLogicError( const std::string& message, const std::string& file, long line ) { std::ostringstream oss; - oss << "Internal Catch error: '" << message << "' at: " << file << "(" << line << ")"; + oss << "Internal Catch error: '" << message << "' at: " << SourceLineInfo( file, line ); throw std::logic_error( oss.str() ); } } diff --git a/include/internal/catch_runner_impl.hpp b/include/internal/catch_runner_impl.hpp index 17ef47fe..00bd0a4f 100644 --- a/include/internal/catch_runner_impl.hpp +++ b/include/internal/catch_runner_impl.hpp @@ -487,7 +487,7 @@ namespace Catch ) { std::ostringstream oss; - oss << name << "@" << filename << ":" << line; + oss << name << "@" << SourceLineInfo( filename, line ); if( !m_runningTest->addSection( oss.str() ) ) return false; diff --git a/include/internal/catch_test_case_registry_impl.hpp b/include/internal/catch_test_case_registry_impl.hpp index 876bdc8d..666e5963 100644 --- a/include/internal/catch_test_case_registry_impl.hpp +++ b/include/internal/catch_test_case_registry_impl.hpp @@ -52,8 +52,8 @@ namespace Catch { const TestCaseInfo& prev = *m_functions.find( testInfo ); std::cerr << "error: TEST_CASE( \"" << testInfo.getName() << "\" ) already defined.\n" - << "\tFirst seen at " << prev.getFilename() << ":" << prev.getLine() << "\n" - << "\tRedefined at " << testInfo.getFilename() << ":" << testInfo.getLine() << std::endl; + << "\tFirst seen at " << SourceLineInfo( prev.getFilename(), prev.getLine() ) << "\n" + << "\tRedefined at " << SourceLineInfo( testInfo.getFilename(), testInfo.getLine() ) << std::endl; exit(1); } } diff --git a/include/reporters/catch_reporter_basic.hpp b/include/reporters/catch_reporter_basic.hpp index 1a370464..c55f4f01 100644 --- a/include/reporters/catch_reporter_basic.hpp +++ b/include/reporters/catch_reporter_basic.hpp @@ -174,11 +174,7 @@ namespace Catch StartSpansLazily(); if( !resultInfo.getFilename().empty() ) -#ifndef __GNUG__ - m_config.stream() << resultInfo.getFilename() << "(" << resultInfo.getLine() << "): "; -#else - m_config.stream() << resultInfo.getFilename() << ":" << resultInfo.getLine() << ": "; -#endif + m_config.stream() << SourceLineInfo( resultInfo.getFilename(), resultInfo.getLine() ); if( resultInfo.hasExpression() ) { diff --git a/include/reporters/catch_reporter_junit.hpp b/include/reporters/catch_reporter_junit.hpp index b281fed0..8be63a94 100644 --- a/include/reporters/catch_reporter_junit.hpp +++ b/include/reporters/catch_reporter_junit.hpp @@ -129,7 +129,7 @@ namespace Catch { oss << resultInfo.getMessage() << " at "; } - oss << resultInfo.getFilename() << ":" << resultInfo.getLine(); + oss << SourceLineInfo( resultInfo.getFilename(), resultInfo.getLine() ); stats.m_content = oss.str(); stats.m_message = resultInfo.getExpandedExpression(); stats.m_resultType = resultInfo.getTestMacroName(); diff --git a/projects/SelfTest/ExceptionTests.cpp b/projects/SelfTest/ExceptionTests.cpp index 23fd5ff3..7bc01387 100644 --- a/projects/SelfTest/ExceptionTests.cpp +++ b/projects/SelfTest/ExceptionTests.cpp @@ -15,6 +15,8 @@ #include #include +#include "catch_self_test.hpp" + namespace { ATTRIBUTE_NORETURN @@ -114,9 +116,32 @@ TEST_CASE( "./failing/exceptions/in-section", "Exceptions thrown from sections r { SECTION( "the section", "" ) { - SECTION( "the section2", "" ) + CATCH_REGISTER_LINE_INFO( "the section2" ) SECTION( "the section2", "" ) { throw std::domain_error( "Exception from section" ); } } } + +TEST_CASE( "./succeeding/exceptions/error messages", "The error messages produced by exceptions caught by Catch matched the expected form" ) +{ + Catch::EmbeddedRunner runner; + + SECTION( "custom, unexpected", "" ) + { + runner.runMatching( "./failing/exceptions/custom" ); + INFO( runner.getOutput() ); + CHECK( runner.getOutput().find( "Unexpected exception" ) != std::string::npos ); + CHECK( runner.getOutput().find( "custom exception" ) != std::string::npos ); + } + + SECTION( "in section", "" ) + { + runner.runMatching( "./failing/exceptions/in-section" ); + INFO( runner.getOutput() ); + CHECK( runner.getOutput().find( "Unexpected exception" ) != std::string::npos ); + CHECK( runner.getOutput().find( "Exception from section" ) != std::string::npos ); + CHECK( runner.getOutput().find( CATCH_GET_LINE_INFO( "the section2" ) ) != std::string::npos ); + } + +} diff --git a/projects/SelfTest/TestMain.cpp b/projects/SelfTest/TestMain.cpp index 868f0f60..3b4c7859 100644 --- a/projects/SelfTest/TestMain.cpp +++ b/projects/SelfTest/TestMain.cpp @@ -10,10 +10,6 @@ * */ -#define CATCH_CONFIG_MAIN -#include "catch.hpp" - - #include "catch_self_test.hpp" TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results" ) @@ -47,7 +43,7 @@ TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results" "Number of 'succeeding' tests is fixed" ) { runner.runMatching( "./succeeding/*" ); - CHECK( runner.getSuccessCount() == 262 ); + CHECK( runner.getSuccessCount() == 267 ); CHECK( runner.getFailureCount() == 0 ); } diff --git a/projects/SelfTest/catch_self_test.hpp b/projects/SelfTest/catch_self_test.hpp index a022e465..b8a085c9 100644 --- a/projects/SelfTest/catch_self_test.hpp +++ b/projects/SelfTest/catch_self_test.hpp @@ -16,7 +16,6 @@ namespace Catch { - class EmbeddedRunner { public: @@ -26,29 +25,8 @@ namespace Catch { } - /////////////////////////////////////////////////////////////////////////// std::size_t runMatching - ( - const std::string& rawTestSpec - ) - { - std::ostringstream oss; - Config config; - config.setStreamBuf( oss.rdbuf() ); - config.setReporter( "basic" ); - - std::size_t result; - - // Scoped because Runner doesn't report EndTesting until its destructor - { - Runner runner( config ); - result = runner.runMatching( rawTestSpec ); - m_successes = runner.getSuccessCount(); - m_failures = runner.getFailureCount(); - } - m_output = oss.str(); - return result; - } + ( const std::string& rawTestSpec ); /////////////////////////////////////////////////////////////////////////// std::string getOutput @@ -148,6 +126,54 @@ namespace Catch Expected::Result m_expectedResult; }; + + struct LineInfoRegistry + { + static LineInfoRegistry& get + () + { + static LineInfoRegistry s_instance; + return s_instance; + } + + void registerLineInfo + ( + const std::string& name, + const SourceLineInfo& info + ) + { + m_registry.insert( std::make_pair( name, info ) ); + } + + const SourceLineInfo* find( const std::string& name ) const + { + std::map::const_iterator it = m_registry.find( name ); + return it == m_registry.end() ? NULL : &(it->second); + } + + const std::string infoForName( const std::string& name ) const + { + std::map::const_iterator it = m_registry.find( name ); + if( it == m_registry.end() ) + return ""; + std::ostringstream oss; + oss << it->second; + return oss.str(); + } + + std::map m_registry; + }; + + struct LineInfoRegistrar + { + LineInfoRegistrar( const char* name, const SourceLineInfo& lineInfo ) + { + LineInfoRegistry::get().registerLineInfo( name, lineInfo ); + } + }; } +#define CATCH_REGISTER_LINE_INFO( name ) ::Catch::LineInfoRegistrar INTERNAL_CATCH_UNIQUE_NAME( lineRegistrar )( name, ::Catch::SourceLineInfo( __FILE__, __LINE__ ) ); +#define CATCH_GET_LINE_INFO( name ) ::Catch::LineInfoRegistry::get().infoForName( name ) + #endif // TWOBLUECUBES_CATCH_SELF_TEST_HPP_INCLUDED diff --git a/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj b/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj index a25b0d68..4ff03c87 100644 --- a/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj +++ b/projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 4A6D0C3D149B3D9E00DB3EAA /* MiscTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C34149B3D9E00DB3EAA /* MiscTests.cpp */; }; 4A6D0C3E149B3D9E00DB3EAA /* TestMain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C35149B3D9E00DB3EAA /* TestMain.cpp */; }; 4A6D0C3F149B3D9E00DB3EAA /* TrickyTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C36149B3D9E00DB3EAA /* TrickyTests.cpp */; }; + 4A73282E14E9A6390044823F /* catch_self_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A73282D14E9A6390044823F /* catch_self_test.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -82,6 +83,7 @@ 4A6D0C66149B3E3D00DB3EAA /* catch_reporter_basic.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_basic.hpp; sourceTree = ""; }; 4A6D0C67149B3E3D00DB3EAA /* catch_reporter_junit.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_junit.hpp; sourceTree = ""; }; 4A6D0C68149B3E3D00DB3EAA /* catch_reporter_xml.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_xml.hpp; sourceTree = ""; }; + 4A73282D14E9A6390044823F /* catch_self_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = catch_self_test.cpp; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -115,6 +117,8 @@ isa = PBXGroup; children = ( 4A6D0C35149B3D9E00DB3EAA /* TestMain.cpp */, + 4A6D0C2E149B3D9E00DB3EAA /* catch_self_test.hpp */, + 4A73282D14E9A6390044823F /* catch_self_test.cpp */, 4A6D0C40149B3DAB00DB3EAA /* Tests */, 4A6D0C41149B3DE900DB3EAA /* Catch */, 4A6D0C26149B3D3B00DB3EAA /* CatchSelfTest.1 */, @@ -143,7 +147,6 @@ 4A6D0C44149B3E1500DB3EAA /* catch.hpp */, 4A6D0C42149B3E1500DB3EAA /* catch_runner.hpp */, 4A6D0C43149B3E1500DB3EAA /* catch_with_main.hpp */, - 4A6D0C2E149B3D9E00DB3EAA /* catch_self_test.hpp */, 4A6D0C45149B3E3D00DB3EAA /* internal */, 4A6D0C65149B3E3D00DB3EAA /* reporters */, ); @@ -259,6 +262,7 @@ 4A6D0C3D149B3D9E00DB3EAA /* MiscTests.cpp in Sources */, 4A6D0C3E149B3D9E00DB3EAA /* TestMain.cpp in Sources */, 4A6D0C3F149B3D9E00DB3EAA /* TrickyTests.cpp in Sources */, + 4A73282E14E9A6390044823F /* catch_self_test.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -343,6 +347,7 @@ 4A6D0C2C149B3D3B00DB3EAA /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/projects/XCode4/CatchSelfTest/CatchSelfTest/catch_self_test.cpp b/projects/XCode4/CatchSelfTest/CatchSelfTest/catch_self_test.cpp new file mode 100644 index 00000000..dc3487d3 --- /dev/null +++ b/projects/XCode4/CatchSelfTest/CatchSelfTest/catch_self_test.cpp @@ -0,0 +1,42 @@ +/* + * catch_self_test.cpp + * Catch + * + * Created by Phil on 14/02/2012. + * Copyright 2012 Two Blue Cubes Ltd. All rights reserved. + * + * Distributed under the Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + * + */ + +#define CATCH_CONFIG_MAIN +#include "catch_self_test.hpp" + +namespace Catch +{ + /////////////////////////////////////////////////////////////////////////// + std::size_t EmbeddedRunner::runMatching + ( + const std::string& rawTestSpec + ) + { + std::ostringstream oss; + Config config; + config.setStreamBuf( oss.rdbuf() ); + config.setReporter( "basic" ); + + std::size_t result; + + // Scoped because Runner doesn't report EndTesting until its destructor + { + Runner runner( config ); + result = runner.runMatching( rawTestSpec ); + m_successes = runner.getSuccessCount(); + m_failures = runner.getFailureCount(); + } + m_output = oss.str(); + return result; + } + +} \ No newline at end of file diff --git a/projects/XCode4/iOSTest/iOSTest.xcodeproj/project.pbxproj b/projects/XCode4/iOSTest/iOSTest.xcodeproj/project.pbxproj new file mode 100644 index 00000000..c8f87480 --- /dev/null +++ b/projects/XCode4/iOSTest/iOSTest.xcodeproj/project.pbxproj @@ -0,0 +1,263 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 4A73280A14E66CFC0044823F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A73280914E66CFC0044823F /* UIKit.framework */; }; + 4A73280C14E66CFC0044823F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A73280B14E66CFC0044823F /* Foundation.framework */; }; + 4A73280E14E66CFC0044823F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A73280D14E66CFC0044823F /* CoreGraphics.framework */; }; + 4A73281414E66CFC0044823F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4A73281214E66CFC0044823F /* InfoPlist.strings */; }; + 4A73281614E66CFC0044823F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A73281514E66CFC0044823F /* main.m */; }; + 4A73281A14E66CFC0044823F /* TBCAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A73281914E66CFC0044823F /* TBCAppDelegate.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 4A73280514E66CFC0044823F /* iOSTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iOSTest.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4A73280914E66CFC0044823F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 4A73280B14E66CFC0044823F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 4A73280D14E66CFC0044823F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 4A73281114E66CFC0044823F /* iOSTest-Info.plist */ = {isa = PBXFileReference; path = "iOSTest-Info.plist"; sourceTree = ""; }; + 4A73281314E66CFC0044823F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 4A73281514E66CFC0044823F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 4A73281714E66CFC0044823F /* iOSTest-Prefix.pch */ = {isa = PBXFileReference; path = "iOSTest-Prefix.pch"; sourceTree = ""; }; + 4A73281814E66CFC0044823F /* TBCAppDelegate.h */ = {isa = PBXFileReference; path = TBCAppDelegate.h; sourceTree = ""; }; + 4A73281914E66CFC0044823F /* TBCAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TBCAppDelegate.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 4A73280214E66CFC0044823F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4A73280A14E66CFC0044823F /* UIKit.framework in Frameworks */, + 4A73280C14E66CFC0044823F /* Foundation.framework in Frameworks */, + 4A73280E14E66CFC0044823F /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 4A7327FA14E66CFC0044823F = { + isa = PBXGroup; + children = ( + 4A73280F14E66CFC0044823F /* iOSTest */, + 4A73280814E66CFC0044823F /* Frameworks */, + 4A73280614E66CFC0044823F /* Products */, + ); + sourceTree = ""; + }; + 4A73280614E66CFC0044823F /* Products */ = { + isa = PBXGroup; + children = ( + 4A73280514E66CFC0044823F /* iOSTest.app */, + ); + name = Products; + sourceTree = ""; + }; + 4A73280814E66CFC0044823F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4A73280914E66CFC0044823F /* UIKit.framework */, + 4A73280B14E66CFC0044823F /* Foundation.framework */, + 4A73280D14E66CFC0044823F /* CoreGraphics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 4A73280F14E66CFC0044823F /* iOSTest */ = { + isa = PBXGroup; + children = ( + 4A73281814E66CFC0044823F /* TBCAppDelegate.h */, + 4A73281914E66CFC0044823F /* TBCAppDelegate.m */, + 4A73281014E66CFC0044823F /* Supporting Files */, + ); + path = iOSTest; + sourceTree = ""; + }; + 4A73281014E66CFC0044823F /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 4A73281114E66CFC0044823F /* iOSTest-Info.plist */, + 4A73281214E66CFC0044823F /* InfoPlist.strings */, + 4A73281514E66CFC0044823F /* main.m */, + 4A73281714E66CFC0044823F /* iOSTest-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 4A73280414E66CFC0044823F /* iOSTest */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4A73281D14E66CFC0044823F /* Build configuration list for PBXNativeTarget "iOSTest" */; + buildPhases = ( + 4A73280114E66CFC0044823F /* Sources */, + 4A73280214E66CFC0044823F /* Frameworks */, + 4A73280314E66CFC0044823F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iOSTest; + productName = iOSTest; + productReference = 4A73280514E66CFC0044823F /* iOSTest.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4A7327FC14E66CFC0044823F /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0420; + }; + buildConfigurationList = 4A7327FF14E66CFC0044823F /* Build configuration list for PBXProject "iOSTest" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 4A7327FA14E66CFC0044823F; + productRefGroup = 4A73280614E66CFC0044823F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 4A73280414E66CFC0044823F /* iOSTest */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4A73280314E66CFC0044823F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4A73281414E66CFC0044823F /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 4A73280114E66CFC0044823F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4A73281614E66CFC0044823F /* main.m in Sources */, + 4A73281A14E66CFC0044823F /* TBCAppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 4A73281214E66CFC0044823F /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 4A73281314E66CFC0044823F /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4A73281B14E66CFC0044823F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 4A73281C14E66CFC0044823F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 4A73281E14E66CFC0044823F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iOSTest/iOSTest-Prefix.pch"; + INFOPLIST_FILE = "iOSTest/iOSTest-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 4A73281F14E66CFC0044823F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "iOSTest/iOSTest-Prefix.pch"; + INFOPLIST_FILE = "iOSTest/iOSTest-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4A7327FF14E66CFC0044823F /* Build configuration list for PBXProject "iOSTest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4A73281B14E66CFC0044823F /* Debug */, + 4A73281C14E66CFC0044823F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4A73281D14E66CFC0044823F /* Build configuration list for PBXNativeTarget "iOSTest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4A73281E14E66CFC0044823F /* Debug */, + 4A73281F14E66CFC0044823F /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4A7327FC14E66CFC0044823F /* Project object */; +}