aboutsummaryrefslogtreecommitdiff
path: root/projects/runners/iTchRunner/internal/iTchRunnerMainView.h
diff options
context:
space:
mode:
Diffstat (limited to 'projects/runners/iTchRunner/internal/iTchRunnerMainView.h')
-rw-r--r--projects/runners/iTchRunner/internal/iTchRunnerMainView.h189
1 files changed, 189 insertions, 0 deletions
diff --git a/projects/runners/iTchRunner/internal/iTchRunnerMainView.h b/projects/runners/iTchRunner/internal/iTchRunnerMainView.h
new file mode 100644
index 0000000..c6a6394
--- /dev/null
+++ b/projects/runners/iTchRunner/internal/iTchRunnerMainView.h
@@ -0,0 +1,189 @@
+/*
+ * iTchRunnerMainView.h
+ * iTchRunner
+ *
+ * Created by Phil on 07/02/2011.
+ * Copyright 2011 Two Blue Cubes Ltd. All rights reserved.
+ *
+ */
+#ifndef TWOBLUECUBES_ITCHRUNNERMAINVIEW_H_INCLUDED
+#define TWOBLUECUBES_ITCHRUNNERMAINVIEW_H_INCLUDED
+
+#include "internal/catch_config.hpp"
+#include "internal/catch_runner_impl.hpp"
+#include "internal/catch_context_impl.hpp"
+#include "catch.hpp"
+
+#include "iTchRunnerReporter.h"
+
+#import <UIKit/UIKit.h>
+
+@interface iTchRunnerMainView : UIView<iTchRunnerDelegate, UIActionSheetDelegate>
+{
+ UITextField* appName;
+}
+
+-(void) showAlert;
+
+@end
+
+@implementation iTchRunnerMainView
+
+
+///////////////////////////////////////////////////////////////////////////////
+-(id) initWithFrame:(CGRect)frame
+{
+ if ((self = [super initWithFrame:frame]))
+ {
+ // Initialization code
+ self.backgroundColor = [UIColor blackColor];
+
+ appName = [[UITextField alloc] initWithFrame: CGRectMake( 0, 50, 320, 50 )];
+ [self addSubview: appName];
+ arcSafeRelease( appName );
+ appName.textColor = [[UIColor alloc] initWithRed:0.35 green:0.35 blue:1 alpha:1];
+ arcSafeRelease( appName.textColor );
+ appName.textAlignment = NSTextAlignmentCenter;
+
+ appName.text = [NSString stringWithFormat:@"CATCH tests"];
+// [self performSelector: @selector(showAlert) withObject:nil afterDelay:0.1];
+ [self performSelectorOnMainThread:@selector(showAlert) withObject:nil waitUntilDone:NO];
+
+ }
+ return self;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+-(void) dealloc
+{
+ [appName removeFromSuperview];
+#if !CATCH_ARC_ENABLED
+ [super dealloc];
+#endif
+}
+
+///////////////////////////////////////////////////////////////////////////////
+-(void) showAlert
+{
+ UIActionSheet* menu = [[UIActionSheet alloc] initWithTitle:@"Options"
+ delegate:self
+ cancelButtonTitle:nil
+ destructiveButtonTitle:nil
+ otherButtonTitles:@"Run all tests", nil];
+ [menu showInView: self];
+ arcSafeRelease( menu );
+
+}
+
+// This is a copy & paste from Catch::Runner2 to get us bootstrapped (this is due to all be
+// replaced anyway)
+inline Catch::Totals runTestsForGroup( Catch::RunContext& context, const Catch::TestCaseFilters& filterGroup ) {
+ using namespace Catch;
+ Totals totals;
+ std::vector<TestCase>::const_iterator it = getRegistryHub().getTestCaseRegistry().getAllTests().begin();
+ std::vector<TestCase>::const_iterator itEnd = getRegistryHub().getTestCaseRegistry().getAllTests().end();
+ int testsRunForGroup = 0;
+ for(; it != itEnd; ++it ) {
+ if( filterGroup.shouldInclude( *it ) ) {
+ testsRunForGroup++;
+
+ if( context.aborting() )
+ break;
+
+ totals += context.runTest( *it );
+ }
+ }
+ if( testsRunForGroup == 0 )
+ std::cerr << "\n[No test cases matched with: " << filterGroup.getName() << "]" << std::endl;
+ return totals;
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+-(void) actionSheet: (UIActionSheet*) sheet clickedButtonAtIndex: (NSInteger) index
+{
+ Catch::Ptr<Catch::Config> config = new Catch::Config();
+ Catch::IReporter* reporter = new Catch::iTchRunnerReporter( self );
+ Catch::LegacyReporterAdapter* reporterAdapter = new Catch::LegacyReporterAdapter( reporter );
+ Catch::RunContext runner( config.get(), reporterAdapter );
+
+
+ std::vector<Catch::TestCaseFilters> filterGroups;
+ Catch::TestCaseFilters filterGroup( "" );
+ filterGroups.push_back( filterGroup );
+
+ Catch::Totals totals;
+
+ std::vector<Catch::TestCaseFilters>::const_iterator it = filterGroups.begin();
+ std::vector<Catch::TestCaseFilters>::const_iterator itEnd = filterGroups.end();
+
+ std::size_t groupCount = filterGroups.size();
+ std::size_t groupIndex = 0;
+ for(; it != itEnd && !runner.aborting(); ++it, ++index ) {
+ runner.testGroupStarting( it->getName(), groupIndex, groupCount );
+ totals += runTestsForGroup( runner, *it );
+ runner.testGroupEnded( it->getName(), totals, groupIndex, groupCount );
+ }
+
+
+ if( totals.assertions.failed == 0 )
+ {
+ NSLog( @"no failures" );
+ if( totals.assertions.passed > 0 )
+ appName.textColor = [[UIColor alloc] initWithRed:0.35 green:1 blue:0.35 alpha:1];
+ }
+ else
+ {
+ NSLog( @"%lu failures", totals.assertions.failed );
+ appName.textColor = [[UIColor alloc] initWithRed:1 green:0.35 blue:0.35 alpha:1];
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+-(void) testWasRun: (const Catch::AssertionResult*) pResultInfo
+{
+ const Catch::AssertionResult& resultInfo = *pResultInfo;
+ std::ostringstream oss;
+
+ if( resultInfo.hasExpression() )
+ {
+ oss << resultInfo.getExpression();
+ if( resultInfo.isOk() )
+ oss << " succeeded";
+ else
+ oss << " failed";
+ }
+ switch( resultInfo.getResultType() )
+ {
+ case Catch::ResultWas::ThrewException:
+ if( resultInfo.hasExpression() )
+ oss << " with unexpected";
+ else
+ oss << "Unexpected";
+ oss << " exception with message: '" << resultInfo.getMessage() << "'";
+ break;
+ case Catch::ResultWas::Info:
+ oss << "info: '" << resultInfo.getMessage() << "'";
+ break;
+ case Catch::ResultWas::Warning:
+ oss << "warning: '" << resultInfo.getMessage() << "'";
+ break;
+ case Catch::ResultWas::ExplicitFailure:
+ oss << "failed with message: '" << resultInfo.getMessage() << "'";
+ break;
+ default:
+ break;
+ }
+
+ if( resultInfo.hasExpression() )
+ {
+ oss << " for: " << resultInfo.getExpandedExpression();
+ }
+ oss << std::endl;
+ NSLog( @"%s", oss.str().c_str() );
+}
+
+
+@end
+
+#endif // TWOBLUECUBES_ITCHRUNNERMAINVIEW_H_INCLUDED