From c57b33c2c92a152b79a53db7dd12ebfc7afc14d8 Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 18:28:43 +0200 Subject: [PATCH 01/14] Adding Objective-C version of Tennis; added Xcode+AppCode project, ported unit tests from Java version --- Tennis/objc/.idea/.name | 1 + Tennis/objc/.idea/Tennis.iml | 11 + Tennis/objc/.idea/encodings.xml | 5 + Tennis/objc/.idea/misc.xml | 23 + Tennis/objc/.idea/modules.xml | 9 + Tennis/objc/.idea/scopes/scope_settings.xml | 5 + Tennis/objc/.idea/vcs.xml | 7 + Tennis/objc/.idea/workspace.xml | 428 +++++++++++++++ Tennis/objc/.idea/xcode.xml | 5 + Tennis/objc/Tennis.xcodeproj/project.pbxproj | 515 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 43766 bytes .../xcschemes/Tennis.xcscheme | 31 ++ .../xcschemes/TennisTests.xcscheme | 36 ++ .../xcschemes/xcschememanagement.plist | 19 + Tennis/objc/Tennis/AppDelegate.h | 15 + Tennis/objc/Tennis/AppDelegate.m | 51 ++ Tennis/objc/Tennis/Default-568h@2x.png | Bin 0 -> 18594 bytes Tennis/objc/Tennis/Default.png | Bin 0 -> 6540 bytes Tennis/objc/Tennis/Default@2x.png | Bin 0 -> 16107 bytes Tennis/objc/Tennis/Tennis-Info.plist | 52 ++ Tennis/objc/Tennis/Tennis-Prefix.pch | 16 + Tennis/objc/Tennis/TennisGame.h | 16 + Tennis/objc/Tennis/TennisGame.m | 22 + Tennis/objc/Tennis/TennisGame1.h | 14 + Tennis/objc/Tennis/TennisGame1.m | 15 + Tennis/objc/Tennis/TennisGame2.h | 14 + Tennis/objc/Tennis/TennisGame2.m | 15 + Tennis/objc/Tennis/TennisGame3.h | 14 + Tennis/objc/Tennis/TennisGame3.m | 15 + Tennis/objc/Tennis/ViewController.h | 13 + Tennis/objc/Tennis/ViewController.m | 29 + Tennis/objc/Tennis/en.lproj/InfoPlist.strings | 1 + .../en.lproj/MainStoryboard_iPad.storyboard | 26 + .../en.lproj/MainStoryboard_iPhone.storyboard | 26 + Tennis/objc/Tennis/main.m | 19 + .../objc/TennisTests/TennisTests-Info.plist | 25 + Tennis/objc/TennisTests/TennisTests.h | 13 + Tennis/objc/TennisTests/TennisTests.m | 115 ++++ .../TennisTests/en.lproj/InfoPlist.strings | 1 + 40 files changed, 1629 insertions(+) create mode 100644 Tennis/objc/.idea/.name create mode 100644 Tennis/objc/.idea/Tennis.iml create mode 100644 Tennis/objc/.idea/encodings.xml create mode 100644 Tennis/objc/.idea/misc.xml create mode 100644 Tennis/objc/.idea/modules.xml create mode 100644 Tennis/objc/.idea/scopes/scope_settings.xml create mode 100644 Tennis/objc/.idea/vcs.xml create mode 100644 Tennis/objc/.idea/workspace.xml create mode 100644 Tennis/objc/.idea/xcode.xml create mode 100644 Tennis/objc/Tennis.xcodeproj/project.pbxproj create mode 100644 Tennis/objc/Tennis.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Tennis/objc/Tennis.xcodeproj/project.xcworkspace/xcuserdata/stefan.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/Tennis.xcscheme create mode 100644 Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/TennisTests.xcscheme create mode 100644 Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Tennis/objc/Tennis/AppDelegate.h create mode 100644 Tennis/objc/Tennis/AppDelegate.m create mode 100644 Tennis/objc/Tennis/Default-568h@2x.png create mode 100644 Tennis/objc/Tennis/Default.png create mode 100644 Tennis/objc/Tennis/Default@2x.png create mode 100644 Tennis/objc/Tennis/Tennis-Info.plist create mode 100644 Tennis/objc/Tennis/Tennis-Prefix.pch create mode 100644 Tennis/objc/Tennis/TennisGame.h create mode 100644 Tennis/objc/Tennis/TennisGame.m create mode 100644 Tennis/objc/Tennis/TennisGame1.h create mode 100644 Tennis/objc/Tennis/TennisGame1.m create mode 100644 Tennis/objc/Tennis/TennisGame2.h create mode 100644 Tennis/objc/Tennis/TennisGame2.m create mode 100644 Tennis/objc/Tennis/TennisGame3.h create mode 100644 Tennis/objc/Tennis/TennisGame3.m create mode 100644 Tennis/objc/Tennis/ViewController.h create mode 100644 Tennis/objc/Tennis/ViewController.m create mode 100644 Tennis/objc/Tennis/en.lproj/InfoPlist.strings create mode 100644 Tennis/objc/Tennis/en.lproj/MainStoryboard_iPad.storyboard create mode 100644 Tennis/objc/Tennis/en.lproj/MainStoryboard_iPhone.storyboard create mode 100644 Tennis/objc/Tennis/main.m create mode 100644 Tennis/objc/TennisTests/TennisTests-Info.plist create mode 100644 Tennis/objc/TennisTests/TennisTests.h create mode 100644 Tennis/objc/TennisTests/TennisTests.m create mode 100644 Tennis/objc/TennisTests/en.lproj/InfoPlist.strings diff --git a/Tennis/objc/.idea/.name b/Tennis/objc/.idea/.name new file mode 100644 index 00000000..1ef24954 --- /dev/null +++ b/Tennis/objc/.idea/.name @@ -0,0 +1 @@ +Tennis \ No newline at end of file diff --git a/Tennis/objc/.idea/Tennis.iml b/Tennis/objc/.idea/Tennis.iml new file mode 100644 index 00000000..f9b36de1 --- /dev/null +++ b/Tennis/objc/.idea/Tennis.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Tennis/objc/.idea/encodings.xml b/Tennis/objc/.idea/encodings.xml new file mode 100644 index 00000000..e206d70d --- /dev/null +++ b/Tennis/objc/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Tennis/objc/.idea/misc.xml b/Tennis/objc/.idea/misc.xml new file mode 100644 index 00000000..f48e1cf7 --- /dev/null +++ b/Tennis/objc/.idea/misc.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/Tennis/objc/.idea/modules.xml b/Tennis/objc/.idea/modules.xml new file mode 100644 index 00000000..2ae26e57 --- /dev/null +++ b/Tennis/objc/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Tennis/objc/.idea/scopes/scope_settings.xml b/Tennis/objc/.idea/scopes/scope_settings.xml new file mode 100644 index 00000000..922003b8 --- /dev/null +++ b/Tennis/objc/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/Tennis/objc/.idea/vcs.xml b/Tennis/objc/.idea/vcs.xml new file mode 100644 index 00000000..def6a6a1 --- /dev/null +++ b/Tennis/objc/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Tennis/objc/.idea/workspace.xml b/Tennis/objc/.idea/workspace.xml new file mode 100644 index 00000000..48fd3656 --- /dev/null +++ b/Tennis/objc/.idea/workspace.xml @@ -0,0 +1,428 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1370012867256 + 1370012867256 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tennis/objc/.idea/xcode.xml b/Tennis/objc/.idea/xcode.xml new file mode 100644 index 00000000..b26bf6c9 --- /dev/null +++ b/Tennis/objc/.idea/xcode.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Tennis/objc/Tennis.xcodeproj/project.pbxproj b/Tennis/objc/Tennis.xcodeproj/project.pbxproj new file mode 100644 index 00000000..75b49e29 --- /dev/null +++ b/Tennis/objc/Tennis.xcodeproj/project.pbxproj @@ -0,0 +1,515 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + CACF6054BE77230ECBA65619 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CACF6C2CA2AA72E014F657D0 /* Default@2x.png */; }; + CACF613C20408597F536B6B1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6759046CDA8835BDE4B2 /* ViewController.m */; }; + CACF61C5886ADB1487CE8336 /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CACF644334B42B9407948B3F /* MainStoryboard_iPad.storyboard */; }; + CACF62EF6247A6D2018763C1 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = CACF6ACB8808C4FCB94FF29C /* Default.png */; }; + CACF6358C3384B35EAF90119 /* TennisGame.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF649AAFA398A61A600CB7 /* TennisGame.m */; }; + CACF63F14142F5803F786695 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF69F4ABB8AC23884C74C3 /* Foundation.framework */; }; + CACF6414A388566B43A9BCB5 /* TennisGame.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF649AAFA398A61A600CB7 /* TennisGame.m */; }; + CACF65812FE6C904337ABA28 /* TennisGame3.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6BAD45E82D978466F92B /* TennisGame3.m */; }; + CACF66A873EB3C4C2A1B7D78 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF6C52F7301D6A288FECCA /* UIKit.framework */; }; + CACF674F504168629BDEF151 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CACF6B0DF95E878216995989 /* InfoPlist.strings */; }; + CACF677C41A1432B7A28BA4B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF61291A7012C7769FCE61 /* CoreGraphics.framework */; }; + CACF6788162E934967B8E957 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CACF6949C1475F308096D3C1 /* InfoPlist.strings */; }; + CACF6851862FECD0A333A400 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF6C52F7301D6A288FECCA /* UIKit.framework */; }; + CACF6871FE27A26189B71C29 /* TennisGame1.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6BF242B4F5F91193BEC7 /* TennisGame1.m */; }; + CACF68DE17C3FF57501B8E7C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6E1F321CCC9D9CC8F04E /* AppDelegate.m */; }; + CACF68FFD67D0173EDF11BF4 /* TennisTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6D897D4F49BCD1B41947 /* TennisTests.m */; }; + CACF69C81388A5BE7690528D /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CACF6EE7BED3428159FF4EEC /* MainStoryboard_iPhone.storyboard */; }; + CACF69FD20BB16907B25C317 /* TennisGame2.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF64EDAB086A5F18E393EE /* TennisGame2.m */; }; + CACF6C5876E4687F7A65AF54 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF6A13AA71A254E309FB03 /* SenTestingKit.framework */; }; + CACF6CEF4B8FF37159571CA9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF69F4ABB8AC23884C74C3 /* Foundation.framework */; }; + CACF6D696940933251B2AE37 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CACF61BEC34F59AE310970BC /* Default-568h@2x.png */; }; + CACF6E1993921B2EC1995F0E /* TennisGame2.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF64EDAB086A5F18E393EE /* TennisGame2.m */; }; + CACF6F3B5CEDAF9DFE1B8A64 /* TennisGame3.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6BAD45E82D978466F92B /* TennisGame3.m */; }; + CACF6F6E0354DF7DE228F341 /* TennisGame1.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6BF242B4F5F91193BEC7 /* TennisGame1.m */; }; + CACF6F7FFC55CDCFB3E02466 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF65D0E3A6E15249A3EE3D /* main.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + CACF64D89970FF6F7CA17D31 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = CACF6DA3161729BC17499E03 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CACF69AD9BF8D87BBC1D0651; + remoteInfo = Tennis; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + CACF6038910C1AD4943FC708 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + CACF61291A7012C7769FCE61 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + CACF61BEC34F59AE310970BC /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + CACF63DE5D96157326EB9B8B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPad.storyboard; sourceTree = ""; }; + CACF6419833B61F7E3D89075 /* TennisGame3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TennisGame3.h; sourceTree = ""; }; + CACF649AAFA398A61A600CB7 /* TennisGame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TennisGame.m; sourceTree = ""; }; + CACF64E5E1F46B45835C2ADD /* TennisTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.info; path = "TennisTests-Info.plist"; sourceTree = ""; }; + CACF64EDAB086A5F18E393EE /* TennisGame2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TennisGame2.m; sourceTree = ""; }; + CACF65D0E3A6E15249A3EE3D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + CACF665E8EA24EE215E5498C /* TennisTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TennisTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + CACF666E98D511A74FA3D675 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + CACF66D0CE7C0E01036D6AB1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + CACF6759046CDA8835BDE4B2 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + CACF6771858FAF6F6F4650A6 /* TennisGame2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TennisGame2.h; sourceTree = ""; }; + CACF6933BDBCFF02099B5751 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPhone.storyboard; sourceTree = ""; }; + CACF69F4ABB8AC23884C74C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + CACF6A13AA71A254E309FB03 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + CACF6A4205D54CCF3AEA2B65 /* TennisTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TennisTests.h; sourceTree = ""; }; + CACF6A964A59A72222255B2C /* TennisGame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TennisGame.h; sourceTree = ""; }; + CACF6ACB8808C4FCB94FF29C /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; + CACF6B79FE846441B027773F /* Tennis.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tennis.app; sourceTree = BUILT_PRODUCTS_DIR; }; + CACF6B7F36643E0787BABC39 /* TennisGame1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TennisGame1.h; sourceTree = ""; }; + CACF6BAD45E82D978466F92B /* TennisGame3.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TennisGame3.m; sourceTree = ""; }; + CACF6BF242B4F5F91193BEC7 /* TennisGame1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TennisGame1.m; sourceTree = ""; }; + CACF6C2CA2AA72E014F657D0 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; + CACF6C52F7301D6A288FECCA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + CACF6C703FB825FF8A0C6279 /* Tennis-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tennis-Prefix.pch"; sourceTree = ""; }; + CACF6D690AB9C997BD1CD8AF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + CACF6D897D4F49BCD1B41947 /* TennisTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TennisTests.m; sourceTree = ""; }; + CACF6E1F321CCC9D9CC8F04E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + CACF6E515082A06CBCF4B49E /* Tennis-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.info; path = "Tennis-Info.plist"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + CACF6A7D79290F13325B461F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CACF6C5876E4687F7A65AF54 /* SenTestingKit.framework in Frameworks */, + CACF66A873EB3C4C2A1B7D78 /* UIKit.framework in Frameworks */, + CACF63F14142F5803F786695 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CACF6C21FB96D257A9D51B69 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CACF6851862FECD0A333A400 /* UIKit.framework in Frameworks */, + CACF6CEF4B8FF37159571CA9 /* Foundation.framework in Frameworks */, + CACF677C41A1432B7A28BA4B /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + CACF60033C37E3B5C11CC734 /* Frameworks */ = { + isa = PBXGroup; + children = ( + CACF6C52F7301D6A288FECCA /* UIKit.framework */, + CACF69F4ABB8AC23884C74C3 /* Foundation.framework */, + CACF61291A7012C7769FCE61 /* CoreGraphics.framework */, + CACF6A13AA71A254E309FB03 /* SenTestingKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + CACF652B01231CADE96100D1 = { + isa = PBXGroup; + children = ( + CACF6E7D48293F4D43E7A6DC /* Products */, + CACF60033C37E3B5C11CC734 /* Frameworks */, + CACF67CF0393B97F4DC41E0B /* Tennis */, + CACF65D28A08CBB9A2C540F5 /* TennisTests */, + ); + sourceTree = ""; + }; + CACF65B550EA0B25FDCB4734 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + CACF6E515082A06CBCF4B49E /* Tennis-Info.plist */, + CACF6B0DF95E878216995989 /* InfoPlist.strings */, + CACF65D0E3A6E15249A3EE3D /* main.m */, + CACF6C703FB825FF8A0C6279 /* Tennis-Prefix.pch */, + CACF6ACB8808C4FCB94FF29C /* Default.png */, + CACF6C2CA2AA72E014F657D0 /* Default@2x.png */, + CACF61BEC34F59AE310970BC /* Default-568h@2x.png */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + CACF65D28A08CBB9A2C540F5 /* TennisTests */ = { + isa = PBXGroup; + children = ( + CACF67238D0948836603B9CC /* Supporting Files */, + CACF6A4205D54CCF3AEA2B65 /* TennisTests.h */, + CACF6D897D4F49BCD1B41947 /* TennisTests.m */, + ); + path = TennisTests; + sourceTree = ""; + }; + CACF67238D0948836603B9CC /* Supporting Files */ = { + isa = PBXGroup; + children = ( + CACF64E5E1F46B45835C2ADD /* TennisTests-Info.plist */, + CACF6949C1475F308096D3C1 /* InfoPlist.strings */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + CACF67CF0393B97F4DC41E0B /* Tennis */ = { + isa = PBXGroup; + children = ( + CACF65B550EA0B25FDCB4734 /* Supporting Files */, + CACF6D690AB9C997BD1CD8AF /* AppDelegate.h */, + CACF6E1F321CCC9D9CC8F04E /* AppDelegate.m */, + CACF6EE7BED3428159FF4EEC /* MainStoryboard_iPhone.storyboard */, + CACF644334B42B9407948B3F /* MainStoryboard_iPad.storyboard */, + CACF6038910C1AD4943FC708 /* ViewController.h */, + CACF6759046CDA8835BDE4B2 /* ViewController.m */, + CACF6BF242B4F5F91193BEC7 /* TennisGame1.m */, + CACF6B7F36643E0787BABC39 /* TennisGame1.h */, + CACF64EDAB086A5F18E393EE /* TennisGame2.m */, + CACF6771858FAF6F6F4650A6 /* TennisGame2.h */, + CACF6BAD45E82D978466F92B /* TennisGame3.m */, + CACF6419833B61F7E3D89075 /* TennisGame3.h */, + CACF649AAFA398A61A600CB7 /* TennisGame.m */, + CACF6A964A59A72222255B2C /* TennisGame.h */, + ); + path = Tennis; + sourceTree = ""; + }; + CACF6E7D48293F4D43E7A6DC /* Products */ = { + isa = PBXGroup; + children = ( + CACF6B79FE846441B027773F /* Tennis.app */, + CACF665E8EA24EE215E5498C /* TennisTests.octest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + CACF69AD9BF8D87BBC1D0651 /* Tennis */ = { + isa = PBXNativeTarget; + buildConfigurationList = CACF65DD48552DE493A07E65 /* Build configuration list for PBXNativeTarget "Tennis" */; + buildPhases = ( + CACF61DDF5747486E9A2F79B /* Sources */, + CACF6C21FB96D257A9D51B69 /* Frameworks */, + CACF6261741B7D6FD198B4AD /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Tennis; + productName = Tennis; + productReference = CACF6B79FE846441B027773F /* Tennis.app */; + productType = "com.apple.product-type.application"; + }; + CACF6DE0B90C4D92A2B3D5E6 /* TennisTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = CACF68FD0CC2343E15B3AA80 /* Build configuration list for PBXNativeTarget "TennisTests" */; + buildPhases = ( + CACF6FE60766CDED5F49C391 /* Sources */, + CACF6A7D79290F13325B461F /* Frameworks */, + CACF6814909F4B826FA2E0CA /* Resources */, + CACF6F4E118C6D42BF7A89A2 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + CACF606BA95A02CF011B86A5 /* PBXTargetDependency */, + ); + name = TennisTests; + productName = TennisTests; + productReference = CACF665E8EA24EE215E5498C /* TennisTests.octest */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + CACF6DA3161729BC17499E03 /* Project object */ = { + isa = PBXProject; + attributes = { + ORGANIZATIONNAME = "Stefan van den Oord"; + }; + buildConfigurationList = CACF6959B8F6F7EC1647AAB0 /* Build configuration list for PBXProject "Tennis" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = CACF652B01231CADE96100D1; + productRefGroup = CACF6E7D48293F4D43E7A6DC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + CACF69AD9BF8D87BBC1D0651 /* Tennis */, + CACF6DE0B90C4D92A2B3D5E6 /* TennisTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + CACF6261741B7D6FD198B4AD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CACF674F504168629BDEF151 /* InfoPlist.strings in Resources */, + CACF62EF6247A6D2018763C1 /* Default.png in Resources */, + CACF6054BE77230ECBA65619 /* Default@2x.png in Resources */, + CACF6D696940933251B2AE37 /* Default-568h@2x.png in Resources */, + CACF69C81388A5BE7690528D /* MainStoryboard_iPhone.storyboard in Resources */, + CACF61C5886ADB1487CE8336 /* MainStoryboard_iPad.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CACF6814909F4B826FA2E0CA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CACF6788162E934967B8E957 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + CACF6F4E118C6D42BF7A89A2 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + CACF61DDF5747486E9A2F79B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CACF6F7FFC55CDCFB3E02466 /* main.m in Sources */, + CACF68DE17C3FF57501B8E7C /* AppDelegate.m in Sources */, + CACF613C20408597F536B6B1 /* ViewController.m in Sources */, + CACF6F6E0354DF7DE228F341 /* TennisGame1.m in Sources */, + CACF69FD20BB16907B25C317 /* TennisGame2.m in Sources */, + CACF65812FE6C904337ABA28 /* TennisGame3.m in Sources */, + CACF6358C3384B35EAF90119 /* TennisGame.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CACF6FE60766CDED5F49C391 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CACF68FFD67D0173EDF11BF4 /* TennisTests.m in Sources */, + CACF6F3B5CEDAF9DFE1B8A64 /* TennisGame3.m in Sources */, + CACF6E1993921B2EC1995F0E /* TennisGame2.m in Sources */, + CACF6871FE27A26189B71C29 /* TennisGame1.m in Sources */, + CACF6414A388566B43A9BCB5 /* TennisGame.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + CACF606BA95A02CF011B86A5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = CACF69AD9BF8D87BBC1D0651 /* Tennis */; + targetProxy = CACF64D89970FF6F7CA17D31 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + CACF644334B42B9407948B3F /* MainStoryboard_iPad.storyboard */ = { + isa = PBXVariantGroup; + children = ( + CACF63DE5D96157326EB9B8B /* en */, + ); + name = MainStoryboard_iPad.storyboard; + sourceTree = ""; + }; + CACF6949C1475F308096D3C1 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + CACF666E98D511A74FA3D675 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + CACF6B0DF95E878216995989 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + CACF66D0CE7C0E01036D6AB1 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + CACF6EE7BED3428159FF4EEC /* MainStoryboard_iPhone.storyboard */ = { + isa = PBXVariantGroup; + children = ( + CACF6933BDBCFF02099B5751 /* en */, + ); + name = MainStoryboard_iPhone.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + CACF601C65BCC0FBE3D880E3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = ""; + FRAMEWORK_SEARCH_PATHS = ( + "\"$(SDKROOT)/Developer/Library/Frameworks\"", + "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tennis/Tennis-Prefix.pch"; + INFOPLIST_FILE = "TennisTests/TennisTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = ""; + WRAPPER_EXTENSION = octest; + }; + name = Release; + }; + CACF6452D3F349731DB85BE9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + CACF655D7424F77B76941FBC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tennis/Tennis-Prefix.pch"; + INFOPLIST_FILE = "Tennis/Tennis-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + CACF681D75AD23FC2F298299 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tennis/Tennis-Prefix.pch"; + INFOPLIST_FILE = "Tennis/Tennis-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + CACF6A641D1372E5C5478EB2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = ""; + FRAMEWORK_SEARCH_PATHS = ( + "\"$(SDKROOT)/Developer/Library/Frameworks\"", + "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tennis/Tennis-Prefix.pch"; + INFOPLIST_FILE = "TennisTests/TennisTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = ""; + WRAPPER_EXTENSION = octest; + }; + name = Debug; + }; + CACF6FD238549A86B0925D65 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "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_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + CACF65DD48552DE493A07E65 /* Build configuration list for PBXNativeTarget "Tennis" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CACF681D75AD23FC2F298299 /* Release */, + CACF655D7424F77B76941FBC /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CACF68FD0CC2343E15B3AA80 /* Build configuration list for PBXNativeTarget "TennisTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CACF601C65BCC0FBE3D880E3 /* Release */, + CACF6A641D1372E5C5478EB2 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CACF6959B8F6F7EC1647AAB0 /* Build configuration list for PBXProject "Tennis" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CACF6452D3F349731DB85BE9 /* Release */, + CACF6FD238549A86B0925D65 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = CACF6DA3161729BC17499E03 /* Project object */; +} diff --git a/Tennis/objc/Tennis.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tennis/objc/Tennis.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..62edb4d0 --- /dev/null +++ b/Tennis/objc/Tennis.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Tennis/objc/Tennis.xcodeproj/project.xcworkspace/xcuserdata/stefan.xcuserdatad/UserInterfaceState.xcuserstate b/Tennis/objc/Tennis.xcodeproj/project.xcworkspace/xcuserdata/stefan.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..b2a6d28ac9a0c4a37223569a99f8c29668a1775e GIT binary patch literal 43766 zcmcg#2Vm31_y67{-_<=JX@M@ffwt_u(j;v|N79TAnlyBTHgwWO+23Oi*~@{*QkIIS zh>9B(_W*HETqrKYEyDjUY0{*$p#^?_Q3=g^pLh4}-Mjsvw7%Nf*fe zO)>ll{`rEK7E42;wXU`xrml2`rL3v3Fs7uTtkQ~qtdD7`s}G{UvYm$m;cAMdI4YRx zMfIio%cUg~b@9%>)8pE^Jtqz+N{Quk30Q4dp(Q^%<% zsOPAcs5hun)ce$@)Hl?()X&r})L+!!)IZd}z#jyFKoA6iK`+o7NPrZCfp8E5VnGTR z42FQAU?j)@Dli3Pf-H~?a)26WKrt|bX`lp@f-+zQwV(ye0tyba8Z;fMieg^AW9Mq77Y`P6pay$7flkSij<-ZQKl$Ilq=GU@u~}RywumdmRpMIlOmUNVmUxbMzE}`17B3U86yG9VC*CODBED68hj@p0mw2yu zpZK8oKJf$Mhs2MF9}_vT_yzGx;#b9Qh~E~!BYsc(q4*Q==i)EL--y2x{~-QZ z{HyqP@n7P9#g}P7i)ohjqJ8NAI+*T7htgqm6g`k0L=UEi(2wC2 zLu=_gI-f41%V`Teovxs3=vumoZl>qb0=Nw1?n3DJAs|d%Goql#b&W;R?8aL0=9@PW=q&|wt}6( z*0A+#Biq8xX6LaB*+uM9b_KhdUCVA@H?!N=+u1wWo$Ma=9`*oxFMF7MkUh#i${uH* zVxMK7XHT-Pu&=Xkv8UO0*$>!{+0WRs?APo$_B{I&dx8Cp{geHN{g0zK5yx;m=fnAP zL0oSxgzL+Nb5UFj7tamglDNU#Fm5C_h8xdK;!-&!m%(LnIb1HM=kmF!oQa#pm2uNK zD_70caSdEE*UHW17I27L!Y$`kacj8s+$L@-cN@2zyNlb+-OcUi4srK$N4ST%W8CB1 zliV}h3GPMiW$rcZP3{zThI^m;i2IcLg8Pd5miwOjk^6ncX-Q|K65U^J2=XOBx$@Q@)g+00q%* zDu4U)NC8SYJ|RQPh<+*H~(s9F`?i1eLI#l2Rd5DAkAROZB6|sBnQ67=aZyffu|4 zZ^36j6-h-={i$eNkWea)iW7VVKOsOEi3`OFeetivVq(QwTV6LSt)ZmGVh)JHKTtQ6 zTN*6oPV4%TQh8l%Q$t;KH6A_80TW$|=Jus|%&Z(0E1k??L})hZm6}+Y__P%u`8_8 zt(FFJKm-<-l{Mi3tn=c!8q?R+RhO1Ds2cOEjn>j?Y%IiC5L}H^x38pg=MEV@bWr4& z`GX?yr@@2q$5F%Q&p%~r`eD?FT~sLcqW>vs6g8R}LyetkZ}nR2#sd3COCt^rSwlm~ z?A=&kTtSXbZ5wnQtvG>7rxFfO6RAnmWJ*S*QgTW`DXBCePzVx&g$?AI;*7AQf&@MB93rGn_H6_nyl5#1VmtJiW8LswPWKqrKs#Q`X&7 z1yw0T3UNY$1E7kkrGj=-)l`iTCG_7-)lv0Av=Af2nlOxOxCP)p6AxsURMc9Vn#(Pk z=*f$3rN}?_K$u0f8gq0CD-OxJ+L8v`^0TOM4l{G8`5nwG#Af1!*yzc1kuD&MsU^iZ zy6onr5*($r0NO(>CLv_Ev5Z=74hVJ%v>V$)Eps)ulDdUT*iEgXRtp1#LA$Bd)LLPX zkYsa@&Qgu1f0lA*Bboyu3y5EnvEMVTP07wLl66fD&1Fr^4Hic=Hc@v_3Hzwc)D~(h zwT-%!x{bPBNET9r!NL$>s4z?zzK`0DvraU17yfS-wObg0bIwR%6#j3#FwvfM+WMdt zm%<#-9~(8)HkPzl${nc=$3c^&!CG6PtR-G3HwW~?LOOZ2uBoJ{x$)|+Ny1dN)|b?l zTgq(>uE$Bmp3txnoH4pa_9w_~4zX*IEadcn8)~X$dR>FXY2Gg0Ywlc}9|n_DF?7V3 zL6M_}4V^!qbNK6i>H#Wf7j;+|y^A^`j3I*nv6xp<-E3);H4+Gi=uzqziR4FwvAd{8 zg>gb+o;~I@4uL1Br=3{O2or=@#}_B47u+=+U%X7c>eP5mnAEQECiNDTuyd!7=#V^3 zopE-fcLkY{Xzwx~P}V)vhtx;Z$3m*05YpPa&1ckEw|GvazQQ?6PU5+KvMrt+(C4W0 zZjx!#k3y)RB$BHIH^~dsZ*G#mQ-28QLI!af$zjfPL9&9=j5$D^VrayJQ%Yl#WqL_% zileO?Q#3eFkcCc)7JpHO6CVz#q|B10lExIfYg6#3UDo#b>eO-x&}5|jkGf1<0TciL z0uc}knL?J3E#wGlK_lb}+Wk~CU~yi~0A9cw_yAuV={lU1`yfz|`=%;?CfxbuP%Kg6;-dpaXhf0C~c6 zp+cw>tip`DK>;WPQ$Z0h3RS{Pp#cFC0>z|p5^Tf7u(p0>uViv#U2{X3B@4%0awC}~ zwAf||gE|q_G+0`!bjKewQV7en4f(oI!EgOOvcme^cK($aK)HyRDr~?gdS*s2- z;gP+T|GY zz-n+yVWX`F;GigMvesA{n@Vcxi^|)U4>%}<7NJ>aLcnMam^K|p>)4c(YV6YL%DTp; zo18*ZqGiVle)}rzLxaPm>%nF!VGq~#5XK{2Eu16jyH9(qA< z=mUMBAM}R-Fc1d8VAu=xh7u@+Auts7fqh{=7zV>(1dN1Hus@83F)$X!!FZSe6X5_j z5DtP#Fd3%6!Egv13Wvera0DC)N5Ro>3>*u`!SQecoCqhu$xsGUp&Tlp5~jg)m;qIA z3e1FAFdODTHPpadsD(PHhX$Aj^I-ujgi~P=G(rWu39E%$gf+riVV$sE*dS~aHVK=BEy7k|n{caen{c~uhp=6^ zQ`jNgCF~S-3A=?o!d~HS;T~b1uwOVJ925=-_X_t3_X~%G2ZSTSgTh0?!@^PF5#gBd zsPLHZxNux}LU>YmN_bj$MtD|uPB;Y;Bw;cMX=;alOH@SX6za9;R9 z_)+*t_*wWxxFGy0Tois2ei!}_{uKTa{ucfb{uM3>{|T3cD+o{s;0;`efCvFG0yF{) z0xSX?0z3j<2zVplgMcprehBy@5P(1+0zn7_BhU+h-Uvt#kRlL*KqvyZNB2db9|B2-b z1V$h*5`j?&j7DG#0%H*vhroCQCLk~ofk_BVMnHx@Dgtr@6bL90NJAhUfeZvx2uwjB z6M-xQvJuEZK#hO~fm{T%28Rxa6Q}rHx}Z3sKzET%N3U4 z?Ga#`cQoNaA1~k<=gpHT6e_(+og>RK>lB$f+kz5qhFkEG#JQlv3qGvA2mg4hZP&v7 zXNQH`2yXAIaJBLbjAk#yb|NC}D1z;2)oQ&%=q@4@eU*?wqfu-1N`+aICDW&=wb@S8 z-9({pM}<6DmP%okxthP52!;ZCMs^Mq^XBOavt0|YzY8&S>J(S8LqsgL6SNGOmK0N~ zl&iBfI;t;gFs;kJQqvQ>Eval{tEqK1-R6e|M_9NK^)OsiIZ38PytyQH@NW;qchY zL^Gy?rdpq&)Y=?tH<^|tOLy9Ojc7=L!ct#dH=FG3;`r2SRT?*;H;GU`Hz8S;Ua8F? zZI`Z98#Imrobn{8&d1H|kUT>q`*wku?Ggp=6TyTo1T{)+wn|6h6MLVufdl>{q7~_; zrBG_J)P=;;<}9_`7Nrj9PluEd6N(j7Wq5S>15I;tETL^vqiT=G@d za&8X!mdJ&7ibvdGCN1Ky{XLQGk7;+ z-qOpo=}Kq9ym&RTE>oq!fp4q4qlkYHu^2aGTVOflY&px;OC1`26OE8gG<5pHEN4=< zM5LnKr0nIxfOs=YMLMG_Ta{JlfW1N#+yhOg)W~dk$5x^?K@lW^@ovZ}O@=y0sm6Jv zJ$Br@A)@W*nU;oHOLZik-!@lU=FP(mhWn;DN0#jNx{Xpk}*mGKkgGJt+Aa#1R zqqB+ph+udZknU+)6i8%aL6)_)%9eo?g;}apoD{NgG^kQ>?$sA|$n>IKL?z-X6@ykw zx=;svDG?5H5ynZmE$5JQqG|6qqCP}4zFidO{Y;#o6e=AaYYTPeY@Cg=aBC9pIr_6G zj3@=WDB-3J(dg9EBO@F6V$QiYA&a^~9s2 z-8+sB?s;8>6>{-YWQHexY(q1M~05eXPdR30I+=GZrT)PbMhB;rQ z&maR*jzXqYm~l&K@o?Slj1;2NyIlu&*$lJVtS{6!VTTftUhN`kEgmCnDbi865kx}j zB4HaQvJ|eFUo@HsxrB{##LkxKuoKOAlA@IB-EhYd6_-lmhOpHM*TUJF6NyZCyX{P+ zQiBI=RUR2olm%pHamvbwY*f1}ZXP^nlO$%=DanM(HUc`u6&;}4`?{@x%t}1*bhsd$ z$hx?|QB*e<>`*{5B&s%=vTJU4WUtC>VMx(i){USq)B$~K#J7;Exi%*~7fdlzRKGAVNC&hlW) z-WqMwXotcaqTtrr?H*`1=8&FGq~l!cLgI(SGnTcbVVyZ64G*I-z09E_5S@5e9Y+Fi zPUzKHBx$+KS44}6Qi!{fZ4%)&)-EGbF>X?}Xd+E##_9KJ->$r>0vbbV7G4f`D9bHG zC&ASUnNHyNv_+l6jxq;N_VG_0)m}%m+&V_S7WX||&#U^-Mj{#ybQW?qE|Q!^la+H; zJ{ct2Ql9}k*FFDjAxg0wl-dKmvy^!&QR&}7#a?lT9nuEQV7i0IM|Y674^oAlD(oN% z5gin?%Bh_S?;^tEI|wTaY^y4q`frp(eyVS(2Go<2muPrgV43m31Luy-}^$ckr zLF(8NHs5=2(?NT!@nw;wNV4~9OUd@EpjYDD=9Ufa>rB`tCQBm&tt|sOV(0-PECue! zHes#G8E6j?p%{>7ziDY758CE#I3wAH?GAIeM~Ftan?{=i9uYbu)5nNxY}c~(!4FTq zI1A&2zS*O1m3(p<)n=ejI9NkY0pJXy(hAiqFlqq;7K&DG9@s^}#m zE|ZbttH`XZyzEGPnpKaFEE*z*Cl8HGinOil(=D}@2HT0yym@5PBn?lG$mB?Fo7T$o za>o)~^eTbN=mDI4ccNhQNIXc9nTKrwrNz4&uKE29f;zDWsHBi2UE#?a-no*wENn$@ z6D(B^v795XZ6^p1zQpUc8L`9d?-1AtJ%m*h;>kBo!?wA;+yV6-fy(S5l(U4kjv`m% z(3YjQ?c6wkKfIo*t8(!C7SEbwTC$PlI)`<@esVqKC94mu!M0t2`)fL$s^E;F&L?|} z&P@C{0q#jKk!Dxs*rsfF&6T6fB5P)4mRdvXIEwovK^@iu_mXa5&eE$L0N)UR@jU<_ z#nLKqLbb)D%M|ZBf;6dzNH|#V!ZsUkLZ;%49Ubr03uTJo$mc_x}>8v0azR9jYxvWx8y0rm_&v z&=n4x%h#xzJC58;wssAqpF395Z9rl`fILK2JCHpA%L@v+1``vo5#6bs3z%(H@7Sgi zv)zWU`5NZ|>>OQTj$YTYpdptN|I=V+#20wV7&Nc-lAW8mnxcOsS$Ko28jd%F`SwUx>?l3!iJ zP=e(lp>&Fc2VI=ZHO}d@xF13BFq(CWf`O1NQGRpjMfVm+^T1+Bsk>0rZfm+N*BwH@5b*H3r@S(yN@itKx(n z`4F!Ga5~2I#ZykQ1&aHCqHU#T*5RbpzFZRzB*0_36Myy+x&{m$sU2aQOkgH=2Zlsl zd$GtzJk51qoQsDLv~H!FHngiDhWDsIZMCu;uHnrgM`Jo8Z4^Q4Y1Yul@F^NTL9;KK z9iAFXpgc@I+CzfWO_zaBX>l(#IJa}f69_tL@`cY2oc$m-Smo$(A#7IqDwG~^l zTOwPB7%T&C<2;$hj;=9^BcVb2`4W>jWt@Ig$fTH%}*7znK4hRU9X&!}ya zF`1mCVmaOy#77Ix^JZ}YG2vm1?YiV7&~4?$SyQ3Tcl6;R0;s*7GP}6KQA|=^_l*j1 zF~PsFh#5KDtXG?d4K6|BY;zojQx*>FX$sIP*R7!mIO|Ef_+84BVlgH_jMa0B)WqYSf+PW7$f!8`cv6R4GSKPRCV4Xpy!5vs_z$bZ* zzI=5zUO`OFxE`mI8rTPQJYj0PL4Xfd9L^%4<6*d8P3%s;LA#D>IcB1^jb?JE!*&zs zswu`=Vl(f0ZQ4dSQY-s3!?wmEqX*u7$&~vz1kUX zn+bZ>4b{MqlbM5W9N}Wi((&=VqukqW2C{8J>u3xI^6doq#`=gM$A+9GOI13~5yW>A z*y|cUon5aDmfQl$#siLHmrA_zrj;1q2Q@f*^`4vNV%xP%eBkbI@jV3D!`^|*)J;Bc zAij8LyXt5QXuM;C$9S@c#+`?3HIu^yXH*>Mz9($JPS@t(ZPz@NR&T&dyLMbhdGGCE zd7ZEsDg}ND=|pyfnzOuz39!0b{lmSy_OVZuW52+wPD{hL4Ag1(5|Ui&*v}R}NWeYp z(R%PQ-ZmUu(0;V*EbmbQ*}W;O{k1lJS{^BPZ$O2COw`Dg863nJY6UKI`$3cVQDUKc z)3mNE*mhc+Lx@bTCPy)NdVo)>_3h`Z;^Q~Tl4EwzW&xii-- z19y6@?I_aW9`{IoouGGbG1fV{A%~np<7t)x-x_dlfVT+t4faF4&xhA8Dg{1ekdt#? zoC008{!SAML)1E%+aJ0IBaDK+x2wv0pB*o_jeqv z{4qfq)NQ16xpN`+8PQDXwq`czrp`^LvqU+yD`i|0XQL-M6Qr{`wwRUaaVBx%eNFI` zH-eX=lc(ACupFK_MQ^+1X|_6v)6{kr>OWe7MEG3 zaU8AD6oD0eq+t*>Le{bX>fSPhd_Hu8rN=CS7spr|95$xad@Cu@z}c}e); zH;o@^mSV;xdI&D{PpZKoq`ho8LG3jX+MMLX5b z=+T&TXY{C%^XEH)wSYEJ347^6dMaH+8xg2SU?u{XyrOY0T}+$712m2#?E4n{ejkBW zA+a#8q`^u^IU4gZ%UEMwwPmWE<;4DAo^Z3YQ>-{yQyk_h=^2>iyo<`fya1RI zppO%g@I*OY{_DyxFMva>j-E->aN%Y-)dJhh+lhsUb%%5d-Rj_>pl2g6yN!r~o`;Dj z==t;l1m++x-$_M5BYKG|!34dOUWUM21mWy+g02*Scx0qt_#V@fQlQ zMQz2iv+m5b6ID1$xP{*8o+56eF+tQW8y^?F9f3uTBHu-dyp!IAz+wcJwHJ9Wz0b|? ze)<3cOE5d95L<{_z#e1KldaQi{1^_i_tQt*v>v1%LSQ)pD+o&oAy{&--Pj9le8#5z z4*e+o82va7%;PvPpQN8M2Lv_L)iv3hU5~k#au8MD!{IHor?hLqCgcJV&3PpT~BN(6W)Kb#&E-iwLDe8=()ewE=-m2&{HZ#jnt>+EVcw2;kd~I}T9M^gmPveTn{$ zzD!@iL}<~%NCfV}+#wJlxCFtK2(A(cFB;Aoy;3oqRaJeRwYI6zMrVlWLonr8pEgb> zd#I5~g{3jAt^p@WOe-R_$2Y!~V5dn;wNzq~q`C&9oexo0R%xlhG1bfdM{RR0=HbJ4 z;cb_taR+haY`ZeX3$fFrxo7k?Q+Qt{4Tol*%MxvFV|*EZoCgTC z!Hiu@0K&v84z4jKnCVTv!juP9yBG-qyV}1BW$*-}D^?;Vis^4>B|=~~0(;tciLeX1 zrh&1AB$I$cl1W5huM2AqGl)qdtT_nWgTUQnR5sd4Ym^5UIVv%f8QDf!!;B!LH3;n6 z!;Au3nK20L7jR-dKpN1MTE(4u#YsSL?IKPjMa0w)2c7gZOe&-DL{Gy^VKN=`Gzc6* zP;lX=vDaH`<8onijGi$tc}zZ2z!Wl5nIgu>n3!V5%uHiSm{O*UDQ7Iqbf$u-WUR~# zri!U%YM5H4j;Uv6G7U^4)5J70EzB&Ym6^@VVdgUPnEA{CW+5Xmh*`ueW|lBZnPtp! zW(Bj7S;eeoZei9iYngS-dS(N&k=ev-X0|X}nQhFi%x%o=%pJ^j=1yh@a~HFd*~RQ; z_Aq;yyP12KeawF50CSKz#N5l=$K1~xW*%UUFb^^hF%L6GnMaso%%jX>%;U^)<_YFW z<|*cB<{9Q$<~imB^E~qc^CEMSd5L+Md4+kEd5w9Ud4qYAd5d|QImMi2-eJx#?=tT( z?=v4TA2J^?A2XjYpE92@pEF-DXPGaVub8iyZT z8^8v#L2NMFi|x%ySScIAhO&LwzHC1>j16Za*hn^t?axNDF>EXwhrqoE+=syZ2pmS> z0R)a9@E`(sWP2EaqX;~Lz%c|KMc^?69!KCf0#6`-6YWz7JdMCJ2t13xa|oP3;CTdI zK;T6LP9pFU0xu)*3IeYp@EQWIBY;PTHxYOX0X!C*Lf|w4?;vmnfp-yj4}td)_yBs!j}iC;flm?m41v!P_yU2m2z-gaR|tHKz&8kdi@-SqzC+-91kNMy0|GxH@Dl<* zBk&6X7ZCUrfr|+IhQRL#{DA<@ntvhiHv<14@Gkz771OpKaLNFM?UI_L^P=cTo!4L#P5yY9cFM|CL z3_~y+!3YE+5sX5xKZ4N+#vmArU>t(+2qqwyh~NMO2O>BK!6XEe5llgFFoHu69E#vD z1cxIy0>P08jzVxWf@2UIi{Ll}$0Ila!HEb?LU1yIG6Yi*lq0A>P>Em~g6RlmAgDrc z3WAvkW+9l3U=D(61T_feBB(`BhoBxo1A=)7<|9~uU?GB25iCN`h@c6r|g5Qa4o&7Kg#u+xafH3(tY zG9uI+LKt?sCrMZS6V^&3-FZ6NNoHIKVc2RS*i%9nwvK3Zmk@?+AksY}gkhVB&b0|) z*w(J)+#E8O$aRkphFw5pJrTmNh)7(M5Qbes#Ck*s!!ExXxf4Pdb`=rp2_X!-hG<-i z5Qbe(q_useh>>|LH9 zT?k>=-9)f^gfQ&gMAn7bmh_;j}c9mdU_&+VIS`x?1}Y*eUb>faHEjxUL6Qw*k_1L&j?}I6GX=&Aq@K> z5%EL_!@f);T-Z?T$I|YEB9CUhzCL#_9BsXwNP+IceEUmUPki0HKmVK_+Su8$Cgqls=02w^zR zgE8#UPM;sO9X@j29*o&r!~M+}=SLLWTH6C53>QeGdqxPu^&&bwB!uClMCn?DFkBxZ z)e}M(F6^obT$2!nizGTdC4}LkiI!W(=!y`AizA{PX-KX?2*V{3r5+K&aD#|S_X%OR z6e8aPLKto+QRpTi3^#%Z-wZ++ZggizZIAwXLp!f+OX<>4NGr&!L3VONAOTqS|^@MySGSjW45H$oV$ia>d|2Hz=^vxHp} z!f>_MQ}t^S!f-RMr@Y-DgyEV9a8H7XG<)0Y?k)*oxLE|%!<+1@+}nW=hMPkGJiI`@ z3V;-=GeQ_{K0)$8+tDdf7lbgJK)^ikH*^Ztkr0MkOi+5754t3T;g%6N504ExEtE$> z7;Ytj^gy%FDP$*vFx)K!$U~QPf1K}$5QbYvpl+NHhTC|Jx^*a0mmDtK76RlUvf6>{ z3D^@M40kI5>lQVYoL4l!wVj zdq|MFT}=qXy-fgaE+Gu}4#E826T)!s5j!5{b8RmVdqxPueMnF}Ovk!L?LY{_eL|3K zG9e82IRWk7o2=_2gyFs<7OsmYgT$Ea`KmrbFaRsI@u<_Ph&3nTAO7L$i zVmuSVaK94^-Ft)Rp)orpgyH@o*w^)--Nied62fr*66os+bXRBx+d}7rFx+Kgq_RN!uf#tDnb~ZCFrJZy({ht-ClBs zjV=jccrRk=#u9|PsjCQKcwb`Ty83g6c5u|joe+i(Aow?r5QY!FSuSyKoLof+!%K*X z>&o^{mvll1!-o>s>xvtf4%{t57``7d_5V)@!$%Oi|G$JVe1Br|e@h6%#}XSimQcDT zgy9ni`u~Cuh97t{kZrUrjww;wp(CG6kZ-JybV3Nj4K ze$-8KaR)*eek?)uuy^1xb?Xr!3_qd!o^U5v@kj{6PwruPoh^0^LKt37fV;c0>&k*{+v}QyFueLES#rz{ zx+H|*wb$u2XBb_J5QaAp3;%C~Fnqy{yUt}z>TIv831RpmVySx_#A7&MLe#4WVfbPK z-o3HU4cyr-o(N(15`x~n#aQR)T@%9aAxzslWqv<@5WlGA4!B#X_P9zlP5#sj=93OWOE69P$tF4^aub`6K*; z2rfl%*>3(}{wRXW5nMqYGzZ!U6k0Ibz2gBhzUc1!nT?;I?QfMg2W%{FX)3o6*(7Uy zWnHbM(OT1tDL(2N#-@;+H*1;g(RpJVbxTQoeTt1X0Y7$6QCM0m)tDTkAw`2Vrq?yp zG^SWJ1VrZmNv?1E#zh$aW%5_ajZ7Yr+*n?fWYv_E>#f5^kF-62=AWRfyC`1)lIM+> zn}B}?|JnBNTu89}t@oLh*_LuU;ew^%ZTv zVwgB4ff>Mz!OyOD;0Mg#;U~iJY$|JHEo>z_gRN$pS%F>2ZeX{vcd_@fPqWXmC)gL* zlkCgvtL*FSo9x@{SL`?JIre+@2lglS7xq{7H}((qFD{Ua;RbWlxJGU_ca(dcJH@@j zo#D=LzjJ?a|8W0tS9rkp=EM1DK9-N?6Zw(+IDP^@iC6GxddYqQr@uUoxt_uB5Y!)vG4VXt?*E_!=;Cwou!uJc~z zz1(}V_crg_ytjMr@ZRbDp!d_>&v`%ZebW17?^nG~d7t+F-1|%Kuf5NCfA9T+_ut-^ zyf6CzACV936Xes|N9xnZr=L%_&p@9+K1n_)KI45R`N(_}K50G~KDj;xK2v>+KE*!M zd}@3ee42b(eCGPh_gUzJd{+5v^V#mR!)K?@-9Gz#4)`4MdD!P!pBH^z@_EJQO`o@Y zPWznkIp=f1SMICvE%7b$wfI)}T79d0Ykcc`XZkMkUE;gUcZKgN-!;DLeK+}T^}W^i zkni)pr+h#0z33FV#=!m+m*kFUv2-uf=b%-!i`yeyjb~_^tEX?6=Erzu!T> zd;RYBJL-4L?=in8{GRgr-XHq+@sIY8^H1;};6KVg%|F9`ihq`Wj=#oV>#z4O^SAg{ z_|NdK@vrx9^l$NR^ViCI!2DU(U@KlgyMfN}46JB(o)RCG#Z2hBsnTMCV5P9T=JykY00ya6OtDsCnYaSUX{Eq zc~kPXxNIsK%A^B4BjpRGY50alHze;|W{3ZEUa#;$bVks;2lKM&m zq`^{&G*sG88X@g3jg=-y2TGHrL!`r{qoiY{6Qq-+a%q}WCC!qmrCO;$S|BZw7E4Q{ z<ATVoq#sK^lb)4+Ej=eaFa1e+L3&YoDTE2( zLI#8k3sHt-g&0DLL#BnahMC5#U z+;>dhaeZg>ZS33JcYEKv`|j)eY~NShJzR{rmP0 z>p!u7dVf{_n*J^QTl?SEe|P`A{h#W8vj5BdzwZB2|6iheMTbR4M30MBM5jepMAt_* zL~n}T9=#*_#ppMq-;Vw*`oHKaF%dBdF#}=>VoGAlVwT6OkJ%XWV9fEDCu2U0`7-9~ zSV?R|Y*cJ|tR_|)yEyii*tM|_$37YRbnMyK^RYk1N#Y{nqT({+^l^D{GvnsO&5PR; zcW>PNaqq=_9(Ok0H(nAS5Hu6gVh%(9}W3K?estH0Wp&Nb*YZNt&8emSjnKAnCEB<4G5i{zXKGBa9<9 zkGONhT_etpI6vaYkx3&*jvPI*cI2#)vqwHR^3{>Aj~Xy)*r*Ysgi$L;tseEtsMDj) zjE)$cFnYjfG6X#5vH}Rc`pG^F0(!fc>Cyku6b<$mvc1`x1ES(%WdC}z6lh;iC zX7bOIFUS1Wf=r~jBSIYX6^nXx_N?u>mImsPBaS4~i*sWMaxRLfN>RWGUDR-K*# zr+82Coib@k#*`^j)=jx}%I#CmPB}m2$IMBY8JSZuH)P(Pxjpln%%3waWR1^KW~FDX z%epn|_N=e7e#-hKdvdlaJ2QJ*_Rj3x+5hD*Ib2S0PDPG2=ZTyba!#tH>PU5eb(4C& zdZGF)^#|$?)gP-rRe!5tHGZ08jY5;F(Q0%WgQiqdrYYA<*UZ(d)!eChK=YdBP0cCI z8O{5ek8*u;CAp!w{c^)|<8z1Rj>sLIJ1I9Kw<5PXcXjUO++DeQa_`CApL-&ENSb<=b;x_Vusu0_|Xo1@#N+pF8BJE*%)cUX5s_k!+} z?u_m|-G{nQbf4+Y>3-DxqPwX3T@UrFp4WTp1N6aqi9SRhr%%z3$A8Zg{tJ!tQ}o$- zjb5uS)>r78^v(JfeXD+{euaLOevN*;exv>l{Z9QJ{XP2q`lI^C^-t)Z(x1@3sDD}i zs{V}rQ~i1UFZy5gzv=(hU(#PO07I~$pCQSRYA_mR8Ri(~85SBA8SXIbH5@V=Gkj?H z#&FJX-td#*LLQUH=lSIM=LO~U&I`|r%8SX1%S*`{nl~bEe4a8-o2Spq&nwJp$ZO7< zl{Y7EUf$BY6?v=k*5qx?dnWINyr1*_$`8+v&R6B<@PS}aDTy(f`sFf-eicE;v_kzTl^V3k4So{R=}1 z`xb^5Mive!99}r8a7^L&LS>=0u&}VG&{R0Bu%d8AVRd0$;mpFVg%1`UFMO)-*}@Zr zZxw!0_*vl>g`m^YtqW_GPQDkI{ywS(#ZwxZ_Hij7c z8pDlI#u#I~aey(&IM_JMIMO)AINmtPm}*oSGmM$W9AmCgZ_GDNHJXgmjAh2@Mys*f zSZ8c7HXB=wbBzm($hgF~+_=iP#<cn{m7GF5_MYra)6KlhoA56lRJvMVsPGiKaoO6w^@C2-9fOIMYOv%%m`-o2HnuO&XKVlxHe5 z8BJzWsmWrhG*y{uO*2hRrdg&rruinpwAi%Fw9<5oX`N}KX^ZJr(;cQArd_7JrhTS^ zru$3}m>x1cVtUNY3UxL8sgTHLQVqPTx?Y;i*Iz~bcMA;rUsM-`7LPAygx zPcN=3o>{!Icw_PA;`@t_6+c$|S@F5z@6DV!&>U<|F^@KnHRqYl<`VNt^G5S#^HK9t z=4Z^Gn!h!FH?7ySuxSy~RMWK6^wYLY+c|Cbv^S=`H|>KGzY=LlXo;+3N=a79+>#|F z%S!Gmd8Fjgl2augm3&fisgy2dOXEsYN{5uHOAAV;mM$$_Te`mVq0%QxpDO*f^q10K z%lyki%KDUzDw|xET2@w8T~=GRv}|qJ`m%e=j+PxO`>gC-+4tp4xqo?J`RH<4xxBo% zyrSG%zOMY%^4rTFEq}KBMEQ^9f0X}akys)uQI^RTl_k?+wKQ0oEL$u)EITbPS>Cps zw)}3nJe`^zIX!Xu!0CqR#nY!vZ<)SuI-35#^v9+jpZ>}8Z>FEC@Tv%|=v|RqF{)xr zMQKG)9Ff48Iux zGX~EXGh^Hg>x_mOO*3wtv1`Vj87F4EHsg&M=V$yj-T1SKV24 zSJewuZ&bZib+PJF)#d8=>cQ1RtBuu`>Wb<`)vK%5R6kt(WcAb4=c+GMU#tnQiLXhl zQPpT`^fe1=me;JTIa2d@%@Z|W)O=s_Lv2uP-`cR+NwpcZQ)*Y%Zmiv0d%E`H+E44a zy1=^Nx)F5~>n7Kg)>YNj)Ge=DU$?RDvAXB#p0E45?x(t6>O<Z9w^>ecnR^-cBj z>lfDVtUpkHsQ%6R_v=5L89p<9X5!4Ine%5ZocYYmmuJ4(AZ>_j=-*JpEaFp`o1~2c~tY5 zX4Jf@`IhEanol>MY3bb(-V)hjYMI_r*>X?I;g%yU7h5j1T%I*@)}&doS+i#?nzdxs zle1o&^-?R>8rT}#n%$b$TF|(csIyf@D)mhDxpSrUU*%26Gfs#G!V^2OVBd(IrTr zZjoWpJ&O)6I2*mtr2;=0AHi{~spwfLjOpDY==WZaSoOBO9zy=2Xjub2F^!6 zmnxU0FWtBFfu#>Fi&&PhY{0Tj%eF7uvFy*~)N;7ou)KKrwB?7FKf3(!75s{z6}?tW zTVY*Mwc_}S=U2SAGH7Mrm0>HZS2nMlwep3PZ>)T4RlilStKwHRuUfE5SaoXEN2@+r z9lJVt_2AXZSFc~aarK4O|E#`rOVKUmw@km~$y;8$<)t-)){Iy)YR%R)cdgmA=Hi-5 zYc8+NT|0HHaqWF;A6fh8I{$Sc>-wzAS(m@AaNW9fx30T=-3RN=uKQ|z@cMr1!`Exp z7p^Z_zjOV8^@rA9Tz_f(PN8?!g&Z7kThbK`-Hhc^DP z@yaH!DRo&J;p0oM&&F^l0e@nuaAzOxRS-NHImi1e{ z*z*0B^ILx0^3Rt4wo+R~TbZrgR>{_|tpm2EY#q9F#MZG}Cv2U(HFay=*4k~NZQQoN qZN0WhwuNkq+7`1dep}+UaoZ+uOS93pQV`mI=TF*ycl>`_#{U76ueY}V literal 0 HcmV?d00001 diff --git a/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/Tennis.xcscheme b/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/Tennis.xcscheme new file mode 100644 index 00000000..aef7d155 --- /dev/null +++ b/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/Tennis.xcscheme @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + diff --git a/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/TennisTests.xcscheme b/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/TennisTests.xcscheme new file mode 100644 index 00000000..c7270ce6 --- /dev/null +++ b/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/TennisTests.xcscheme @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/xcschememanagement.plist b/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000..8119a10a --- /dev/null +++ b/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,19 @@ + + + + + SuppressBuildableAutocreation + + CACF69AD9BF8D87BBC1D0651 + + primary + + + CACF6DE0B90C4D92A2B3D5E6 + + primary + + + + + diff --git a/Tennis/objc/Tennis/AppDelegate.h b/Tennis/objc/Tennis/AppDelegate.h new file mode 100644 index 00000000..8dfe9bd5 --- /dev/null +++ b/Tennis/objc/Tennis/AppDelegate.h @@ -0,0 +1,15 @@ +// +// AppDelegate.h +// Tennis +// +// Created by Stefan on 05/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/AppDelegate.m b/Tennis/objc/Tennis/AppDelegate.m new file mode 100644 index 00000000..8712b784 --- /dev/null +++ b/Tennis/objc/Tennis/AppDelegate.m @@ -0,0 +1,51 @@ +// +// AppDelegate.m +// Tennis +// +// Created by Stefan on 05/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// + +#import "AppDelegate.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + // Override point for customization after application launch. + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application +{ + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + +} + +- (void)applicationWillEnterForeground:(UIApplication *)application +{ + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. + +} + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + +} + +- (void)applicationWillTerminate:(UIApplication *)application +{ + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + +} + +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/Default-568h@2x.png b/Tennis/objc/Tennis/Default-568h@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0891b7aabfcf3422423b109c8beed2bab838c607 GIT binary patch literal 18594 zcmeI4X;f257Jx&9fS`ixvS;&$x8J@slQFSel)6zJN=?13FB7H(lQjRkSy8x_-S~tvu2gzn1oS+dLcF#eqtq$ z%tf9TTvX?`)R@}3uBI;jzS-=ZR-Td&MHaS&;!0?Ni*#$#`n*~CcQK)Q9vAQ~TUpnI!j)a2biYK^R)M~A5wUDZhx?ULMX z3x1P&qt=trOY6P2U67L=m=U?F|5#Uj(eCueNTZaHs_ceWiHeET+j+tp3Jt9g(ekqP z2WOvfR{qV+9r+o4J5?qK>7;;^+I7tGv-i)es$X_D=EoKF+S?zsyj^oRFElP}c}JT< zd8SUs-?O?}2YD#ngKbnHgzHBcboxK_2r9l(?eNCl-pEzkJm}fY?WC*jnS?VBE4EpY zO$fEejz6fU;W2Kl>JeQBZBl-%Irg`obSlg*@4QB;Dd1H7^Oi5wvt4d{RZ!8Og?^aE z)k0$1g+V3fd(gdQ3d&q2q-FL*uy#}|bc^=VhFsl0jBgUGJ+-s3U8MK9A!YJJMxpci z5hJ%|{DwV48fZn0{n5l$N_KcSb#NKE4plB`9I6Zt=Z!~-zw0{9tg$L&Ju1F0X)Cy8 zKF;(&lJ>x)Jw(=;p~sF(Sd9VWGwFE2rnyS9!f^DZ8+aCLq zQ};>lcJ1GDLqjm6Hd>|Eabno@P`~Bn(~6^aD_#yoEH(a?Nm1S<;S+hSxI5d16^<1lEM3NPFi zkqPrpL)+ zgnseFikg`gJVBha1&7C4;O6>h=dt~`ND+;Zd?W(4v2JIb7Pt>Td42%M-Ju-XAH#Pns762L}K3 zDhvsRqN0Ni(1UrishD2YvV?4*h2iFj$+&N||Fn$4n|^NSU+o?~jq`0jVQt8T9l{7b zXiwwODFh2V!Q6sqP9S>WH$oOf$N~=d0-bqTlD61!=`&0eAP-F>XN?*|gtOXX{ zQVTWyYo4ZK0GAw!GHf|pz9`D;-bbb*5LBX*{bnz|+)$@&P9|ORM2o?95{;ejvo&r- zq8cBhTN6nn)7~W>54U)%-F_-b?YKdfk5I8MHcuzBD5)!;yv#Z&R&^y=@=>VTIMy#r zX&U<=BsPkdqcMe<_}2+>H%XKyrr5ZR8_KVe>ZqYN z^=^~TFD};;rHJ$U;{~w^hYojl4hRI@SH$^K{YEo=sg)WY87r!*7blQK&qnpDo0`Vn zkl)9u9g=mCh&ZCJS(L4yN3k0kQ zuvg$h2KEEk51T+O0JQ+r0`R>g{jvqM0Mr6d3qUOZwE!?PI7HY@CE|dr sfw?Q;rAv?G4&^^8-z_>&sWXMxvD*gPOU4CBe-*@OtE+wfmVJNyHv)PfH~;_u literal 0 HcmV?d00001 diff --git a/Tennis/objc/Tennis/Default.png b/Tennis/objc/Tennis/Default.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8ca6f693f96d511e9113c0eb59eec552354e42 GIT binary patch literal 6540 zcmeAS@N?(olHy`uVBq!ia0y~yU~~ZD2OMlbkt;o0To@QwR5G2N13aCb6#|O#(=u~X z85k@CTSM>X-wqM6>&y>YB4)1;;ojbLbbV-W^iFB1wa3^zCog^LCAReC4K0-?R_2{6 zrP*)4+_uWUy3w5N52M3PW_}MFMP9a~>YLvVZ1D_k*IMQ2QT^fwzoOb(*3gH$%aYWC zkHmcab=va2<#X%jakpJ;<1@F;k__#bwtC&%^D0v(FBh9K&$sK+<}2RJS609D)17$w ztdQP8(eLM8Ka}m_IQ@3wyMKP)l=oM4-?`YS_*P?4V_ORLPxsj&7Ju#kH;>6^Kp?T7~ zl+q?{UOOqV==?+d{=)5s|M~T1mwtH@+Z^$G&eEO9JNP^AX@3jZ*J*!!>lc|1-W%fA z@AOQpXZ_Lt>rxFXrGp*zLPiW@uo_c7C{As>j zWeX)wi+LTp_)@KYZCX{j;H?|1yXT4DnlS(Fr8gyP5|uaX_gLvaW0ScZdnG7o+u{T6 zFI-%d{ls*WuCDa5UJ@|RXv&ejZe}*BMkiWY51&pnRPw(hlykSzvj6e%mYz-GdvzBD zF10?szF_~!jS=?2HyQuPCvARXAe}C}WP|yQ*>5~~=*Nxq8+HHW1~FMDRCP^TcacKuk$ z(U#REVv)D!PhJ*ecH-ELFUrfyV&*)Z)>UCOuS?yd^L@Afk>ihynYPc{^CRwu+JHX+#$@YsC4c|l0tGigsn@jy) zXD($Ouk>H+V(Mr6NQT0S9BFM~V6nkj;1OBOz`zY;a|<&v%$g$sEJPk;hD4M^`1)8S z=jZArrsOB3>Q&?x097+E*i={nnYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X+g2&U 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 literal 0 HcmV?d00001 diff --git a/Tennis/objc/Tennis/Tennis-Info.plist b/Tennis/objc/Tennis/Tennis-Info.plist new file mode 100644 index 00000000..a68e4459 --- /dev/null +++ b/Tennis/objc/Tennis/Tennis-Info.plist @@ -0,0 +1,52 @@ + + + + + + CFBundleIdentifier + com.vandenoord.${PRODUCT_NAME:rfc1034identifier} + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleSignature + ???? + + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleVersion + 1.0 + CFBundleShortVersionString + 1.0 + LSRequiresIPhoneOS + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIMainStoryboardFile + MainStoryboard_iPhone + UIMainStoryboardFile~ipad + MainStoryboard_iPad + + \ No newline at end of file diff --git a/Tennis/objc/Tennis/Tennis-Prefix.pch b/Tennis/objc/Tennis/Tennis-Prefix.pch new file mode 100644 index 00000000..7cdfcdbe --- /dev/null +++ b/Tennis/objc/Tennis/Tennis-Prefix.pch @@ -0,0 +1,16 @@ +// +// Prefix header for all source files of the 'Tennis' target in the 'Tennis' project +// + +#import + +#ifndef __IPHONE_5_0 +#warning "This project uses features only available in iOS SDK 5.0 and later." +#endif + +#ifdef __OBJC__ + #import + + #import + +#endif \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame.h b/Tennis/objc/Tennis/TennisGame.h new file mode 100644 index 00000000..02b3c9c4 --- /dev/null +++ b/Tennis/objc/Tennis/TennisGame.h @@ -0,0 +1,16 @@ +// +// Created by Stefan on 5/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// +// To change the template use AppCode | Preferences | File Templates. +// + + +#import + + +@interface TennisGame : NSObject +- (void)wonPoint:(NSString *)player; + +- (NSString *)score; +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame.m b/Tennis/objc/Tennis/TennisGame.m new file mode 100644 index 00000000..a3a6ccf6 --- /dev/null +++ b/Tennis/objc/Tennis/TennisGame.m @@ -0,0 +1,22 @@ +// +// Created by Stefan on 5/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// +// To change the template use AppCode | Preferences | File Templates. +// + + +#import "TennisGame.h" + + +@implementation TennisGame { + +} +- (void)wonPoint:(NSString *)player { + +} + +- (NSString *)score { + return nil; +} +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame1.h b/Tennis/objc/Tennis/TennisGame1.h new file mode 100644 index 00000000..d3dd979f --- /dev/null +++ b/Tennis/objc/Tennis/TennisGame1.h @@ -0,0 +1,14 @@ +// +// Created by Stefan on 5/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// +// To change the template use AppCode | Preferences | File Templates. +// + + +#import +#import "TennisGame.h" + + +@interface TennisGame1 : TennisGame +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame1.m b/Tennis/objc/Tennis/TennisGame1.m new file mode 100644 index 00000000..b08fda8a --- /dev/null +++ b/Tennis/objc/Tennis/TennisGame1.m @@ -0,0 +1,15 @@ +// +// Created by Stefan on 5/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// +// To change the template use AppCode | Preferences | File Templates. +// + + +#import "TennisGame1.h" + + +@implementation TennisGame1 { + +} +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame2.h b/Tennis/objc/Tennis/TennisGame2.h new file mode 100644 index 00000000..23440a1d --- /dev/null +++ b/Tennis/objc/Tennis/TennisGame2.h @@ -0,0 +1,14 @@ +// +// Created by Stefan on 5/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// +// To change the template use AppCode | Preferences | File Templates. +// + + +#import +#import "TennisGame.h" + + +@interface TennisGame2 : TennisGame +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame2.m b/Tennis/objc/Tennis/TennisGame2.m new file mode 100644 index 00000000..cd99b536 --- /dev/null +++ b/Tennis/objc/Tennis/TennisGame2.m @@ -0,0 +1,15 @@ +// +// Created by Stefan on 5/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// +// To change the template use AppCode | Preferences | File Templates. +// + + +#import "TennisGame2.h" + + +@implementation TennisGame2 { + +} +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame3.h b/Tennis/objc/Tennis/TennisGame3.h new file mode 100644 index 00000000..190bfe06 --- /dev/null +++ b/Tennis/objc/Tennis/TennisGame3.h @@ -0,0 +1,14 @@ +// +// Created by Stefan on 5/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// +// To change the template use AppCode | Preferences | File Templates. +// + + +#import +#import "TennisGame.h" + + +@interface TennisGame3 : TennisGame +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame3.m b/Tennis/objc/Tennis/TennisGame3.m new file mode 100644 index 00000000..bc2d3456 --- /dev/null +++ b/Tennis/objc/Tennis/TennisGame3.m @@ -0,0 +1,15 @@ +// +// Created by Stefan on 5/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// +// To change the template use AppCode | Preferences | File Templates. +// + + +#import "TennisGame3.h" + + +@implementation TennisGame3 { + +} +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/ViewController.h b/Tennis/objc/Tennis/ViewController.h new file mode 100644 index 00000000..486f5739 --- /dev/null +++ b/Tennis/objc/Tennis/ViewController.h @@ -0,0 +1,13 @@ +// +// ViewController.h +// Tennis +// +// Created by Stefan on 05/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// + +#import + +@interface ViewController : UIViewController + +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/ViewController.m b/Tennis/objc/Tennis/ViewController.m new file mode 100644 index 00000000..b81b05d3 --- /dev/null +++ b/Tennis/objc/Tennis/ViewController.m @@ -0,0 +1,29 @@ +// +// ViewController.m +// Tennis +// +// Created by Stefan on 05/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// + +#import "ViewController.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/en.lproj/InfoPlist.strings b/Tennis/objc/Tennis/en.lproj/InfoPlist.strings new file mode 100644 index 00000000..b92732c7 --- /dev/null +++ b/Tennis/objc/Tennis/en.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* Localized versions of Info.plist keys */ diff --git a/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPad.storyboard b/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPad.storyboard new file mode 100644 index 00000000..9fbe23e4 --- /dev/null +++ b/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPad.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPhone.storyboard b/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPhone.storyboard new file mode 100644 index 00000000..c9acc6d0 --- /dev/null +++ b/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPhone.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tennis/objc/Tennis/main.m b/Tennis/objc/Tennis/main.m new file mode 100644 index 00000000..98dc5ec7 --- /dev/null +++ b/Tennis/objc/Tennis/main.m @@ -0,0 +1,19 @@ +// +// main.m +// Tennis +// +// Created by Stefan on 05/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// + +#import + +#import "AppDelegate.h" + +int main(int argc, char *argv[]) +{ + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } + +} \ No newline at end of file diff --git a/Tennis/objc/TennisTests/TennisTests-Info.plist b/Tennis/objc/TennisTests/TennisTests-Info.plist new file mode 100644 index 00000000..a97f5d7f --- /dev/null +++ b/Tennis/objc/TennisTests/TennisTests-Info.plist @@ -0,0 +1,25 @@ + + + + + + CFBundleIdentifier + com.vandenoord.${PRODUCT_NAME:rfc1034identifier} + + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + CFBundleDevelopmentRegion + en + CFBundlePackageType + BNDL + CFBundleSignature + ???? + + + \ No newline at end of file diff --git a/Tennis/objc/TennisTests/TennisTests.h b/Tennis/objc/TennisTests/TennisTests.h new file mode 100644 index 00000000..da3b0004 --- /dev/null +++ b/Tennis/objc/TennisTests/TennisTests.h @@ -0,0 +1,13 @@ +// +// TennisTests.h +// TennisTests +// +// Created by Stefan on 05/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// + +#import + +@interface TennisTests : SenTestCase + +@end diff --git a/Tennis/objc/TennisTests/TennisTests.m b/Tennis/objc/TennisTests/TennisTests.m new file mode 100644 index 00000000..a6e0a62a --- /dev/null +++ b/Tennis/objc/TennisTests/TennisTests.m @@ -0,0 +1,115 @@ +// +// TennisTests.m +// TennisTests +// +// Created by Stefan on 05/31/13. +// Copyright (c) 2013 Stefan van den Oord. All rights reserved. +// + +#import "TennisTests.h" +#import "TennisGame1.h" +#import "TennisGame2.h" +#import "TennisGame3.h" + +@implementation TennisTests { + int player1Score; + int player2Score; + NSString *expectedScore; +} + +- (void)setUp +{ + [super setUp]; + + // Set-up code here. +} + +- (void)tearDown +{ + // Tear-down code here. + + [super tearDown]; +} + ++ (NSArray*)allScores { + return @[ + @[ @0, @0, @"Love-All"], + @[ @1, @1, @"Fifteen-All"], + @[ @2, @2, @"Thirty-All"], + @[ @3, @3, @"Forty-All"], + @[ @4, @4, @"Deuce"], + + @[ @1, @0, @"Fifteen-Love"], + @[ @0, @1, @"Love-Fifteen"], + @[ @2, @0, @"Thirty-Love"], + @[ @0, @2, @"Love-Thirty"], + @[ @3, @0, @"Forty-Love"], + @[ @0, @3, @"Love-Forty"], + @[ @4, @0, @"Win for player1"], + @[ @0, @4, @"Win for player2"], + + @[ @2, @1, @"Thirty-Fifteen"], + @[ @1, @2, @"Fifteen-Thirty"], + @[ @3, @1, @"Forty-Fifteen"], + @[ @1, @3, @"Fifteen-Forty"], + @[ @4, @1, @"Win for player1"], + @[ @1, @4, @"Win for player2"], + + @[ @3, @2, @"Forty-Thirty"], + @[ @2, @3, @"Thirty-Forty"], + @[ @4, @2, @"Win for player1"], + @[ @2, @4, @"Win for player2"], + + @[ @4, @3, @"Advantage player1"], + @[ @3, @4, @"Advantage player2"], + @[ @5, @4, @"Advantage player1"], + @[ @4, @5, @"Advantage player2"], + @[ @15, @14, @"Advantage player1"], + @[ @14, @15, @"Advantage player2"], + + @[ @6, @4, @"Win for player1"], + @[ @4, @6, @"Win for player2"], + @[ @16, @14, @"Win for player1"], + @[ @14, @16, @"Win for player2"] + ]; +} + +- (void)checkAllScoresForGame:(TennisGame *)game { + + for (NSArray * score in [TennisTests allScores]) { + + player1Score = [score[0] intValue]; + player2Score = [score[1] intValue]; + expectedScore = score[2]; + + [self checkScoreForGame:game]; + } +} + +- (void)checkScoreForGame:(TennisGame *)game { + int highestScore = MAX(player1Score, player2Score); + for (int i = 0; i < highestScore; i++) { + if (i < player1Score) + [game wonPoint:@"player1"]; + if (i < player2Score) + [game wonPoint:@"player2"]; + } + STAssertEqualObjects([game score], expectedScore, @""); +} + +- (void)testAllScoresTennisGame1 { + TennisGame1 * game = [[TennisGame1 alloc] init]; + [self checkAllScoresForGame:game]; +} + +- (void)testAllScoresTennisGame2 { + TennisGame2 * game = [[TennisGame2 alloc] init]; + [self checkAllScoresForGame:game]; +} + +- (void)testAllScoresTennisGame3 { + TennisGame3 * game = [[TennisGame3 alloc] init]; + [self checkAllScoresForGame:game]; +} + +@end diff --git a/Tennis/objc/TennisTests/en.lproj/InfoPlist.strings b/Tennis/objc/TennisTests/en.lproj/InfoPlist.strings new file mode 100644 index 00000000..b92732c7 --- /dev/null +++ b/Tennis/objc/TennisTests/en.lproj/InfoPlist.strings @@ -0,0 +1 @@ +/* Localized versions of Info.plist keys */ From 7e486cea644be00378054ad42d0d3afe60054540 Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 18:43:02 +0200 Subject: [PATCH 02/14] Added player names to init method --- Tennis/objc/.idea/misc.xml | 18 ----- Tennis/objc/.idea/vcs.xml | 1 + Tennis/objc/.idea/workspace.xml | 112 +++++++++++++++++--------- Tennis/objc/Tennis/TennisGame.h | 5 ++ Tennis/objc/Tennis/TennisGame.m | 18 +++-- Tennis/objc/Tennis/TennisGame3.m | 3 +- Tennis/objc/TennisTests/TennisTests.m | 6 +- 7 files changed, 97 insertions(+), 66 deletions(-) diff --git a/Tennis/objc/.idea/misc.xml b/Tennis/objc/.idea/misc.xml index f48e1cf7..1162f438 100644 --- a/Tennis/objc/.idea/misc.xml +++ b/Tennis/objc/.idea/misc.xml @@ -1,23 +1,5 @@ - - diff --git a/Tennis/objc/.idea/vcs.xml b/Tennis/objc/.idea/vcs.xml index def6a6a1..a5dd0864 100644 --- a/Tennis/objc/.idea/vcs.xml +++ b/Tennis/objc/.idea/vcs.xml @@ -2,6 +2,7 @@ + diff --git a/Tennis/objc/.idea/workspace.xml b/Tennis/objc/.idea/workspace.xml index 48fd3656..748a7d90 100644 --- a/Tennis/objc/.idea/workspace.xml +++ b/Tennis/objc/.idea/workspace.xml @@ -1,16 +1,26 @@ - + + + + + + + + - + + + + + + + + + @@ -147,7 +167,7 @@ diff --git a/Tennis/objc/Tennis/TennisGame2.m b/Tennis/objc/Tennis/TennisGame2.m index cd99b536..e08b02ef 100644 --- a/Tennis/objc/Tennis/TennisGame2.m +++ b/Tennis/objc/Tennis/TennisGame2.m @@ -10,6 +10,131 @@ @implementation TennisGame2 { + int P1point; + NSString *P1res; + int P2point; + NSString *P2res; +} + +- (NSString *)score { + NSString *score = @""; + if (P1point == P2point && P1point < 4) + { + if (P1point==0) + score = @"Love"; + if (P1point==1) + score = @"Fifteen"; + if (P1point==2) + score = @"Thirty"; + if (P1point==3) + score = @"Forty"; + score = [NSString stringWithFormat:@"%@-All", score]; + } + if (P1point==P2point && P1point>3) + score = @"Deuce"; + + if (P1point > 0 && P2point==0) + { + if (P1point==1) + P1res = @"Fifteen"; + if (P1point==2) + P1res = @"Thirty"; + if (P1point==3) + P1res = @"Forty"; + + P2res = @"Love"; + score = [NSString stringWithFormat:@"%@-%@", P1res, P2res]; + } + if (P2point > 0 && P1point==0) + { + if (P2point==1) + P2res = @"Fifteen"; + if (P2point==2) + P2res = @"Thirty"; + if (P2point==3) + P2res = @"Forty"; + + P1res = @"Love"; + score = [NSString stringWithFormat:@"%@-%@", P1res, P2res]; + } + + if (P1point>P2point && P1point < 4) + { + if (P1point==2) + P1res=@"Thirty"; + if (P1point==3) + P1res=@"Forty"; + if (P2point==1) + P2res=@"Fifteen"; + if (P2point==2) + P2res=@"Thirty"; + score = [NSString stringWithFormat:@"%@-%@", P1res, P2res]; + } + if (P2point>P1point && P2point < 4) + { + if (P2point==2) + P2res=@"Thirty"; + if (P2point==3) + P2res=@"Forty"; + if (P1point==1) + P1res=@"Fifteen"; + if (P1point==2) + P1res=@"Thirty"; + score = [NSString stringWithFormat:@"%@-%@", P1res, P2res]; + } + + if (P1point > P2point && P2point >= 3) + { + score = @"Advantage player1"; + } + + if (P2point > P1point && P1point >= 3) + { + score = @"Advantage player2"; + } + + if (P1point>=4 && P2point>=0 && (P1point-P2point)>=2) + { + score = @"Win for player1"; + } + if (P2point>=4 && P1point>=0 && (P2point-P1point)>=2) + { + score = @"Win for player2"; + } + return score; +} + +-(void)setP1Score:(int)number { + + for (int i = 0; i < number; i++) + { + [self P1Score]; + } } + +- (void)setP2Score:(int)number { + + for (int i = 0; i < number; i++) + { + [self P2Score]; + } + +} + +- (void)P1Score { + P1point++; +} + +- (void)P2Score { + P2point++; +} + +- (void)wonPoint:(NSString *)playerName { + if ([playerName isEqualToString:@"player1"]) + [self P1Score]; + else + [self P2Score]; +} + @end \ No newline at end of file From 99a58611258ba61139f8f10c0ead94814e5feae5 Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 19:41:01 +0200 Subject: [PATCH 05/14] Also ported TennisGame3. Furthermore pushed instance vars down to better match spirit of Java implementation --- Tennis/objc/.idea/workspace.xml | 95 +++++++++++++++++--------------- Tennis/objc/Tennis/TennisGame.h | 8 +-- Tennis/objc/Tennis/TennisGame.m | 14 +---- Tennis/objc/Tennis/TennisGame1.h | 2 + Tennis/objc/Tennis/TennisGame1.m | 17 +++++- Tennis/objc/Tennis/TennisGame2.m | 16 ++++++ Tennis/objc/Tennis/TennisGame3.m | 43 ++++++++++++++- 7 files changed, 128 insertions(+), 67 deletions(-) diff --git a/Tennis/objc/.idea/workspace.xml b/Tennis/objc/.idea/workspace.xml index 597337eb..2aef8bcb 100644 --- a/Tennis/objc/.idea/workspace.xml +++ b/Tennis/objc/.idea/workspace.xml @@ -2,7 +2,12 @@ + + + + + @@ -14,11 +19,11 @@ - - + + - + - + - + @@ -59,7 +64,7 @@ - + @@ -67,10 +72,10 @@ - + - + @@ -97,7 +102,7 @@ - + @@ -106,7 +111,7 @@ - + @@ -115,7 +120,7 @@ - + @@ -124,7 +129,7 @@ - + @@ -148,16 +153,16 @@ @@ -398,9 +403,30 @@ - + - + + + + + + + + + + + + + + + + + + + + + + @@ -412,53 +438,32 @@ - + - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + diff --git a/Tennis/objc/Tennis/TennisGame.h b/Tennis/objc/Tennis/TennisGame.h index 38a5ceed..bca6994b 100644 --- a/Tennis/objc/Tennis/TennisGame.h +++ b/Tennis/objc/Tennis/TennisGame.h @@ -9,13 +9,7 @@ #import -@interface TennisGame : NSObject { - int score1; - int score2; -} - -@property(nonatomic, copy) NSString *player1; -@property(nonatomic, copy) NSString *player2; +@interface TennisGame : NSObject - (id)initWithPlayer1:(NSString *)player1 player2:(NSString *)player2; - (void)wonPoint:(NSString *)playerName; diff --git a/Tennis/objc/Tennis/TennisGame.m b/Tennis/objc/Tennis/TennisGame.m index 64d1e82a..7a94623f 100644 --- a/Tennis/objc/Tennis/TennisGame.m +++ b/Tennis/objc/Tennis/TennisGame.m @@ -12,19 +12,7 @@ @implementation TennisGame - -- (id)initWithPlayer1:(NSString *)player1 player2:(NSString *)player2 { - self = [super init]; - if (self) { - self.player1 = player1; - self.player2 = player2; - score1 = 0; - score2 = 0; - } - - return self; -} - +- (id)initWithPlayer1:(NSString *)player1 player2:(NSString *)player2 { return [super init]; } - (void)wonPoint:(NSString *)playerName {} - (NSString *)score { return nil; } diff --git a/Tennis/objc/Tennis/TennisGame1.h b/Tennis/objc/Tennis/TennisGame1.h index d3dd979f..43cc7e31 100644 --- a/Tennis/objc/Tennis/TennisGame1.h +++ b/Tennis/objc/Tennis/TennisGame1.h @@ -11,4 +11,6 @@ @interface TennisGame1 : TennisGame +@property(nonatomic, copy) NSString *player1; +@property(nonatomic, copy) NSString *player2; @end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame1.m b/Tennis/objc/Tennis/TennisGame1.m index 5f53e117..74965708 100644 --- a/Tennis/objc/Tennis/TennisGame1.m +++ b/Tennis/objc/Tennis/TennisGame1.m @@ -9,7 +9,22 @@ #import "TennisGame1.h" -@implementation TennisGame1 +@implementation TennisGame1 { + int score1; + int score2; +} + +- (id)initWithPlayer1:(NSString *)player1 player2:(NSString *)player2 { + self = [super init]; + if (self) { + self.player1 = player1; + self.player2 = player2; + score1 = 0; + score2 = 0; + } + + return self; +} - (void)wonPoint:(NSString *)playerName { if ([playerName isEqualToString:@"player1"]) diff --git a/Tennis/objc/Tennis/TennisGame2.m b/Tennis/objc/Tennis/TennisGame2.m index e08b02ef..66112b94 100644 --- a/Tennis/objc/Tennis/TennisGame2.m +++ b/Tennis/objc/Tennis/TennisGame2.m @@ -9,6 +9,11 @@ #import "TennisGame2.h" +@interface TennisGame2 () +@property(nonatomic, copy) NSString *player2Name; +@property(nonatomic, copy) NSString *player1Name; +@end + @implementation TennisGame2 { int P1point; NSString *P1res; @@ -16,6 +21,17 @@ NSString *P2res; } +- (id)initWithPlayer1:(NSString *)player1Name player2:(NSString *)player2Name { + self = [super initWithPlayer1:player1Name player2:player2Name]; + if (self) { + self.player1Name = player1Name; + self.player2Name = player2Name; + } + + return self; +} + + - (NSString *)score { NSString *score = @""; if (P1point == P2point && P1point < 4) diff --git a/Tennis/objc/Tennis/TennisGame3.m b/Tennis/objc/Tennis/TennisGame3.m index b2a8a869..bf12e6c2 100644 --- a/Tennis/objc/Tennis/TennisGame3.m +++ b/Tennis/objc/Tennis/TennisGame3.m @@ -9,6 +9,47 @@ #import "TennisGame3.h" -@implementation TennisGame3 +@interface TennisGame3 () +@end + +@implementation TennisGame3 { + int p1; + int p2; + NSString *p1N; + NSString *p2N; +} + +- (id)initWithPlayer1:(NSString *)p1N player2:(NSString *)p2N { + self = [super initWithPlayer1:p1N player2:p2N]; + if (self) { + self->p1N = p1N; + self->p2N = p2N; + p1 = 0; + p2 = 0; + } + return self; +} + +- (NSString *)score { + NSString *s; + if (p1 < 4 && p2 < 4) { + NSArray* p = @[@"Love", @"Fifteen", @"Thirty", @"Forty"]; + s = p[p1]; + return (p1 == p2) ? [NSString stringWithFormat:@"%@-All",s] : [NSString stringWithFormat:@"%@-%@",s,p[p2]]; + } else { + if (p1 == p2) + return @"Deuce"; + s = p1 > p2 ? p1N : p2N; + return ((p1-p2)*(p1-p2) == 1) ? [NSString stringWithFormat:@"Advantage %@",s] : [NSString stringWithFormat:@"Win for %@",s]; + } +} + +- (void)wonPoint:(NSString *)playerName { + if ([playerName isEqualToString:@"player1"]) + p1 += 1; + else + p2 += 1; +} + @end \ No newline at end of file From aeb8c878d03a9d500c368ed6c6056ba2898ec2f8 Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 20:12:57 +0200 Subject: [PATCH 06/14] Converted to parametrized test; not as nice as it ought to be, but not exactly easy using OCUnit... --- Tennis/objc/.idea/workspace.xml | 63 +++++++++--------- Tennis/objc/TennisTests/TennisTests.h | 1 + Tennis/objc/TennisTests/TennisTests.m | 94 ++++++++++++++++----------- 3 files changed, 87 insertions(+), 71 deletions(-) diff --git a/Tennis/objc/.idea/workspace.xml b/Tennis/objc/.idea/workspace.xml index 2aef8bcb..6a966889 100644 --- a/Tennis/objc/.idea/workspace.xml +++ b/Tennis/objc/.idea/workspace.xml @@ -2,17 +2,13 @@ - - - - - - + + - + @@ -24,6 +20,7 @@ + - - - - - - - @@ -445,15 +435,6 @@ - - - - - - - - - @@ -463,11 +444,27 @@ - + + + + + + + + + + + + + + + + + diff --git a/Tennis/objc/TennisTests/TennisTests.h b/Tennis/objc/TennisTests/TennisTests.h index da3b0004..dda29b8a 100644 --- a/Tennis/objc/TennisTests/TennisTests.h +++ b/Tennis/objc/TennisTests/TennisTests.h @@ -10,4 +10,5 @@ @interface TennisTests : SenTestCase +- (id)initWithInvocation:(NSInvocation *)invocation scores:(NSArray *)scores; @end diff --git a/Tennis/objc/TennisTests/TennisTests.m b/Tennis/objc/TennisTests/TennisTests.m index 0f616d5b..f1c0c112 100644 --- a/Tennis/objc/TennisTests/TennisTests.m +++ b/Tennis/objc/TennisTests/TennisTests.m @@ -18,18 +18,15 @@ NSString *expectedScore; } -- (void)setUp -{ - [super setUp]; - - // Set-up code here. -} ++ (id)defaultTestSuite { + SenTestSuite *testSuite = [[SenTestSuite alloc] initWithName:NSStringFromClass(self)]; -- (void)tearDown -{ - // Tear-down code here. - - [super tearDown]; + NSArray *allScores = [self allScores]; + for (NSArray *scores in allScores) { + [self addTestWithScores:scores toTestSuite:testSuite]; + } + + return testSuite; } + (NSArray*)allScores { @@ -75,6 +72,48 @@ ]; } ++ (void)addTestWithScores:(NSArray *)scores toTestSuite:(SenTestSuite *)testSuite { + NSArray *testInvocations = [self testInvocations]; + for (NSInvocation *testInvocation in testInvocations) { + + // Create a new instance of our test case for each method found using the given set of parameters. + SenTestCase *test = [[TennisTests alloc] initWithInvocation:testInvocation + scores:scores]; + + // Add the new test instance to the suite. The OCUnit framework eventually executes the entire test suite. + [testSuite addTest:test]; + } +} + +- (NSString *)name { + return [NSString stringWithFormat:@"%@ (%d,%d,%@)", [super name], player1Score, player2Score, expectedScore]; +} + + +- (id)initWithInvocation:(NSInvocation *)invocation scores:(NSArray *)scores { + self = [super initWithInvocation:invocation]; + if (self) { + player1Score = [scores[0] intValue]; + player2Score = [scores[1] intValue]; + expectedScore = scores[2]; + } + return self; +} + +- (void)setUp +{ + [super setUp]; + + // Set-up code here. +} + +- (void)tearDown +{ + // Tear-down code here. + + [super tearDown]; +} + - (void)checkAllScoresForGame:(TennisGame *)game { int highestScore = MAX(player1Score, player2Score); for (int i = 0; i < highestScore; i++) { @@ -87,39 +126,18 @@ } - (void)testAllScoresTennisGame1 { - for (NSArray * score in [TennisTests allScores]) { - - player1Score = [score[0] intValue]; - player2Score = [score[1] intValue]; - expectedScore = score[2]; - - TennisGame1 * game = [[TennisGame1 alloc] initWithPlayer1:@"player1" player2:@"player2"]; - [self checkAllScoresForGame:game]; - } + TennisGame1 * game = [[TennisGame1 alloc] initWithPlayer1:@"player1" player2:@"player2"]; + [self checkAllScoresForGame:game]; } - (void)testAllScoresTennisGame2 { - for (NSArray * score in [TennisTests allScores]) { - - player1Score = [score[0] intValue]; - player2Score = [score[1] intValue]; - expectedScore = score[2]; - - TennisGame2 * game = [[TennisGame2 alloc] initWithPlayer1:@"player1" player2:@"player2"]; - [self checkAllScoresForGame:game]; - } + TennisGame2 * game = [[TennisGame2 alloc] initWithPlayer1:@"player1" player2:@"player2"]; + [self checkAllScoresForGame:game]; } - (void)testAllScoresTennisGame3 { - for (NSArray * score in [TennisTests allScores]) { - - player1Score = [score[0] intValue]; - player2Score = [score[1] intValue]; - expectedScore = score[2]; - - TennisGame3 * game = [[TennisGame3 alloc] initWithPlayer1:@"player1" player2:@"player2"]; - [self checkAllScoresForGame:game]; - } + TennisGame3 * game = [[TennisGame3 alloc] initWithPlayer1:@"player1" player2:@"player2"]; + [self checkAllScoresForGame:game]; } @end From 248c53b44503c72fa7e34cd52e58bbecacafea9c Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 20:26:35 +0200 Subject: [PATCH 07/14] Refactored test so that parametrized part is separated better and more explicit --- Tennis/objc/.idea/workspace.xml | 37 +++++++-------- Tennis/objc/TennisTests/TennisTests.m | 65 +++++++++++---------------- 2 files changed, 42 insertions(+), 60 deletions(-) diff --git a/Tennis/objc/.idea/workspace.xml b/Tennis/objc/.idea/workspace.xml index 6a966889..71136a7c 100644 --- a/Tennis/objc/.idea/workspace.xml +++ b/Tennis/objc/.idea/workspace.xml @@ -2,19 +2,19 @@ - + - + - + @@ -49,21 +49,13 @@ - - - - - - - - - - + + @@ -319,7 +311,7 @@ - + @@ -400,13 +392,6 @@ - - - - - - - @@ -456,11 +441,19 @@ + + + + + + + - + + diff --git a/Tennis/objc/TennisTests/TennisTests.m b/Tennis/objc/TennisTests/TennisTests.m index f1c0c112..6a4a2ea1 100644 --- a/Tennis/objc/TennisTests/TennisTests.m +++ b/Tennis/objc/TennisTests/TennisTests.m @@ -12,24 +12,41 @@ #import "TennisGame2.h" #import "TennisGame3.h" -@implementation TennisTests { - int player1Score; - int player2Score; - NSString *expectedScore; -} - +@interface TennisTests (Parametrized) ++ (NSArray*)parameters; +@end +@implementation TennisTests (Parametrized) + (id)defaultTestSuite { SenTestSuite *testSuite = [[SenTestSuite alloc] initWithName:NSStringFromClass(self)]; - NSArray *allScores = [self allScores]; + NSArray *allScores = [self parameters]; for (NSArray *scores in allScores) { [self addTestWithScores:scores toTestSuite:testSuite]; } return testSuite; } ++ (void)addTestWithScores:(NSArray *)scores toTestSuite:(SenTestSuite *)testSuite { + NSArray *testInvocations = [self testInvocations]; + for (NSInvocation *testInvocation in testInvocations) { -+ (NSArray*)allScores { + // Create a new instance of our test case for each method found using the given set of parameters. + SenTestCase *test = [[TennisTests alloc] initWithInvocation:testInvocation + scores:scores]; + + // Add the new test instance to the suite. The OCUnit framework eventually executes the entire test suite. + [testSuite addTest:test]; + } +} +@end + +@implementation TennisTests { + int player1Score; + int player2Score; + NSString *expectedScore; +} + ++ (NSArray*)parameters { return @[ @[ @0, @0, @"Love-All"], @[ @1, @1, @"Fifteen-All"], @@ -72,24 +89,6 @@ ]; } -+ (void)addTestWithScores:(NSArray *)scores toTestSuite:(SenTestSuite *)testSuite { - NSArray *testInvocations = [self testInvocations]; - for (NSInvocation *testInvocation in testInvocations) { - - // Create a new instance of our test case for each method found using the given set of parameters. - SenTestCase *test = [[TennisTests alloc] initWithInvocation:testInvocation - scores:scores]; - - // Add the new test instance to the suite. The OCUnit framework eventually executes the entire test suite. - [testSuite addTest:test]; - } -} - -- (NSString *)name { - return [NSString stringWithFormat:@"%@ (%d,%d,%@)", [super name], player1Score, player2Score, expectedScore]; -} - - - (id)initWithInvocation:(NSInvocation *)invocation scores:(NSArray *)scores { self = [super initWithInvocation:invocation]; if (self) { @@ -100,18 +99,8 @@ return self; } -- (void)setUp -{ - [super setUp]; - - // Set-up code here. -} - -- (void)tearDown -{ - // Tear-down code here. - - [super tearDown]; +- (NSString *)name { + return [NSString stringWithFormat:@"%@ (%d,%d,%@)", [super name], player1Score, player2Score, expectedScore]; } - (void)checkAllScoresForGame:(TennisGame *)game { From a1af5052304bdcec4ef6f7c69848ef0092a85376 Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 20:39:28 +0200 Subject: [PATCH 08/14] Fixed compiler warnings. --- Tennis/objc/Tennis/TennisGame3.m | 8 ++++---- Tennis/objc/TennisTests/TennisTests.m | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Tennis/objc/Tennis/TennisGame3.m b/Tennis/objc/Tennis/TennisGame3.m index bf12e6c2..bba66c0b 100644 --- a/Tennis/objc/Tennis/TennisGame3.m +++ b/Tennis/objc/Tennis/TennisGame3.m @@ -19,11 +19,11 @@ NSString *p2N; } -- (id)initWithPlayer1:(NSString *)p1N player2:(NSString *)p2N { - self = [super initWithPlayer1:p1N player2:p2N]; +- (id)initWithPlayer1:(NSString *)ap1N player2:(NSString *)ap2N { + self = [super initWithPlayer1:ap1N player2:ap2N]; if (self) { - self->p1N = p1N; - self->p2N = p2N; + p1N = ap1N; + p2N = ap2N; p1 = 0; p2 = 0; } diff --git a/Tennis/objc/TennisTests/TennisTests.m b/Tennis/objc/TennisTests/TennisTests.m index 6a4a2ea1..d8af05d4 100644 --- a/Tennis/objc/TennisTests/TennisTests.m +++ b/Tennis/objc/TennisTests/TennisTests.m @@ -12,9 +12,10 @@ #import "TennisGame2.h" #import "TennisGame3.h" -@interface TennisTests (Parametrized) +@interface TennisTests() + (NSArray*)parameters; @end + @implementation TennisTests (Parametrized) + (id)defaultTestSuite { SenTestSuite *testSuite = [[SenTestSuite alloc] initWithName:NSStringFromClass(self)]; @@ -100,7 +101,7 @@ } - (NSString *)name { - return [NSString stringWithFormat:@"%@ (%d,%d,%@)", [super name], player1Score, player2Score, expectedScore]; + return [[super name] stringByReplacingOccurrencesOfString:@"]" withString:[NSString stringWithFormat:@" (%d,%d,%@)]", player1Score, player2Score, expectedScore]]; } - (void)checkAllScoresForGame:(TennisGame *)game { From de7b01b93d646b1c7def76998eb0d7d5303d6caf Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 20:42:03 +0200 Subject: [PATCH 09/14] Converted schemes to shared schemes --- .../objc/.idea/runConfigurations/Tennis.xml | 6 ++ .../.idea/runConfigurations/TennisTests.xml | 8 ++ Tennis/objc/.idea/workspace.xml | 83 ++++++++++++------ .../UserInterfaceState.xcuserstate | Bin 43766 -> 51605 bytes .../xcshareddata/xcschemes/Tennis.xcscheme | 67 ++++++++++++++ .../xcschemes/TennisTests.xcscheme | 68 ++++++++++++++ .../xcschemes/Tennis.xcscheme | 31 ------- .../xcschemes/TennisTests.xcscheme | 36 -------- 8 files changed, 206 insertions(+), 93 deletions(-) create mode 100644 Tennis/objc/.idea/runConfigurations/Tennis.xml create mode 100644 Tennis/objc/.idea/runConfigurations/TennisTests.xml create mode 100644 Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/Tennis.xcscheme create mode 100644 Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/TennisTests.xcscheme delete mode 100644 Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/Tennis.xcscheme delete mode 100644 Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/TennisTests.xcscheme diff --git a/Tennis/objc/.idea/runConfigurations/Tennis.xml b/Tennis/objc/.idea/runConfigurations/Tennis.xml new file mode 100644 index 00000000..644cad5a --- /dev/null +++ b/Tennis/objc/.idea/runConfigurations/Tennis.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Tennis/objc/.idea/runConfigurations/TennisTests.xml b/Tennis/objc/.idea/runConfigurations/TennisTests.xml new file mode 100644 index 00000000..3ff9a46c --- /dev/null +++ b/Tennis/objc/.idea/runConfigurations/TennisTests.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Tennis/objc/.idea/workspace.xml b/Tennis/objc/.idea/workspace.xml index 71136a7c..ba913035 100644 --- a/Tennis/objc/.idea/workspace.xml +++ b/Tennis/objc/.idea/workspace.xml @@ -2,7 +2,13 @@ - + + + + + + + @@ -14,7 +20,7 @@ - + @@ -52,10 +58,9 @@ - + - @@ -187,7 +192,6 @@ - @@ -230,24 +234,21 @@ + - - + + - + - - - - @@ -256,21 +257,10 @@ - - - - - - - - - - - @@ -311,7 +301,7 @@ - + @@ -385,6 +375,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -450,10 +482,9 @@ - + - diff --git a/Tennis/objc/Tennis.xcodeproj/project.xcworkspace/xcuserdata/stefan.xcuserdatad/UserInterfaceState.xcuserstate b/Tennis/objc/Tennis.xcodeproj/project.xcworkspace/xcuserdata/stefan.xcuserdatad/UserInterfaceState.xcuserstate index b2a6d28ac9a0c4a37223569a99f8c29668a1775e..ee9f78edf396f0812fbc1c32cf9def9fe9e8dc11 100644 GIT binary patch literal 51605 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 XTo*6=*S{nr{L3WSf4b^F#Ebp`t^Ai9 delta 17487 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 RP*n3Lbw=~&!2f&W{}09E=yd=9 diff --git a/Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/Tennis.xcscheme b/Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/Tennis.xcscheme new file mode 100644 index 00000000..e7d3f264 --- /dev/null +++ b/Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/Tennis.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/TennisTests.xcscheme b/Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/TennisTests.xcscheme new file mode 100644 index 00000000..b42dc928 --- /dev/null +++ b/Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/TennisTests.xcscheme @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/Tennis.xcscheme b/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/Tennis.xcscheme deleted file mode 100644 index aef7d155..00000000 --- a/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/Tennis.xcscheme +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/TennisTests.xcscheme b/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/TennisTests.xcscheme deleted file mode 100644 index c7270ce6..00000000 --- a/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/TennisTests.xcscheme +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - From 7b102278c182f24cb7b9570c0760069bf46d055d Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 20:50:36 +0200 Subject: [PATCH 10/14] Added Objective-C version of Tennis to README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18fc3dee..48d83c49 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ This is a collection of starting files for when practicing refactoring. Contents so far: -- Tennis Kata in Java, Python and C++. +- Tennis Kata in Java, Python, Objective-C and C++. - Gilded Rose Kata in C++, C#, Java, Python, Smalltalk, C and Ruby. (a C# version together with a starting project is already available on github [here](https://github.com/NotMyself/GildedRose)) - Yahtzee Kata in C#, Java, C++ and Python (the C#, C++ and Java versions are also available in Jon Jagger's Cyberdojo, see [his blog post](http://jonjagger.blogspot.co.uk/2012/05/yahtzee-cyber-dojo-refactoring-in-java.html)) From cb1dd8db19bbd3a715a2b44b9593a01ef8bb9e42 Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 21:12:46 +0200 Subject: [PATCH 11/14] Stripped the project to the bare minimum --- .../objc/.idea/runConfigurations/Tennis.xml | 6 - Tennis/objc/.idea/workspace.xml | 75 +++--- Tennis/objc/Tennis.xcodeproj/project.pbxproj | 214 +----------------- .../UserInterfaceState.xcuserstate | Bin 51605 -> 0 bytes .../xcshareddata/xcschemes/Tennis.xcscheme | 67 ------ .../xcschemes/xcschememanagement.plist | 19 -- Tennis/objc/Tennis/AppDelegate.h | 15 -- Tennis/objc/Tennis/AppDelegate.m | 51 ----- Tennis/objc/Tennis/Default-568h@2x.png | Bin 18594 -> 0 bytes Tennis/objc/Tennis/Default.png | Bin 6540 -> 0 bytes Tennis/objc/Tennis/Default@2x.png | Bin 16107 -> 0 bytes Tennis/objc/Tennis/Tennis-Info.plist | 52 ----- Tennis/objc/Tennis/Tennis-Prefix.pch | 16 -- Tennis/objc/Tennis/ViewController.h | 13 -- Tennis/objc/Tennis/ViewController.m | 29 --- Tennis/objc/Tennis/en.lproj/InfoPlist.strings | 1 - .../en.lproj/MainStoryboard_iPad.storyboard | 26 --- .../en.lproj/MainStoryboard_iPhone.storyboard | 26 --- Tennis/objc/Tennis/main.m | 19 -- .../objc/TennisTests/TennisTests-Info.plist | 25 -- .../TennisTests/en.lproj/InfoPlist.strings | 1 - 21 files changed, 40 insertions(+), 615 deletions(-) delete mode 100644 Tennis/objc/.idea/runConfigurations/Tennis.xml delete mode 100644 Tennis/objc/Tennis.xcodeproj/project.xcworkspace/xcuserdata/stefan.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/Tennis.xcscheme delete mode 100644 Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 Tennis/objc/Tennis/AppDelegate.h delete mode 100644 Tennis/objc/Tennis/AppDelegate.m delete mode 100644 Tennis/objc/Tennis/Default-568h@2x.png delete mode 100644 Tennis/objc/Tennis/Default.png delete mode 100644 Tennis/objc/Tennis/Default@2x.png delete mode 100644 Tennis/objc/Tennis/Tennis-Info.plist delete mode 100644 Tennis/objc/Tennis/Tennis-Prefix.pch delete mode 100644 Tennis/objc/Tennis/ViewController.h delete mode 100644 Tennis/objc/Tennis/ViewController.m delete mode 100644 Tennis/objc/Tennis/en.lproj/InfoPlist.strings delete mode 100644 Tennis/objc/Tennis/en.lproj/MainStoryboard_iPad.storyboard delete mode 100644 Tennis/objc/Tennis/en.lproj/MainStoryboard_iPhone.storyboard delete mode 100644 Tennis/objc/Tennis/main.m delete mode 100644 Tennis/objc/TennisTests/TennisTests-Info.plist delete mode 100644 Tennis/objc/TennisTests/en.lproj/InfoPlist.strings diff --git a/Tennis/objc/.idea/runConfigurations/Tennis.xml b/Tennis/objc/.idea/runConfigurations/Tennis.xml deleted file mode 100644 index 644cad5a..00000000 --- a/Tennis/objc/.idea/runConfigurations/Tennis.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Tennis/objc/.idea/workspace.xml b/Tennis/objc/.idea/workspace.xml index ba913035..316f8209 100644 --- a/Tennis/objc/.idea/workspace.xml +++ b/Tennis/objc/.idea/workspace.xml @@ -2,14 +2,25 @@ - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -20,7 +31,7 @@ - + @@ -58,7 +69,7 @@ - + @@ -75,15 +86,6 @@ - - - - - - - - - @@ -192,6 +194,7 @@ + @@ -234,19 +237,18 @@ - - - + + - + @@ -257,9 +259,8 @@ - + - @@ -297,11 +298,11 @@ - + - + @@ -375,9 +376,16 @@ - + - + + + + + + + + @@ -452,13 +460,6 @@ - - - - - - - @@ -482,7 +483,7 @@ - + diff --git a/Tennis/objc/Tennis.xcodeproj/project.pbxproj b/Tennis/objc/Tennis.xcodeproj/project.pbxproj index 75b49e29..a834059a 100644 --- a/Tennis/objc/Tennis.xcodeproj/project.pbxproj +++ b/Tennis/objc/Tennis.xcodeproj/project.pbxproj @@ -7,75 +7,32 @@ objects = { /* Begin PBXBuildFile section */ - CACF6054BE77230ECBA65619 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CACF6C2CA2AA72E014F657D0 /* Default@2x.png */; }; - CACF613C20408597F536B6B1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6759046CDA8835BDE4B2 /* ViewController.m */; }; - CACF61C5886ADB1487CE8336 /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CACF644334B42B9407948B3F /* MainStoryboard_iPad.storyboard */; }; - CACF62EF6247A6D2018763C1 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = CACF6ACB8808C4FCB94FF29C /* Default.png */; }; - CACF6358C3384B35EAF90119 /* TennisGame.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF649AAFA398A61A600CB7 /* TennisGame.m */; }; CACF63F14142F5803F786695 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF69F4ABB8AC23884C74C3 /* Foundation.framework */; }; CACF6414A388566B43A9BCB5 /* TennisGame.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF649AAFA398A61A600CB7 /* TennisGame.m */; }; - CACF65812FE6C904337ABA28 /* TennisGame3.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6BAD45E82D978466F92B /* TennisGame3.m */; }; CACF66A873EB3C4C2A1B7D78 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF6C52F7301D6A288FECCA /* UIKit.framework */; }; - CACF674F504168629BDEF151 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CACF6B0DF95E878216995989 /* InfoPlist.strings */; }; - CACF677C41A1432B7A28BA4B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF61291A7012C7769FCE61 /* CoreGraphics.framework */; }; - CACF6788162E934967B8E957 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CACF6949C1475F308096D3C1 /* InfoPlist.strings */; }; - CACF6851862FECD0A333A400 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF6C52F7301D6A288FECCA /* UIKit.framework */; }; CACF6871FE27A26189B71C29 /* TennisGame1.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6BF242B4F5F91193BEC7 /* TennisGame1.m */; }; - CACF68DE17C3FF57501B8E7C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6E1F321CCC9D9CC8F04E /* AppDelegate.m */; }; CACF68FFD67D0173EDF11BF4 /* TennisTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6D897D4F49BCD1B41947 /* TennisTests.m */; }; - CACF69C81388A5BE7690528D /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CACF6EE7BED3428159FF4EEC /* MainStoryboard_iPhone.storyboard */; }; - CACF69FD20BB16907B25C317 /* TennisGame2.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF64EDAB086A5F18E393EE /* TennisGame2.m */; }; CACF6C5876E4687F7A65AF54 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF6A13AA71A254E309FB03 /* SenTestingKit.framework */; }; - CACF6CEF4B8FF37159571CA9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF69F4ABB8AC23884C74C3 /* Foundation.framework */; }; - CACF6D696940933251B2AE37 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CACF61BEC34F59AE310970BC /* Default-568h@2x.png */; }; CACF6E1993921B2EC1995F0E /* TennisGame2.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF64EDAB086A5F18E393EE /* TennisGame2.m */; }; CACF6F3B5CEDAF9DFE1B8A64 /* TennisGame3.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6BAD45E82D978466F92B /* TennisGame3.m */; }; - CACF6F6E0354DF7DE228F341 /* TennisGame1.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF6BF242B4F5F91193BEC7 /* TennisGame1.m */; }; - CACF6F7FFC55CDCFB3E02466 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CACF65D0E3A6E15249A3EE3D /* main.m */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - CACF64D89970FF6F7CA17D31 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CACF6DA3161729BC17499E03 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CACF69AD9BF8D87BBC1D0651; - remoteInfo = Tennis; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ - CACF6038910C1AD4943FC708 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; CACF61291A7012C7769FCE61 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - CACF61BEC34F59AE310970BC /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - CACF63DE5D96157326EB9B8B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPad.storyboard; sourceTree = ""; }; CACF6419833B61F7E3D89075 /* TennisGame3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TennisGame3.h; sourceTree = ""; }; CACF649AAFA398A61A600CB7 /* TennisGame.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TennisGame.m; sourceTree = ""; }; - CACF64E5E1F46B45835C2ADD /* TennisTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.info; path = "TennisTests-Info.plist"; sourceTree = ""; }; CACF64EDAB086A5F18E393EE /* TennisGame2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TennisGame2.m; sourceTree = ""; }; - CACF65D0E3A6E15249A3EE3D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; CACF665E8EA24EE215E5498C /* TennisTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TennisTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; - CACF666E98D511A74FA3D675 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - CACF66D0CE7C0E01036D6AB1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - CACF6759046CDA8835BDE4B2 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; CACF6771858FAF6F6F4650A6 /* TennisGame2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TennisGame2.h; sourceTree = ""; }; - CACF6933BDBCFF02099B5751 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPhone.storyboard; sourceTree = ""; }; CACF69F4ABB8AC23884C74C3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; CACF6A13AA71A254E309FB03 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; CACF6A4205D54CCF3AEA2B65 /* TennisTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TennisTests.h; sourceTree = ""; }; CACF6A964A59A72222255B2C /* TennisGame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TennisGame.h; sourceTree = ""; }; - CACF6ACB8808C4FCB94FF29C /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; - CACF6B79FE846441B027773F /* Tennis.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tennis.app; sourceTree = BUILT_PRODUCTS_DIR; }; CACF6B7F36643E0787BABC39 /* TennisGame1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TennisGame1.h; sourceTree = ""; }; CACF6BAD45E82D978466F92B /* TennisGame3.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TennisGame3.m; sourceTree = ""; }; CACF6BF242B4F5F91193BEC7 /* TennisGame1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TennisGame1.m; sourceTree = ""; }; - CACF6C2CA2AA72E014F657D0 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; CACF6C52F7301D6A288FECCA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - CACF6C703FB825FF8A0C6279 /* Tennis-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tennis-Prefix.pch"; sourceTree = ""; }; - CACF6D690AB9C997BD1CD8AF /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; CACF6D897D4F49BCD1B41947 /* TennisTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TennisTests.m; sourceTree = ""; }; - CACF6E1F321CCC9D9CC8F04E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - CACF6E515082A06CBCF4B49E /* Tennis-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.info; path = "Tennis-Info.plist"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -89,16 +46,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CACF6C21FB96D257A9D51B69 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CACF6851862FECD0A333A400 /* UIKit.framework in Frameworks */, - CACF6CEF4B8FF37159571CA9 /* Foundation.framework in Frameworks */, - CACF677C41A1432B7A28BA4B /* CoreGraphics.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -116,56 +63,25 @@ CACF652B01231CADE96100D1 = { isa = PBXGroup; children = ( - CACF6E7D48293F4D43E7A6DC /* Products */, - CACF60033C37E3B5C11CC734 /* Frameworks */, CACF67CF0393B97F4DC41E0B /* Tennis */, CACF65D28A08CBB9A2C540F5 /* TennisTests */, + CACF6E7D48293F4D43E7A6DC /* Products */, + CACF60033C37E3B5C11CC734 /* Frameworks */, ); sourceTree = ""; }; - CACF65B550EA0B25FDCB4734 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - CACF6E515082A06CBCF4B49E /* Tennis-Info.plist */, - CACF6B0DF95E878216995989 /* InfoPlist.strings */, - CACF65D0E3A6E15249A3EE3D /* main.m */, - CACF6C703FB825FF8A0C6279 /* Tennis-Prefix.pch */, - CACF6ACB8808C4FCB94FF29C /* Default.png */, - CACF6C2CA2AA72E014F657D0 /* Default@2x.png */, - CACF61BEC34F59AE310970BC /* Default-568h@2x.png */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; CACF65D28A08CBB9A2C540F5 /* TennisTests */ = { isa = PBXGroup; children = ( - CACF67238D0948836603B9CC /* Supporting Files */, CACF6A4205D54CCF3AEA2B65 /* TennisTests.h */, CACF6D897D4F49BCD1B41947 /* TennisTests.m */, ); path = TennisTests; sourceTree = ""; }; - CACF67238D0948836603B9CC /* Supporting Files */ = { - isa = PBXGroup; - children = ( - CACF64E5E1F46B45835C2ADD /* TennisTests-Info.plist */, - CACF6949C1475F308096D3C1 /* InfoPlist.strings */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; CACF67CF0393B97F4DC41E0B /* Tennis */ = { isa = PBXGroup; children = ( - CACF65B550EA0B25FDCB4734 /* Supporting Files */, - CACF6D690AB9C997BD1CD8AF /* AppDelegate.h */, - CACF6E1F321CCC9D9CC8F04E /* AppDelegate.m */, - CACF6EE7BED3428159FF4EEC /* MainStoryboard_iPhone.storyboard */, - CACF644334B42B9407948B3F /* MainStoryboard_iPad.storyboard */, - CACF6038910C1AD4943FC708 /* ViewController.h */, - CACF6759046CDA8835BDE4B2 /* ViewController.m */, CACF6BF242B4F5F91193BEC7 /* TennisGame1.m */, CACF6B7F36643E0787BABC39 /* TennisGame1.h */, CACF64EDAB086A5F18E393EE /* TennisGame2.m */, @@ -181,7 +97,6 @@ CACF6E7D48293F4D43E7A6DC /* Products */ = { isa = PBXGroup; children = ( - CACF6B79FE846441B027773F /* Tennis.app */, CACF665E8EA24EE215E5498C /* TennisTests.octest */, ); name = Products; @@ -190,23 +105,6 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - CACF69AD9BF8D87BBC1D0651 /* Tennis */ = { - isa = PBXNativeTarget; - buildConfigurationList = CACF65DD48552DE493A07E65 /* Build configuration list for PBXNativeTarget "Tennis" */; - buildPhases = ( - CACF61DDF5747486E9A2F79B /* Sources */, - CACF6C21FB96D257A9D51B69 /* Frameworks */, - CACF6261741B7D6FD198B4AD /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Tennis; - productName = Tennis; - productReference = CACF6B79FE846441B027773F /* Tennis.app */; - productType = "com.apple.product-type.application"; - }; CACF6DE0B90C4D92A2B3D5E6 /* TennisTests */ = { isa = PBXNativeTarget; buildConfigurationList = CACF68FD0CC2343E15B3AA80 /* Build configuration list for PBXNativeTarget "TennisTests" */; @@ -219,7 +117,6 @@ buildRules = ( ); dependencies = ( - CACF606BA95A02CF011B86A5 /* PBXTargetDependency */, ); name = TennisTests; productName = TennisTests; @@ -246,31 +143,16 @@ projectDirPath = ""; projectRoot = ""; targets = ( - CACF69AD9BF8D87BBC1D0651 /* Tennis */, CACF6DE0B90C4D92A2B3D5E6 /* TennisTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - CACF6261741B7D6FD198B4AD /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CACF674F504168629BDEF151 /* InfoPlist.strings in Resources */, - CACF62EF6247A6D2018763C1 /* Default.png in Resources */, - CACF6054BE77230ECBA65619 /* Default@2x.png in Resources */, - CACF6D696940933251B2AE37 /* Default-568h@2x.png in Resources */, - CACF69C81388A5BE7690528D /* MainStoryboard_iPhone.storyboard in Resources */, - CACF61C5886ADB1487CE8336 /* MainStoryboard_iPad.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; CACF6814909F4B826FA2E0CA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - CACF6788162E934967B8E957 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -293,20 +175,6 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - CACF61DDF5747486E9A2F79B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CACF6F7FFC55CDCFB3E02466 /* main.m in Sources */, - CACF68DE17C3FF57501B8E7C /* AppDelegate.m in Sources */, - CACF613C20408597F536B6B1 /* ViewController.m in Sources */, - CACF6F6E0354DF7DE228F341 /* TennisGame1.m in Sources */, - CACF69FD20BB16907B25C317 /* TennisGame2.m in Sources */, - CACF65812FE6C904337ABA28 /* TennisGame3.m in Sources */, - CACF6358C3384B35EAF90119 /* TennisGame.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; CACF6FE60766CDED5F49C391 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -321,49 +189,6 @@ }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - CACF606BA95A02CF011B86A5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = CACF69AD9BF8D87BBC1D0651 /* Tennis */; - targetProxy = CACF64D89970FF6F7CA17D31 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - CACF644334B42B9407948B3F /* MainStoryboard_iPad.storyboard */ = { - isa = PBXVariantGroup; - children = ( - CACF63DE5D96157326EB9B8B /* en */, - ); - name = MainStoryboard_iPad.storyboard; - sourceTree = ""; - }; - CACF6949C1475F308096D3C1 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - CACF666E98D511A74FA3D675 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - CACF6B0DF95E878216995989 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - CACF66D0CE7C0E01036D6AB1 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - CACF6EE7BED3428159FF4EEC /* MainStoryboard_iPhone.storyboard */ = { - isa = PBXVariantGroup; - children = ( - CACF6933BDBCFF02099B5751 /* en */, - ); - name = MainStoryboard_iPhone.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ CACF601C65BCC0FBE3D880E3 /* Release */ = { isa = XCBuildConfiguration; @@ -374,8 +199,6 @@ "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Tennis/Tennis-Prefix.pch"; - INFOPLIST_FILE = "TennisTests/TennisTests-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = ""; WRAPPER_EXTENSION = octest; @@ -408,28 +231,6 @@ }; name = Release; }; - CACF655D7424F77B76941FBC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Tennis/Tennis-Prefix.pch"; - INFOPLIST_FILE = "Tennis/Tennis-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - CACF681D75AD23FC2F298299 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Tennis/Tennis-Prefix.pch"; - INFOPLIST_FILE = "Tennis/Tennis-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; CACF6A641D1372E5C5478EB2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -439,8 +240,6 @@ "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Tennis/Tennis-Prefix.pch"; - INFOPLIST_FILE = "TennisTests/TennisTests-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = ""; WRAPPER_EXTENSION = octest; @@ -482,15 +281,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - CACF65DD48552DE493A07E65 /* Build configuration list for PBXNativeTarget "Tennis" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CACF681D75AD23FC2F298299 /* Release */, - CACF655D7424F77B76941FBC /* Debug */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; CACF68FD0CC2343E15B3AA80 /* Build configuration list for PBXNativeTarget "TennisTests" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Tennis/objc/Tennis.xcodeproj/project.xcworkspace/xcuserdata/stefan.xcuserdatad/UserInterfaceState.xcuserstate b/Tennis/objc/Tennis.xcodeproj/project.xcworkspace/xcuserdata/stefan.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index ee9f78edf396f0812fbc1c32cf9def9fe9e8dc11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51605 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 XTo*6=*S{nr{L3WSf4b^F#Ebp`t^Ai9 diff --git a/Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/Tennis.xcscheme b/Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/Tennis.xcscheme deleted file mode 100644 index e7d3f264..00000000 --- a/Tennis/objc/Tennis.xcodeproj/xcshareddata/xcschemes/Tennis.xcscheme +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/xcschememanagement.plist b/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 8119a10a..00000000 --- a/Tennis/objc/Tennis.xcodeproj/xcuserdata/stefan.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,19 +0,0 @@ - - - - - SuppressBuildableAutocreation - - CACF69AD9BF8D87BBC1D0651 - - primary - - - CACF6DE0B90C4D92A2B3D5E6 - - primary - - - - - diff --git a/Tennis/objc/Tennis/AppDelegate.h b/Tennis/objc/Tennis/AppDelegate.h deleted file mode 100644 index 8dfe9bd5..00000000 --- a/Tennis/objc/Tennis/AppDelegate.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// AppDelegate.h -// Tennis -// -// Created by Stefan on 05/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/AppDelegate.m b/Tennis/objc/Tennis/AppDelegate.m deleted file mode 100644 index 8712b784..00000000 --- a/Tennis/objc/Tennis/AppDelegate.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// AppDelegate.m -// Tennis -// -// Created by Stefan on 05/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// - -#import "AppDelegate.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - // Override point for customization after application launch. - return YES; -} - -- (void)applicationWillResignActive:(UIApplication *)application -{ - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - -} - -- (void)applicationDidEnterBackground:(UIApplication *)application -{ - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - -} - -- (void)applicationWillEnterForeground:(UIApplication *)application -{ - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. - -} - -- (void)applicationDidBecomeActive:(UIApplication *)application -{ - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - -} - -- (void)applicationWillTerminate:(UIApplication *)application -{ - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - -} - -@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/Default-568h@2x.png b/Tennis/objc/Tennis/Default-568h@2x.png deleted file mode 100644 index 0891b7aabfcf3422423b109c8beed2bab838c607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18594 zcmeI4X;f257Jx&9fS`ixvS;&$x8J@slQFSel)6zJN=?13FB7H(lQjRkSy8x_-S~tvu2gzn1oS+dLcF#eqtq$ z%tf9TTvX?`)R@}3uBI;jzS-=ZR-Td&MHaS&;!0?Ni*#$#`n*~CcQK)Q9vAQ~TUpnI!j)a2biYK^R)M~A5wUDZhx?ULMX z3x1P&qt=trOY6P2U67L=m=U?F|5#Uj(eCueNTZaHs_ceWiHeET+j+tp3Jt9g(ekqP z2WOvfR{qV+9r+o4J5?qK>7;;^+I7tGv-i)es$X_D=EoKF+S?zsyj^oRFElP}c}JT< zd8SUs-?O?}2YD#ngKbnHgzHBcboxK_2r9l(?eNCl-pEzkJm}fY?WC*jnS?VBE4EpY zO$fEejz6fU;W2Kl>JeQBZBl-%Irg`obSlg*@4QB;Dd1H7^Oi5wvt4d{RZ!8Og?^aE z)k0$1g+V3fd(gdQ3d&q2q-FL*uy#}|bc^=VhFsl0jBgUGJ+-s3U8MK9A!YJJMxpci z5hJ%|{DwV48fZn0{n5l$N_KcSb#NKE4plB`9I6Zt=Z!~-zw0{9tg$L&Ju1F0X)Cy8 zKF;(&lJ>x)Jw(=;p~sF(Sd9VWGwFE2rnyS9!f^DZ8+aCLq zQ};>lcJ1GDLqjm6Hd>|Eabno@P`~Bn(~6^aD_#yoEH(a?Nm1S<;S+hSxI5d16^<1lEM3NPFi zkqPrpL)+ zgnseFikg`gJVBha1&7C4;O6>h=dt~`ND+;Zd?W(4v2JIb7Pt>Td42%M-Ju-XAH#Pns762L}K3 zDhvsRqN0Ni(1UrishD2YvV?4*h2iFj$+&N||Fn$4n|^NSU+o?~jq`0jVQt8T9l{7b zXiwwODFh2V!Q6sqP9S>WH$oOf$N~=d0-bqTlD61!=`&0eAP-F>XN?*|gtOXX{ zQVTWyYo4ZK0GAw!GHf|pz9`D;-bbb*5LBX*{bnz|+)$@&P9|ORM2o?95{;ejvo&r- zq8cBhTN6nn)7~W>54U)%-F_-b?YKdfk5I8MHcuzBD5)!;yv#Z&R&^y=@=>VTIMy#r zX&U<=BsPkdqcMe<_}2+>H%XKyrr5ZR8_KVe>ZqYN z^=^~TFD};;rHJ$U;{~w^hYojl4hRI@SH$^K{YEo=sg)WY87r!*7blQK&qnpDo0`Vn zkl)9u9g=mCh&ZCJS(L4yN3k0kQ zuvg$h2KEEk51T+O0JQ+r0`R>g{jvqM0Mr6d3qUOZwE!?PI7HY@CE|dr sfw?Q;rAv?G4&^^8-z_>&sWXMxvD*gPOU4CBe-*@OtE+wfmVJNyHv)PfH~;_u diff --git a/Tennis/objc/Tennis/Default.png b/Tennis/objc/Tennis/Default.png deleted file mode 100644 index 4c8ca6f693f96d511e9113c0eb59eec552354e42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6540 zcmeAS@N?(olHy`uVBq!ia0y~yU~~ZD2OMlbkt;o0To@QwR5G2N13aCb6#|O#(=u~X z85k@CTSM>X-wqM6>&y>YB4)1;;ojbLbbV-W^iFB1wa3^zCog^LCAReC4K0-?R_2{6 zrP*)4+_uWUy3w5N52M3PW_}MFMP9a~>YLvVZ1D_k*IMQ2QT^fwzoOb(*3gH$%aYWC zkHmcab=va2<#X%jakpJ;<1@F;k__#bwtC&%^D0v(FBh9K&$sK+<}2RJS609D)17$w ztdQP8(eLM8Ka}m_IQ@3wyMKP)l=oM4-?`YS_*P?4V_ORLPxsj&7Ju#kH;>6^Kp?T7~ zl+q?{UOOqV==?+d{=)5s|M~T1mwtH@+Z^$G&eEO9JNP^AX@3jZ*J*!!>lc|1-W%fA z@AOQpXZ_Lt>rxFXrGp*zLPiW@uo_c7C{As>j zWeX)wi+LTp_)@KYZCX{j;H?|1yXT4DnlS(Fr8gyP5|uaX_gLvaW0ScZdnG7o+u{T6 zFI-%d{ls*WuCDa5UJ@|RXv&ejZe}*BMkiWY51&pnRPw(hlykSzvj6e%mYz-GdvzBD zF10?szF_~!jS=?2HyQuPCvARXAe}C}WP|yQ*>5~~=*Nxq8+HHW1~FMDRCP^TcacKuk$ z(U#REVv)D!PhJ*ecH-ELFUrfyV&*)Z)>UCOuS?yd^L@Afk>ihynYPc{^CRwu+JHX+#$@YsC4c|l0tGigsn@jy) zXD($Ouk>H+V(Mr6NQT0S9BFM~V6nkj;1OBOz`zY;a|<&v%$g$sEJPk;hD4M^`1)8S z=jZArrsOB3>Q&?x097+E*i={nnYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X+g2&U 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 diff --git a/Tennis/objc/Tennis/Tennis-Info.plist b/Tennis/objc/Tennis/Tennis-Info.plist deleted file mode 100644 index a68e4459..00000000 --- a/Tennis/objc/Tennis/Tennis-Info.plist +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - CFBundleIdentifier - com.vandenoord.${PRODUCT_NAME:rfc1034identifier} - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleSignature - ???? - - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleVersion - 1.0 - CFBundleShortVersionString - 1.0 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIMainStoryboardFile - MainStoryboard_iPhone - UIMainStoryboardFile~ipad - MainStoryboard_iPad - - \ No newline at end of file diff --git a/Tennis/objc/Tennis/Tennis-Prefix.pch b/Tennis/objc/Tennis/Tennis-Prefix.pch deleted file mode 100644 index 7cdfcdbe..00000000 --- a/Tennis/objc/Tennis/Tennis-Prefix.pch +++ /dev/null @@ -1,16 +0,0 @@ -// -// Prefix header for all source files of the 'Tennis' target in the 'Tennis' project -// - -#import - -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." -#endif - -#ifdef __OBJC__ - #import - - #import - -#endif \ No newline at end of file diff --git a/Tennis/objc/Tennis/ViewController.h b/Tennis/objc/Tennis/ViewController.h deleted file mode 100644 index 486f5739..00000000 --- a/Tennis/objc/Tennis/ViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ViewController.h -// Tennis -// -// Created by Stefan on 05/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// - -#import - -@interface ViewController : UIViewController - -@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/ViewController.m b/Tennis/objc/Tennis/ViewController.m deleted file mode 100644 index b81b05d3..00000000 --- a/Tennis/objc/Tennis/ViewController.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// ViewController.m -// Tennis -// -// Created by Stefan on 05/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// - -#import "ViewController.h" - -@interface ViewController () - -@end - -@implementation ViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - // Do any additional setup after loading the view, typically from a nib. -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -@end \ No newline at end of file diff --git a/Tennis/objc/Tennis/en.lproj/InfoPlist.strings b/Tennis/objc/Tennis/en.lproj/InfoPlist.strings deleted file mode 100644 index b92732c7..00000000 --- a/Tennis/objc/Tennis/en.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* Localized versions of Info.plist keys */ diff --git a/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPad.storyboard b/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPad.storyboard deleted file mode 100644 index 9fbe23e4..00000000 --- a/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPad.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPhone.storyboard b/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPhone.storyboard deleted file mode 100644 index c9acc6d0..00000000 --- a/Tennis/objc/Tennis/en.lproj/MainStoryboard_iPhone.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Tennis/objc/Tennis/main.m b/Tennis/objc/Tennis/main.m deleted file mode 100644 index 98dc5ec7..00000000 --- a/Tennis/objc/Tennis/main.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// main.m -// Tennis -// -// Created by Stefan on 05/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } - -} \ No newline at end of file diff --git a/Tennis/objc/TennisTests/TennisTests-Info.plist b/Tennis/objc/TennisTests/TennisTests-Info.plist deleted file mode 100644 index a97f5d7f..00000000 --- a/Tennis/objc/TennisTests/TennisTests-Info.plist +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - CFBundleIdentifier - com.vandenoord.${PRODUCT_NAME:rfc1034identifier} - - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - CFBundleDevelopmentRegion - en - CFBundlePackageType - BNDL - CFBundleSignature - ???? - - - \ No newline at end of file diff --git a/Tennis/objc/TennisTests/en.lproj/InfoPlist.strings b/Tennis/objc/TennisTests/en.lproj/InfoPlist.strings deleted file mode 100644 index b92732c7..00000000 --- a/Tennis/objc/TennisTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1 +0,0 @@ -/* Localized versions of Info.plist keys */ From 8a92716cb14d817771090f2e415e2e61f97c1e2c Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 21:17:56 +0200 Subject: [PATCH 12/14] Removed AppCode project files as well --- Tennis/objc/.idea/.name | 1 - Tennis/objc/.idea/Tennis.iml | 11 - Tennis/objc/.idea/encodings.xml | 5 - Tennis/objc/.idea/misc.xml | 5 - Tennis/objc/.idea/modules.xml | 9 - .../.idea/runConfigurations/TennisTests.xml | 8 - Tennis/objc/.idea/scopes/scope_settings.xml | 5 - Tennis/objc/.idea/vcs.xml | 8 - Tennis/objc/.idea/workspace.xml | 495 ------------------ Tennis/objc/.idea/xcode.xml | 5 - 10 files changed, 552 deletions(-) delete mode 100644 Tennis/objc/.idea/.name delete mode 100644 Tennis/objc/.idea/Tennis.iml delete mode 100644 Tennis/objc/.idea/encodings.xml delete mode 100644 Tennis/objc/.idea/misc.xml delete mode 100644 Tennis/objc/.idea/modules.xml delete mode 100644 Tennis/objc/.idea/runConfigurations/TennisTests.xml delete mode 100644 Tennis/objc/.idea/scopes/scope_settings.xml delete mode 100644 Tennis/objc/.idea/vcs.xml delete mode 100644 Tennis/objc/.idea/workspace.xml delete mode 100644 Tennis/objc/.idea/xcode.xml diff --git a/Tennis/objc/.idea/.name b/Tennis/objc/.idea/.name deleted file mode 100644 index 1ef24954..00000000 --- a/Tennis/objc/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -Tennis \ No newline at end of file diff --git a/Tennis/objc/.idea/Tennis.iml b/Tennis/objc/.idea/Tennis.iml deleted file mode 100644 index f9b36de1..00000000 --- a/Tennis/objc/.idea/Tennis.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/Tennis/objc/.idea/encodings.xml b/Tennis/objc/.idea/encodings.xml deleted file mode 100644 index e206d70d..00000000 --- a/Tennis/objc/.idea/encodings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/Tennis/objc/.idea/misc.xml b/Tennis/objc/.idea/misc.xml deleted file mode 100644 index 1162f438..00000000 --- a/Tennis/objc/.idea/misc.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/Tennis/objc/.idea/modules.xml b/Tennis/objc/.idea/modules.xml deleted file mode 100644 index 2ae26e57..00000000 --- a/Tennis/objc/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/Tennis/objc/.idea/runConfigurations/TennisTests.xml b/Tennis/objc/.idea/runConfigurations/TennisTests.xml deleted file mode 100644 index 3ff9a46c..00000000 --- a/Tennis/objc/.idea/runConfigurations/TennisTests.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Tennis/objc/.idea/scopes/scope_settings.xml b/Tennis/objc/.idea/scopes/scope_settings.xml deleted file mode 100644 index 922003b8..00000000 --- a/Tennis/objc/.idea/scopes/scope_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/Tennis/objc/.idea/vcs.xml b/Tennis/objc/.idea/vcs.xml deleted file mode 100644 index a5dd0864..00000000 --- a/Tennis/objc/.idea/vcs.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/Tennis/objc/.idea/workspace.xml b/Tennis/objc/.idea/workspace.xml deleted file mode 100644 index 316f8209..00000000 --- a/Tennis/objc/.idea/workspace.xml +++ /dev/null @@ -1,495 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1370012867256 - 1370012867256 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Tennis/objc/.idea/xcode.xml b/Tennis/objc/.idea/xcode.xml deleted file mode 100644 index b26bf6c9..00000000 --- a/Tennis/objc/.idea/xcode.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - From 1216c9abedf06a746b1126ebb670655718fd9fc4 Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 21:19:49 +0200 Subject: [PATCH 13/14] Ignore all project files --- Tennis/objc/.gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Tennis/objc/.gitignore diff --git a/Tennis/objc/.gitignore b/Tennis/objc/.gitignore new file mode 100644 index 00000000..732b3824 --- /dev/null +++ b/Tennis/objc/.gitignore @@ -0,0 +1,3 @@ +.idea +Tennis.xcodeproj/project.xcworkspace/xcuserdata/* +Tennis.xcodeproj/xcuserdata/* From 3903df6e640f8b628016a9796265edd1aaf58ec9 Mon Sep 17 00:00:00 2001 From: Stefan van den Oord Date: Fri, 31 May 2013 21:26:06 +0200 Subject: [PATCH 14/14] Cleaned up (removed comments etc.) --- Tennis/objc/Tennis/TennisGame.h | 9 --------- Tennis/objc/Tennis/TennisGame.m | 9 --------- Tennis/objc/Tennis/TennisGame1.h | 11 ----------- Tennis/objc/Tennis/TennisGame1.m | 12 ++++-------- Tennis/objc/Tennis/TennisGame2.h | 9 --------- Tennis/objc/Tennis/TennisGame2.m | 9 --------- Tennis/objc/Tennis/TennisGame3.h | 9 --------- Tennis/objc/Tennis/TennisGame3.m | 9 --------- Tennis/objc/TennisTests/TennisTests.h | 9 --------- Tennis/objc/TennisTests/TennisTests.m | 18 +++--------------- 10 files changed, 7 insertions(+), 97 deletions(-) diff --git a/Tennis/objc/Tennis/TennisGame.h b/Tennis/objc/Tennis/TennisGame.h index bca6994b..613d95b4 100644 --- a/Tennis/objc/Tennis/TennisGame.h +++ b/Tennis/objc/Tennis/TennisGame.h @@ -1,14 +1,5 @@ -// -// Created by Stefan on 5/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - - #import - @interface TennisGame : NSObject - (id)initWithPlayer1:(NSString *)player1 player2:(NSString *)player2; diff --git a/Tennis/objc/Tennis/TennisGame.m b/Tennis/objc/Tennis/TennisGame.m index 7a94623f..7462ad08 100644 --- a/Tennis/objc/Tennis/TennisGame.m +++ b/Tennis/objc/Tennis/TennisGame.m @@ -1,15 +1,6 @@ -// -// Created by Stefan on 5/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - -#import "TennisGame3.h" #import "TennisGame.h" - @implementation TennisGame - (id)initWithPlayer1:(NSString *)player1 player2:(NSString *)player2 { return [super init]; } diff --git a/Tennis/objc/Tennis/TennisGame1.h b/Tennis/objc/Tennis/TennisGame1.h index 43cc7e31..87db1ac7 100644 --- a/Tennis/objc/Tennis/TennisGame1.h +++ b/Tennis/objc/Tennis/TennisGame1.h @@ -1,16 +1,5 @@ -// -// Created by Stefan on 5/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - - #import #import "TennisGame.h" - @interface TennisGame1 : TennisGame -@property(nonatomic, copy) NSString *player1; -@property(nonatomic, copy) NSString *player2; @end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame1.m b/Tennis/objc/Tennis/TennisGame1.m index 74965708..99aee340 100644 --- a/Tennis/objc/Tennis/TennisGame1.m +++ b/Tennis/objc/Tennis/TennisGame1.m @@ -1,13 +1,9 @@ -// -// Created by Stefan on 5/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - - #import "TennisGame1.h" +@interface TennisGame1 () +@property(nonatomic, copy) NSString *player1; +@property(nonatomic, copy) NSString *player2; +@end @implementation TennisGame1 { int score1; diff --git a/Tennis/objc/Tennis/TennisGame2.h b/Tennis/objc/Tennis/TennisGame2.h index 23440a1d..4b899985 100644 --- a/Tennis/objc/Tennis/TennisGame2.h +++ b/Tennis/objc/Tennis/TennisGame2.h @@ -1,14 +1,5 @@ -// -// Created by Stefan on 5/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - - #import #import "TennisGame.h" - @interface TennisGame2 : TennisGame @end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame2.m b/Tennis/objc/Tennis/TennisGame2.m index 66112b94..c7ea3310 100644 --- a/Tennis/objc/Tennis/TennisGame2.m +++ b/Tennis/objc/Tennis/TennisGame2.m @@ -1,14 +1,5 @@ -// -// Created by Stefan on 5/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - - #import "TennisGame2.h" - @interface TennisGame2 () @property(nonatomic, copy) NSString *player2Name; @property(nonatomic, copy) NSString *player1Name; diff --git a/Tennis/objc/Tennis/TennisGame3.h b/Tennis/objc/Tennis/TennisGame3.h index 190bfe06..99b4b06d 100644 --- a/Tennis/objc/Tennis/TennisGame3.h +++ b/Tennis/objc/Tennis/TennisGame3.h @@ -1,14 +1,5 @@ -// -// Created by Stefan on 5/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - - #import #import "TennisGame.h" - @interface TennisGame3 : TennisGame @end \ No newline at end of file diff --git a/Tennis/objc/Tennis/TennisGame3.m b/Tennis/objc/Tennis/TennisGame3.m index bba66c0b..d1e67697 100644 --- a/Tennis/objc/Tennis/TennisGame3.m +++ b/Tennis/objc/Tennis/TennisGame3.m @@ -1,14 +1,5 @@ -// -// Created by Stefan on 5/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// -// To change the template use AppCode | Preferences | File Templates. -// - - #import "TennisGame3.h" - @interface TennisGame3 () @end diff --git a/Tennis/objc/TennisTests/TennisTests.h b/Tennis/objc/TennisTests/TennisTests.h index dda29b8a..dcc027a0 100644 --- a/Tennis/objc/TennisTests/TennisTests.h +++ b/Tennis/objc/TennisTests/TennisTests.h @@ -1,14 +1,5 @@ -// -// TennisTests.h -// TennisTests -// -// Created by Stefan on 05/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// - #import @interface TennisTests : SenTestCase - - (id)initWithInvocation:(NSInvocation *)invocation scores:(NSArray *)scores; @end diff --git a/Tennis/objc/TennisTests/TennisTests.m b/Tennis/objc/TennisTests/TennisTests.m index d8af05d4..9fcc6101 100644 --- a/Tennis/objc/TennisTests/TennisTests.m +++ b/Tennis/objc/TennisTests/TennisTests.m @@ -1,11 +1,3 @@ -// -// TennisTests.m -// TennisTests -// -// Created by Stefan on 05/31/13. -// Copyright (c) 2013 Stefan van den Oord. All rights reserved. -// - #import #import "TennisTests.h" #import "TennisGame1.h" @@ -30,12 +22,7 @@ + (void)addTestWithScores:(NSArray *)scores toTestSuite:(SenTestSuite *)testSuite { NSArray *testInvocations = [self testInvocations]; for (NSInvocation *testInvocation in testInvocations) { - - // Create a new instance of our test case for each method found using the given set of parameters. - SenTestCase *test = [[TennisTests alloc] initWithInvocation:testInvocation - scores:scores]; - - // Add the new test instance to the suite. The OCUnit framework eventually executes the entire test suite. + SenTestCase *test = [[TennisTests alloc] initWithInvocation:testInvocation scores:scores]; [testSuite addTest:test]; } } @@ -101,7 +88,8 @@ } - (NSString *)name { - return [[super name] stringByReplacingOccurrencesOfString:@"]" withString:[NSString stringWithFormat:@" (%d,%d,%@)]", player1Score, player2Score, expectedScore]]; + NSString *parametersDescription = [NSString stringWithFormat:@" (%d,%d,%@)]", player1Score, player2Score, expectedScore]; + return [[super name] stringByReplacingOccurrencesOfString:@"]" withString:parametersDescription]; } - (void)checkAllScoresForGame:(TennisGame *)game {