diff --git a/Coderwall.xcodeproj/project.pbxproj b/Coderwall.xcodeproj/project.pbxproj index 5ca4f4f..b2b2796 100755 --- a/Coderwall.xcodeproj/project.pbxproj +++ b/Coderwall.xcodeproj/project.pbxproj @@ -7,19 +7,17 @@ objects = { /* Begin PBXBuildFile section */ - 1A3C807C1611A84100C42B8A /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1A3C807B1611A84100C42B8A /* Default-568h@2x.png */; }; + 6D729B358A2140D4BD3BB7BF /* libPods-CoderwallTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FE6FFAC1B664BBD80FE8E5D /* libPods-CoderwallTests.a */; }; + 9FC5BBE4830E41E8AF27C74A /* libPods-Integration Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 31FDF00A1367428BBD07FFFA /* libPods-Integration Tests.a */; }; B89AFBB8A81D4BD7AF69C5BE /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BD6E7CF697D54B3B9BC70AB5 /* libPods.a */; }; BE07C368151DC8CA00CAE177 /* ImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = BE07C367151DC8CA00CAE177 /* ImageLoader.m */; }; BE19C3EB15038F6200AAEE5E /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE19C3EA15038F6200AAEE5E /* DetailViewController.m */; }; BE1C7F7A14F137E800E460AC /* BadgesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1C7F7914F137E800E460AC /* BadgesViewController.m */; }; BE1C7F8114F17C1B00E460AC /* BadgeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1C7F8014F17C1B00E460AC /* BadgeCell.m */; }; - BE546A631501967900B9A200 /* BadgesiPadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE546A621501967800B9A200 /* BadgesiPadViewController.m */; }; BE546A6615019A3D00B9A200 /* iPadBadgeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE546A6515019A3D00B9A200 /* iPadBadgeCell.m */; }; BE546A6D15028AE900B9A200 /* SummaryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE546A6C15028AE900B9A200 /* SummaryViewController.m */; }; BE546A7015028B7800B9A200 /* ProfileCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE546A6F15028B7800B9A200 /* ProfileCell.m */; }; BE546A731502E81600B9A200 /* iPadAccomplishmentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE546A721502E81500B9A200 /* iPadAccomplishmentCell.m */; }; - BE546A761502E96700B9A200 /* AccomplishmentsiPadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE546A751502E96600B9A200 /* AccomplishmentsiPadViewController.m */; }; - BE5663E714F2D5E8002BC157 /* AccomplishmentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE5663E614F2D5E8002BC157 /* AccomplishmentsViewController.m */; }; BE5663EA14F2E856002BC157 /* AccomplishmentsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE5663E914F2E856002BC157 /* AccomplishmentsCell.m */; }; BE60B66A14EFA64100CF7151 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE60B66914EFA64100CF7151 /* UIKit.framework */; }; BE60B66C14EFA64100CF7151 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE60B66B14EFA64100CF7151 /* Foundation.framework */; }; @@ -29,7 +27,6 @@ BE60B67A14EFA64100CF7151 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BE60B67914EFA64100CF7151 /* AppDelegate.m */; }; BE60B67D14EFA64100CF7151 /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BE60B67B14EFA64100CF7151 /* MainStoryboard_iPhone.storyboard */; }; BE60B68014EFA64100CF7151 /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BE60B67E14EFA64100CF7151 /* MainStoryboard_iPad.storyboard */; }; - BE60B68E14EFA64100CF7151 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE60B68D14EFA64100CF7151 /* SenTestingKit.framework */; }; BE60B68F14EFA64100CF7151 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE60B66914EFA64100CF7151 /* UIKit.framework */; }; BE60B69014EFA64100CF7151 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE60B66B14EFA64100CF7151 /* Foundation.framework */; }; BE60B69814EFA64100CF7151 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = BE60B69614EFA64100CF7151 /* InfoPlist.strings */; }; @@ -39,10 +36,11 @@ BE73BA1614F8FFAB00220316 /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE73BA1514F8FFAB00220316 /* SettingsViewController.m */; }; BE886C5114F95249003BC113 /* SearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE886C5014F95249003BC113 /* SearchViewController.m */; }; BE886C5514F953E0003BC113 /* ClearSearchBar.m in Sources */ = {isa = PBXBuildFile; fileRef = BE886C5414F953E0003BC113 /* ClearSearchBar.m */; }; - BE8B757B152F22B700C4C348 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = BE8B757A152F22B700C4C348 /* Icon@2x.png */; }; - BE8B757E152F22DA00C4C348 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = BE8B757D152F22DA00C4C348 /* Icon.png */; }; - BE8B7580152F22EF00C4C348 /* Icon-72@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = BE8B757F152F22EF00C4C348 /* Icon-72@2x.png */; }; - BE8B7582152F230E00C4C348 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = BE8B7581152F230E00C4C348 /* Icon-72.png */; }; + BE9AEADE18CFDE7D00D8C6F7 /* AvatarView.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9AEADD18CFDE7D00D8C6F7 /* AvatarView.m */; }; + BE9AEAE018CFEE6100D8C6F7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BE9AEADF18CFEE6100D8C6F7 /* Images.xcassets */; }; + BE9AEAE318D1145B00D8C6F7 /* BadgesCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9AEAE218D1145B00D8C6F7 /* BadgesCollectionViewController.m */; }; + BE9AEAE618D1167000D8C6F7 /* BadgeCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9AEAE518D1167000D8C6F7 /* BadgeCollectionViewCell.m */; }; + BE9AEAE918D1254500D8C6F7 /* EmptyCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9AEAE818D1254500D8C6F7 /* EmptyCollectionViewCell.m */; }; BE9E92FD14F463AF00FC3704 /* StatsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9E92FC14F463AF00FC3704 /* StatsViewController.m */; }; BE9E930014F5658500FC3704 /* StatCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9E92FF14F5658400FC3704 /* StatCell.m */; }; BECA2C9215285FB2006767DF /* app-icon-ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = BECA2C7115285FB1006767DF /* app-icon-ipad.png */; }; @@ -86,10 +84,6 @@ DA319784159ABB8D0027A608 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BEFC77541513BCDC00C10939 /* QuartzCore.framework */; }; DA319786159ABBA70027A608 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE60B66D14EFA64100CF7151 /* CoreGraphics.framework */; }; DA319789159ABC4E0027A608 /* UserSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = DA319788159ABC4E0027A608 /* UserSpec.m */; }; - DA3197D6159BE9830027A608 /* ILCannedURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3197D1159BE9830027A608 /* ILCannedURLProtocol.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - DA3197D7159BE9830027A608 /* ILCannedURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3197D1159BE9830027A608 /* ILCannedURLProtocol.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - DA3197DC159BE9830027A608 /* README.mdown in Resources */ = {isa = PBXBuildFile; fileRef = DA3197D5159BE9830027A608 /* README.mdown */; }; - DA3197DD159BE9830027A608 /* README.mdown in Resources */ = {isa = PBXBuildFile; fileRef = DA3197D5159BE9830027A608 /* README.mdown */; }; DA584DC2159C037200173134 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BEFC77541513BCDC00C10939 /* QuartzCore.framework */; }; DA584DC3159C037200173134 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE60B66914EFA64100CF7151 /* UIKit.framework */; }; DA584DC4159C037200173134 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE60B66B14EFA64100CF7151 /* Foundation.framework */; }; @@ -128,13 +122,8 @@ DA584DE7159C037200173134 /* TableMiddleBg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = BECA2C8F15285FB1006767DF /* TableMiddleBg@2x.png */; }; DA584DE8159C037200173134 /* TableTopBg.png in Resources */ = {isa = PBXBuildFile; fileRef = BECA2C9015285FB1006767DF /* TableTopBg.png */; }; DA584DE9159C037200173134 /* TableTopBg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = BECA2C9115285FB1006767DF /* TableTopBg@2x.png */; }; - DA584DEA159C037200173134 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = BE8B757A152F22B700C4C348 /* Icon@2x.png */; }; - DA584DEB159C037200173134 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = BE8B757D152F22DA00C4C348 /* Icon.png */; }; - DA584DEC159C037200173134 /* Icon-72@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = BE8B757F152F22EF00C4C348 /* Icon-72@2x.png */; }; - DA584DED159C037200173134 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = BE8B7581152F230E00C4C348 /* Icon-72.png */; }; DA584DEE159C037200173134 /* iTunesArtwork.png in Resources */ = {isa = PBXBuildFile; fileRef = BED43C9F153D7512005AEDDB /* iTunesArtwork.png */; }; DA584DEF159C037200173134 /* iTunesArtwork@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = BED43CA0153D7512005AEDDB /* iTunesArtwork@2x.png */; }; - DA584DF0159C037200173134 /* README.mdown in Resources */ = {isa = PBXBuildFile; fileRef = DA3197D5159BE9830027A608 /* README.mdown */; }; DA584E2A159C049400173134 /* CoderwallTestController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA584E29159C049400173134 /* CoderwallTestController.m */; }; DA584E39159C087800173134 /* libPods-test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA584E38159C087800173134 /* libPods-test.a */; }; DA95C7F215DE0E8F0019961E /* libPods-integration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA95C7F115DE0E8F0019961E /* libPods-integration.a */; }; @@ -146,15 +135,12 @@ DAB00118159F8D3C00F773A2 /* ImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = BE07C367151DC8CA00CAE177 /* ImageLoader.m */; }; DAB00119159F8D3C00F773A2 /* ProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE60B6A514EFB09100CF7151 /* ProfileViewController.m */; }; DAB0011A159F8D3C00F773A2 /* BadgesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1C7F7914F137E800E460AC /* BadgesViewController.m */; }; - DAB0011B159F8D3C00F773A2 /* AccomplishmentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE5663E614F2D5E8002BC157 /* AccomplishmentsViewController.m */; }; DAB0011C159F8D3C00F773A2 /* StatsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9E92FC14F463AF00FC3704 /* StatsViewController.m */; }; DAB0011D159F8D3C00F773A2 /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE60B75514EFC4D500CF7151 /* MasterViewController.m */; }; DAB0011E159F8D3C00F773A2 /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE73BA1514F8FFAB00220316 /* SettingsViewController.m */; }; DAB0011F159F8D3C00F773A2 /* SearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE886C5014F95249003BC113 /* SearchViewController.m */; }; DAB00120159F8D3C00F773A2 /* SearchResultsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BEDD01D015005369006C4C29 /* SearchResultsViewController.m */; }; - DAB00121159F8D3C00F773A2 /* BadgesiPadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE546A621501967800B9A200 /* BadgesiPadViewController.m */; }; DAB00122159F8D3C00F773A2 /* SummaryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE546A6C15028AE900B9A200 /* SummaryViewController.m */; }; - DAB00123159F8D3C00F773A2 /* AccomplishmentsiPadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE546A751502E96600B9A200 /* AccomplishmentsiPadViewController.m */; }; DAB00124159F8D3C00F773A2 /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BE19C3EA15038F6200AAEE5E /* DetailViewController.m */; }; DAB00125159F8D3C00F773A2 /* BadgeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1C7F8014F17C1B00E460AC /* BadgeCell.m */; }; DAB00126159F8D3C00F773A2 /* AccomplishmentsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BE5663E914F2E856002BC157 /* AccomplishmentsCell.m */; }; @@ -181,7 +167,9 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 1A3C807B1611A84100C42B8A /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + 0FE6FFAC1B664BBD80FE8E5D /* libPods-CoderwallTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CoderwallTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 31FDF00A1367428BBD07FFFA /* libPods-Integration Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Integration Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B396B7359D4147B7ADD95EFC /* Pods-Integration Tests.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Integration Tests.xcconfig"; path = "Pods/Pods-Integration Tests.xcconfig"; sourceTree = ""; }; BD6E7CF697D54B3B9BC70AB5 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; BE07C366151DC8CA00CAE177 /* ImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageLoader.h; sourceTree = ""; }; BE07C367151DC8CA00CAE177 /* ImageLoader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageLoader.m; sourceTree = ""; }; @@ -191,8 +179,6 @@ BE1C7F7914F137E800E460AC /* BadgesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BadgesViewController.m; sourceTree = ""; }; BE1C7F7F14F17C1B00E460AC /* BadgeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BadgeCell.h; sourceTree = ""; }; BE1C7F8014F17C1B00E460AC /* BadgeCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BadgeCell.m; sourceTree = ""; }; - BE546A611501967800B9A200 /* BadgesiPadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BadgesiPadViewController.h; sourceTree = ""; }; - BE546A621501967800B9A200 /* BadgesiPadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BadgesiPadViewController.m; sourceTree = ""; }; BE546A6415019A3D00B9A200 /* iPadBadgeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iPadBadgeCell.h; sourceTree = ""; }; BE546A6515019A3D00B9A200 /* iPadBadgeCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iPadBadgeCell.m; sourceTree = ""; }; BE546A6B15028AE900B9A200 /* SummaryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SummaryViewController.h; sourceTree = ""; }; @@ -201,10 +187,6 @@ BE546A6F15028B7800B9A200 /* ProfileCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfileCell.m; sourceTree = ""; }; BE546A711502E81500B9A200 /* iPadAccomplishmentCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iPadAccomplishmentCell.h; sourceTree = ""; }; BE546A721502E81500B9A200 /* iPadAccomplishmentCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iPadAccomplishmentCell.m; sourceTree = ""; }; - BE546A741502E96600B9A200 /* AccomplishmentsiPadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccomplishmentsiPadViewController.h; sourceTree = ""; }; - BE546A751502E96600B9A200 /* AccomplishmentsiPadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccomplishmentsiPadViewController.m; sourceTree = ""; }; - BE5663E514F2D5E7002BC157 /* AccomplishmentsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccomplishmentsViewController.h; sourceTree = ""; }; - BE5663E614F2D5E8002BC157 /* AccomplishmentsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccomplishmentsViewController.m; sourceTree = ""; }; BE5663E814F2E856002BC157 /* AccomplishmentCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccomplishmentCell.h; sourceTree = ""; }; BE5663E914F2E856002BC157 /* AccomplishmentsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccomplishmentsCell.m; sourceTree = ""; }; BE60B66514EFA64100CF7151 /* Coderwall.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Coderwall.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -219,8 +201,7 @@ BE60B67914EFA64100CF7151 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; BE60B67C14EFA64100CF7151 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPhone.storyboard; sourceTree = ""; }; BE60B67F14EFA64100CF7151 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard_iPad.storyboard; sourceTree = ""; }; - BE60B68C14EFA64100CF7151 /* CoderwallTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoderwallTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; - BE60B68D14EFA64100CF7151 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + BE60B68C14EFA64100CF7151 /* CoderwallTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoderwallTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; BE60B69514EFA64100CF7151 /* CoderwallTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CoderwallTests-Info.plist"; sourceTree = ""; }; BE60B69714EFA64100CF7151 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; BE60B6A414EFB09100CF7151 /* ProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileViewController.h; sourceTree = ""; }; @@ -235,10 +216,16 @@ BE886C5014F95249003BC113 /* SearchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchViewController.m; sourceTree = ""; }; BE886C5314F953E0003BC113 /* ClearSearchBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClearSearchBar.h; sourceTree = ""; }; BE886C5414F953E0003BC113 /* ClearSearchBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ClearSearchBar.m; sourceTree = ""; }; - BE8B757A152F22B700C4C348 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = ""; }; - BE8B757D152F22DA00C4C348 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = ""; }; - BE8B757F152F22EF00C4C348 /* Icon-72@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72@2x.png"; sourceTree = ""; }; - BE8B7581152F230E00C4C348 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72.png"; sourceTree = ""; }; + BE9AEADC18CFDE7D00D8C6F7 /* AvatarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AvatarView.h; sourceTree = ""; }; + BE9AEADD18CFDE7D00D8C6F7 /* AvatarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AvatarView.m; sourceTree = ""; }; + BE9AEADF18CFEE6100D8C6F7 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + BE9AEAE118D1145B00D8C6F7 /* BadgesCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BadgesCollectionViewController.h; sourceTree = ""; }; + BE9AEAE218D1145B00D8C6F7 /* BadgesCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BadgesCollectionViewController.m; sourceTree = ""; }; + BE9AEAE418D1167000D8C6F7 /* BadgeCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BadgeCollectionViewCell.h; sourceTree = ""; }; + BE9AEAE518D1167000D8C6F7 /* BadgeCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BadgeCollectionViewCell.m; sourceTree = ""; }; + BE9AEAE718D1254500D8C6F7 /* EmptyCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmptyCollectionViewCell.h; sourceTree = ""; }; + BE9AEAE818D1254500D8C6F7 /* EmptyCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EmptyCollectionViewCell.m; sourceTree = ""; }; + BE9B908418CF4C4E00849ADA /* Colours.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Colours.h; sourceTree = ""; }; BE9E92FB14F463AF00FC3704 /* StatsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StatsViewController.h; sourceTree = ""; }; BE9E92FC14F463AF00FC3704 /* StatsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StatsViewController.m; sourceTree = ""; }; BE9E92FE14F5658400FC3704 /* StatCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StatCell.h; sourceTree = ""; }; @@ -279,6 +266,7 @@ BEDD01CF15005369006C4C29 /* SearchResultsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchResultsViewController.h; sourceTree = ""; }; BEDD01D015005369006C4C29 /* SearchResultsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchResultsViewController.m; sourceTree = ""; }; BEFC77541513BCDC00C10939 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + C064312C91C34276AA8658A2 /* Pods-CoderwallTests.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CoderwallTests.xcconfig"; path = "Pods/Pods-CoderwallTests.xcconfig"; sourceTree = ""; }; D56FB123D143438FB77AA2AB /* Pods.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = SOURCE_ROOT; }; DA14F8BD159F91AA005EF7AA /* KIFTestStep+displayMasterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KIFTestStep+displayMasterView.h"; sourceTree = ""; }; DA14F8BE159F91AA005EF7AA /* KIFTestStep+displayMasterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KIFTestStep+displayMasterView.m"; sourceTree = ""; }; @@ -287,14 +275,7 @@ DA1B555815B50FFE00F1D675 /* KIFTestStep+updateSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KIFTestStep+updateSettings.h"; sourceTree = ""; }; DA1B555915B50FFE00F1D675 /* KIFTestStep+updateSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KIFTestStep+updateSettings.m"; sourceTree = ""; }; DA319788159ABC4E0027A608 /* UserSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserSpec.m; sourceTree = ""; }; - DA3197D0159BE9830027A608 /* ILCannedURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ILCannedURLProtocol.h; sourceTree = ""; }; - DA3197D1159BE9830027A608 /* ILCannedURLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ILCannedURLProtocol.m; sourceTree = ""; }; - DA3197D2159BE9830027A608 /* ILProfilerCompat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ILProfilerCompat.c; sourceTree = ""; }; - DA3197D3159BE9830027A608 /* ILTestImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ILTestImage.h; sourceTree = ""; }; - DA3197D4159BE9830027A608 /* ILTestImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ILTestImage.m; sourceTree = ""; }; - DA3197D5159BE9830027A608 /* README.mdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.mdown; sourceTree = ""; }; DA584DF5159C037200173134 /* Coderwall (Integration Tests).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Coderwall (Integration Tests).app"; sourceTree = BUILT_PRODUCTS_DIR; }; - DA584DF7159C037200173134 /* Coderwall copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Coderwall copy-Info.plist"; path = "/Users/bgesiak/Github/github/modocache/Coderwall-iOS/Coderwall copy-Info.plist"; sourceTree = ""; }; DA584E28159C049400173134 /* CoderwallTestController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoderwallTestController.h; sourceTree = ""; }; DA584E29159C049400173134 /* CoderwallTestController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoderwallTestController.m; sourceTree = ""; }; DA584E38159C087800173134 /* libPods-test.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-test.a"; path = "Pods/build/Release-iphoneos/libPods-test.a"; sourceTree = ""; }; @@ -333,9 +314,9 @@ DA584E39159C087800173134 /* libPods-test.a in Frameworks */, DA319786159ABBA70027A608 /* CoreGraphics.framework in Frameworks */, DA319784159ABB8D0027A608 /* QuartzCore.framework in Frameworks */, - BE60B68E14EFA64100CF7151 /* SenTestingKit.framework in Frameworks */, BE60B68F14EFA64100CF7151 /* UIKit.framework in Frameworks */, BE60B69014EFA64100CF7151 /* Foundation.framework in Frameworks */, + 6D729B358A2140D4BD3BB7BF /* libPods-CoderwallTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -348,6 +329,7 @@ DA584DC3159C037200173134 /* UIKit.framework in Frameworks */, DA584DC4159C037200173134 /* Foundation.framework in Frameworks */, DA584DC5159C037200173134 /* CoreGraphics.framework in Frameworks */, + 9FC5BBE4830E41E8AF27C74A /* libPods-Integration Tests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -357,13 +339,8 @@ BE60B65A14EFA64000CF7151 = { isa = PBXGroup; children = ( - 1A3C807B1611A84100C42B8A /* Default-568h@2x.png */, BED43C9F153D7512005AEDDB /* iTunesArtwork.png */, BED43CA0153D7512005AEDDB /* iTunesArtwork@2x.png */, - BE8B7581152F230E00C4C348 /* Icon-72.png */, - BE8B757F152F22EF00C4C348 /* Icon-72@2x.png */, - BE8B757D152F22DA00C4C348 /* Icon.png */, - BE8B757A152F22B700C4C348 /* Icon@2x.png */, BE60B66F14EFA64100CF7151 /* Coderwall */, BE60B69314EFA64100CF7151 /* CoderwallTests */, DA584E27159C046C00173134 /* IntegrationTests */, @@ -371,7 +348,8 @@ BE60B66614EFA64100CF7151 /* Products */, DA3197CE159BE9830027A608 /* Vendor */, D56FB123D143438FB77AA2AB /* Pods.xcconfig */, - DA584DF7159C037200173134 /* Coderwall copy-Info.plist */, + C064312C91C34276AA8658A2 /* Pods-CoderwallTests.xcconfig */, + B396B7359D4147B7ADD95EFC /* Pods-Integration Tests.xcconfig */, ); sourceTree = ""; }; @@ -379,7 +357,7 @@ isa = PBXGroup; children = ( BE60B66514EFA64100CF7151 /* Coderwall.app */, - BE60B68C14EFA64100CF7151 /* CoderwallTests.octest */, + BE60B68C14EFA64100CF7151 /* CoderwallTests.xctest */, DA584DF5159C037200173134 /* Coderwall (Integration Tests).app */, ); name = Products; @@ -395,7 +373,8 @@ BE60B66914EFA64100CF7151 /* UIKit.framework */, BE60B66B14EFA64100CF7151 /* Foundation.framework */, BE60B66D14EFA64100CF7151 /* CoreGraphics.framework */, - BE60B68D14EFA64100CF7151 /* SenTestingKit.framework */, + 0FE6FFAC1B664BBD80FE8E5D /* libPods-CoderwallTests.a */, + 31FDF00A1367428BBD07FFFA /* libPods-Integration Tests.a */, ); name = Frameworks; sourceTree = ""; @@ -411,6 +390,8 @@ BE60B67814EFA64100CF7151 /* AppDelegate.h */, BE60B67914EFA64100CF7151 /* AppDelegate.m */, BE60B67014EFA64100CF7151 /* Supporting Files */, + BE9B908418CF4C4E00849ADA /* Colours.h */, + BE9AEADF18CFEE6100D8C6F7 /* Images.xcassets */, ); path = Coderwall; sourceTree = ""; @@ -492,6 +473,12 @@ BE546A6F15028B7800B9A200 /* ProfileCell.m */, BE546A711502E81500B9A200 /* iPadAccomplishmentCell.h */, BE546A721502E81500B9A200 /* iPadAccomplishmentCell.m */, + BE9AEADC18CFDE7D00D8C6F7 /* AvatarView.h */, + BE9AEADD18CFDE7D00D8C6F7 /* AvatarView.m */, + BE9AEAE418D1167000D8C6F7 /* BadgeCollectionViewCell.h */, + BE9AEAE518D1167000D8C6F7 /* BadgeCollectionViewCell.m */, + BE9AEAE718D1254500D8C6F7 /* EmptyCollectionViewCell.h */, + BE9AEAE818D1254500D8C6F7 /* EmptyCollectionViewCell.m */, ); name = ViewExtensions; path = "View Extensions"; @@ -500,14 +487,12 @@ BE74BFB71503857200433091 /* iPad */ = { isa = PBXGroup; children = ( - BE546A611501967800B9A200 /* BadgesiPadViewController.h */, - BE546A621501967800B9A200 /* BadgesiPadViewController.m */, BE546A6B15028AE900B9A200 /* SummaryViewController.h */, BE546A6C15028AE900B9A200 /* SummaryViewController.m */, - BE546A741502E96600B9A200 /* AccomplishmentsiPadViewController.h */, - BE546A751502E96600B9A200 /* AccomplishmentsiPadViewController.m */, BE19C3E915038F6200AAEE5E /* DetailViewController.h */, BE19C3EA15038F6200AAEE5E /* DetailViewController.m */, + BE9AEAE118D1145B00D8C6F7 /* BadgesCollectionViewController.h */, + BE9AEAE218D1145B00D8C6F7 /* BadgesCollectionViewController.m */, ); path = iPad; sourceTree = ""; @@ -519,8 +504,6 @@ BE60B6A514EFB09100CF7151 /* ProfileViewController.m */, BE1C7F7814F137E800E460AC /* BadgesViewController.h */, BE1C7F7914F137E800E460AC /* BadgesViewController.m */, - BE5663E614F2D5E8002BC157 /* AccomplishmentsViewController.m */, - BE5663E514F2D5E7002BC157 /* AccomplishmentsViewController.h */, BE9E92FB14F463AF00FC3704 /* StatsViewController.h */, BE9E92FC14F463AF00FC3704 /* StatsViewController.m */, ); @@ -615,24 +598,10 @@ DA3197CE159BE9830027A608 /* Vendor */ = { isa = PBXGroup; children = ( - DA3197CF159BE9830027A608 /* ILTesting */, ); path = Vendor; sourceTree = ""; }; - DA3197CF159BE9830027A608 /* ILTesting */ = { - isa = PBXGroup; - children = ( - DA3197D0159BE9830027A608 /* ILCannedURLProtocol.h */, - DA3197D1159BE9830027A608 /* ILCannedURLProtocol.m */, - DA3197D2159BE9830027A608 /* ILProfilerCompat.c */, - DA3197D3159BE9830027A608 /* ILTestImage.h */, - DA3197D4159BE9830027A608 /* ILTestImage.m */, - DA3197D5159BE9830027A608 /* README.mdown */, - ); - path = ILTesting; - sourceTree = ""; - }; DA584E27159C046C00173134 /* IntegrationTests */ = { isa = PBXGroup; children = ( @@ -708,6 +677,7 @@ isa = PBXNativeTarget; buildConfigurationList = BE60B6A114EFA64100CF7151 /* Build configuration list for PBXNativeTarget "CoderwallTests" */; buildPhases = ( + A88BAFAD4286452ABE41FBD6 /* Check Pods Manifest.lock */, BE60B68714EFA64100CF7151 /* Sources */, BE60B68814EFA64100CF7151 /* Frameworks */, BE60B68914EFA64100CF7151 /* Resources */, @@ -721,13 +691,14 @@ ); name = CoderwallTests; productName = CoderwallTests; - productReference = BE60B68C14EFA64100CF7151 /* CoderwallTests.octest */; - productType = "com.apple.product-type.bundle"; + productReference = BE60B68C14EFA64100CF7151 /* CoderwallTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; DA584DA7159C037200173134 /* Integration Tests */ = { isa = PBXNativeTarget; buildConfigurationList = DA584DF2159C037200173134 /* Build configuration list for PBXNativeTarget "Integration Tests" */; buildPhases = ( + BF4E4170A7BE45A1A9A3509C /* Check Pods Manifest.lock */, DA584DA8159C037200173134 /* Sources */, DA584DC1159C037200173134 /* Frameworks */, DA584DC7159C037200173134 /* Resources */, @@ -748,8 +719,14 @@ BE60B65C14EFA64000CF7151 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0430; + LastTestingUpgradeCheck = 0510; + LastUpgradeCheck = 0510; ORGANIZATIONNAME = "Bearded Apps"; + TargetAttributes = { + BE60B66414EFA64100CF7151 = { + DevelopmentTeam = EZYXDEN3J9; + }; + }; }; buildConfigurationList = BE60B65F14EFA64000CF7151 /* Build configuration list for PBXProject "Coderwall" */; compatibilityVersion = "Xcode 3.2"; @@ -799,6 +776,7 @@ BECA2CA415285FB2006767DF /* profile@2x.png in Resources */, BECA2CA515285FB2006767DF /* search.png in Resources */, BECA2CA615285FB2006767DF /* search@2x.png in Resources */, + BE9AEAE018CFEE6100D8C6F7 /* Images.xcassets in Resources */, BECA2CA715285FB2006767DF /* settings.png in Resources */, BECA2CA815285FB2006767DF /* settings@2x.png in Resources */, BECA2CA915285FB2006767DF /* stats.png in Resources */, @@ -809,14 +787,8 @@ BECA2CAE15285FB2006767DF /* TableMiddleBg@2x.png in Resources */, BECA2CAF15285FB2006767DF /* TableTopBg.png in Resources */, BECA2CB015285FB2006767DF /* TableTopBg@2x.png in Resources */, - BE8B757B152F22B700C4C348 /* Icon@2x.png in Resources */, - BE8B757E152F22DA00C4C348 /* Icon.png in Resources */, - BE8B7580152F22EF00C4C348 /* Icon-72@2x.png in Resources */, - BE8B7582152F230E00C4C348 /* Icon-72.png in Resources */, BED43CA1153D7512005AEDDB /* iTunesArtwork.png in Resources */, BED43CA2153D7512005AEDDB /* iTunesArtwork@2x.png in Resources */, - DA3197DC159BE9830027A608 /* README.mdown in Resources */, - 1A3C807C1611A84100C42B8A /* Default-568h@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -825,7 +797,6 @@ buildActionMask = 2147483647; files = ( BE60B69814EFA64100CF7151 /* InfoPlist.strings in Resources */, - DA3197DD159BE9830027A608 /* README.mdown in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -867,13 +838,8 @@ DA584DE7159C037200173134 /* TableMiddleBg@2x.png in Resources */, DA584DE8159C037200173134 /* TableTopBg.png in Resources */, DA584DE9159C037200173134 /* TableTopBg@2x.png in Resources */, - DA584DEA159C037200173134 /* Icon@2x.png in Resources */, - DA584DEB159C037200173134 /* Icon.png in Resources */, - DA584DEC159C037200173134 /* Icon-72@2x.png in Resources */, - DA584DED159C037200173134 /* Icon-72.png in Resources */, DA584DEE159C037200173134 /* iTunesArtwork.png in Resources */, DA584DEF159C037200173134 /* iTunesArtwork@2x.png in Resources */, - DA584DF0159C037200173134 /* README.mdown in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -892,7 +858,23 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Pods-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Pods-CoderwallTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + A88BAFAD4286452ABE41FBD6 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; }; BE60B68A14EFA64100CF7151 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -908,6 +890,21 @@ shellScript = "# Run the unit tests in this test bundle.\n\"${PROJECT_DIR}/Scripts/RunPlatformUnitTests\"\n"; showEnvVarsInLog = 0; }; + BF4E4170A7BE45A1A9A3509C /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; DA584DF1159C037200173134 /* Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -920,7 +917,8 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Pods-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Pods-Integration Tests-resources.sh\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -935,25 +933,25 @@ BE60B6AC14EFB0FD00CF7151 /* User.m in Sources */, BE60B75614EFC4D500CF7151 /* MasterViewController.m in Sources */, BE1C7F7A14F137E800E460AC /* BadgesViewController.m in Sources */, + BE9AEAE618D1167000D8C6F7 /* BadgeCollectionViewCell.m in Sources */, BE1C7F8114F17C1B00E460AC /* BadgeCell.m in Sources */, - BE5663E714F2D5E8002BC157 /* AccomplishmentsViewController.m in Sources */, + BE9AEADE18CFDE7D00D8C6F7 /* AvatarView.m in Sources */, BE5663EA14F2E856002BC157 /* AccomplishmentsCell.m in Sources */, BE9E92FD14F463AF00FC3704 /* StatsViewController.m in Sources */, BE9E930014F5658500FC3704 /* StatCell.m in Sources */, BE73BA1614F8FFAB00220316 /* SettingsViewController.m in Sources */, BE886C5114F95249003BC113 /* SearchViewController.m in Sources */, BE886C5514F953E0003BC113 /* ClearSearchBar.m in Sources */, + BE9AEAE918D1254500D8C6F7 /* EmptyCollectionViewCell.m in Sources */, BEDD01D11500536A006C4C29 /* SearchResultsViewController.m in Sources */, - BE546A631501967900B9A200 /* BadgesiPadViewController.m in Sources */, BE546A6615019A3D00B9A200 /* iPadBadgeCell.m in Sources */, BE546A6D15028AE900B9A200 /* SummaryViewController.m in Sources */, BE546A7015028B7800B9A200 /* ProfileCell.m in Sources */, BE546A731502E81600B9A200 /* iPadAccomplishmentCell.m in Sources */, - BE546A761502E96700B9A200 /* AccomplishmentsiPadViewController.m in Sources */, BE19C3EB15038F6200AAEE5E /* DetailViewController.m in Sources */, BE07C368151DC8CA00CAE177 /* ImageLoader.m in Sources */, - DA3197D6159BE9830027A608 /* ILCannedURLProtocol.m in Sources */, DAB00113159F88CD00F773A2 /* UIViewController+appDelegateUser.m in Sources */, + BE9AEAE318D1145B00D8C6F7 /* BadgesCollectionViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -962,7 +960,6 @@ buildActionMask = 2147483647; files = ( DA319789159ABC4E0027A608 /* UserSpec.m in Sources */, - DA3197D7159BE9830027A608 /* ILCannedURLProtocol.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -975,15 +972,12 @@ DAB00118159F8D3C00F773A2 /* ImageLoader.m in Sources */, DAB00119159F8D3C00F773A2 /* ProfileViewController.m in Sources */, DAB0011A159F8D3C00F773A2 /* BadgesViewController.m in Sources */, - DAB0011B159F8D3C00F773A2 /* AccomplishmentsViewController.m in Sources */, DAB0011C159F8D3C00F773A2 /* StatsViewController.m in Sources */, DAB0011D159F8D3C00F773A2 /* MasterViewController.m in Sources */, DAB0011E159F8D3C00F773A2 /* SettingsViewController.m in Sources */, DAB0011F159F8D3C00F773A2 /* SearchViewController.m in Sources */, DAB00120159F8D3C00F773A2 /* SearchResultsViewController.m in Sources */, - DAB00121159F8D3C00F773A2 /* BadgesiPadViewController.m in Sources */, DAB00122159F8D3C00F773A2 /* SummaryViewController.m in Sources */, - DAB00123159F8D3C00F773A2 /* AccomplishmentsiPadViewController.m in Sources */, DAB00124159F8D3C00F773A2 /* DetailViewController.m in Sources */, DAB00125159F8D3C00F773A2 /* BadgeCell.m in Sources */, DAB00126159F8D3C00F773A2 /* AccomplishmentsCell.m in Sources */, @@ -1057,8 +1051,13 @@ BE60B69C14EFA64100CF7151 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = 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; @@ -1070,14 +1069,18 @@ ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(inherited)/**", "$(SRCROOT)/Vendor/**", ); - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -1086,20 +1089,28 @@ BE60B69D14EFA64100CF7151 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = 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_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(inherited)/**", "$(SRCROOT)/Vendor/**", ); - IPHONEOS_DEPLOYMENT_TARGET = 5.0; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1111,20 +1122,20 @@ isa = XCBuildConfiguration; baseConfigurationReference = D56FB123D143438FB77AA2AB /* Pods.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CODE_SIGN_IDENTITY = "iPhone Distribution: Will McKenzie (EZYXDEN3J9)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DSTROOT = /tmp/xcodeproj.dst; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Coderwall/Coderwall-Prefix.pch"; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = "Coderwall/Coderwall-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/Crittercism_v3_1_5/CrittercismExample/CrittercismExample/CrittercismSDK\"", - "\"$(SRCROOT)/Crittercism_v3_1_5/CrittercismSDK\"", - ); + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders; $(inherited)"; SKIP_INSTALL = YES; WRAPPER_EXTENSION = app; }; @@ -1134,43 +1145,44 @@ isa = XCBuildConfiguration; baseConfigurationReference = D56FB123D143438FB77AA2AB /* Pods.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Distribution"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CODE_SIGN_IDENTITY = "iPhone Distribution: Will McKenzie (EZYXDEN3J9)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DSTROOT = /tmp/xcodeproj.dst; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Coderwall/Coderwall-Prefix.pch"; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; INFOPLIST_FILE = "Coderwall/Coderwall-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/Crittercism_v3_1_5/CrittercismExample/CrittercismExample/CrittercismSDK\"", - "\"$(SRCROOT)/Crittercism_v3_1_5/CrittercismSDK\"", - ); + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LIBRARY_SEARCH_PATHS = "$(inherited)"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - SKIP_INSTALL = YES; + SHARED_PRECOMPS_DIR = "$(CACHE_ROOT)/SharedPrecompiledHeaders; $(inherited)"; + SKIP_INSTALL = NO; WRAPPER_EXTENSION = app; }; name = Release; }; BE60B6A214EFA64100CF7151 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D56FB123D143438FB77AA2AB /* Pods.xcconfig */; + baseConfigurationReference = C064312C91C34276AA8658A2 /* Pods-CoderwallTests.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Coderwall.app/Coderwall"; + CODE_SIGN_IDENTITY = "iPhone Distribution: Will McKenzie (EZYXDEN3J9)"; DSTROOT = /tmp/xcodeproj.dst; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", - "$(DEVELOPER_LIBRARY_DIR)/Frameworks", + "$(inherited)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Coderwall/Coderwall-Prefix.pch"; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = "\"$(PODS_ROOT)/Kiwi/Kiwi/\""; INFOPLIST_FILE = "CoderwallTests/CoderwallTests-Info.plist"; + INSTALL_PATH = /Applications; OTHER_LDFLAGS = ( "-ObjC", "-all_load", @@ -1181,29 +1193,29 @@ ); PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - TEST_AFTER_BUILD = NO; TEST_HOST = "$(BUNDLE_LOADER)"; USER_HEADER_SEARCH_PATHS = ""; - WRAPPER_EXTENSION = octest; }; name = Debug; }; BE60B6A314EFA64100CF7151 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D56FB123D143438FB77AA2AB /* Pods.xcconfig */; + baseConfigurationReference = C064312C91C34276AA8658A2 /* Pods-CoderwallTests.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = YES; BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Coderwall.app/Coderwall"; + CODE_SIGN_IDENTITY = "iPhone Distribution: Will McKenzie (EZYXDEN3J9)"; DSTROOT = /tmp/xcodeproj.dst; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", - "$(DEVELOPER_LIBRARY_DIR)/Frameworks", + "$(inherited)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Coderwall/Coderwall-Prefix.pch"; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = "\"$(PODS_ROOT)/Kiwi/Kiwi/\""; INFOPLIST_FILE = "CoderwallTests/CoderwallTests-Info.plist"; + INSTALL_PATH = /Applications; OTHER_LDFLAGS = ( "-ObjC", "-all_load", @@ -1214,16 +1226,14 @@ ); PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - TEST_AFTER_BUILD = NO; TEST_HOST = "$(BUNDLE_LOADER)"; USER_HEADER_SEARCH_PATHS = ""; - WRAPPER_EXTENSION = octest; }; name = Release; }; DA584DF3159C037200173134 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D56FB123D143438FB77AA2AB /* Pods.xcconfig */; + baseConfigurationReference = B396B7359D4147B7ADD95EFC /* Pods-Integration Tests.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; DSTROOT = /tmp/xcodeproj.dst; @@ -1261,7 +1271,7 @@ }; DA584DF4159C037200173134 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D56FB123D143438FB77AA2AB /* Pods.xcconfig */; + baseConfigurationReference = B396B7359D4147B7ADD95EFC /* Pods-Integration Tests.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Distribution"; DSTROOT = /tmp/xcodeproj.dst; diff --git a/Coderwall.xcodeproj/project.xcworkspace/xcshareddata/Coderwall.xccheckout b/Coderwall.xcodeproj/project.xcworkspace/xcshareddata/Coderwall.xccheckout new file mode 100644 index 0000000..6fa3713 --- /dev/null +++ b/Coderwall.xcodeproj/project.xcworkspace/xcshareddata/Coderwall.xccheckout @@ -0,0 +1,53 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + E5E0AE2C-C46F-4120-BA30-10DDD9E50762 + IDESourceControlProjectName + Coderwall + IDESourceControlProjectOriginsDictionary + + 28917784-8F51-49FF-A794-809ED5C6B2B3 + https://github.com/OiNutter/Coderwall-iOS.git + 35982531-96EA-42E6-9CC0-99C2E87DC00C + git://github.com/InfiniteLoopDK/ILTesting.git + + IDESourceControlProjectPath + Coderwall.xcodeproj/project.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + 28917784-8F51-49FF-A794-809ED5C6B2B3 + ../.. + 35982531-96EA-42E6-9CC0-99C2E87DC00C + ../../Vendor/ILTesting + + IDESourceControlProjectURL + https://github.com/OiNutter/Coderwall-iOS.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + 28917784-8F51-49FF-A794-809ED5C6B2B3 + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 28917784-8F51-49FF-A794-809ED5C6B2B3 + IDESourceControlWCCName + Coderwall-iOS + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 35982531-96EA-42E6-9CC0-99C2E87DC00C + IDESourceControlWCCName + ILTesting + + + + diff --git a/Coderwall.xcodeproj/xcshareddata/xcschemes/Coderwall.xcscheme b/Coderwall.xcodeproj/xcshareddata/xcschemes/Coderwall.xcscheme index 250458c..4cac52c 100755 --- a/Coderwall.xcodeproj/xcshareddata/xcschemes/Coderwall.xcscheme +++ b/Coderwall.xcodeproj/xcshareddata/xcschemes/Coderwall.xcscheme @@ -1,5 +1,6 @@ diff --git a/Coderwall.xcodeproj/xcshareddata/xcschemes/Integration Tests.xcscheme b/Coderwall.xcodeproj/xcshareddata/xcschemes/Integration Tests.xcscheme index 8a01172..4f32493 100755 --- a/Coderwall.xcodeproj/xcshareddata/xcschemes/Integration Tests.xcscheme +++ b/Coderwall.xcodeproj/xcshareddata/xcschemes/Integration Tests.xcscheme @@ -1,5 +1,6 @@ @@ -33,7 +33,7 @@ diff --git a/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Coderwall - Release.xcscheme b/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Coderwall - Release.xcscheme index 9a51b74..c44a58d 100755 --- a/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Coderwall - Release.xcscheme +++ b/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Coderwall - Release.xcscheme @@ -1,5 +1,6 @@ diff --git a/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/xcschememanagement.plist b/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/xcschememanagement.plist index 5fccd03..740f342 100755 --- a/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Coderwall.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/xcschememanagement.plist @@ -14,6 +14,21 @@ orderHint 0 + Coderwall.xcscheme_^#shared#^_ + + orderHint + 2 + + Integration Tests.xcscheme_^#shared#^_ + + orderHint + 3 + + Unit Tests.xcscheme_^#shared#^_ + + orderHint + 4 + SuppressBuildableAutocreation @@ -27,6 +42,11 @@ primary + DA584DA7159C037200173134 + + primary + + diff --git a/Coderwall.xcworkspace/contents.xcworkspacedata b/Coderwall.xcworkspace/contents.xcworkspacedata old mode 100755 new mode 100644 diff --git a/Coderwall.xcworkspace/xcshareddata/Coderwall.xccheckout b/Coderwall.xcworkspace/xcshareddata/Coderwall.xccheckout new file mode 100644 index 0000000..c56ebcc --- /dev/null +++ b/Coderwall.xcworkspace/xcshareddata/Coderwall.xccheckout @@ -0,0 +1,53 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + EA7E222C-9617-4717-99A2-2B261F9A6487 + IDESourceControlProjectName + Coderwall + IDESourceControlProjectOriginsDictionary + + 120A8388-824B-477E-8DD6-882EC20C3858 + git://github.com/InfiniteLoopDK/ILTesting.git + 3C4996F1-3DBB-4940-BA5F-DA44CEB2DFA7 + https://github.com/OiNutter/Coderwall-iOS.git + + IDESourceControlProjectPath + Coderwall.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + 120A8388-824B-477E-8DD6-882EC20C3858 + ../Vendor/ILTesting + 3C4996F1-3DBB-4940-BA5F-DA44CEB2DFA7 + .. + + IDESourceControlProjectURL + https://github.com/OiNutter/Coderwall-iOS.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + 3C4996F1-3DBB-4940-BA5F-DA44CEB2DFA7 + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 3C4996F1-3DBB-4940-BA5F-DA44CEB2DFA7 + IDESourceControlWCCName + Coderwall-iOS + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 120A8388-824B-477E-8DD6-882EC20C3858 + IDESourceControlWCCName + ILTesting + + + + diff --git a/Coderwall.xcworkspace/xcuserdata/James.xcuserdatad/UserInterfaceState.xcuserstate b/Coderwall.xcworkspace/xcuserdata/James.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 659edd4..0000000 Binary files a/Coderwall.xcworkspace/xcuserdata/James.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/Coderwall.xcworkspace/xcuserdata/James.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/Coderwall.xcworkspace/xcuserdata/James.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist deleted file mode 100644 index 2f2c5d9..0000000 --- a/Coderwall.xcworkspace/xcuserdata/James.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - diff --git a/Coderwall.xcworkspace/xcuserdata/will.xcuserdatad/UserInterfaceState.xcuserstate b/Coderwall.xcworkspace/xcuserdata/will.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..8107ba6 Binary files /dev/null and b/Coderwall.xcworkspace/xcuserdata/will.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Coderwall.xcworkspace/xcuserdata/will.xcuserdatad/WorkspaceSettings.xcsettings b/Coderwall.xcworkspace/xcuserdata/will.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..659c876 --- /dev/null +++ b/Coderwall.xcworkspace/xcuserdata/will.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/Coderwall.xcworkspace/xcuserdata/will.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Coderwall.xcworkspace/xcuserdata/will.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..ed9a9b4 --- /dev/null +++ b/Coderwall.xcworkspace/xcuserdata/will.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/Coderwall/AppDelegate.m b/Coderwall/AppDelegate.m index 6f937e0..0fbed77 100755 --- a/Coderwall/AppDelegate.m +++ b/Coderwall/AppDelegate.m @@ -43,14 +43,6 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( svc.delegate = (id)navigationController.topViewController; } - /* - // Add Crittercism debugging - [Crittercism initWithAppID: @"4fa9501fb093150f4300004c" - andKey:@"ne780aghaohlirxlkzxwjbyusitf" - andSecret:@"sbhf5kotnxxwscgapu39ddriz6ijvmpe" - andMainViewController:self.window.rootViewController]; - */ - [self registerForNetworkNotifications]; [self loadCurrentUser]; diff --git a/Coderwall/Coderwall-Info.plist b/Coderwall/Coderwall-Info.plist index 0c93042..368ba44 100755 --- a/Coderwall/Coderwall-Info.plist +++ b/Coderwall/Coderwall-Info.plist @@ -9,20 +9,9 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIcons - - CFBundlePrimaryIcon - - CFBundleIconFiles - - Icon-72.png - Icon-72@2x.png - Icon@2x.png - Icon.png - - UIPrerenderedIcon - - - + + CFBundleIcons~ipad + CFBundleIdentifier Bearded-Apps.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion @@ -32,11 +21,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + 1.1 CFBundleSignature ???? CFBundleVersion - 1.0 + 1.1 LSRequiresIPhoneOS UIMainStoryboardFile @@ -49,6 +38,8 @@ armv7 + UIStatusBarStyle + UIStatusBarStyleLightContent UISupportedInterfaceOrientations UIInterfaceOrientationPortrait @@ -59,5 +50,7 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UIViewControllerBasedStatusBarAppearance + diff --git a/Coderwall/Coderwall-Prefix.pch b/Coderwall/Coderwall-Prefix.pch index 2eb4f04..02ea8c0 100755 --- a/Coderwall/Coderwall-Prefix.pch +++ b/Coderwall/Coderwall-Prefix.pch @@ -11,4 +11,5 @@ #ifdef __OBJC__ #import #import + #import "Colours.h" #endif diff --git a/Coderwall/Colours.h b/Coderwall/Colours.h new file mode 100644 index 0000000..13f7918 --- /dev/null +++ b/Coderwall/Colours.h @@ -0,0 +1,16 @@ +// +// Colours.h +// Coderwall +// +// Created by Will Mckenzie on 11/03/2014. +// Copyright (c) 2014 Bearded Apps. All rights reserved. +// + +#ifndef Coderwall_Colours_h +#define Coderwall_Colours_h + +#define cwBlueColor [UIColor colorWithRed:57.0/255.0 green:140.0/255.0 blue:206.0/255.0 alpha:1] +#define cwDarkGreyColor [UIColor colorWithRed:52.0/255.0 green:49.0/255.0 blue:49.0/255.0 alpha:1] +#define cwLightGreyColor [UIColor colorWithRed:236.0/255.0 green:236.0/255.0 blue:236.0/255.0 alpha:1] + +#endif diff --git a/Coderwall/Controllers/Shared/MasterViewController.m b/Coderwall/Controllers/Shared/MasterViewController.m index 84b79a1..b09a51e 100755 --- a/Coderwall/Controllers/Shared/MasterViewController.m +++ b/Coderwall/Controllers/Shared/MasterViewController.m @@ -62,6 +62,15 @@ -(void) viewDidLoad self.navigationItem.leftBarButtonItem = logoButtonItem; } + self.navigationController.navigationBar.barTintColor = cwDarkGreyColor; + self.navigationController.navigationBar.tintColor = cwBlueColor; + self.tabBar.translucent = NO; + self.tabBar.barTintColor = cwLightGreyColor; + self.tabBar.tintColor = cwBlueColor; + + self.navigationController.navigationBar.translucent = NO; + self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]}; + self.navigationItem.rightBarButtonItem.accessibilityLabel = @"Settings"; UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" @@ -70,10 +79,10 @@ -(void) viewDidLoad action:nil]; backButton.accessibilityLabel = @"Back"; self.navigationItem.backBarButtonItem = backButton; - - if(!self.currentUser) { + + if(!self.currentUser) [self performSegueWithIdentifier:@"ShowSettings" sender:self]; - } + } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation @@ -101,7 +110,7 @@ - (void)setUserName // Get current User if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPad) { User *user = self.currentUser; - if(user != (id)[NSNull null] && user.userName != @"" && user.userName.length != 0) { + if(user != (id)[NSNull null] && ![user.userName isEqual: @""] && user.userName.length != 0) { self.navigationItem.title = user.userName; } } diff --git a/Coderwall/Controllers/Shared/SearchResultsViewController.m b/Coderwall/Controllers/Shared/SearchResultsViewController.m index cdc8d43..e78c079 100755 --- a/Coderwall/Controllers/Shared/SearchResultsViewController.m +++ b/Coderwall/Controllers/Shared/SearchResultsViewController.m @@ -22,6 +22,12 @@ @implementation SearchResultsViewController #pragma mark - UIViewController Overrides +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.tabBar.tintColor = cwBlueColor; +} + - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; diff --git a/Coderwall/Controllers/Shared/SettingsViewController.h b/Coderwall/Controllers/Shared/SettingsViewController.h index 51bc956..83411be 100755 --- a/Coderwall/Controllers/Shared/SettingsViewController.h +++ b/Coderwall/Controllers/Shared/SettingsViewController.h @@ -10,6 +10,6 @@ #import -@interface SettingsViewController : UIViewController +@interface SettingsViewController : UIViewController @end diff --git a/Coderwall/Controllers/Shared/SettingsViewController.m b/Coderwall/Controllers/Shared/SettingsViewController.m index fdc544a..d386c0f 100755 --- a/Coderwall/Controllers/Shared/SettingsViewController.m +++ b/Coderwall/Controllers/Shared/SettingsViewController.m @@ -1,4 +1,4 @@ -// + // // SettingsViewController.m // Coderwall // @@ -38,6 +38,7 @@ - (void)viewDidLoad UIImage *backgroundImage = [UIImage imageNamed:@"PanelBg.png"]; backgroundImage = [backgroundImage resizableImageWithCapInsets:UIEdgeInsetsMake(10, 0, 15, 0)]; self.backgroundImageView.image = backgroundImage; + self.usernameField.clearButtonMode = UITextFieldViewModeWhileEditing; } - (void)viewWillAppear:(BOOL)animated @@ -58,7 +59,7 @@ - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interface #pragma mark - Internal Methods -- (IBAction)userNameChanged:(id) sender +- (IBAction)userNameChanged:(id)sender { if (self.usernameField.text.length > 0) { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; @@ -67,6 +68,7 @@ - (IBAction)userNameChanged:(id) sender [self setCurrentUser:[[User alloc] initWithUsername:self.usernameField.text]]; [[NSNotificationCenter defaultCenter] postNotificationName:@"UserChanged" object:self]; + [self.navigationController popViewControllerAnimated:YES]; } else { NSString *title = NSLocalizedString(@"You must enter a username!", @@ -83,4 +85,13 @@ - (IBAction)userNameChanged:(id) sender } } +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField == self.usernameField) { + [textField resignFirstResponder]; + [self userNameChanged:textField]; + return NO; + } + return YES; +} + @end diff --git a/Coderwall/Controllers/iPad/AccomplishmentsiPadViewController.h b/Coderwall/Controllers/iPad/AccomplishmentsiPadViewController.h deleted file mode 100755 index c836cbe..0000000 --- a/Coderwall/Controllers/iPad/AccomplishmentsiPadViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// AccomplishmentsiPadViewController.h -// Coderwall -// -// Created by Will on 04/03/2012. -// Copyright (c) 2012 Bearded Apps. All rights reserved. -// - -#import "AccomplishmentsViewController.h" - -@interface AccomplishmentsiPadViewController : AccomplishmentsViewController - -- (void)loadData; - -@end diff --git a/Coderwall/Controllers/iPad/AccomplishmentsiPadViewController.m b/Coderwall/Controllers/iPad/AccomplishmentsiPadViewController.m deleted file mode 100755 index 0f308d1..0000000 --- a/Coderwall/Controllers/iPad/AccomplishmentsiPadViewController.m +++ /dev/null @@ -1,124 +0,0 @@ -// -// AccomplishmentsiPadViewController.m -// Coderwall -// -// Created by Will on 04/03/2012. -// Copyright (c) 2012 Bearded Apps. All rights reserved. -// - -#import "AccomplishmentsiPadViewController.h" -#import "iPadAccomplishmentCell.h" - -@interface AccomplishmentsiPadViewController () - -@end - -@implementation AccomplishmentsiPadViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; -} - -- (void)loadData -{ - [super loadData]; - - // Do any additional setup after loading the view, typically from a nib. - NSMutableArray *newAccomplishments = [[NSMutableArray alloc] init ]; - - int i = 0; - NSMutableArray *row = [[NSMutableArray alloc] init ]; - for (NSDictionary *item in accomplishments) { - [row addObject:item]; - i++; - if(i==3){ - i=0; - [newAccomplishments addObject:row]; - row = [[NSMutableArray alloc] init ]; - } - } - if(i<3 && i>0) - [newAccomplishments addObject:row]; - - accomplishments = [[NSArray alloc] initWithArray:newAccomplishments]; - -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight); -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - self.parentViewController.navigationItem.title = @"Accomplishments"; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if([self.accomplishments count]==0){ - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"emptyCell"]; - cell.textLabel.text = @"No Accomplishments Entered Yet"; - return cell; - } else { - iPadAccomplishmentCell *cell = [tableView dequeueReusableCellWithIdentifier:@"accomplishmentsCell"]; - - // Configure the cell... - NSMutableArray *row = [self.accomplishments objectAtIndex:indexPath.row]; - UIImage *background = [[UIImage imageNamed:@"PanelBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 15, 15, 15)]; - CGSize maximumSize = CGSizeMake(190, 160); - UIFont *descriptionFont = [UIFont fontWithName:@"Helvetica" size:12]; - - NSString *accomplishment1 = [row objectAtIndex:0]; - [cell.bg1 setImage: background]; - - CGSize descriptionStringSize1 = [accomplishment1 sizeWithFont:descriptionFont - constrainedToSize:maximumSize - lineBreakMode:cell.detail1.lineBreakMode]; - - [cell.detail1 setText:accomplishment1]; - cell.detail1.frame = CGRectMake(22, 30, 190, descriptionStringSize1.height); - - if(row.count >= 2){ - NSString *accomplishment2 = [row objectAtIndex:1]; - [cell.bg2 setImage: background]; - - CGSize descriptionStringSize2 = [accomplishment2 sizeWithFont:descriptionFont - constrainedToSize:maximumSize - lineBreakMode:cell.detail2.lineBreakMode]; - - [cell.detail2 setText:accomplishment2]; - cell.detail2.frame = CGRectMake(257, 30, 190, descriptionStringSize2.height); - } else { - [cell.detail2 setText:@""]; - [cell.bg2 setImage:Nil]; - } - - if(row.count >=3){ - NSString *accomplishment3 = [row objectAtIndex:2]; - - [cell.bg3 setImage: background]; - - CGSize descriptionStringSize3= [accomplishment3 sizeWithFont:descriptionFont - constrainedToSize:maximumSize - lineBreakMode:cell.detail3.lineBreakMode]; - - [cell.detail3 setText:accomplishment3]; - cell.detail3.frame = CGRectMake(490, 30, 190, descriptionStringSize3.height); - } else { - [cell.detail3 setText:@""]; - [cell.bg3 setImage:Nil]; - } - - return cell; - } -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return [self.accomplishments count] > 0 ? 195 : 300; -} - -@end diff --git a/Coderwall/Controllers/iPad/BadgesCollectionViewController.h b/Coderwall/Controllers/iPad/BadgesCollectionViewController.h new file mode 100644 index 0000000..e7a1ed8 --- /dev/null +++ b/Coderwall/Controllers/iPad/BadgesCollectionViewController.h @@ -0,0 +1,26 @@ +// +// BadgesCollectionViewController.h +// Coderwall +// +// Created by Will Mckenzie on 12/03/2014. +// Copyright (c) 2014 Bearded Apps. All rights reserved. +// + +#import +#import + +@interface BadgesCollectionViewController : UICollectionViewController +{ + NSArray *badges; + + UIRefreshControl *_ios6RefreshHeaderView; + + EGORefreshTableHeaderView *_refreshHeaderView; + + BOOL _reloading; +} + +@property NSArray *badges; + +- (void)loadData; +@end diff --git a/Coderwall/Controllers/iPad/BadgesCollectionViewController.m b/Coderwall/Controllers/iPad/BadgesCollectionViewController.m new file mode 100644 index 0000000..1f896de --- /dev/null +++ b/Coderwall/Controllers/iPad/BadgesCollectionViewController.m @@ -0,0 +1,199 @@ +// +// BadgesCollectionViewController.m +// Coderwall +// +// Created by Will Mckenzie on 12/03/2014. +// Copyright (c) 2014 Bearded Apps. All rights reserved. +// + +#import "BadgesCollectionViewController.h" +#import +#import +#import +#import +#import + +@interface BadgesCollectionViewController () + +@end + +@implementation BadgesCollectionViewController + +@synthesize badges; + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable) name:@"UserChanged" object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetReloading) name:@"ConnectionError" object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetReloading) name:@"ResponseError" object:nil]; + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + if (_refreshHeaderView == nil) { + + //if (![UIRefreshControl class]) { + + EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.collectionView.bounds.size.height, self.view.frame.size.width, self.collectionView.bounds.size.height)]; + view.delegate = self; + view.backgroundColor = [UIColor clearColor]; + [self.collectionView addSubview:view]; + _refreshHeaderView = view; + + [_refreshHeaderView refreshLastUpdatedDate]; + + /*} else { + + _ios6RefreshHeaderView = [[UIRefreshControl alloc]init]; + [_ios6RefreshHeaderView addTarget:self action:@selector(refreshTable:) forControlEvents:UIControlEventValueChanged UIControlEventValueChanged]; + [self.collectionView addSubview:_ios6RefreshHeaderView]; + + }*/ + } + + if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) + self.navigationController.navigationBar.tintColor = cwDarkGreyColor; + else + self.navigationController.navigationBar.barTintColor = cwDarkGreyColor; + + self.navigationController.navigationBar.translucent = NO; + self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]}; + + [self loadData]; +} + +-(void)refreshTable:(UIRefreshControl *)sender +{ + User *user = [self currentUser]; + [user refresh]; + [self performSelector:@selector(doneLoadingCollectionViewData) withObject:nil afterDelay:0]; +} + +- (void)loadData +{ + User *user = [self currentUser]; + badges = [[NSArray alloc] initWithArray:user.badges]; +} + +- (void)reloadTable +{ + [self loadData]; + [self.collectionView reloadData]; + _reloading = NO; +} + +-(void)resetReloading +{ + [self performSelector:@selector(doneLoadingCollectionViewData) withObject:nil afterDelay:0]; + _reloading = NO; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +{ + return (interfaceOrientation == UIInterfaceOrientationPortrait); +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView +{ + return 1; +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + return [self.badges count] > 0 ? [self.badges count] : 1; +} + +// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath: +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath +{ + if([self.badges count] == 0){ + EmptyCollectionViewCell *cell = (EmptyCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"emptyCell" forIndexPath:indexPath]; + [cell.title setText:@"No Badges Awarded Yet"]; + return cell; + } else { + BadgeCollectionViewCell *cell = (BadgeCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"badgeCell" forIndexPath:indexPath]; + NSDictionary *badge = [self.badges objectAtIndex:indexPath.item]; + + NSString *descriptionText = [badge objectForKey:@"description"]; + + [cell.title setText:[badge objectForKey:@"name"]]; + [cell.detail setText:descriptionText]; + + NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[badge objectForKey:@"badge"]]]; + [cell.badge setImage:[ImageLoader loadImageFromURL:url usingCache:YES]]; + + return cell; + } +} + +#pragma mark - +#pragma mark Data Source Loading / Reloading Methods + +- (void)doneLoadingCollectionViewData{ + + // model should call this when its done loading + if (_refreshHeaderView != nil) + { + [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.collectionView]; + } + else + { + [_ios6RefreshHeaderView endRefreshing]; + } + +} + +#pragma mark - +#pragma mark UIScrollViewDelegate Methods + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ + + [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView]; + +} + +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ + + if (_ios6RefreshHeaderView != nil) + { + [_ios6RefreshHeaderView beginRefreshing]; + [self refreshTable:_ios6RefreshHeaderView]; + } + else + { + [_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView]; + } +} + +#pragma mark - +#pragma mark EGORefreshTableHeaderDelegate Methods + +- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{ + + _reloading = YES; + User *user = [self currentUser]; + [user refresh]; + [self performSelector:@selector(doneLoadingCollectionViewData) withObject:nil afterDelay:0]; + +} + +- (BOOL) egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{ + + return _reloading; // should return if data source model is reloading + +} + +- (NSDate*) egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{ + + return [NSDate date]; // should return date data source was last changed + +} + + +@end diff --git a/Coderwall/Controllers/iPad/BadgesiPadViewController.h b/Coderwall/Controllers/iPad/BadgesiPadViewController.h deleted file mode 100755 index 0642271..0000000 --- a/Coderwall/Controllers/iPad/BadgesiPadViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// BadgesiPadViewController.h -// Coderwall -// -// Created by Will on 02/03/2012. -// Copyright (c) 2012 Bearded Apps. All rights reserved. -// - -#import "BadgesViewController.h" - -@interface BadgesiPadViewController : BadgesViewController - -@end diff --git a/Coderwall/Controllers/iPad/BadgesiPadViewController.m b/Coderwall/Controllers/iPad/BadgesiPadViewController.m deleted file mode 100755 index 4ac27ca..0000000 --- a/Coderwall/Controllers/iPad/BadgesiPadViewController.m +++ /dev/null @@ -1,139 +0,0 @@ -// -// BadgesiPadViewController.m -// Coderwall -// -// Created by Will on 02/03/2012. -// Copyright (c) 2012 Bearded Apps. All rights reserved. -// - -#import "BadgesiPadViewController.h" -#import "iPadBadgeCell.h" -#import "ImageLoader.h" - -@interface BadgesiPadViewController () - -@end - -@implementation BadgesiPadViewController - -- (void)loadData -{ - [super loadData]; - // Do any additional setup after loading the view, typically from a nib. - NSMutableArray *newBadges = [[NSMutableArray alloc] init ]; - - int i = 0; - NSMutableArray *row = [[NSMutableArray alloc] init ]; - for (NSDictionary *item in badges) { - [row addObject:item]; - i++; - if(i==3){ - i=0; - [newBadges addObject:row]; - row = [[NSMutableArray alloc] init ]; - } - } - if(i<3 && i>0) - [newBadges addObject:row]; - - badges = [[NSArray alloc] initWithArray:newBadges]; - -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - self.parentViewController.navigationItem.title = @"Badges"; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeRight); -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if([self.badges count] == 0){ - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"emptyCell"]; - cell.textLabel.text = @"No Badges Awarded Yet"; - return cell; - } else { - iPadBadgeCell *cell = [tableView dequeueReusableCellWithIdentifier:@"badgeCell"]; - - // Configure the cell... - NSMutableArray *row = [self.badges objectAtIndex:indexPath.row]; - UIImage *background = [[UIImage imageNamed:@"PanelBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 15, 15, 15)]; - CGSize maximumSize = CGSizeMake(190, 60); - UIFont *descriptionFont = [UIFont fontWithName:@"Helvetica" size:11]; - CGSize descriptionStringSize; - - NSDictionary *badge1 = [row objectAtIndex:0]; - [cell.title1 setText:[badge1 objectForKey:@"name"]]; - NSURL *url1= [NSURL URLWithString:[NSString stringWithFormat:@"%@",[badge1 objectForKey:@"badge"]]]; - UIImage *badgeImage1 = [ImageLoader loadImageFromURL:url1 usingCache:YES]; - [cell.badge1 setImage:badgeImage1]; - [cell.bg1 setImage: background]; - - NSString *descriptionText1= [badge1 objectForKey:@"description"]; - descriptionStringSize = [descriptionText1 sizeWithFont:descriptionFont - constrainedToSize:maximumSize - lineBreakMode:cell.detail1.lineBreakMode]; - - [cell.detail1 setText:descriptionText1]; - cell.detail1.frame = CGRectMake(25, 232, 190, descriptionStringSize.height); - - if(row.count >= 2){ - NSDictionary *badge2 = [row objectAtIndex:1]; - [cell.title2 setText:[badge2 objectForKey:@"name"]]; - NSURL *url2= [NSURL URLWithString:[NSString stringWithFormat:@"%@",[badge2 objectForKey:@"badge"]]]; - UIImage *badgeImage2 = [ImageLoader loadImageFromURL:url2 usingCache:YES]; - [cell.badge2 setImage:badgeImage2]; - - [cell.bg2 setImage: background]; - - NSString *descriptionText2= [badge2 objectForKey:@"description"]; - descriptionStringSize = [descriptionText2 sizeWithFont:descriptionFont - constrainedToSize:maximumSize - lineBreakMode:cell.detail2.lineBreakMode]; - - [cell.detail2 setText:descriptionText2]; - cell.detail2.frame = CGRectMake(256, 232, 190, descriptionStringSize.height); - } else { - [cell.title2 setText:@""]; - [cell.detail2 setText:@""]; - [cell.badge2 setImage:Nil]; - [cell.bg2 setImage:Nil]; - } - - if(row.count >=3){ - NSDictionary *badge3 = [row objectAtIndex:2]; - [cell.title3 setText:[badge3 objectForKey:@"name"]]; - NSURL *url3= [NSURL URLWithString:[NSString stringWithFormat:@"%@",[badge3 objectForKey:@"badge"]]]; - UIImage *badgeImage3 = [ImageLoader loadImageFromURL:url3 usingCache:YES]; - [cell.badge3 setImage:badgeImage3]; - [cell.bg3 setImage: background]; - - NSString *descriptionText3= [badge3 objectForKey:@"description"]; - descriptionStringSize = [descriptionText3 sizeWithFont:descriptionFont - constrainedToSize:maximumSize - lineBreakMode:cell.detail3.lineBreakMode]; - - [cell.detail3 setText:descriptionText3]; - cell.detail3.frame = CGRectMake(485, 232, 190, descriptionStringSize.height); - } else { - [cell.title3 setText:@""]; - [cell.detail3 setText:@""]; - [cell.badge3 setImage:Nil]; - [cell.bg3 setImage:Nil]; - } - - return cell; - } -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return 300; -} - -@end diff --git a/Coderwall/Controllers/iPad/SummaryViewController.m b/Coderwall/Controllers/iPad/SummaryViewController.m index cfe8a8f..93647e8 100755 --- a/Coderwall/Controllers/iPad/SummaryViewController.m +++ b/Coderwall/Controllers/iPad/SummaryViewController.m @@ -37,7 +37,7 @@ - (void)loadData User *user = [self currentUser]; - if(user != (id)[NSNull null] && user.userName != @"" && user.userName.length != 0){ + if(user != (id)[NSNull null] && ![user.userName isEqual: @""] && user.userName.length != 0){ NSMutableArray *data = [[NSMutableArray alloc] init]; NSMutableArray *keys = [[NSMutableArray alloc] init]; NSMutableArray *stats; @@ -58,8 +58,8 @@ - (void)loadData summaryDetails = [summaryDetails stringByAppendingString:user.location]; - NSArray *profileData = [[NSArray alloc] init]; - NSArray *profileKeys = [[NSArray alloc] init]; + NSArray *profileData;// = [NSArray alloc]; + NSArray *profileKeys;// = [NSArray alloc]; if(user.thumbnail != nil){ profileData = [[NSArray alloc] initWithObjects:user.name,summaryDetails,user.thumbnail,nil]; @@ -164,28 +164,15 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - NSInteger numRows = [self tableView:self.tableView numberOfRowsInSection:indexPath.section]; - - UIImageView *background; - if(indexPath.row==0 && numRows==1) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"PanelBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 0, 15, 0)]]; - else if(indexPath.row == 0) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableTopBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 0, 1, 0)]]; - else if(indexPath.row == numRows-1) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableBottomBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 15, 0)]]; - else - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableMiddleBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 1, 0)]]; - - [background setContentMode:UIViewAutoresizingFlexibleHeight]; - [background setClipsToBounds:true]; - - if((NSString *)[sections objectAtIndex:indexPath.section] == @"Profile"){ + if([(NSString *)[sections objectAtIndex:indexPath.section] isEqual: @"Profile"]){ + ProfileCell *cell = [tableView dequeueReusableCellWithIdentifier:@"profileCell"]; NSArray *section = (NSArray *)[statsData objectAtIndex:indexPath.section]; NSDictionary *item = (NSDictionary *)[section objectAtIndex:indexPath.row]; cell.title.text = [item objectForKey:@"fullName"]; cell.detail.text = [item objectForKey:@"summary"]; [cell.avatar setImage:[UIImage imageNamed:@"defaultavatar.png"]]; + if([item objectForKey:@"avatar"]){ [DejalBezelActivityView activityViewForView:cell.avatar]; dispatch_queue_t downloadQueue = dispatch_queue_create("download queue", NULL); @@ -198,41 +185,28 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N waitUntilDone:YES]; }); } - cell.backgroundView = background; return cell; - } else if((NSString *)[sections objectAtIndex:indexPath.section] == @"Specialities"){ + + } else if([(NSString *)[sections objectAtIndex:indexPath.section] isEqual: @"Specialities"]){ + StatCell *cell = [tableView dequeueReusableCellWithIdentifier:@"statCell"]; NSString *item = (NSString *)[(NSArray *)[statsData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; cell.title.text = item; cell.number.text = @""; - cell.backgroundView = background; - - if(indexPath.row ==0) - [(StatCell *)cell setYPos:21]; - else - [(StatCell *)cell setYPos:11]; - return cell; } else { + StatCell *cell = [tableView dequeueReusableCellWithIdentifier:@"statCell"]; NSArray *section = (NSArray *)[statsData objectAtIndex:indexPath.section]; NSDictionary *item = (NSDictionary *)[section objectAtIndex:indexPath.row]; cell.title.text = [item objectForKey:@"description"]; cell.number.text = [(NSNumber *)[item objectForKey:@"number"] stringValue]; - cell.backgroundView = background; - - if(indexPath.row ==0) - [(StatCell *)cell setYPos:21]; - else - [(StatCell *)cell setYPos:11]; - return cell; + } - - } @@ -252,17 +226,11 @@ - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInte - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if((NSString *)[sections objectAtIndex:indexPath.section] == @"Profile"){ + if([(NSString *)[sections objectAtIndex:indexPath.section] isEqual: @"Profile"]){ return 325; } else { - CGFloat height = 44; - - if(indexPath.row == 0) - height += 10; - - if(indexPath.row == [self tableView:self.tableView numberOfRowsInSection:indexPath.section]-1) - height+=10; + CGFloat height = 45; return height; diff --git a/Coderwall/Controllers/iPhone/AccomplishmentsViewController.h b/Coderwall/Controllers/iPhone/AccomplishmentsViewController.h deleted file mode 100755 index 7f4bcb4..0000000 --- a/Coderwall/Controllers/iPhone/AccomplishmentsViewController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// AccomplishmentsViewController.h -// Coderwall -// -// Created by Will on 20/02/2012. -// Copyright (c) 2012 Bearded Apps. All rights reserved. -// - -#import -#import "EGORefreshTableHeaderView.h" - -@interface AccomplishmentsViewController : UITableViewController -{ - NSArray *accomplishments; - - UIRefreshControl *_ios6RefreshHeaderView; - - EGORefreshTableHeaderView *_refreshHeaderView; - // Reloading var should really be your tableviews datasource - // Putting it here for demo purposes - BOOL _reloading; -} - -@property NSArray *accomplishments; - -- (void)loadData; - -@end diff --git a/Coderwall/Controllers/iPhone/AccomplishmentsViewController.m b/Coderwall/Controllers/iPhone/AccomplishmentsViewController.m deleted file mode 100755 index 2263a7c..0000000 --- a/Coderwall/Controllers/iPhone/AccomplishmentsViewController.m +++ /dev/null @@ -1,225 +0,0 @@ -// -// AccomplishmentsViewController.m -// Coderwall -// -// Created by Will on 20/02/2012. -// Copyright (c) 2012 Bearded Apps. All rights reserved. -// - -#import "AccomplishmentsViewController.h" -#import "User.h" -#import "UIViewController+appDelegateUser.h" -#import "AccomplishmentCell.h" - -@implementation AccomplishmentsViewController - -@synthesize accomplishments; - -- (id)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable) name:@"UserChanged" object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetReloading) name:@"ConnectionError" object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetReloading) name:@"ResponseError" object:nil]; - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - if (_refreshHeaderView == nil) { - - if (![UIRefreshControl class]) - { - EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)]; - view.delegate = self; - view.backgroundColor = [UIColor clearColor]; - [self.tableView addSubview:view]; - _refreshHeaderView = view; - - [_refreshHeaderView refreshLastUpdatedDate]; - } - - else - { - _ios6RefreshHeaderView = [[UIRefreshControl alloc]init]; - [_ios6RefreshHeaderView addTarget:self action:@selector(refreshTable:) forControlEvents:UIControlEventValueChanged]; - self.refreshControl = _ios6RefreshHeaderView; - } - } - [self loadData]; - -} - --(void)refreshTable:(UIRefreshControl *)sender -{ - User *user = [self currentUser]; - [user refresh]; - [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:0]; -} -- (void)loadData -{ - User *user = [self currentUser]; - accomplishments = [[NSArray alloc] initWithArray:user.accomplishments]; -} - -- (void)reloadTable -{ - [self loadData]; - [self.tableView reloadData]; - _reloading = NO; -} - - --(void)resetReloading -{ - [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:0]; - _reloading = NO; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - // Return the number of sections. - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - // Return the number of rows in the section. - return [accomplishments count] > 0 ? [accomplishments count] : 1; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if([accomplishments count]==0){ - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"emptyCell"]; - cell.textLabel.text = @"No Accomplishments Entered Yet"; - return cell; - } else { - AccomplishmentCell *cell = [tableView dequeueReusableCellWithIdentifier:@"accomplishmentCell"]; - NSString *accomplishment = [accomplishments objectAtIndex:indexPath.row]; - - CGSize maximumSize = CGSizeMake(280, 9999); - UIFont *descriptionFont = [UIFont fontWithName:@"Helvetica" size:12]; - CGSize descriptionStringSize = [accomplishment sizeWithFont:descriptionFont - constrainedToSize:maximumSize - lineBreakMode:cell.detail.lineBreakMode]; - - UIImageView *background; - - if(indexPath.row==0 && self.accomplishments.count==1) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"PanelBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 0, 15, 0)]]; - else if(indexPath.row == 0) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableTopBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 0, 1, 0)]]; - else if(indexPath.row == self.accomplishments.count-1) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableBottomBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 15, 0)]]; - else - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableMiddleBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 1, 0)]]; - - - [background setContentMode:UIViewAutoresizingFlexibleHeight]; - [background setClipsToBounds:true]; - - if(indexPath.row == 0 && self.accomplishments.count == 1) - cell.detail.frame = CGRectMake(20, 16, 280, descriptionStringSize.height); - else if(indexPath.row ==0) - cell.detail.frame = CGRectMake(20, 21, 280, descriptionStringSize.height); - else - cell.detail.frame = CGRectMake(20, 11, 280, descriptionStringSize.height); - - // Configure the cell... - cell.backgroundView = background; - cell.detail.text = accomplishment; - return cell; - } -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if([accomplishments count]==0){ - return 100; - } else { - AccomplishmentCell *cell = (AccomplishmentCell *)[self tableView:self.tableView cellForRowAtIndexPath:indexPath]; - int height = cell.detail.frame.size.height + 22; - if(indexPath.row == 0) - height += 10; - - if(indexPath.row == self.accomplishments.count-1) - height+=10; - - return height; - } -} -#pragma mark - -#pragma mark Data Source Loading / Reloading Methods - -- (void)doneLoadingTableViewData{ - - // model should call this when its done loading - if (_refreshHeaderView != nil) - { - [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView]; - } - else - { - [_ios6RefreshHeaderView endRefreshing]; - } - -} - -#pragma mark - -#pragma mark UIScrollViewDelegate Methods - -- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ - - [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView]; - -} - -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ - - if (_ios6RefreshHeaderView != nil) - { - [_ios6RefreshHeaderView beginRefreshing]; - [self refreshTable:_ios6RefreshHeaderView]; - } - else - { - [_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView]; - } -} - -#pragma mark - -#pragma mark EGORefreshTableHeaderDelegate Methods - -- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{ - - _reloading = YES; - User *user = [self currentUser]; - [user refresh]; - [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:0]; - -} - -- (BOOL) egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{ - - return _reloading; // should return if data source model is reloading - -} - -- (NSDate*) egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{ - - return [NSDate date]; // should return date data source was last changed - -} - - -@end diff --git a/Coderwall/Controllers/iPhone/BadgesViewController.m b/Coderwall/Controllers/iPhone/BadgesViewController.m index ea694e3..f994386 100755 --- a/Coderwall/Controllers/iPhone/BadgesViewController.m +++ b/Coderwall/Controllers/iPhone/BadgesViewController.m @@ -35,23 +35,23 @@ - (void)viewDidLoad if (_refreshHeaderView == nil) { - if (![UIRefreshControl class]) - { - EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)]; - view.delegate = self; - view.backgroundColor = [UIColor clearColor]; - [self.tableView addSubview:view]; - _refreshHeaderView = view; - - [_refreshHeaderView refreshLastUpdatedDate]; - } + //if (![UIRefreshControl class]) { + + EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)]; + view.delegate = self; + view.backgroundColor = [UIColor clearColor]; + [self.tableView addSubview:view]; + _refreshHeaderView = view; + [_refreshHeaderView refreshLastUpdatedDate]; - else - { + /*} else { + _ios6RefreshHeaderView = [[UIRefreshControl alloc]init]; [_ios6RefreshHeaderView addTarget:self action:@selector(refreshTable:) forControlEvents:UIControlEventValueChanged]; + [_ios6RefreshHeaderView setTintColor: cwDarkGreyColor]; self.refreshControl = _ios6RefreshHeaderView; - } + + }*/ } [self loadData]; @@ -60,6 +60,7 @@ - (void)viewDidLoad -(void)refreshTable:(UIRefreshControl *)sender { + NSLog(@"Refresh Table"); User *user = [self currentUser]; [user refresh]; [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:0]; @@ -115,42 +116,12 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N NSDictionary *badge = [self.badges objectAtIndex:indexPath.row]; [cell.title setText:[badge objectForKey:@"name"]]; - CGSize maximumSize = CGSizeMake(190, 60); NSString *descriptionText = [badge objectForKey:@"description"]; - UIFont *descriptionFont = [UIFont fontWithName:@"Helvetica" size:11]; - CGSize descriptionStringSize = [descriptionText sizeWithFont:descriptionFont - constrainedToSize:maximumSize - lineBreakMode:cell.detail.lineBreakMode]; - [cell.detail setText:descriptionText]; NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[badge objectForKey:@"badge"]]]; [cell.badge setImage:[ImageLoader loadImageFromURL:url usingCache:YES]]; - if(indexPath.row == 0){ - cell.badge.frame = CGRectMake(15, 20, 80, 80); - cell.title.frame = CGRectMake(105, 20, 190, 21); - cell.detail.frame = CGRectMake(105, 40, 190, descriptionStringSize.height); - } else { - cell.badge.frame = CGRectMake(15, 10, 80, 80); - cell.title.frame = CGRectMake(105, 10, 190, 21); - cell.detail.frame = CGRectMake(105, 30, 190, descriptionStringSize.height); - } - - UIImageView *background; - if(indexPath.row==0 && self.badges.count==1) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"PanelBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 0, 15, 0)]]; - else if(indexPath.row == 0) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableTopBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 0, 1, 0)]]; - else if(indexPath.row == self.badges.count-1) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableBottomBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 15, 0)]]; - else - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableMiddleBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 1, 0)]]; - - [background setContentMode:UIViewAutoresizingFlexibleHeight]; - [background setClipsToBounds:true]; - cell.backgroundView = background; - return cell; } } diff --git a/Coderwall/Controllers/iPhone/ProfileViewController.h b/Coderwall/Controllers/iPhone/ProfileViewController.h index 06ee106..77339b5 100755 --- a/Coderwall/Controllers/iPhone/ProfileViewController.h +++ b/Coderwall/Controllers/iPhone/ProfileViewController.h @@ -8,13 +8,13 @@ #import #import "EGORefreshTableHeaderView.h" +#import "AvatarView.h" @interface ProfileViewController : UIViewController { IBOutlet UILabel *fullName; IBOutlet UILabel *summary; - IBOutlet UIImageView *avatar; - IBOutlet UIImageView *profileBg; + IBOutlet AvatarView *avatar; IBOutlet UIScrollView *profileScrollView; UIRefreshControl *_ios6RefreshHeaderView; diff --git a/Coderwall/Controllers/iPhone/ProfileViewController.m b/Coderwall/Controllers/iPhone/ProfileViewController.m index 006e176..c7d6b39 100755 --- a/Coderwall/Controllers/iPhone/ProfileViewController.m +++ b/Coderwall/Controllers/iPhone/ProfileViewController.m @@ -32,31 +32,30 @@ - (void)viewDidLoad // Do any additional setup after loading the view, typically from a nib. if (_refreshHeaderView == nil) { - if (![UIRefreshControl class]) - { - EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - profileScrollView.bounds.size.height, profileScrollView.frame.size.width, profileScrollView.bounds.size.height)]; - view.delegate = self; - view.backgroundColor = [UIColor clearColor]; - [profileScrollView addSubview:view]; - _refreshHeaderView = view; - - // update the last update date - [_refreshHeaderView refreshLastUpdatedDate]; - - } + //if (![UIRefreshControl class]) { + EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - profileScrollView.bounds.size.height, profileScrollView.frame.size.width, profileScrollView.bounds.size.height)]; + view.delegate = self; + view.backgroundColor = [UIColor clearColor]; + [profileScrollView addSubview:view]; + _refreshHeaderView = view; + + // update the last update date + [_refreshHeaderView refreshLastUpdatedDate]; + + /*} else { _ios6RefreshHeaderView = [[UIRefreshControl alloc]init]; [_ios6RefreshHeaderView addTarget:self action:@selector(refreshTable:) forControlEvents:UIControlEventValueChanged]; [profileScrollView addSubview:_ios6RefreshHeaderView]; - } + }*/ } - if(summary.text == @"Summary") + if([summary.text isEqual: @"Summary"]) [summary setText:@""]; - if(fullName.text == @"Full Name") + if([fullName.text isEqual: @"Full Name"]) [fullName setText:@""]; [self loadData]; @@ -73,9 +72,8 @@ -(void)refreshTable:(UIRefreshControl *)sender - (void)loadData { - [profileBg setImage:[[UIImage imageNamed:@"PanelBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 0, 15, 0)]]; User *user = [self currentUser]; - if(user != (id)[NSNull null] && user.userName != @"" && user.userName.length != 0){ + if(user != (id)[NSNull null] && ![user.userName isEqual: @""] && user.userName.length != 0){ [fullName setText:user.name]; NSString *summaryDetails = @""; @@ -93,14 +91,7 @@ - (void)loadData summaryDetails = [summaryDetails stringByAppendingString:user.location]; - CGSize maximumSize = CGSizeMake(260, 80); - UIFont *summaryFont = [UIFont fontWithName:@"Helvetica" size:14]; - CGSize summaryStringSize = [summaryDetails sizeWithFont:summaryFont - constrainedToSize:maximumSize - lineBreakMode:summary.lineBreakMode]; - [summary setText:summaryDetails]; - [summary setFrame:CGRectMake(30, 265, 260, summaryStringSize.height)]; [avatar setImage:[UIImage imageNamed:@"defaultavatar.png"]]; if(user.thumbnail != nil){ @@ -112,7 +103,6 @@ - (void)loadData withObject:userAvatar waitUntilDone:YES]; }); - dispatch_release(downloadQueue); } } else { [summary setText:@""]; @@ -129,7 +119,12 @@ - (void)setUserAvatar:(UIImage *)userAvatar [avatar setImage:userAvatar]; else [avatar setImage:[UIImage imageNamed:@"defaultavatar.png"]]; + + [avatar setContentMode:UIViewContentModeScaleAspectFill]; + [avatar setClipsToBounds:YES]; + [DejalActivityView removeView]; + } -(void)reloadView diff --git a/Coderwall/Controllers/iPhone/StatsViewController.m b/Coderwall/Controllers/iPhone/StatsViewController.m index a75a47d..d00691b 100755 --- a/Coderwall/Controllers/iPhone/StatsViewController.m +++ b/Coderwall/Controllers/iPhone/StatsViewController.m @@ -35,23 +35,22 @@ - (void)viewDidLoad if (_refreshHeaderView == nil) { - if (![UIRefreshControl class]) - { - EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)]; - view.delegate = self; - view.backgroundColor = [UIColor clearColor]; - [self.tableView addSubview:view]; - _refreshHeaderView = view; - - [_refreshHeaderView refreshLastUpdatedDate]; - } + //if (![UIRefreshControl class]) { + EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)]; + view.delegate = self; + view.backgroundColor = [UIColor clearColor]; + [self.tableView addSubview:view]; + _refreshHeaderView = view; + + [_refreshHeaderView refreshLastUpdatedDate]; + /*} else { _ios6RefreshHeaderView = [[UIRefreshControl alloc]init]; [_ios6RefreshHeaderView addTarget:self action:@selector(refreshTable:) forControlEvents:UIControlEventValueChanged]; self.refreshControl = _ios6RefreshHeaderView; - } + }*/ } [self loadData]; @@ -138,8 +137,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N { StatCell *cell = [tableView dequeueReusableCellWithIdentifier:@"statCell"]; - NSInteger numRows = [self tableView:self.tableView numberOfRowsInSection:indexPath.section]; - if((NSString *)[sections objectAtIndex:indexPath.section] == @"Specialities"){ + if([(NSString *)[sections objectAtIndex:indexPath.section] isEqual: @"Specialities"]){ NSString *item = (NSString *)[(NSArray *)[statsData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; cell.title.text = item; cell.number.text = @""; @@ -150,25 +148,6 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.number.text = [(NSNumber *)[item objectForKey:@"number"] stringValue]; } - UIImageView *background; - if(indexPath.row==0 && numRows==1) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"PanelBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 0, 15, 0)]]; - else if(indexPath.row == 0) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableTopBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 0, 1, 0)]]; - else if(indexPath.row == numRows-1) - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableBottomBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 15, 0)]]; - else - background = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"TableMiddleBg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 1, 0)]]; - - [background setContentMode:UIViewAutoresizingFlexibleHeight]; - [background setClipsToBounds:true]; - cell.backgroundView = background; - - if(indexPath.row ==0) - [cell setYPos:21]; - else - [cell setYPos:11]; - return cell; } @@ -179,16 +158,7 @@ - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInte - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - CGFloat height = 44; - - if(indexPath.row == 0) - height += 10; - - if(indexPath.row == [self tableView:self.tableView numberOfRowsInSection:indexPath.section]-1) - height+=10; - - return height; - + return 45; } #pragma mark - diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29-1.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29-1.png new file mode 100644 index 0000000..6f81eb7 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29-1.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29.png new file mode 100644 index 0000000..6f81eb7 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29@2x-1.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29@2x-1.png new file mode 100644 index 0000000..1a1fb0e Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29@2x-1.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29@2x.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29@2x.png new file mode 100644 index 0000000..1a1fb0e Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon29x29@2x.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon40x40.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon40x40.png new file mode 100644 index 0000000..e030a7c Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon40x40.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon40x40@2x-1.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon40x40@2x-1.png new file mode 100644 index 0000000..7339a09 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon40x40@2x-1.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon40x40@2x.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon40x40@2x.png new file mode 100644 index 0000000..7339a09 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon40x40@2x.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon50x50.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon50x50.png new file mode 100644 index 0000000..bfc1588 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon50x50.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon50x50@2x.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon50x50@2x.png new file mode 100644 index 0000000..f1ad3ca Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon50x50@2x.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon57x57.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon57x57.png new file mode 100644 index 0000000..d50ded4 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon57x57.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon57x57@2x.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon57x57@2x.png new file mode 100644 index 0000000..54873fb Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon57x57@2x.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png new file mode 100644 index 0000000..321594b Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon72x72.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon72x72.png new file mode 100644 index 0000000..2d55ce4 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon72x72.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon72x72@2x.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon72x72@2x.png new file mode 100644 index 0000000..3d84897 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon72x72@2x.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon76x76.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon76x76.png new file mode 100644 index 0000000..beb47c9 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon76x76.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon76x76@2x.png b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon76x76@2x.png new file mode 100644 index 0000000..fe61e77 Binary files /dev/null and b/Coderwall/Images.xcassets/AppIcon.appiconset/AppIcon76x76@2x.png differ diff --git a/Coderwall/Images.xcassets/AppIcon.appiconset/Contents.json b/Coderwall/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..3c6d38a --- /dev/null +++ b/Coderwall/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,104 @@ +{ + "images" : [ + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "AppIcon29x29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "AppIcon29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "AppIcon40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "AppIcon57x57.png", + "scale" : "1x" + }, + { + "size" : "57x57", + "idiom" : "iphone", + "filename" : "AppIcon57x57@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "AppIcon60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "AppIcon29x29-1.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "AppIcon29x29@2x-1.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "AppIcon40x40.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "AppIcon40x40@2x-1.png", + "scale" : "2x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "AppIcon50x50.png", + "scale" : "1x" + }, + { + "size" : "50x50", + "idiom" : "ipad", + "filename" : "AppIcon50x50@2x.png", + "scale" : "2x" + }, + { + "size" : "72x72", + "idiom" : "ipad", + "filename" : "AppIcon72x72.png", + "scale" : "1x" + }, + { + "size" : "72x72", + "idiom" : "ipad", + "filename" : "AppIcon72x72@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "AppIcon76x76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "AppIcon76x76@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Coderwall/Images.xcassets/LaunchImage.launchimage/Contents.json b/Coderwall/Images.xcassets/LaunchImage.launchimage/Contents.json new file mode 100644 index 0000000..0e8b0ff --- /dev/null +++ b/Coderwall/Images.xcassets/LaunchImage.launchimage/Contents.json @@ -0,0 +1,94 @@ +{ + "images" : [ + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "subtype" : "retina4", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "subtype" : "retina4", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "to-status-bar", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Coderwall/Models/User.m b/Coderwall/Models/User.m index 97c9cb8..1c4bab9 100755 --- a/Coderwall/Models/User.m +++ b/Coderwall/Models/User.m @@ -7,7 +7,7 @@ // #import "User.h" -#import "SBJson.h" +#import "SBJson4.h" #import "ImageLoader.h" @implementation User @@ -64,7 +64,7 @@ - (void) refresh - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response; - int code = [httpResponse statusCode]; + int code = (int)[httpResponse statusCode]; if(code == 200){ [receivedData setLength:0]; } else { @@ -85,7 +85,8 @@ - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSString *response = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; - [self setDetails:[response JSONValue]]; + NSData *data = [response dataUsingEncoding:NSUTF8StringEncoding]; + [self setDetails:[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]]; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error diff --git a/Coderwall/Resources/Shared/inset-logo.png b/Coderwall/Resources/Shared/inset-logo.png index 65ae6bc..a882da3 100755 Binary files a/Coderwall/Resources/Shared/inset-logo.png and b/Coderwall/Resources/Shared/inset-logo.png differ diff --git a/Coderwall/Resources/Shared/inset-logo@2x.png b/Coderwall/Resources/Shared/inset-logo@2x.png index 8e91ff6..1fbc86d 100755 Binary files a/Coderwall/Resources/Shared/inset-logo@2x.png and b/Coderwall/Resources/Shared/inset-logo@2x.png differ diff --git a/Coderwall/Views/View Extensions/AccomplishmentCell.h b/Coderwall/Views/View Extensions/AccomplishmentCell.h index 1e21d87..9eb4637 100755 --- a/Coderwall/Views/View Extensions/AccomplishmentCell.h +++ b/Coderwall/Views/View Extensions/AccomplishmentCell.h @@ -11,7 +11,9 @@ @interface AccomplishmentCell : UITableViewCell { IBOutlet UILabel *__weak detail; + IBOutlet NSLayoutConstraint *__weak textHeight; } @property (weak) UILabel *detail; +@property (weak) NSLayoutConstraint *textHeight; @end diff --git a/Coderwall/Views/View Extensions/AccomplishmentsCell.m b/Coderwall/Views/View Extensions/AccomplishmentsCell.m index 3ec5287..e8e8b0d 100755 --- a/Coderwall/Views/View Extensions/AccomplishmentsCell.m +++ b/Coderwall/Views/View Extensions/AccomplishmentsCell.m @@ -10,7 +10,7 @@ @implementation AccomplishmentCell -@synthesize detail; +@synthesize detail, textHeight; - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { diff --git a/Coderwall/Views/View Extensions/AvatarView.h b/Coderwall/Views/View Extensions/AvatarView.h new file mode 100644 index 0000000..d9bb16e --- /dev/null +++ b/Coderwall/Views/View Extensions/AvatarView.h @@ -0,0 +1,15 @@ +// +// AvatarView.h +// Coderwall +// +// Created by Will Mckenzie on 12/03/2014. +// Copyright (c) 2014 Bearded Apps. All rights reserved. +// + +#import + +@interface AvatarView : UIView + +@property (nonatomic, strong) UIImage *image; + +@end diff --git a/Coderwall/Views/View Extensions/AvatarView.m b/Coderwall/Views/View Extensions/AvatarView.m new file mode 100644 index 0000000..7fe7ab5 --- /dev/null +++ b/Coderwall/Views/View Extensions/AvatarView.m @@ -0,0 +1,152 @@ +// +// AvatarView.m +// Coderwall +// +// Created by Will Mckenzie on 12/03/2014. +// Copyright (c) 2014 Bearded Apps. All rights reserved. +// + +#import "AvatarView.h" + +@interface AvatarView () + +- (void)setup; + +@end + +@implementation AvatarView + +@synthesize image = _image; + +- (void)setImage:(UIImage *)image +{ + _image = image; + + [self setNeedsDisplay]; +} + +- (void)setup +{ + self.backgroundColor = [UIColor clearColor]; +} + +- (id)init +{ + return [self initWithFrame:CGRectMake(0, 0, 128.f, 128.f)]; +} + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + if (self) + { + [self setup]; + } + + return self; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) + { + [self setup]; + } + + return self; +} + +#pragma mark - Drawing + +- (void)drawRect:(CGRect)rect +{ + // Image rect + CGRect imageRect = CGRectMake(0, 0, rect.size.width, rect.size.height); + + // Start working with the mask + CGColorSpaceRef maskColorSpaceRef = CGColorSpaceCreateDeviceGray(); + CGContextRef mainMaskContextRef = CGBitmapContextCreate(NULL, + rect.size.width, + rect.size.height, + 8, + rect.size.width, + maskColorSpaceRef, + 0); + CGContextRef shineMaskContextRef = CGBitmapContextCreate(NULL, + rect.size.width, + rect.size.height, + 8, + rect.size.width, + maskColorSpaceRef, + 0); + CGColorSpaceRelease(maskColorSpaceRef); + CGContextSetFillColorWithColor(mainMaskContextRef, [UIColor blackColor].CGColor); + CGContextSetFillColorWithColor(shineMaskContextRef, [UIColor blackColor].CGColor); + CGContextFillRect(mainMaskContextRef, rect); + CGContextFillRect(shineMaskContextRef, rect); + CGContextSetFillColorWithColor(mainMaskContextRef, [UIColor whiteColor].CGColor); + CGContextSetFillColorWithColor(shineMaskContextRef, [UIColor whiteColor].CGColor); + + // Create main mask shape + CGContextMoveToPoint(mainMaskContextRef, 0, 0); + CGContextAddEllipseInRect(mainMaskContextRef, imageRect); + CGContextFillPath(mainMaskContextRef); + // Create shine mask shape + CGContextTranslateCTM(shineMaskContextRef, -(rect.size.width / 4), rect.size.height / 4 * 3); + CGContextRotateCTM(shineMaskContextRef, -45.f); + CGContextMoveToPoint(shineMaskContextRef, 0, 0); + CGContextFillRect(shineMaskContextRef, CGRectMake(0, + 0, + rect.size.width / 8 * 5, + rect.size.height)); + + CGImageRef mainMaskImageRef = CGBitmapContextCreateImage(mainMaskContextRef); + CGImageRef shineMaskImageRef = CGBitmapContextCreateImage(shineMaskContextRef); + CGContextRelease(mainMaskContextRef); + CGContextRelease(shineMaskContextRef); + // Done with mask context + + CGContextRef contextRef = UIGraphicsGetCurrentContext(); + CGContextSaveGState(contextRef); + + CGImageRef imageRef = CGImageCreateWithMask(self.image.CGImage, mainMaskImageRef); + + CGContextTranslateCTM(contextRef, 0, rect.size.height); + CGContextScaleCTM(contextRef, 1.0, -1.0); + + CGContextSaveGState(contextRef); + + // Draw image + CGContextDrawImage(contextRef, rect, imageRef); + + CGContextRestoreGState(contextRef); + CGContextSaveGState(contextRef); + + // Clip to shine's mask + CGContextClipToMask(contextRef, self.bounds, mainMaskImageRef); + CGContextClipToMask(contextRef, self.bounds, shineMaskImageRef); + CGContextSetBlendMode(contextRef, kCGBlendModeLighten); + //CGContextDrawLinearGradient(contextRef, [self alphaGradient], CGPointMake(0, 0), CGPointMake(0, self.bounds.size.height), 0); + + CGImageRelease(mainMaskImageRef); + CGImageRelease(shineMaskImageRef); + CGImageRelease(imageRef); + // Done with image + + CGContextRestoreGState(contextRef); + + CGContextSetLineWidth(contextRef, 0); + //CGContextSetStrokeColorWithColor(contextRef, self.borderColor.CGColor); + CGContextMoveToPoint(contextRef, 0, 0); + CGContextAddEllipseInRect(contextRef, imageRect); + // Drop shadow + /*CGContextSetShadowWithColor(contextRef, + self.shadowOffset, + self.shadowBlur, + self.shadowColor.CGColor);*/ + CGContextStrokePath(contextRef); + CGContextRestoreGState(contextRef); +} + +@end diff --git a/Coderwall/Views/View Extensions/BadgeCell.h b/Coderwall/Views/View Extensions/BadgeCell.h index 798e788..79d681b 100755 --- a/Coderwall/Views/View Extensions/BadgeCell.h +++ b/Coderwall/Views/View Extensions/BadgeCell.h @@ -8,7 +8,8 @@ #import -@interface BadgeCell : UITableViewCell{ +@interface BadgeCell : UITableViewCell +{ IBOutlet UIImageView *__weak badge; IBOutlet UILabel *__weak title; IBOutlet UILabel *__weak detail; diff --git a/Coderwall/Views/View Extensions/BadgeCollectionViewCell.h b/Coderwall/Views/View Extensions/BadgeCollectionViewCell.h new file mode 100644 index 0000000..2f63b53 --- /dev/null +++ b/Coderwall/Views/View Extensions/BadgeCollectionViewCell.h @@ -0,0 +1,22 @@ +// +// BadgeCollectionViewCell.h +// Coderwall +// +// Created by Will Mckenzie on 12/03/2014. +// Copyright (c) 2014 Bearded Apps. All rights reserved. +// + +#import + +@interface BadgeCollectionViewCell : UICollectionViewCell +{ + IBOutlet UIImageView *__weak badge; + IBOutlet UILabel *__weak title; + IBOutlet UILabel *__weak detail; +} + +@property (weak) UIImageView *badge; +@property (weak) UILabel *title; +@property (weak) UILabel *detail; + +@end diff --git a/Coderwall/Views/View Extensions/BadgeCollectionViewCell.m b/Coderwall/Views/View Extensions/BadgeCollectionViewCell.m new file mode 100644 index 0000000..aa4a466 --- /dev/null +++ b/Coderwall/Views/View Extensions/BadgeCollectionViewCell.m @@ -0,0 +1,17 @@ +// +// BadgeCollectionViewCell.m +// Coderwall +// +// Created by Will Mckenzie on 12/03/2014. +// Copyright (c) 2014 Bearded Apps. All rights reserved. +// + +#import "BadgeCollectionViewCell.h" + +@implementation BadgeCollectionViewCell + +@synthesize badge; +@synthesize detail; +@synthesize title; + +@end diff --git a/Coderwall/Views/View Extensions/EmptyCollectionViewCell.h b/Coderwall/Views/View Extensions/EmptyCollectionViewCell.h new file mode 100644 index 0000000..79c2d5b --- /dev/null +++ b/Coderwall/Views/View Extensions/EmptyCollectionViewCell.h @@ -0,0 +1,18 @@ +// +// EmptyCollectionViewCell.h +// Coderwall +// +// Created by Will Mckenzie on 12/03/2014. +// Copyright (c) 2014 Bearded Apps. All rights reserved. +// + +#import + +@interface EmptyCollectionViewCell : UICollectionViewCell +{ + IBOutlet UILabel *__weak title; +} + +@property (weak) UILabel *title; + +@end diff --git a/Coderwall/Views/View Extensions/EmptyCollectionViewCell.m b/Coderwall/Views/View Extensions/EmptyCollectionViewCell.m new file mode 100644 index 0000000..90772cc --- /dev/null +++ b/Coderwall/Views/View Extensions/EmptyCollectionViewCell.m @@ -0,0 +1,15 @@ +// +// EmptyCollectionViewCell.m +// Coderwall +// +// Created by Will Mckenzie on 12/03/2014. +// Copyright (c) 2014 Bearded Apps. All rights reserved. +// + +#import "EmptyCollectionViewCell.h" + +@implementation EmptyCollectionViewCell + +@synthesize title; + +@end diff --git a/Coderwall/Views/View Extensions/ProfileCell.h b/Coderwall/Views/View Extensions/ProfileCell.h index e114038..cc26296 100755 --- a/Coderwall/Views/View Extensions/ProfileCell.h +++ b/Coderwall/Views/View Extensions/ProfileCell.h @@ -7,15 +7,16 @@ // #import +#import "AvatarView.h" @interface ProfileCell : UITableViewCell { - IBOutlet UIImageView *__weak avatar; + IBOutlet AvatarView *__weak avatar; IBOutlet UILabel *__weak title; IBOutlet UILabel *__weak detail; } -@property (weak) UIImageView *avatar; +@property (weak) AvatarView *avatar; @property (weak) UILabel *title; @property (weak) UILabel *detail; diff --git a/Coderwall/en.lproj/MainStoryboard_iPad.storyboard b/Coderwall/en.lproj/MainStoryboard_iPad.storyboard index 17dd30f..54cb3bf 100755 --- a/Coderwall/en.lproj/MainStoryboard_iPad.storyboard +++ b/Coderwall/en.lproj/MainStoryboard_iPad.storyboard @@ -1,15 +1,12 @@ - + - - - + - @@ -19,16 +16,17 @@ + - + @@ -46,45 +44,44 @@ + - - - + + - + - + - + - - + + - - + @@ -92,37 +89,37 @@ - + - - + + - - - - + + + + + - - + - + @@ -136,80 +133,55 @@ + - - + - - - - - - - Title - Title - - - - - + + + + + + + + + - + + - - - - + + + - - - - - - - - - - - - - - - - - + + You will need to have signed up on Coderwall with your GitHub user account first. If you haven't already done that go to http://coderwall.com and sign up now. @@ -217,23 +189,33 @@ + + + + + + + + + + - + + - - + + - @@ -246,364 +228,201 @@ + - - - - - - - - - - - - - - - - - - - - - - + + - - - - + + + - + - - - + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - + + + - - - - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - - + + - - + + - - - + + + + + - + - - + + - - + + - - - + + - + - + - + - - + + - - - + + - - + + - - + + - - - - - - - + - - - + + + @@ -615,83 +434,20 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - \ No newline at end of file + diff --git a/Coderwall/en.lproj/MainStoryboard_iPhone.storyboard b/Coderwall/en.lproj/MainStoryboard_iPhone.storyboard index 0389d27..a7a3c2f 100755 --- a/Coderwall/en.lproj/MainStoryboard_iPhone.storyboard +++ b/Coderwall/en.lproj/MainStoryboard_iPhone.storyboard @@ -1,46 +1,43 @@ - + - - - + - - - + + - + + - + - - + + - - - - + + @@ -53,13 +50,13 @@ + - + - @@ -69,117 +66,115 @@ - + - + - + + + + - + - + + - + - - Title - Title - - + - - + + - + - - - + + - + + + + + + + + + + + + + - + - + - + - - - + - - - - - - - - - - - - @@ -188,130 +183,94 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + - - + + - - - - - + + + + + + + + + + + + + + + + + + + + - + - + - @@ -321,16 +280,17 @@ + - + @@ -345,48 +305,30 @@ - + - - - + + + + + + - - - - - - - - - - - - - - - - - + + You will need to have signed up on Coderwall with your GitHub user account first. If you haven't already done that go to http://coderwall.com and sign up now. @@ -394,139 +336,72 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - + + - + - + + - + - - - - - - + + - + - - - + + - + + - - + + - + - + - - - + - - - + + + - - - - - - - - - - - - @@ -535,105 +410,44 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + - + - - + + - - - + + @@ -648,75 +462,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - \ No newline at end of file + diff --git a/Default-568h@2x.png b/Default-568h@2x.png deleted file mode 100644 index 0891b7a..0000000 Binary files a/Default-568h@2x.png and /dev/null differ diff --git a/Icon-72.png b/Icon-72.png deleted file mode 100755 index 6f26ec4..0000000 Binary files a/Icon-72.png and /dev/null differ diff --git a/Icon-72@2x.png b/Icon-72@2x.png deleted file mode 100755 index 1ebf0ba..0000000 Binary files a/Icon-72@2x.png and /dev/null differ diff --git a/Icon.png b/Icon.png deleted file mode 100755 index e2fc6a8..0000000 Binary files a/Icon.png and /dev/null differ diff --git a/Icon@2x.png b/Icon@2x.png deleted file mode 100755 index 73509b5..0000000 Binary files a/Icon@2x.png and /dev/null differ diff --git a/Icons/App Icon [Rounded]/AppIcon29x29.png b/Icons/App Icon [Rounded]/AppIcon29x29.png new file mode 100644 index 0000000..6f81eb7 Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon29x29.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon29x29@2x.png b/Icons/App Icon [Rounded]/AppIcon29x29@2x.png new file mode 100644 index 0000000..1a1fb0e Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon29x29@2x.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon40x40.png b/Icons/App Icon [Rounded]/AppIcon40x40.png new file mode 100644 index 0000000..e030a7c Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon40x40.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon40x40@2x.png b/Icons/App Icon [Rounded]/AppIcon40x40@2x.png new file mode 100644 index 0000000..7339a09 Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon40x40@2x.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon50x50.png b/Icons/App Icon [Rounded]/AppIcon50x50.png new file mode 100644 index 0000000..bfc1588 Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon50x50.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon50x50@2x.png b/Icons/App Icon [Rounded]/AppIcon50x50@2x.png new file mode 100644 index 0000000..f1ad3ca Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon50x50@2x.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon57x57.png b/Icons/App Icon [Rounded]/AppIcon57x57.png new file mode 100644 index 0000000..d50ded4 Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon57x57.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon57x57@2x.png b/Icons/App Icon [Rounded]/AppIcon57x57@2x.png new file mode 100644 index 0000000..54873fb Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon57x57@2x.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon60x60.png b/Icons/App Icon [Rounded]/AppIcon60x60.png new file mode 100644 index 0000000..09037da Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon60x60.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon60x60@2x.png b/Icons/App Icon [Rounded]/AppIcon60x60@2x.png new file mode 100644 index 0000000..321594b Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon60x60@2x.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon72x72.png b/Icons/App Icon [Rounded]/AppIcon72x72.png new file mode 100644 index 0000000..2d55ce4 Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon72x72.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon72x72@2x.png b/Icons/App Icon [Rounded]/AppIcon72x72@2x.png new file mode 100644 index 0000000..3d84897 Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon72x72@2x.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon76x76.png b/Icons/App Icon [Rounded]/AppIcon76x76.png new file mode 100644 index 0000000..beb47c9 Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon76x76.png differ diff --git a/Icons/App Icon [Rounded]/AppIcon76x76@2x.png b/Icons/App Icon [Rounded]/AppIcon76x76@2x.png new file mode 100644 index 0000000..fe61e77 Binary files /dev/null and b/Icons/App Icon [Rounded]/AppIcon76x76@2x.png differ diff --git a/Icons/App Icon [Rounded]/Icon-72.png b/Icons/App Icon [Rounded]/Icon-72.png deleted file mode 100755 index 6f26ec4..0000000 Binary files a/Icons/App Icon [Rounded]/Icon-72.png and /dev/null differ diff --git a/Icons/App Icon [Rounded]/Icon-72@2x.png b/Icons/App Icon [Rounded]/Icon-72@2x.png deleted file mode 100755 index 1ebf0ba..0000000 Binary files a/Icons/App Icon [Rounded]/Icon-72@2x.png and /dev/null differ diff --git a/Icons/App Icon [Rounded]/Icon-Small-50.png b/Icons/App Icon [Rounded]/Icon-Small-50.png deleted file mode 100755 index 2b9d806..0000000 Binary files a/Icons/App Icon [Rounded]/Icon-Small-50.png and /dev/null differ diff --git a/Icons/App Icon [Rounded]/Icon-Small-50@2x.png b/Icons/App Icon [Rounded]/Icon-Small-50@2x.png deleted file mode 100755 index 529a681..0000000 Binary files a/Icons/App Icon [Rounded]/Icon-Small-50@2x.png and /dev/null differ diff --git a/Icons/App Icon [Rounded]/Icon-Small.png b/Icons/App Icon [Rounded]/Icon-Small.png deleted file mode 100755 index 9bd76bb..0000000 Binary files a/Icons/App Icon [Rounded]/Icon-Small.png and /dev/null differ diff --git a/Icons/App Icon [Rounded]/Icon-Small@2x.png b/Icons/App Icon [Rounded]/Icon-Small@2x.png deleted file mode 100755 index a01677f..0000000 Binary files a/Icons/App Icon [Rounded]/Icon-Small@2x.png and /dev/null differ diff --git a/Icons/App Icon [Rounded]/Icon.png b/Icons/App Icon [Rounded]/Icon.png deleted file mode 100755 index e2fc6a8..0000000 Binary files a/Icons/App Icon [Rounded]/Icon.png and /dev/null differ diff --git a/Icons/App Icon [Rounded]/Icon@2x.png b/Icons/App Icon [Rounded]/Icon@2x.png deleted file mode 100755 index 73509b5..0000000 Binary files a/Icons/App Icon [Rounded]/Icon@2x.png and /dev/null differ diff --git a/Icons/App Icon [Rounded]/iTunesArtwork.png b/Icons/App Icon [Rounded]/iTunesArtwork.png old mode 100755 new mode 100644 index a0bb39a..931c6ba Binary files a/Icons/App Icon [Rounded]/iTunesArtwork.png and b/Icons/App Icon [Rounded]/iTunesArtwork.png differ diff --git a/Icons/App Icon [Rounded]/iTunesArtwork@2x.png b/Icons/App Icon [Rounded]/iTunesArtwork@2x.png old mode 100755 new mode 100644 index 2eba6e7..ec18526 Binary files a/Icons/App Icon [Rounded]/iTunesArtwork@2x.png and b/Icons/App Icon [Rounded]/iTunesArtwork@2x.png differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-72.png b/Icons/App Icon [Square]/App Icon [Rounded]/Icon-72.png deleted file mode 100755 index 5977154..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-72.png and /dev/null differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-72@2x.png b/Icons/App Icon [Square]/App Icon [Rounded]/Icon-72@2x.png deleted file mode 100755 index 6acd765..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-72@2x.png and /dev/null differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small-50.png b/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small-50.png deleted file mode 100755 index 5efaf41..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small-50.png and /dev/null differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small-50@2x.png b/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small-50@2x.png deleted file mode 100755 index e953661..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small-50@2x.png and /dev/null differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small.png b/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small.png deleted file mode 100755 index 443682d..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small.png and /dev/null differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small@2x.png b/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small@2x.png deleted file mode 100755 index fae39ff..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/Icon-Small@2x.png and /dev/null differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/Icon.png b/Icons/App Icon [Square]/App Icon [Rounded]/Icon.png deleted file mode 100755 index 40b9bbf..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/Icon.png and /dev/null differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/Icon@2x.png b/Icons/App Icon [Square]/App Icon [Rounded]/Icon@2x.png deleted file mode 100755 index b0e5c59..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/Icon@2x.png and /dev/null differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/iTunesArtwork.png b/Icons/App Icon [Square]/App Icon [Rounded]/iTunesArtwork.png deleted file mode 100755 index 16110c6..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/iTunesArtwork.png and /dev/null differ diff --git a/Icons/App Icon [Square]/App Icon [Rounded]/iTunesArtwork@2x.png b/Icons/App Icon [Square]/App Icon [Rounded]/iTunesArtwork@2x.png deleted file mode 100755 index a5ecc3d..0000000 Binary files a/Icons/App Icon [Square]/App Icon [Rounded]/iTunesArtwork@2x.png and /dev/null differ diff --git a/Icons/App Icon [Square]/Icon-72.png b/Icons/App Icon [Square]/Icon-72.png deleted file mode 100755 index d4650da..0000000 Binary files a/Icons/App Icon [Square]/Icon-72.png and /dev/null differ diff --git a/Icons/App Icon [Square]/Icon-72@2x.png b/Icons/App Icon [Square]/Icon-72@2x.png deleted file mode 100755 index de95097..0000000 Binary files a/Icons/App Icon [Square]/Icon-72@2x.png and /dev/null differ diff --git a/Icons/App Icon [Square]/Icon-Small-50.png b/Icons/App Icon [Square]/Icon-Small-50.png deleted file mode 100755 index e5f9078..0000000 Binary files a/Icons/App Icon [Square]/Icon-Small-50.png and /dev/null differ diff --git a/Icons/App Icon [Square]/Icon-Small-50@2x.png b/Icons/App Icon [Square]/Icon-Small-50@2x.png deleted file mode 100755 index 0bb08fd..0000000 Binary files a/Icons/App Icon [Square]/Icon-Small-50@2x.png and /dev/null differ diff --git a/Icons/App Icon [Square]/Icon-Small.png b/Icons/App Icon [Square]/Icon-Small.png deleted file mode 100755 index 28ad301..0000000 Binary files a/Icons/App Icon [Square]/Icon-Small.png and /dev/null differ diff --git a/Icons/App Icon [Square]/Icon-Small@2x.png b/Icons/App Icon [Square]/Icon-Small@2x.png deleted file mode 100755 index 5d72398..0000000 Binary files a/Icons/App Icon [Square]/Icon-Small@2x.png and /dev/null differ diff --git a/Icons/App Icon [Square]/Icon.png b/Icons/App Icon [Square]/Icon.png deleted file mode 100755 index c6c72c6..0000000 Binary files a/Icons/App Icon [Square]/Icon.png and /dev/null differ diff --git a/Icons/App Icon [Square]/Icon@2x.png b/Icons/App Icon [Square]/Icon@2x.png deleted file mode 100755 index cc65719..0000000 Binary files a/Icons/App Icon [Square]/Icon@2x.png and /dev/null differ diff --git a/Icons/App Icon [Square]/iTunesArtwork.png b/Icons/App Icon [Square]/iTunesArtwork.png deleted file mode 100755 index be22db8..0000000 Binary files a/Icons/App Icon [Square]/iTunesArtwork.png and /dev/null differ diff --git a/Icons/App Icon [Square]/iTunesArtwork@2x.png b/Icons/App Icon [Square]/iTunesArtwork@2x.png deleted file mode 100755 index 752fad8..0000000 Binary files a/Icons/App Icon [Square]/iTunesArtwork@2x.png and /dev/null differ diff --git a/Icons/App Icon [Squared]/AppIcon29x29.png b/Icons/App Icon [Squared]/AppIcon29x29.png new file mode 100644 index 0000000..cbc1d2a Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon29x29.png differ diff --git a/Icons/App Icon [Squared]/AppIcon29x29@2x.png b/Icons/App Icon [Squared]/AppIcon29x29@2x.png new file mode 100644 index 0000000..76fb602 Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon29x29@2x.png differ diff --git a/Icons/App Icon [Squared]/AppIcon40x40.png b/Icons/App Icon [Squared]/AppIcon40x40.png new file mode 100644 index 0000000..8f28efa Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon40x40.png differ diff --git a/Icons/App Icon [Squared]/AppIcon40x40@2x.png b/Icons/App Icon [Squared]/AppIcon40x40@2x.png new file mode 100644 index 0000000..3420988 Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon40x40@2x.png differ diff --git a/Icons/App Icon [Squared]/AppIcon50x50.png b/Icons/App Icon [Squared]/AppIcon50x50.png new file mode 100644 index 0000000..600be8b Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon50x50.png differ diff --git a/Icons/App Icon [Squared]/AppIcon50x50@2x.png b/Icons/App Icon [Squared]/AppIcon50x50@2x.png new file mode 100644 index 0000000..05812a0 Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon50x50@2x.png differ diff --git a/Icons/App Icon [Squared]/AppIcon57x57.png b/Icons/App Icon [Squared]/AppIcon57x57.png new file mode 100644 index 0000000..85b61db Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon57x57.png differ diff --git a/Icons/App Icon [Squared]/AppIcon57x57@2x.png b/Icons/App Icon [Squared]/AppIcon57x57@2x.png new file mode 100644 index 0000000..cf46db1 Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon57x57@2x.png differ diff --git a/Icons/App Icon [Squared]/AppIcon60x60.png b/Icons/App Icon [Squared]/AppIcon60x60.png new file mode 100644 index 0000000..6ebce90 Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon60x60.png differ diff --git a/Icons/App Icon [Squared]/AppIcon60x60@2x.png b/Icons/App Icon [Squared]/AppIcon60x60@2x.png new file mode 100644 index 0000000..6825358 Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon60x60@2x.png differ diff --git a/Icons/App Icon [Squared]/AppIcon72x72.png b/Icons/App Icon [Squared]/AppIcon72x72.png new file mode 100644 index 0000000..74b6276 Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon72x72.png differ diff --git a/Icons/App Icon [Squared]/AppIcon72x72@2x.png b/Icons/App Icon [Squared]/AppIcon72x72@2x.png new file mode 100644 index 0000000..1badd73 Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon72x72@2x.png differ diff --git a/Icons/App Icon [Squared]/AppIcon76x76.png b/Icons/App Icon [Squared]/AppIcon76x76.png new file mode 100644 index 0000000..5368dfd Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon76x76.png differ diff --git a/Icons/App Icon [Squared]/AppIcon76x76@2x.png b/Icons/App Icon [Squared]/AppIcon76x76@2x.png new file mode 100644 index 0000000..bc9d232 Binary files /dev/null and b/Icons/App Icon [Squared]/AppIcon76x76@2x.png differ diff --git a/Icons/App Icon [Squared]/iTunesArtwork.png b/Icons/App Icon [Squared]/iTunesArtwork.png new file mode 100644 index 0000000..b5fdbc6 Binary files /dev/null and b/Icons/App Icon [Squared]/iTunesArtwork.png differ diff --git a/Icons/App Icon [Squared]/iTunesArtwork@2x.png b/Icons/App Icon [Squared]/iTunesArtwork@2x.png new file mode 100644 index 0000000..0373e6b Binary files /dev/null and b/Icons/App Icon [Squared]/iTunesArtwork@2x.png differ diff --git a/IntegrationTests/CoderwallTestController.h b/IntegrationTests/CoderwallTestController.h index a0ce8c1..58dfba6 100755 --- a/IntegrationTests/CoderwallTestController.h +++ b/IntegrationTests/CoderwallTestController.h @@ -8,9 +8,9 @@ #import -#import "KIFTestController.h" +#import -@interface CoderwallTestController : KIFTestController +@interface CoderwallTestController : KIFTestCase @end diff --git a/IntegrationTests/Steps/KIFTestStep+displayMasterView.h b/IntegrationTests/Steps/KIFTestStep+displayMasterView.h index 8a7b58a..c919a9a 100755 --- a/IntegrationTests/Steps/KIFTestStep+displayMasterView.h +++ b/IntegrationTests/Steps/KIFTestStep+displayMasterView.h @@ -6,11 +6,10 @@ // Copyright (c) 2012 Bearded Apps. All rights reserved. // +#import -#import "KIFTestStep.h" - -@interface KIFTestStep (displayMasterView) +@interface KIFTestStepValidation (displayMasterView) + (id)stepToPopToMasterView; diff --git a/PSDs/App Icon Template [2.0].psd b/PSDs/App Icon Template [2.0].psd deleted file mode 100755 index 8180efe..0000000 Binary files a/PSDs/App Icon Template [2.0].psd and /dev/null differ diff --git a/PSDs/App Icon Template [3.3].psd b/PSDs/App Icon Template [3.3].psd new file mode 100644 index 0000000..582c4d8 Binary files /dev/null and b/PSDs/App Icon Template [3.3].psd differ diff --git a/PSDs/mikael_eidenberg_iphone_template01.psd b/PSDs/mikael_eidenberg_iphone_template01.psd new file mode 100644 index 0000000..115fbbf Binary files /dev/null and b/PSDs/mikael_eidenberg_iphone_template01.psd differ diff --git a/Podfile b/Podfile index 4ccecbe..d40e515 100755 --- a/Podfile +++ b/Podfile @@ -1,13 +1,13 @@ -platform :ios +platform :ios, '6.0' -dependency 'SBJson', '>= 3.1' -dependency 'DejalActivityView', '>= 1.0' -dependency 'EGOTableViewPullRefresh', '>= 0.1' +pod 'SBJson', '>= 4.0' +pod 'DejalActivityView', '>= 1.0' +pod 'EGOTableViewPullRefresh', '>= 0.1' -target :test do - dependency 'Kiwi', '>= 1.0.0' +target 'CoderwallTests' do + pod 'Kiwi', '>= 1.0.0' end -target :integration do - dependency 'KIF', '>= 0.0.1' +target 'Integration Tests' do + pod 'KIF', '>= 0.0.1' end diff --git a/Podfile.lock b/Podfile.lock old mode 100755 new mode 100644 index dc283d7..30b3dc1 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,13 +1,28 @@ PODS: - - DejalActivityView (1.0) + - DejalActivityView (1.2) - EGOTableViewPullRefresh (0.1.0) - - KIF (0.0.1) - - Kiwi (1.0.0) - - SBJson (3.1) + - KIF (2.0.0) + - Kiwi (2.2.3): + - Kiwi/SenTestingKit + - Kiwi/ARC (2.2.3) + - Kiwi/NonARC (2.2.3) + - Kiwi/SenTestingKit (2.2.3): + - Kiwi/ARC + - Kiwi/NonARC + - SBJson (4.0.0) DEPENDENCIES: - DejalActivityView (>= 1.0) - EGOTableViewPullRefresh (>= 0.1) - KIF (>= 0.0.1) - Kiwi (>= 1.0.0) - - SBJson (>= 3.1) + - SBJson (>= 4.0) + +SPEC CHECKSUMS: + DejalActivityView: 3a7f7a2be287c0f25f547762815c40709b02169c + EGOTableViewPullRefresh: 6ba637ce6dd3186b503d2d91e6b3a08a26d650f5 + KIF: ff3b46deb62ce3f8e99c6a2c786729e1eea241ba + Kiwi: 04c51e880831d291748ec702d42c4101f7eb95c9 + SBJson: f3c686806e8e36ab89e020189ac582ba26ec4220 + +COCOAPODS: 0.29.0 diff --git a/Pods/BuildHeaders/DejalActivityView/DejalActivityView.h b/Pods/BuildHeaders/DejalActivityView/DejalActivityView.h new file mode 120000 index 0000000..c04383d --- /dev/null +++ b/Pods/BuildHeaders/DejalActivityView/DejalActivityView.h @@ -0,0 +1 @@ +../../DejalActivityView/DejalActivityView.h \ No newline at end of file diff --git a/Pods/BuildHeaders/EGOTableViewPullRefresh/EGORefreshTableHeaderView.h b/Pods/BuildHeaders/EGOTableViewPullRefresh/EGORefreshTableHeaderView.h new file mode 120000 index 0000000..dff642c --- /dev/null +++ b/Pods/BuildHeaders/EGOTableViewPullRefresh/EGORefreshTableHeaderView.h @@ -0,0 +1 @@ +../../EGOTableViewPullRefresh/EGOTableViewPullRefresh/Classes/View/EGORefreshTableHeaderView.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/CGGeometry-KIFAdditions.h b/Pods/BuildHeaders/KIF/CGGeometry-KIFAdditions.h new file mode 120000 index 0000000..35ffff7 --- /dev/null +++ b/Pods/BuildHeaders/KIF/CGGeometry-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/CGGeometry-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/KIF.h b/Pods/BuildHeaders/KIF/KIF.h new file mode 120000 index 0000000..fc2b544 --- /dev/null +++ b/Pods/BuildHeaders/KIF/KIF.h @@ -0,0 +1 @@ +../../KIF/Classes/KIF.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/KIFSystemTestActor.h b/Pods/BuildHeaders/KIF/KIFSystemTestActor.h new file mode 120000 index 0000000..138a856 --- /dev/null +++ b/Pods/BuildHeaders/KIF/KIFSystemTestActor.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFSystemTestActor.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/KIFTestActor.h b/Pods/BuildHeaders/KIF/KIFTestActor.h new file mode 120000 index 0000000..e902220 --- /dev/null +++ b/Pods/BuildHeaders/KIF/KIFTestActor.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFTestActor.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/KIFTestCase.h b/Pods/BuildHeaders/KIF/KIFTestCase.h new file mode 120000 index 0000000..ce31bdd --- /dev/null +++ b/Pods/BuildHeaders/KIF/KIFTestCase.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFTestCase.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/KIFTestStepValidation.h b/Pods/BuildHeaders/KIF/KIFTestStepValidation.h new file mode 120000 index 0000000..bc6f36d --- /dev/null +++ b/Pods/BuildHeaders/KIF/KIFTestStepValidation.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFTestStepValidation.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/KIFTypist.h b/Pods/BuildHeaders/KIF/KIFTypist.h new file mode 120000 index 0000000..6fddce5 --- /dev/null +++ b/Pods/BuildHeaders/KIF/KIFTypist.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFTypist.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/KIFUITestActor.h b/Pods/BuildHeaders/KIF/KIFUITestActor.h new file mode 120000 index 0000000..52828a3 --- /dev/null +++ b/Pods/BuildHeaders/KIF/KIFUITestActor.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFUITestActor.h \ No newline at end of file diff --git a/Pods/Headers/KIF/LoadableCategory.h b/Pods/BuildHeaders/KIF/LoadableCategory.h similarity index 100% rename from Pods/Headers/KIF/LoadableCategory.h rename to Pods/BuildHeaders/KIF/LoadableCategory.h diff --git a/Pods/BuildHeaders/KIF/NSBundle-KIFAdditions.h b/Pods/BuildHeaders/KIF/NSBundle-KIFAdditions.h new file mode 120000 index 0000000..24ffece --- /dev/null +++ b/Pods/BuildHeaders/KIF/NSBundle-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/NSBundle-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/NSError-KIFAdditions.h b/Pods/BuildHeaders/KIF/NSError-KIFAdditions.h new file mode 120000 index 0000000..34d8e71 --- /dev/null +++ b/Pods/BuildHeaders/KIF/NSError-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/NSError-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/NSFileManager-KIFAdditions.h b/Pods/BuildHeaders/KIF/NSFileManager-KIFAdditions.h new file mode 120000 index 0000000..c7dbbcf --- /dev/null +++ b/Pods/BuildHeaders/KIF/NSFileManager-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/NSFileManager-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/SenTestCase-KIFAdditions.h b/Pods/BuildHeaders/KIF/SenTestCase-KIFAdditions.h new file mode 120000 index 0000000..6ea742f --- /dev/null +++ b/Pods/BuildHeaders/KIF/SenTestCase-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/SenTestCase-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/UIAccessibilityElement-KIFAdditions.h b/Pods/BuildHeaders/KIF/UIAccessibilityElement-KIFAdditions.h new file mode 120000 index 0000000..288b611 --- /dev/null +++ b/Pods/BuildHeaders/KIF/UIAccessibilityElement-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/UIAccessibilityElement-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/UIApplication-KIFAdditions.h b/Pods/BuildHeaders/KIF/UIApplication-KIFAdditions.h new file mode 120000 index 0000000..2f9fad6 --- /dev/null +++ b/Pods/BuildHeaders/KIF/UIApplication-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/UIApplication-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/UIScrollView-KIFAdditions.h b/Pods/BuildHeaders/KIF/UIScrollView-KIFAdditions.h new file mode 120000 index 0000000..36415b8 --- /dev/null +++ b/Pods/BuildHeaders/KIF/UIScrollView-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/UIScrollView-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/UITouch-KIFAdditions.h b/Pods/BuildHeaders/KIF/UITouch-KIFAdditions.h new file mode 120000 index 0000000..5547163 --- /dev/null +++ b/Pods/BuildHeaders/KIF/UITouch-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/UITouch-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/UIView-KIFAdditions.h b/Pods/BuildHeaders/KIF/UIView-KIFAdditions.h new file mode 120000 index 0000000..b875a3e --- /dev/null +++ b/Pods/BuildHeaders/KIF/UIView-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/UIView-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/KIF/UIWindow-KIFAdditions.h b/Pods/BuildHeaders/KIF/UIWindow-KIFAdditions.h new file mode 120000 index 0000000..82db207 --- /dev/null +++ b/Pods/BuildHeaders/KIF/UIWindow-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/UIWindow-KIFAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWAfterAllNode.h b/Pods/BuildHeaders/Kiwi/KWAfterAllNode.h new file mode 120000 index 0000000..9eeb57f --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWAfterAllNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWAfterAllNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWAfterEachNode.h b/Pods/BuildHeaders/Kiwi/KWAfterEachNode.h new file mode 120000 index 0000000..b807288 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWAfterEachNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWAfterEachNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWAny.h b/Pods/BuildHeaders/Kiwi/KWAny.h new file mode 120000 index 0000000..0d334e7 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWAny.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWAny.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWAsyncVerifier.h b/Pods/BuildHeaders/Kiwi/KWAsyncVerifier.h new file mode 120000 index 0000000..55ca577 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWAsyncVerifier.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Verifiers/KWAsyncVerifier.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeBetweenMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeBetweenMatcher.h new file mode 120000 index 0000000..75f9442 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeBetweenMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeBetweenMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeEmptyMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeEmptyMatcher.h new file mode 120000 index 0000000..fc8c89a --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeEmptyMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeEmptyMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeIdenticalToMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeIdenticalToMatcher.h new file mode 120000 index 0000000..6e8e6be --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeIdenticalToMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeKindOfClassMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeKindOfClassMatcher.h new file mode 120000 index 0000000..d4170aa --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeKindOfClassMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeMemberOfClassMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeMemberOfClassMatcher.h new file mode 120000 index 0000000..9b96c09 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeMemberOfClassMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeSubclassOfClassMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeSubclassOfClassMatcher.h new file mode 120000 index 0000000..ce788b7 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeSubclassOfClassMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeTrueMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeTrueMatcher.h new file mode 120000 index 0000000..6bbe534 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeTrueMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeTrueMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeWithinMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeWithinMatcher.h new file mode 120000 index 0000000..ab3ad9d --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeWithinMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeWithinMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeZeroMatcher.h b/Pods/BuildHeaders/Kiwi/KWBeZeroMatcher.h new file mode 120000 index 0000000..5c6a52d --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeZeroMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeZeroMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeforeAllNode.h b/Pods/BuildHeaders/Kiwi/KWBeforeAllNode.h new file mode 120000 index 0000000..e50bbfc --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeforeAllNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWBeforeAllNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBeforeEachNode.h b/Pods/BuildHeaders/Kiwi/KWBeforeEachNode.h new file mode 120000 index 0000000..e25d754 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBeforeEachNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWBeforeEachNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBlock.h b/Pods/BuildHeaders/Kiwi/KWBlock.h new file mode 120000 index 0000000..0262aa9 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBlock.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWBlock.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBlockNode.h b/Pods/BuildHeaders/Kiwi/KWBlockNode.h new file mode 120000 index 0000000..250e21b --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBlockNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWBlockNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWBlockRaiseMatcher.h b/Pods/BuildHeaders/Kiwi/KWBlockRaiseMatcher.h new file mode 120000 index 0000000..0e3150b --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWBlockRaiseMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWCallSite.h b/Pods/BuildHeaders/Kiwi/KWCallSite.h new file mode 120000 index 0000000..693a01b --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWCallSite.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWCallSite.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWCaptureSpy.h b/Pods/BuildHeaders/Kiwi/KWCaptureSpy.h new file mode 120000 index 0000000..54a3ca2 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWCaptureSpy.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWCaptureSpy.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWChangeMatcher.h b/Pods/BuildHeaders/Kiwi/KWChangeMatcher.h new file mode 120000 index 0000000..be6e80b --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWChangeMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWChangeMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWConformToProtocolMatcher.h b/Pods/BuildHeaders/Kiwi/KWConformToProtocolMatcher.h new file mode 120000 index 0000000..749ed75 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWConformToProtocolMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWContainMatcher.h b/Pods/BuildHeaders/Kiwi/KWContainMatcher.h new file mode 120000 index 0000000..672fd9f --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWContainMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWContainMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWContainStringMatcher.h b/Pods/BuildHeaders/Kiwi/KWContainStringMatcher.h new file mode 120000 index 0000000..3ee51f0 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWContainStringMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWContainStringMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWContextNode.h b/Pods/BuildHeaders/Kiwi/KWContextNode.h new file mode 120000 index 0000000..7f72f76 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWContextNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWContextNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWCountType.h b/Pods/BuildHeaders/Kiwi/KWCountType.h new file mode 120000 index 0000000..1f02227 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWCountType.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWCountType.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWDeviceInfo.h b/Pods/BuildHeaders/Kiwi/KWDeviceInfo.h new file mode 120000 index 0000000..3e3bb0c --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWDeviceInfo.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWDeviceInfo.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWEqualMatcher.h b/Pods/BuildHeaders/Kiwi/KWEqualMatcher.h new file mode 120000 index 0000000..e842675 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWEqualMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWEqualMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExample.h b/Pods/BuildHeaders/Kiwi/KWExample.h new file mode 120000 index 0000000..0141492 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExample.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExample.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleDelegate.h b/Pods/BuildHeaders/Kiwi/KWExampleDelegate.h new file mode 120000 index 0000000..0e13935 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExampleDelegate.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleDelegate.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleNode.h b/Pods/BuildHeaders/Kiwi/KWExampleNode.h new file mode 120000 index 0000000..6fd1790 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExampleNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWExampleNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleNodeVisitor.h b/Pods/BuildHeaders/Kiwi/KWExampleNodeVisitor.h new file mode 120000 index 0000000..0347cd9 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExampleNodeVisitor.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleNodeVisitor.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleSuite.h b/Pods/BuildHeaders/Kiwi/KWExampleSuite.h new file mode 120000 index 0000000..849831b --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExampleSuite.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleSuite.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExampleSuiteBuilder.h b/Pods/BuildHeaders/Kiwi/KWExampleSuiteBuilder.h new file mode 120000 index 0000000..84f06e2 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExampleSuiteBuilder.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleSuiteBuilder.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExistVerifier.h b/Pods/BuildHeaders/Kiwi/KWExistVerifier.h new file mode 120000 index 0000000..3f0dc32 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExistVerifier.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Verifiers/KWExistVerifier.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWExpectationType.h b/Pods/BuildHeaders/Kiwi/KWExpectationType.h new file mode 120000 index 0000000..216d889 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWExpectationType.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExpectationType.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWFailure.h b/Pods/BuildHeaders/Kiwi/KWFailure.h new file mode 120000 index 0000000..2b5a88d --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWFailure.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWFailure.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWFormatter.h b/Pods/BuildHeaders/Kiwi/KWFormatter.h new file mode 120000 index 0000000..234fa84 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWFormatter.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWFormatter.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWFutureObject.h b/Pods/BuildHeaders/Kiwi/KWFutureObject.h new file mode 120000 index 0000000..e1e1806 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWFutureObject.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWFutureObject.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWGenericMatchEvaluator.h b/Pods/BuildHeaders/Kiwi/KWGenericMatchEvaluator.h new file mode 120000 index 0000000..e47bfc2 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWGenericMatchEvaluator.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWGenericMatcher.h b/Pods/BuildHeaders/Kiwi/KWGenericMatcher.h new file mode 120000 index 0000000..ed0db0e --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWGenericMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWGenericMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWGenericMatchingAdditions.h b/Pods/BuildHeaders/Kiwi/KWGenericMatchingAdditions.h new file mode 120000 index 0000000..4b296a2 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWGenericMatchingAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWHaveMatcher.h b/Pods/BuildHeaders/Kiwi/KWHaveMatcher.h new file mode 120000 index 0000000..6603a8d --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWHaveMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWHaveMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWHaveValueMatcher.h b/Pods/BuildHeaders/Kiwi/KWHaveValueMatcher.h new file mode 120000 index 0000000..aa68353 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWHaveValueMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWHaveValueMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWInequalityMatcher.h b/Pods/BuildHeaders/Kiwi/KWInequalityMatcher.h new file mode 120000 index 0000000..563f299 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWInequalityMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWInequalityMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWIntercept.h b/Pods/BuildHeaders/Kiwi/KWIntercept.h new file mode 120000 index 0000000..5aab538 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWIntercept.h @@ -0,0 +1 @@ +../../Kiwi/NonARC/KWIntercept.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWInvocationCapturer.h b/Pods/BuildHeaders/Kiwi/KWInvocationCapturer.h new file mode 120000 index 0000000..786c20d --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWInvocationCapturer.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWInvocationCapturer.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWItNode.h b/Pods/BuildHeaders/Kiwi/KWItNode.h new file mode 120000 index 0000000..115be89 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWItNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWItNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatchVerifier.h b/Pods/BuildHeaders/Kiwi/KWMatchVerifier.h new file mode 120000 index 0000000..741e295 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWMatchVerifier.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Verifiers/KWMatchVerifier.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatcher.h b/Pods/BuildHeaders/Kiwi/KWMatcher.h new file mode 120000 index 0000000..6d1fda1 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatcherFactory.h b/Pods/BuildHeaders/Kiwi/KWMatcherFactory.h new file mode 120000 index 0000000..053ae05 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWMatcherFactory.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWMatcherFactory.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatchers.h b/Pods/BuildHeaders/Kiwi/KWMatchers.h new file mode 120000 index 0000000..37dc93d --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWMatchers.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWMatchers.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMatching.h b/Pods/BuildHeaders/Kiwi/KWMatching.h new file mode 120000 index 0000000..5094f6c --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWMatching.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWMatching.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMessagePattern.h b/Pods/BuildHeaders/Kiwi/KWMessagePattern.h new file mode 120000 index 0000000..7db1ee2 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWMessagePattern.h @@ -0,0 +1 @@ +../../Kiwi/NonARC/KWMessagePattern.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMessageSpying.h b/Pods/BuildHeaders/Kiwi/KWMessageSpying.h new file mode 120000 index 0000000..f2b7dc0 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWMessageSpying.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWMessageSpying.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMessageTracker.h b/Pods/BuildHeaders/Kiwi/KWMessageTracker.h new file mode 120000 index 0000000..0529de7 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWMessageTracker.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWMessageTracker.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWMock.h b/Pods/BuildHeaders/Kiwi/KWMock.h new file mode 120000 index 0000000..d07edac --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWMock.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Mocking/KWMock.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWNilMatcher.h b/Pods/BuildHeaders/Kiwi/KWNilMatcher.h new file mode 120000 index 0000000..fbe052f --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWNilMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWNilMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWNull.h b/Pods/BuildHeaders/Kiwi/KWNull.h new file mode 120000 index 0000000..af2cb10 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWNull.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWNull.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWObjCUtilities.h b/Pods/BuildHeaders/Kiwi/KWObjCUtilities.h new file mode 120000 index 0000000..f6cc0b9 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWObjCUtilities.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWObjCUtilities.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWPendingNode.h b/Pods/BuildHeaders/Kiwi/KWPendingNode.h new file mode 120000 index 0000000..7ff39e4 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWPendingNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWPendingNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWProbe.h b/Pods/BuildHeaders/Kiwi/KWProbe.h new file mode 120000 index 0000000..d6cdabb --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWProbe.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWProbe.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWProbePoller.h b/Pods/BuildHeaders/Kiwi/KWProbePoller.h new file mode 120000 index 0000000..a1aee4c --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWProbePoller.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWProbePoller.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWRaiseMatcher.h b/Pods/BuildHeaders/Kiwi/KWRaiseMatcher.h new file mode 120000 index 0000000..4f4b4d9 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWRaiseMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWRaiseMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWReceiveMatcher.h b/Pods/BuildHeaders/Kiwi/KWReceiveMatcher.h new file mode 120000 index 0000000..c7c16f0 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWReceiveMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWReceiveMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWRegisterMatchersNode.h b/Pods/BuildHeaders/Kiwi/KWRegisterMatchersNode.h new file mode 120000 index 0000000..0d88f5d --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWRegisterMatchersNode.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Nodes/KWRegisterMatchersNode.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWRegularExpressionPatternMatcher.h b/Pods/BuildHeaders/Kiwi/KWRegularExpressionPatternMatcher.h new file mode 120000 index 0000000..322e8d1 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWRegularExpressionPatternMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWReporting.h b/Pods/BuildHeaders/Kiwi/KWReporting.h new file mode 120000 index 0000000..d220f49 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWReporting.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWReporting.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWRespondToSelectorMatcher.h b/Pods/BuildHeaders/Kiwi/KWRespondToSelectorMatcher.h new file mode 120000 index 0000000..53da1b3 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWRespondToSelectorMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWSpec.h b/Pods/BuildHeaders/Kiwi/KWSpec.h new file mode 120000 index 0000000..b35172e --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWSpec.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWSpec.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWStringContainsMatcher.h b/Pods/BuildHeaders/Kiwi/KWStringContainsMatcher.h new file mode 120000 index 0000000..43c9cd4 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWStringContainsMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWStringContainsMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWStringPrefixMatcher.h b/Pods/BuildHeaders/Kiwi/KWStringPrefixMatcher.h new file mode 120000 index 0000000..351d3e7 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWStringPrefixMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWStringPrefixMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWStringUtilities.h b/Pods/BuildHeaders/Kiwi/KWStringUtilities.h new file mode 120000 index 0000000..e6225dc --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWStringUtilities.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWStringUtilities.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWStub.h b/Pods/BuildHeaders/Kiwi/KWStub.h new file mode 120000 index 0000000..6c8519f --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWStub.h @@ -0,0 +1 @@ +../../Kiwi/NonARC/KWStub.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWSymbolicator.h b/Pods/BuildHeaders/Kiwi/KWSymbolicator.h new file mode 120000 index 0000000..2bc8b59 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWSymbolicator.h @@ -0,0 +1 @@ +../../Kiwi/NonARC/KWSymbolicator.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWUserDefinedMatcher.h b/Pods/BuildHeaders/Kiwi/KWUserDefinedMatcher.h new file mode 120000 index 0000000..241b176 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWUserDefinedMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWUserDefinedMatcher.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWValue.h b/Pods/BuildHeaders/Kiwi/KWValue.h new file mode 120000 index 0000000..f5aabfb --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWValue.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWValue.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWVerifying.h b/Pods/BuildHeaders/Kiwi/KWVerifying.h new file mode 120000 index 0000000..10c41b7 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWVerifying.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Verifiers/KWVerifying.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KWWorkarounds.h b/Pods/BuildHeaders/Kiwi/KWWorkarounds.h new file mode 120000 index 0000000..5394bed --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KWWorkarounds.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWWorkarounds.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/Kiwi.h b/Pods/BuildHeaders/Kiwi/Kiwi.h new file mode 120000 index 0000000..90584f1 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/Kiwi.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/Kiwi.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KiwiBlockMacros.h b/Pods/BuildHeaders/Kiwi/KiwiBlockMacros.h new file mode 120000 index 0000000..c040758 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KiwiBlockMacros.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KiwiBlockMacros.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KiwiConfiguration.h b/Pods/BuildHeaders/Kiwi/KiwiConfiguration.h new file mode 120000 index 0000000..cdd209e --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KiwiConfiguration.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KiwiConfiguration.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/KiwiMacros.h b/Pods/BuildHeaders/Kiwi/KiwiMacros.h new file mode 120000 index 0000000..936b359 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/KiwiMacros.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KiwiMacros.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSInvocation+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/NSInvocation+KiwiAdditions.h new file mode 120000 index 0000000..216b70b --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSInvocation+KiwiAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSInvocation+OCMAdditions.h b/Pods/BuildHeaders/Kiwi/NSInvocation+OCMAdditions.h new file mode 120000 index 0000000..5d505e9 --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSInvocation+OCMAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSInvocation+OCMAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSMethodSignature+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/NSMethodSignature+KiwiAdditions.h new file mode 120000 index 0000000..816f65b --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSMethodSignature+KiwiAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSNumber+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/NSNumber+KiwiAdditions.h new file mode 120000 index 0000000..aa1be1c --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSNumber+KiwiAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSNumber+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSObject+KiwiMockAdditions.h b/Pods/BuildHeaders/Kiwi/NSObject+KiwiMockAdditions.h new file mode 120000 index 0000000..eba045f --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSObject+KiwiMockAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSObject+KiwiSpyAdditions.h b/Pods/BuildHeaders/Kiwi/NSObject+KiwiSpyAdditions.h new file mode 120000 index 0000000..9746eaf --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSObject+KiwiSpyAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSObject+KiwiStubAdditions.h b/Pods/BuildHeaders/Kiwi/NSObject+KiwiStubAdditions.h new file mode 120000 index 0000000..09dc8ad --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSObject+KiwiStubAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSObject+KiwiVerifierAdditions.h b/Pods/BuildHeaders/Kiwi/NSObject+KiwiVerifierAdditions.h new file mode 120000 index 0000000..9def95d --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSObject+KiwiVerifierAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSProxy+KiwiVerifierAdditions.h b/Pods/BuildHeaders/Kiwi/NSProxy+KiwiVerifierAdditions.h new file mode 120000 index 0000000..f58050d --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSProxy+KiwiVerifierAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/NSValue+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/NSValue+KiwiAdditions.h new file mode 120000 index 0000000..e411b0c --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/NSValue+KiwiAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSValue+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/Kiwi/SenTestSuite+KiwiAdditions.h b/Pods/BuildHeaders/Kiwi/SenTestSuite+KiwiAdditions.h new file mode 120000 index 0000000..e1e643a --- /dev/null +++ b/Pods/BuildHeaders/Kiwi/SenTestSuite+KiwiAdditions.h @@ -0,0 +1 @@ +../../Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/BuildHeaders/SBJson/SBJson4.h b/Pods/BuildHeaders/SBJson/SBJson4.h new file mode 120000 index 0000000..f7a65c8 --- /dev/null +++ b/Pods/BuildHeaders/SBJson/SBJson4.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4.h \ No newline at end of file diff --git a/Pods/BuildHeaders/SBJson/SBJson4Parser.h b/Pods/BuildHeaders/SBJson/SBJson4Parser.h new file mode 120000 index 0000000..da1b0ed --- /dev/null +++ b/Pods/BuildHeaders/SBJson/SBJson4Parser.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4Parser.h \ No newline at end of file diff --git a/Pods/BuildHeaders/SBJson/SBJson4StreamParser.h b/Pods/BuildHeaders/SBJson/SBJson4StreamParser.h new file mode 120000 index 0000000..ca9fdbe --- /dev/null +++ b/Pods/BuildHeaders/SBJson/SBJson4StreamParser.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4StreamParser.h \ No newline at end of file diff --git a/Pods/BuildHeaders/SBJson/SBJson4StreamParserState.h b/Pods/BuildHeaders/SBJson/SBJson4StreamParserState.h new file mode 120000 index 0000000..a912176 --- /dev/null +++ b/Pods/BuildHeaders/SBJson/SBJson4StreamParserState.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4StreamParserState.h \ No newline at end of file diff --git a/Pods/BuildHeaders/SBJson/SBJson4StreamTokeniser.h b/Pods/BuildHeaders/SBJson/SBJson4StreamTokeniser.h new file mode 120000 index 0000000..f56f4e1 --- /dev/null +++ b/Pods/BuildHeaders/SBJson/SBJson4StreamTokeniser.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4StreamTokeniser.h \ No newline at end of file diff --git a/Pods/BuildHeaders/SBJson/SBJson4StreamWriter.h b/Pods/BuildHeaders/SBJson/SBJson4StreamWriter.h new file mode 120000 index 0000000..0c27043 --- /dev/null +++ b/Pods/BuildHeaders/SBJson/SBJson4StreamWriter.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4StreamWriter.h \ No newline at end of file diff --git a/Pods/BuildHeaders/SBJson/SBJson4StreamWriterState.h b/Pods/BuildHeaders/SBJson/SBJson4StreamWriterState.h new file mode 120000 index 0000000..2d24add --- /dev/null +++ b/Pods/BuildHeaders/SBJson/SBJson4StreamWriterState.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4StreamWriterState.h \ No newline at end of file diff --git a/Pods/BuildHeaders/SBJson/SBJson4Writer.h b/Pods/BuildHeaders/SBJson/SBJson4Writer.h new file mode 120000 index 0000000..8f3db6d --- /dev/null +++ b/Pods/BuildHeaders/SBJson/SBJson4Writer.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4Writer.h \ No newline at end of file diff --git a/Pods/DejalActivityView/DejalActivityView.h b/Pods/DejalActivityView/DejalActivityView.h old mode 100755 new mode 100644 index d4e5b2d..ace2ac3 --- a/Pods/DejalActivityView/DejalActivityView.h +++ b/Pods/DejalActivityView/DejalActivityView.h @@ -3,7 +3,7 @@ // Dejal Open Source // // Created by David Sinclair on 2009-07-26. -// Copyright (c) 2009-2012 Dejal Systems, LLC. All rights reserved. +// Copyright (c) 2009-2013 Dejal Systems, LLC. All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: diff --git a/Pods/DejalActivityView/DejalActivityView.m b/Pods/DejalActivityView/DejalActivityView.m old mode 100755 new mode 100644 index f55de11..b0e3edf --- a/Pods/DejalActivityView/DejalActivityView.m +++ b/Pods/DejalActivityView/DejalActivityView.m @@ -3,7 +3,7 @@ // Dejal Open Source // // Created by David Sinclair on 2009-07-26. -// Copyright (c) 2009-2012 Dejal Systems, LLC. All rights reserved. +// Copyright (c) 2009-2013 Dejal Systems, LLC. All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, // are permitted provided that the following conditions are met: @@ -29,7 +29,7 @@ // Credit: inspired by Matt Gallagher's LoadingView blog post: // http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html // - + #import "DejalActivityView.h" #import @@ -271,6 +271,7 @@ - (UIActivityIndicatorView *)makeActivityIndicator; Written by DJS 2009-07. Changed by DJS 2011-11 to simplify and make it easier to override. + Changed by chrisledet 2013-01 to use NSTextAlignmentLeft instead of the deprecated UITextAlignmentLeft. */ - (UILabel *)makeActivityLabelWithText:(NSString *)labelText; @@ -278,7 +279,7 @@ - (UILabel *)makeActivityLabelWithText:(NSString *)labelText; UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; label.font = [UIFont systemFontOfSize:[UIFont systemFontSize]]; - label.textAlignment = UITextAlignmentLeft; + label.textAlignment = NSTextAlignmentLeft; label.textColor = [UIColor blackColor]; label.backgroundColor = [UIColor clearColor]; label.shadowColor = [UIColor whiteColor]; @@ -304,7 +305,11 @@ - (void)layoutSubviews; if (!CGAffineTransformIsIdentity(self.borderView.transform)) return; +#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 CGSize textSize = [self.activityLabel.text sizeWithFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]]; +#else + CGSize textSize = [self.activityLabel.text sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:[UIFont systemFontSize]]}]; +#endif // Use the fixed width if one is specified: if (self.labelWidth > 10) @@ -527,6 +532,7 @@ - (UIActivityIndicatorView *)makeActivityIndicator; Written by DJS 2009-07. Changed by Suleman Sidat 2011-07 to support a multi-line label. Changed by DJS 2011-11 to simplify and make it easier to override. + Changed by chrisledet 2013-01 to use NSTextAlignmentCenter and NSLineBreakByWordWrapping instead of the deprecated UITextAlignmentCenter and UILineBreakModeWordWrap. */ - (UILabel *)makeActivityLabelWithText:(NSString *)labelText; @@ -534,11 +540,11 @@ - (UILabel *)makeActivityLabelWithText:(NSString *)labelText; UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; label.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]]; - label.textAlignment = UITextAlignmentCenter; + label.textAlignment = NSTextAlignmentCenter; label.textColor = [UIColor whiteColor]; label.backgroundColor = [UIColor clearColor]; label.numberOfLines = 0; - label.lineBreakMode = UILineBreakModeWordWrap; + label.lineBreakMode = NSLineBreakByWordWrapping; label.text = labelText; return label; @@ -562,7 +568,20 @@ - (void)layoutSubviews; self.frame = [self enclosingFrame]; CGSize maxSize = CGSizeMake(260, 400); - CGSize textSize = [self.activityLabel.text sizeWithFont:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]] constrainedToSize:maxSize lineBreakMode:self.activityLabel.lineBreakMode]; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 + CGSize textSize = [self.activityLabel.text sizeWithFont:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]] + constrainedToSize:maxSize + lineBreakMode:self.activityLabel.lineBreakMode]; +#else + NSMutableParagraphStyle *para = [NSMutableParagraphStyle new]; + para.lineBreakMode = self.activityLabel.lineBreakMode; + CGSize textSize = [self.activityLabel.text boundingRectWithSize:maxSize + options:NSStringDrawingUsesLineFragmentOrigin + attributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]], + NSParagraphStyleAttributeName:para} + context:nil].size; +#endif // Use the fixed width if one is specified: if (self.labelWidth > 10) diff --git a/Pods/DejalActivityView/License.txt b/Pods/DejalActivityView/License.txt old mode 100755 new mode 100644 index c9aa622..36e06a2 --- a/Pods/DejalActivityView/License.txt +++ b/Pods/DejalActivityView/License.txt @@ -6,7 +6,7 @@ Attribution is required, but a non-attribution license is also available. ----- -Copyright (c) 2002-2012 Dejal Systems, LLC. All rights reserved. +Copyright (c) 2002-2013 Dejal Systems, LLC. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/Pods/DejalActivityView/README.markdown b/Pods/DejalActivityView/README.markdown old mode 100755 new mode 100644 diff --git a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Classes/View/EGORefreshTableHeaderView.m b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Classes/View/EGORefreshTableHeaderView.m index 56b345b..332f8a8 100755 --- a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Classes/View/EGORefreshTableHeaderView.m +++ b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Classes/View/EGORefreshTableHeaderView.m @@ -53,7 +53,7 @@ - (id)initWithFrame:(CGRect)frame arrowImageName:(NSString *)arrow textColor:(UI label.shadowColor = [UIColor colorWithWhite:0.9f alpha:1.0f]; label.shadowOffset = CGSizeMake(0.0f, 1.0f); label.backgroundColor = [UIColor clearColor]; - label.textAlignment = UITextAlignmentCenter; + label.textAlignment = NSTextAlignmentCenter; [self addSubview:label]; _lastUpdatedLabel=label; [label release]; @@ -65,7 +65,7 @@ - (id)initWithFrame:(CGRect)frame arrowImageName:(NSString *)arrow textColor:(UI label.shadowColor = [UIColor colorWithWhite:0.9f alpha:1.0f]; label.shadowOffset = CGSizeMake(0.0f, 1.0f); label.backgroundColor = [UIColor clearColor]; - label.textAlignment = UITextAlignmentCenter; + label.textAlignment = NSTextAlignmentCenter; [self addSubview:label]; _statusLabel=label; [label release]; diff --git a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow.png b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow.png old mode 100755 new mode 100644 diff --git a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow@2x.png b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow@2x.png old mode 100755 new mode 100644 diff --git a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow.png b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow.png old mode 100755 new mode 100644 diff --git a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow@2x.png b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow@2x.png old mode 100755 new mode 100644 diff --git a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow.png b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow.png old mode 100755 new mode 100644 diff --git a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow@2x.png b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow@2x.png old mode 100755 new mode 100644 diff --git a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow.png b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow.png old mode 100755 new mode 100644 diff --git a/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow@2x.png b/Pods/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow@2x.png old mode 100755 new mode 100644 diff --git a/Pods/Headers/KIF/KIF.h b/Pods/Headers/KIF/KIF.h new file mode 120000 index 0000000..fc2b544 --- /dev/null +++ b/Pods/Headers/KIF/KIF.h @@ -0,0 +1 @@ +../../KIF/Classes/KIF.h \ No newline at end of file diff --git a/Pods/Headers/KIF/KIFSystemTestActor.h b/Pods/Headers/KIF/KIFSystemTestActor.h new file mode 120000 index 0000000..138a856 --- /dev/null +++ b/Pods/Headers/KIF/KIFSystemTestActor.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFSystemTestActor.h \ No newline at end of file diff --git a/Pods/Headers/KIF/KIFTestActor.h b/Pods/Headers/KIF/KIFTestActor.h new file mode 120000 index 0000000..e902220 --- /dev/null +++ b/Pods/Headers/KIF/KIFTestActor.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFTestActor.h \ No newline at end of file diff --git a/Pods/Headers/KIF/KIFTestCase.h b/Pods/Headers/KIF/KIFTestCase.h new file mode 120000 index 0000000..ce31bdd --- /dev/null +++ b/Pods/Headers/KIF/KIFTestCase.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFTestCase.h \ No newline at end of file diff --git a/Pods/Headers/KIF/KIFTestController.h b/Pods/Headers/KIF/KIFTestController.h deleted file mode 120000 index 38dd200..0000000 --- a/Pods/Headers/KIF/KIFTestController.h +++ /dev/null @@ -1 +0,0 @@ -../../KIF/Classes/KIFTestController.h \ No newline at end of file diff --git a/Pods/Headers/KIF/KIFTestScenario.h b/Pods/Headers/KIF/KIFTestScenario.h deleted file mode 120000 index 7e439d5..0000000 --- a/Pods/Headers/KIF/KIFTestScenario.h +++ /dev/null @@ -1 +0,0 @@ -../../KIF/Classes/KIFTestScenario.h \ No newline at end of file diff --git a/Pods/Headers/KIF/KIFTestStep.h b/Pods/Headers/KIF/KIFTestStep.h deleted file mode 120000 index b57749f..0000000 --- a/Pods/Headers/KIF/KIFTestStep.h +++ /dev/null @@ -1 +0,0 @@ -../../KIF/Classes/KIFTestStep.h \ No newline at end of file diff --git a/Pods/Headers/KIF/KIFTestStepValidation.h b/Pods/Headers/KIF/KIFTestStepValidation.h new file mode 120000 index 0000000..bc6f36d --- /dev/null +++ b/Pods/Headers/KIF/KIFTestStepValidation.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFTestStepValidation.h \ No newline at end of file diff --git a/Pods/Headers/KIF/KIFTypist.h b/Pods/Headers/KIF/KIFTypist.h new file mode 120000 index 0000000..6fddce5 --- /dev/null +++ b/Pods/Headers/KIF/KIFTypist.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFTypist.h \ No newline at end of file diff --git a/Pods/Headers/KIF/KIFUITestActor.h b/Pods/Headers/KIF/KIFUITestActor.h new file mode 120000 index 0000000..52828a3 --- /dev/null +++ b/Pods/Headers/KIF/KIFUITestActor.h @@ -0,0 +1 @@ +../../KIF/Classes/KIFUITestActor.h \ No newline at end of file diff --git a/Pods/Headers/KIF/NSBundle-KIFAdditions.h b/Pods/Headers/KIF/NSBundle-KIFAdditions.h new file mode 120000 index 0000000..24ffece --- /dev/null +++ b/Pods/Headers/KIF/NSBundle-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/NSBundle-KIFAdditions.h \ No newline at end of file diff --git a/Pods/Headers/KIF/NSError-KIFAdditions.h b/Pods/Headers/KIF/NSError-KIFAdditions.h new file mode 120000 index 0000000..34d8e71 --- /dev/null +++ b/Pods/Headers/KIF/NSError-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/NSError-KIFAdditions.h \ No newline at end of file diff --git a/Pods/Headers/KIF/SenTestCase-KIFAdditions.h b/Pods/Headers/KIF/SenTestCase-KIFAdditions.h new file mode 120000 index 0000000..6ea742f --- /dev/null +++ b/Pods/Headers/KIF/SenTestCase-KIFAdditions.h @@ -0,0 +1 @@ +../../KIF/Additions/SenTestCase-KIFAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWAfterAllNode.h b/Pods/Headers/Kiwi/KWAfterAllNode.h index 4d1a4eb..9eeb57f 120000 --- a/Pods/Headers/Kiwi/KWAfterAllNode.h +++ b/Pods/Headers/Kiwi/KWAfterAllNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWAfterAllNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWAfterAllNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWAfterEachNode.h b/Pods/Headers/Kiwi/KWAfterEachNode.h index f825a58..b807288 120000 --- a/Pods/Headers/Kiwi/KWAfterEachNode.h +++ b/Pods/Headers/Kiwi/KWAfterEachNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWAfterEachNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWAfterEachNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWAny.h b/Pods/Headers/Kiwi/KWAny.h new file mode 120000 index 0000000..0d334e7 --- /dev/null +++ b/Pods/Headers/Kiwi/KWAny.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWAny.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWAsyncVerifier.h b/Pods/Headers/Kiwi/KWAsyncVerifier.h index b08d0aa..55ca577 120000 --- a/Pods/Headers/Kiwi/KWAsyncVerifier.h +++ b/Pods/Headers/Kiwi/KWAsyncVerifier.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWAsyncVerifier.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWAsyncVerifier.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeBetweenMatcher.h b/Pods/Headers/Kiwi/KWBeBetweenMatcher.h index 2cbb2a1..75f9442 120000 --- a/Pods/Headers/Kiwi/KWBeBetweenMatcher.h +++ b/Pods/Headers/Kiwi/KWBeBetweenMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeBetweenMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeBetweenMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeEmptyMatcher.h b/Pods/Headers/Kiwi/KWBeEmptyMatcher.h index 63c67d6..fc8c89a 120000 --- a/Pods/Headers/Kiwi/KWBeEmptyMatcher.h +++ b/Pods/Headers/Kiwi/KWBeEmptyMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeEmptyMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeEmptyMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h b/Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h index 2771619..6e8e6be 120000 --- a/Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h +++ b/Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeIdenticalToMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h b/Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h index 53888f8..d4170aa 120000 --- a/Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h +++ b/Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeKindOfClassMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h b/Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h index 964b447..9b96c09 120000 --- a/Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h +++ b/Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeMemberOfClassMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeNilMatcher.h b/Pods/Headers/Kiwi/KWBeNilMatcher.h deleted file mode 120000 index 4a6cd96..0000000 --- a/Pods/Headers/Kiwi/KWBeNilMatcher.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KWBeNilMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeNonNilMatcher.h b/Pods/Headers/Kiwi/KWBeNonNilMatcher.h deleted file mode 120000 index 5c2b270..0000000 --- a/Pods/Headers/Kiwi/KWBeNonNilMatcher.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KWBeNonNilMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeSubclassOfClassMatcher.h b/Pods/Headers/Kiwi/KWBeSubclassOfClassMatcher.h new file mode 120000 index 0000000..ce788b7 --- /dev/null +++ b/Pods/Headers/Kiwi/KWBeSubclassOfClassMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeTrueMatcher.h b/Pods/Headers/Kiwi/KWBeTrueMatcher.h index e56c584..6bbe534 120000 --- a/Pods/Headers/Kiwi/KWBeTrueMatcher.h +++ b/Pods/Headers/Kiwi/KWBeTrueMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeTrueMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeTrueMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeWithinMatcher.h b/Pods/Headers/Kiwi/KWBeWithinMatcher.h index 82fc959..ab3ad9d 120000 --- a/Pods/Headers/Kiwi/KWBeWithinMatcher.h +++ b/Pods/Headers/Kiwi/KWBeWithinMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeWithinMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeWithinMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeZeroMatcher.h b/Pods/Headers/Kiwi/KWBeZeroMatcher.h index df189e1..5c6a52d 120000 --- a/Pods/Headers/Kiwi/KWBeZeroMatcher.h +++ b/Pods/Headers/Kiwi/KWBeZeroMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeZeroMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBeZeroMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeforeAllNode.h b/Pods/Headers/Kiwi/KWBeforeAllNode.h index 3f1f942..e50bbfc 120000 --- a/Pods/Headers/Kiwi/KWBeforeAllNode.h +++ b/Pods/Headers/Kiwi/KWBeforeAllNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeforeAllNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWBeforeAllNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBeforeEachNode.h b/Pods/Headers/Kiwi/KWBeforeEachNode.h index 6bc156f..e25d754 120000 --- a/Pods/Headers/Kiwi/KWBeforeEachNode.h +++ b/Pods/Headers/Kiwi/KWBeforeEachNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBeforeEachNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWBeforeEachNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBlock.h b/Pods/Headers/Kiwi/KWBlock.h index 14a6a75..0262aa9 120000 --- a/Pods/Headers/Kiwi/KWBlock.h +++ b/Pods/Headers/Kiwi/KWBlock.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBlock.h \ No newline at end of file +../../Kiwi/Classes/Core/KWBlock.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBlockNode.h b/Pods/Headers/Kiwi/KWBlockNode.h index 7448e83..250e21b 120000 --- a/Pods/Headers/Kiwi/KWBlockNode.h +++ b/Pods/Headers/Kiwi/KWBlockNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBlockNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWBlockNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWBlockRaiseMatcher.h b/Pods/Headers/Kiwi/KWBlockRaiseMatcher.h index e2fe9ed..0e3150b 120000 --- a/Pods/Headers/Kiwi/KWBlockRaiseMatcher.h +++ b/Pods/Headers/Kiwi/KWBlockRaiseMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWBlockRaiseMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWCallSite.h b/Pods/Headers/Kiwi/KWCallSite.h index 3394cd8..693a01b 120000 --- a/Pods/Headers/Kiwi/KWCallSite.h +++ b/Pods/Headers/Kiwi/KWCallSite.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWCallSite.h \ No newline at end of file +../../Kiwi/Classes/Core/KWCallSite.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWCaptureSpy.h b/Pods/Headers/Kiwi/KWCaptureSpy.h new file mode 120000 index 0000000..54a3ca2 --- /dev/null +++ b/Pods/Headers/Kiwi/KWCaptureSpy.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWCaptureSpy.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWChangeMatcher.h b/Pods/Headers/Kiwi/KWChangeMatcher.h new file mode 120000 index 0000000..be6e80b --- /dev/null +++ b/Pods/Headers/Kiwi/KWChangeMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWChangeMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWConformToProtocolMatcher.h b/Pods/Headers/Kiwi/KWConformToProtocolMatcher.h index 5d2a419..749ed75 120000 --- a/Pods/Headers/Kiwi/KWConformToProtocolMatcher.h +++ b/Pods/Headers/Kiwi/KWConformToProtocolMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWConformToProtocolMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWContainMatcher.h b/Pods/Headers/Kiwi/KWContainMatcher.h index 3874bd6..672fd9f 120000 --- a/Pods/Headers/Kiwi/KWContainMatcher.h +++ b/Pods/Headers/Kiwi/KWContainMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWContainMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWContainMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWContainStringMatcher.h b/Pods/Headers/Kiwi/KWContainStringMatcher.h new file mode 120000 index 0000000..3ee51f0 --- /dev/null +++ b/Pods/Headers/Kiwi/KWContainStringMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWContainStringMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWContextNode.h b/Pods/Headers/Kiwi/KWContextNode.h index 33a057c..7f72f76 120000 --- a/Pods/Headers/Kiwi/KWContextNode.h +++ b/Pods/Headers/Kiwi/KWContextNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWContextNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWContextNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWCountType.h b/Pods/Headers/Kiwi/KWCountType.h index 589ad81..1f02227 120000 --- a/Pods/Headers/Kiwi/KWCountType.h +++ b/Pods/Headers/Kiwi/KWCountType.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWCountType.h \ No newline at end of file +../../Kiwi/Classes/Core/KWCountType.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWDeviceInfo.h b/Pods/Headers/Kiwi/KWDeviceInfo.h index 84267f9..3e3bb0c 120000 --- a/Pods/Headers/Kiwi/KWDeviceInfo.h +++ b/Pods/Headers/Kiwi/KWDeviceInfo.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWDeviceInfo.h \ No newline at end of file +../../Kiwi/Classes/Core/KWDeviceInfo.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWEqualMatcher.h b/Pods/Headers/Kiwi/KWEqualMatcher.h index b84997f..e842675 120000 --- a/Pods/Headers/Kiwi/KWEqualMatcher.h +++ b/Pods/Headers/Kiwi/KWEqualMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWEqualMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWEqualMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExample.h b/Pods/Headers/Kiwi/KWExample.h new file mode 120000 index 0000000..0141492 --- /dev/null +++ b/Pods/Headers/Kiwi/KWExample.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExample.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleDelegate.h b/Pods/Headers/Kiwi/KWExampleDelegate.h new file mode 120000 index 0000000..0e13935 --- /dev/null +++ b/Pods/Headers/Kiwi/KWExampleDelegate.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleDelegate.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleGroup.h b/Pods/Headers/Kiwi/KWExampleGroup.h deleted file mode 120000 index d015a33..0000000 --- a/Pods/Headers/Kiwi/KWExampleGroup.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KWExampleGroup.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleGroupBuilder.h b/Pods/Headers/Kiwi/KWExampleGroupBuilder.h deleted file mode 120000 index 2458438..0000000 --- a/Pods/Headers/Kiwi/KWExampleGroupBuilder.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KWExampleGroupBuilder.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleGroupDelegate.h b/Pods/Headers/Kiwi/KWExampleGroupDelegate.h deleted file mode 120000 index 878d526..0000000 --- a/Pods/Headers/Kiwi/KWExampleGroupDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KWExampleGroupDelegate.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleNode.h b/Pods/Headers/Kiwi/KWExampleNode.h index 86155be..6fd1790 120000 --- a/Pods/Headers/Kiwi/KWExampleNode.h +++ b/Pods/Headers/Kiwi/KWExampleNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWExampleNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWExampleNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleNodeVisitor.h b/Pods/Headers/Kiwi/KWExampleNodeVisitor.h index ffb6ff5..0347cd9 120000 --- a/Pods/Headers/Kiwi/KWExampleNodeVisitor.h +++ b/Pods/Headers/Kiwi/KWExampleNodeVisitor.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWExampleNodeVisitor.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExampleNodeVisitor.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleSuite.h b/Pods/Headers/Kiwi/KWExampleSuite.h new file mode 120000 index 0000000..849831b --- /dev/null +++ b/Pods/Headers/Kiwi/KWExampleSuite.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleSuite.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExampleSuiteBuilder.h b/Pods/Headers/Kiwi/KWExampleSuiteBuilder.h new file mode 120000 index 0000000..84f06e2 --- /dev/null +++ b/Pods/Headers/Kiwi/KWExampleSuiteBuilder.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/KWExampleSuiteBuilder.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExistVerifier.h b/Pods/Headers/Kiwi/KWExistVerifier.h index cb33cb3..3f0dc32 120000 --- a/Pods/Headers/Kiwi/KWExistVerifier.h +++ b/Pods/Headers/Kiwi/KWExistVerifier.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWExistVerifier.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWExistVerifier.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWExpectationType.h b/Pods/Headers/Kiwi/KWExpectationType.h index 6b20a55..216d889 120000 --- a/Pods/Headers/Kiwi/KWExpectationType.h +++ b/Pods/Headers/Kiwi/KWExpectationType.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWExpectationType.h \ No newline at end of file +../../Kiwi/Classes/Core/KWExpectationType.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWFailure.h b/Pods/Headers/Kiwi/KWFailure.h index 51dc1b3..2b5a88d 120000 --- a/Pods/Headers/Kiwi/KWFailure.h +++ b/Pods/Headers/Kiwi/KWFailure.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWFailure.h \ No newline at end of file +../../Kiwi/Classes/Core/KWFailure.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWFormatter.h b/Pods/Headers/Kiwi/KWFormatter.h index d479dbe..234fa84 120000 --- a/Pods/Headers/Kiwi/KWFormatter.h +++ b/Pods/Headers/Kiwi/KWFormatter.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWFormatter.h \ No newline at end of file +../../Kiwi/Classes/Core/KWFormatter.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWFutureObject.h b/Pods/Headers/Kiwi/KWFutureObject.h index 670f911..e1e1806 120000 --- a/Pods/Headers/Kiwi/KWFutureObject.h +++ b/Pods/Headers/Kiwi/KWFutureObject.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWFutureObject.h \ No newline at end of file +../../Kiwi/Classes/Core/KWFutureObject.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWGenericMatchEvaluator.h b/Pods/Headers/Kiwi/KWGenericMatchEvaluator.h new file mode 120000 index 0000000..e47bfc2 --- /dev/null +++ b/Pods/Headers/Kiwi/KWGenericMatchEvaluator.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWGenericMatcher.h b/Pods/Headers/Kiwi/KWGenericMatcher.h new file mode 120000 index 0000000..ed0db0e --- /dev/null +++ b/Pods/Headers/Kiwi/KWGenericMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWGenericMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWGenericMatchingAdditions.h b/Pods/Headers/Kiwi/KWGenericMatchingAdditions.h new file mode 120000 index 0000000..4b296a2 --- /dev/null +++ b/Pods/Headers/Kiwi/KWGenericMatchingAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWHCMatcher.h b/Pods/Headers/Kiwi/KWHCMatcher.h deleted file mode 120000 index 0b31c11..0000000 --- a/Pods/Headers/Kiwi/KWHCMatcher.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KWHCMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWHamcrestMatcher.h b/Pods/Headers/Kiwi/KWHamcrestMatcher.h deleted file mode 120000 index 6c496c7..0000000 --- a/Pods/Headers/Kiwi/KWHamcrestMatcher.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KWHamcrestMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWHamrestMatchingAdditions.h b/Pods/Headers/Kiwi/KWHamrestMatchingAdditions.h deleted file mode 120000 index 7ca7686..0000000 --- a/Pods/Headers/Kiwi/KWHamrestMatchingAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KWHamrestMatchingAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWHaveMatcher.h b/Pods/Headers/Kiwi/KWHaveMatcher.h index 9196971..6603a8d 120000 --- a/Pods/Headers/Kiwi/KWHaveMatcher.h +++ b/Pods/Headers/Kiwi/KWHaveMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWHaveMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWHaveMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWHaveValueMatcher.h b/Pods/Headers/Kiwi/KWHaveValueMatcher.h index 3c29e13..aa68353 120000 --- a/Pods/Headers/Kiwi/KWHaveValueMatcher.h +++ b/Pods/Headers/Kiwi/KWHaveValueMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWHaveValueMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWHaveValueMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWInequalityMatcher.h b/Pods/Headers/Kiwi/KWInequalityMatcher.h index af5f611..563f299 120000 --- a/Pods/Headers/Kiwi/KWInequalityMatcher.h +++ b/Pods/Headers/Kiwi/KWInequalityMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWInequalityMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWInequalityMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWIntercept.h b/Pods/Headers/Kiwi/KWIntercept.h index eb710cc..5aab538 120000 --- a/Pods/Headers/Kiwi/KWIntercept.h +++ b/Pods/Headers/Kiwi/KWIntercept.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWIntercept.h \ No newline at end of file +../../Kiwi/NonARC/KWIntercept.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWInvocationCapturer.h b/Pods/Headers/Kiwi/KWInvocationCapturer.h index 6f3e8a6..786c20d 120000 --- a/Pods/Headers/Kiwi/KWInvocationCapturer.h +++ b/Pods/Headers/Kiwi/KWInvocationCapturer.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWInvocationCapturer.h \ No newline at end of file +../../Kiwi/Classes/Core/KWInvocationCapturer.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWItNode.h b/Pods/Headers/Kiwi/KWItNode.h index aa03118..115be89 120000 --- a/Pods/Headers/Kiwi/KWItNode.h +++ b/Pods/Headers/Kiwi/KWItNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWItNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWItNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatchVerifier.h b/Pods/Headers/Kiwi/KWMatchVerifier.h index 4700bc8..741e295 120000 --- a/Pods/Headers/Kiwi/KWMatchVerifier.h +++ b/Pods/Headers/Kiwi/KWMatchVerifier.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWMatchVerifier.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWMatchVerifier.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatcher.h b/Pods/Headers/Kiwi/KWMatcher.h index 54c4d8e..6d1fda1 120000 --- a/Pods/Headers/Kiwi/KWMatcher.h +++ b/Pods/Headers/Kiwi/KWMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWMatcher.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatcherFactory.h b/Pods/Headers/Kiwi/KWMatcherFactory.h index 2fa975f..053ae05 120000 --- a/Pods/Headers/Kiwi/KWMatcherFactory.h +++ b/Pods/Headers/Kiwi/KWMatcherFactory.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWMatcherFactory.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatcherFactory.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatchers.h b/Pods/Headers/Kiwi/KWMatchers.h index 7efa903..37dc93d 120000 --- a/Pods/Headers/Kiwi/KWMatchers.h +++ b/Pods/Headers/Kiwi/KWMatchers.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWMatchers.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatchers.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMatching.h b/Pods/Headers/Kiwi/KWMatching.h index 634b584..5094f6c 120000 --- a/Pods/Headers/Kiwi/KWMatching.h +++ b/Pods/Headers/Kiwi/KWMatching.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWMatching.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMatching.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMessagePattern.h b/Pods/Headers/Kiwi/KWMessagePattern.h index 7c6a19d..7db1ee2 120000 --- a/Pods/Headers/Kiwi/KWMessagePattern.h +++ b/Pods/Headers/Kiwi/KWMessagePattern.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWMessagePattern.h \ No newline at end of file +../../Kiwi/NonARC/KWMessagePattern.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMessageSpying.h b/Pods/Headers/Kiwi/KWMessageSpying.h index db0d4b0..f2b7dc0 120000 --- a/Pods/Headers/Kiwi/KWMessageSpying.h +++ b/Pods/Headers/Kiwi/KWMessageSpying.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWMessageSpying.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMessageSpying.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMessageTracker.h b/Pods/Headers/Kiwi/KWMessageTracker.h index 9a2202a..0529de7 120000 --- a/Pods/Headers/Kiwi/KWMessageTracker.h +++ b/Pods/Headers/Kiwi/KWMessageTracker.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWMessageTracker.h \ No newline at end of file +../../Kiwi/Classes/Core/KWMessageTracker.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWMock.h b/Pods/Headers/Kiwi/KWMock.h index bf30c7d..d07edac 120000 --- a/Pods/Headers/Kiwi/KWMock.h +++ b/Pods/Headers/Kiwi/KWMock.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWMock.h \ No newline at end of file +../../Kiwi/Classes/Mocking/KWMock.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWNilMatcher.h b/Pods/Headers/Kiwi/KWNilMatcher.h new file mode 120000 index 0000000..fbe052f --- /dev/null +++ b/Pods/Headers/Kiwi/KWNilMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWNilMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWNull.h b/Pods/Headers/Kiwi/KWNull.h index bc956ab..af2cb10 120000 --- a/Pods/Headers/Kiwi/KWNull.h +++ b/Pods/Headers/Kiwi/KWNull.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWNull.h \ No newline at end of file +../../Kiwi/Classes/Core/KWNull.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWObjCUtilities.h b/Pods/Headers/Kiwi/KWObjCUtilities.h index e1bbd29..f6cc0b9 120000 --- a/Pods/Headers/Kiwi/KWObjCUtilities.h +++ b/Pods/Headers/Kiwi/KWObjCUtilities.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWObjCUtilities.h \ No newline at end of file +../../Kiwi/Classes/Core/KWObjCUtilities.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWPendingNode.h b/Pods/Headers/Kiwi/KWPendingNode.h index d041665..7ff39e4 120000 --- a/Pods/Headers/Kiwi/KWPendingNode.h +++ b/Pods/Headers/Kiwi/KWPendingNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWPendingNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWPendingNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWProbe.h b/Pods/Headers/Kiwi/KWProbe.h index f2b521e..d6cdabb 120000 --- a/Pods/Headers/Kiwi/KWProbe.h +++ b/Pods/Headers/Kiwi/KWProbe.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWProbe.h \ No newline at end of file +../../Kiwi/Classes/Core/KWProbe.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWProbePoller.h b/Pods/Headers/Kiwi/KWProbePoller.h index bb74169..a1aee4c 120000 --- a/Pods/Headers/Kiwi/KWProbePoller.h +++ b/Pods/Headers/Kiwi/KWProbePoller.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWProbePoller.h \ No newline at end of file +../../Kiwi/Classes/Core/KWProbePoller.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWRaiseMatcher.h b/Pods/Headers/Kiwi/KWRaiseMatcher.h index de49892..4f4b4d9 120000 --- a/Pods/Headers/Kiwi/KWRaiseMatcher.h +++ b/Pods/Headers/Kiwi/KWRaiseMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWRaiseMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWRaiseMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWReceiveMatcher.h b/Pods/Headers/Kiwi/KWReceiveMatcher.h index 03516bc..c7c16f0 120000 --- a/Pods/Headers/Kiwi/KWReceiveMatcher.h +++ b/Pods/Headers/Kiwi/KWReceiveMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWReceiveMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWReceiveMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWRegisterMatchersNode.h b/Pods/Headers/Kiwi/KWRegisterMatchersNode.h index 4b5bf78..0d88f5d 120000 --- a/Pods/Headers/Kiwi/KWRegisterMatchersNode.h +++ b/Pods/Headers/Kiwi/KWRegisterMatchersNode.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWRegisterMatchersNode.h \ No newline at end of file +../../Kiwi/Classes/Nodes/KWRegisterMatchersNode.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWRegularExpressionPatternMatcher.h b/Pods/Headers/Kiwi/KWRegularExpressionPatternMatcher.h new file mode 120000 index 0000000..322e8d1 --- /dev/null +++ b/Pods/Headers/Kiwi/KWRegularExpressionPatternMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWReporting.h b/Pods/Headers/Kiwi/KWReporting.h index b6d678d..d220f49 120000 --- a/Pods/Headers/Kiwi/KWReporting.h +++ b/Pods/Headers/Kiwi/KWReporting.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWReporting.h \ No newline at end of file +../../Kiwi/Classes/Core/KWReporting.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWRespondToSelectorMatcher.h b/Pods/Headers/Kiwi/KWRespondToSelectorMatcher.h index 69632cb..53da1b3 120000 --- a/Pods/Headers/Kiwi/KWRespondToSelectorMatcher.h +++ b/Pods/Headers/Kiwi/KWRespondToSelectorMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWRespondToSelectorMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWSpec.h b/Pods/Headers/Kiwi/KWSpec.h index 6b9f5dc..b35172e 120000 --- a/Pods/Headers/Kiwi/KWSpec.h +++ b/Pods/Headers/Kiwi/KWSpec.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWSpec.h \ No newline at end of file +../../Kiwi/Classes/Core/KWSpec.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWStringContainsMatcher.h b/Pods/Headers/Kiwi/KWStringContainsMatcher.h new file mode 120000 index 0000000..43c9cd4 --- /dev/null +++ b/Pods/Headers/Kiwi/KWStringContainsMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWStringContainsMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWStringPrefixMatcher.h b/Pods/Headers/Kiwi/KWStringPrefixMatcher.h new file mode 120000 index 0000000..351d3e7 --- /dev/null +++ b/Pods/Headers/Kiwi/KWStringPrefixMatcher.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Matchers/KWStringPrefixMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWStringUtilities.h b/Pods/Headers/Kiwi/KWStringUtilities.h index 37f9ee2..e6225dc 120000 --- a/Pods/Headers/Kiwi/KWStringUtilities.h +++ b/Pods/Headers/Kiwi/KWStringUtilities.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWStringUtilities.h \ No newline at end of file +../../Kiwi/Classes/Core/KWStringUtilities.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWStub.h b/Pods/Headers/Kiwi/KWStub.h index b218517..6c8519f 120000 --- a/Pods/Headers/Kiwi/KWStub.h +++ b/Pods/Headers/Kiwi/KWStub.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWStub.h \ No newline at end of file +../../Kiwi/NonARC/KWStub.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWSymbolicator.h b/Pods/Headers/Kiwi/KWSymbolicator.h new file mode 120000 index 0000000..2bc8b59 --- /dev/null +++ b/Pods/Headers/Kiwi/KWSymbolicator.h @@ -0,0 +1 @@ +../../Kiwi/NonARC/KWSymbolicator.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWTestCase.h b/Pods/Headers/Kiwi/KWTestCase.h deleted file mode 120000 index ac4dd45..0000000 --- a/Pods/Headers/Kiwi/KWTestCase.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KWTestCase.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWUserDefinedMatcher.h b/Pods/Headers/Kiwi/KWUserDefinedMatcher.h index 050ce92..241b176 120000 --- a/Pods/Headers/Kiwi/KWUserDefinedMatcher.h +++ b/Pods/Headers/Kiwi/KWUserDefinedMatcher.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWUserDefinedMatcher.h \ No newline at end of file +../../Kiwi/Classes/Matchers/KWUserDefinedMatcher.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWValue.h b/Pods/Headers/Kiwi/KWValue.h index 9c7804c..f5aabfb 120000 --- a/Pods/Headers/Kiwi/KWValue.h +++ b/Pods/Headers/Kiwi/KWValue.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWValue.h \ No newline at end of file +../../Kiwi/Classes/Core/KWValue.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWVerifying.h b/Pods/Headers/Kiwi/KWVerifying.h index 7460bc0..10c41b7 120000 --- a/Pods/Headers/Kiwi/KWVerifying.h +++ b/Pods/Headers/Kiwi/KWVerifying.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWVerifying.h \ No newline at end of file +../../Kiwi/Classes/Verifiers/KWVerifying.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KWWorkarounds.h b/Pods/Headers/Kiwi/KWWorkarounds.h index 9dc878c..5394bed 120000 --- a/Pods/Headers/Kiwi/KWWorkarounds.h +++ b/Pods/Headers/Kiwi/KWWorkarounds.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KWWorkarounds.h \ No newline at end of file +../../Kiwi/Classes/Core/KWWorkarounds.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/Kiwi.h b/Pods/Headers/Kiwi/Kiwi.h index 804081a..90584f1 120000 --- a/Pods/Headers/Kiwi/Kiwi.h +++ b/Pods/Headers/Kiwi/Kiwi.h @@ -1 +1 @@ -../../Kiwi/Kiwi/Kiwi.h \ No newline at end of file +../../Kiwi/Classes/Core/Kiwi.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KiwiBlockMacros.h b/Pods/Headers/Kiwi/KiwiBlockMacros.h index b847eba..c040758 120000 --- a/Pods/Headers/Kiwi/KiwiBlockMacros.h +++ b/Pods/Headers/Kiwi/KiwiBlockMacros.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KiwiBlockMacros.h \ No newline at end of file +../../Kiwi/Classes/Core/KiwiBlockMacros.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KiwiConfiguration.h b/Pods/Headers/Kiwi/KiwiConfiguration.h index 0a82155..cdd209e 120000 --- a/Pods/Headers/Kiwi/KiwiConfiguration.h +++ b/Pods/Headers/Kiwi/KiwiConfiguration.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KiwiConfiguration.h \ No newline at end of file +../../Kiwi/Classes/Core/KiwiConfiguration.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KiwiMacros.h b/Pods/Headers/Kiwi/KiwiMacros.h index d1014a9..936b359 120000 --- a/Pods/Headers/Kiwi/KiwiMacros.h +++ b/Pods/Headers/Kiwi/KiwiMacros.h @@ -1 +1 @@ -../../Kiwi/Kiwi/KiwiMacros.h \ No newline at end of file +../../Kiwi/Classes/Core/KiwiMacros.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/KiwiNewMacros.h b/Pods/Headers/Kiwi/KiwiNewMacros.h deleted file mode 120000 index 49ae0ed..0000000 --- a/Pods/Headers/Kiwi/KiwiNewMacros.h +++ /dev/null @@ -1 +0,0 @@ -../../Kiwi/Kiwi/KiwiNewMacros.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSInvocation+KiwiAdditions.h b/Pods/Headers/Kiwi/NSInvocation+KiwiAdditions.h index ce9393d..216b70b 120000 --- a/Pods/Headers/Kiwi/NSInvocation+KiwiAdditions.h +++ b/Pods/Headers/Kiwi/NSInvocation+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Kiwi/NSInvocation+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSInvocation+OCMAdditions.h b/Pods/Headers/Kiwi/NSInvocation+OCMAdditions.h new file mode 120000 index 0000000..5d505e9 --- /dev/null +++ b/Pods/Headers/Kiwi/NSInvocation+OCMAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSInvocation+OCMAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSMethodSignature+KiwiAdditions.h b/Pods/Headers/Kiwi/NSMethodSignature+KiwiAdditions.h index 948ed5b..816f65b 120000 --- a/Pods/Headers/Kiwi/NSMethodSignature+KiwiAdditions.h +++ b/Pods/Headers/Kiwi/NSMethodSignature+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Kiwi/NSMethodSignature+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h b/Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h index d028e56..aa1be1c 120000 --- a/Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h +++ b/Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Kiwi/NSNumber+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSNumber+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSObject+KiwiMockAdditions.h b/Pods/Headers/Kiwi/NSObject+KiwiMockAdditions.h index 3491980..eba045f 120000 --- a/Pods/Headers/Kiwi/NSObject+KiwiMockAdditions.h +++ b/Pods/Headers/Kiwi/NSObject+KiwiMockAdditions.h @@ -1 +1 @@ -../../Kiwi/Kiwi/NSObject+KiwiMockAdditions.h \ No newline at end of file +../../Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSObject+KiwiSpyAdditions.h b/Pods/Headers/Kiwi/NSObject+KiwiSpyAdditions.h new file mode 120000 index 0000000..9746eaf --- /dev/null +++ b/Pods/Headers/Kiwi/NSObject+KiwiSpyAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSObject+KiwiStubAdditions.h b/Pods/Headers/Kiwi/NSObject+KiwiStubAdditions.h index 3ee7a58..09dc8ad 120000 --- a/Pods/Headers/Kiwi/NSObject+KiwiStubAdditions.h +++ b/Pods/Headers/Kiwi/NSObject+KiwiStubAdditions.h @@ -1 +1 @@ -../../Kiwi/Kiwi/NSObject+KiwiStubAdditions.h \ No newline at end of file +../../Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSObject+KiwiVerifierAdditions.h b/Pods/Headers/Kiwi/NSObject+KiwiVerifierAdditions.h index 93648b8..9def95d 120000 --- a/Pods/Headers/Kiwi/NSObject+KiwiVerifierAdditions.h +++ b/Pods/Headers/Kiwi/NSObject+KiwiVerifierAdditions.h @@ -1 +1 @@ -../../Kiwi/Kiwi/NSObject+KiwiVerifierAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSProxy+KiwiVerifierAdditions.h b/Pods/Headers/Kiwi/NSProxy+KiwiVerifierAdditions.h new file mode 120000 index 0000000..f58050d --- /dev/null +++ b/Pods/Headers/Kiwi/NSProxy+KiwiVerifierAdditions.h @@ -0,0 +1 @@ +../../Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/NSValue+KiwiAdditions.h b/Pods/Headers/Kiwi/NSValue+KiwiAdditions.h index e4b500a..e411b0c 120000 --- a/Pods/Headers/Kiwi/NSValue+KiwiAdditions.h +++ b/Pods/Headers/Kiwi/NSValue+KiwiAdditions.h @@ -1 +1 @@ -../../Kiwi/Kiwi/NSValue+KiwiAdditions.h \ No newline at end of file +../../Kiwi/Classes/Core/NSValue+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/Kiwi/SenTestSuite+KiwiAdditions.h b/Pods/Headers/Kiwi/SenTestSuite+KiwiAdditions.h new file mode 120000 index 0000000..e1e643a --- /dev/null +++ b/Pods/Headers/Kiwi/SenTestSuite+KiwiAdditions.h @@ -0,0 +1 @@ +../../Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/NSObject+SBJson.h b/Pods/Headers/SBJson/NSObject+SBJson.h deleted file mode 120000 index 86813ae..0000000 --- a/Pods/Headers/SBJson/NSObject+SBJson.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/NSObject+SBJson.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJson.h b/Pods/Headers/SBJson/SBJson.h deleted file mode 120000 index 3dd0622..0000000 --- a/Pods/Headers/SBJson/SBJson.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJson.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJson4.h b/Pods/Headers/SBJson/SBJson4.h new file mode 120000 index 0000000..f7a65c8 --- /dev/null +++ b/Pods/Headers/SBJson/SBJson4.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJson4Parser.h b/Pods/Headers/SBJson/SBJson4Parser.h new file mode 120000 index 0000000..da1b0ed --- /dev/null +++ b/Pods/Headers/SBJson/SBJson4Parser.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4Parser.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJson4StreamParser.h b/Pods/Headers/SBJson/SBJson4StreamParser.h new file mode 120000 index 0000000..ca9fdbe --- /dev/null +++ b/Pods/Headers/SBJson/SBJson4StreamParser.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4StreamParser.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJson4StreamTokeniser.h b/Pods/Headers/SBJson/SBJson4StreamTokeniser.h new file mode 120000 index 0000000..f56f4e1 --- /dev/null +++ b/Pods/Headers/SBJson/SBJson4StreamTokeniser.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4StreamTokeniser.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJson4StreamWriter.h b/Pods/Headers/SBJson/SBJson4StreamWriter.h new file mode 120000 index 0000000..0c27043 --- /dev/null +++ b/Pods/Headers/SBJson/SBJson4StreamWriter.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4StreamWriter.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJson4Writer.h b/Pods/Headers/SBJson/SBJson4Writer.h new file mode 120000 index 0000000..8f3db6d --- /dev/null +++ b/Pods/Headers/SBJson/SBJson4Writer.h @@ -0,0 +1 @@ +../../SBJson/src/main/objc/SBJson4Writer.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonParser.h b/Pods/Headers/SBJson/SBJsonParser.h deleted file mode 120000 index d2d9fc6..0000000 --- a/Pods/Headers/SBJson/SBJsonParser.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonParser.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonStreamParser.h b/Pods/Headers/SBJson/SBJsonStreamParser.h deleted file mode 120000 index 340e217..0000000 --- a/Pods/Headers/SBJson/SBJsonStreamParser.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonStreamParser.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonStreamParserAccumulator.h b/Pods/Headers/SBJson/SBJsonStreamParserAccumulator.h deleted file mode 120000 index e29491e..0000000 --- a/Pods/Headers/SBJson/SBJsonStreamParserAccumulator.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonStreamParserAccumulator.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonStreamParserAdapter.h b/Pods/Headers/SBJson/SBJsonStreamParserAdapter.h deleted file mode 120000 index 1c9ff95..0000000 --- a/Pods/Headers/SBJson/SBJsonStreamParserAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonStreamParserAdapter.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonStreamParserState.h b/Pods/Headers/SBJson/SBJsonStreamParserState.h deleted file mode 120000 index 1e1742a..0000000 --- a/Pods/Headers/SBJson/SBJsonStreamParserState.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonStreamParserState.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonStreamWriter.h b/Pods/Headers/SBJson/SBJsonStreamWriter.h deleted file mode 120000 index 37adc83..0000000 --- a/Pods/Headers/SBJson/SBJsonStreamWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonStreamWriter.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonStreamWriterAccumulator.h b/Pods/Headers/SBJson/SBJsonStreamWriterAccumulator.h deleted file mode 120000 index 2b72bbe..0000000 --- a/Pods/Headers/SBJson/SBJsonStreamWriterAccumulator.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonStreamWriterAccumulator.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonStreamWriterState.h b/Pods/Headers/SBJson/SBJsonStreamWriterState.h deleted file mode 120000 index 9175369..0000000 --- a/Pods/Headers/SBJson/SBJsonStreamWriterState.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonStreamWriterState.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonTokeniser.h b/Pods/Headers/SBJson/SBJsonTokeniser.h deleted file mode 120000 index 4effa3c..0000000 --- a/Pods/Headers/SBJson/SBJsonTokeniser.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonTokeniser.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonUTF8Stream.h b/Pods/Headers/SBJson/SBJsonUTF8Stream.h deleted file mode 120000 index 2440c4f..0000000 --- a/Pods/Headers/SBJson/SBJsonUTF8Stream.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonUTF8Stream.h \ No newline at end of file diff --git a/Pods/Headers/SBJson/SBJsonWriter.h b/Pods/Headers/SBJson/SBJsonWriter.h deleted file mode 120000 index a6b4901..0000000 --- a/Pods/Headers/SBJson/SBJsonWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../SBJson/Classes/SBJsonWriter.h \ No newline at end of file diff --git a/Pods/KIF/.gitignore b/Pods/KIF/.gitignore deleted file mode 100755 index faad457..0000000 --- a/Pods/KIF/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -#Ignore the Mac OS X .DS_Store files -.DS_Store - -#Ignore user-specific settings -*.mode1v3 -*.mode2v3 -*.pbxuser -*.perspectivev3 -*.xcworkspace -xcuserdata - -#Ignore textmate build errors -*.tm_build_errors - -#Ignore temp nibs and swap files -*.swp -*~.nib - -#Ignore the build, since we don't want archived builds -build - -.gitattributes - -#Probably don't want to check in xcuserdata -xcuserdata/ -*.xcworkspace/ - -*.orig diff --git a/Pods/KIF/Additions/CGGeometry-KIFAdditions.h b/Pods/KIF/Additions/CGGeometry-KIFAdditions.h old mode 100755 new mode 100644 diff --git a/Pods/KIF/Additions/CGGeometry-KIFAdditions.m b/Pods/KIF/Additions/CGGeometry-KIFAdditions.m old mode 100755 new mode 100644 diff --git a/Pods/KIF/Additions/LoadableCategory.h b/Pods/KIF/Additions/LoadableCategory.h old mode 100755 new mode 100644 index 0272bb5..92259bb --- a/Pods/KIF/Additions/LoadableCategory.h +++ b/Pods/KIF/Additions/LoadableCategory.h @@ -15,4 +15,4 @@ * * @param UNIQUE_NAME A globally unique name. */ -#define MAKE_CATEGORIES_LOADABLE(UNIQUE_NAME) @interface FORCELOAD_##UNIQUE_NAME @end @implementation FORCELOAD_##UNIQUE_NAME @end +#define MAKE_CATEGORIES_LOADABLE(UNIQUE_NAME) @interface FORCELOAD_##UNIQUE_NAME : NSObject @end @implementation FORCELOAD_##UNIQUE_NAME @end diff --git a/Pods/KIF/Additions/NSBundle-KIFAdditions.h b/Pods/KIF/Additions/NSBundle-KIFAdditions.h new file mode 100644 index 0000000..60cbe68 --- /dev/null +++ b/Pods/KIF/Additions/NSBundle-KIFAdditions.h @@ -0,0 +1,15 @@ +// +// NSBundle+KIFAdditions.h +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import + +@interface NSBundle (KIFAdditions) + ++ (NSBundle *)KIFTestBundle; + +@end diff --git a/Pods/KIF/Additions/NSBundle-KIFAdditions.m b/Pods/KIF/Additions/NSBundle-KIFAdditions.m new file mode 100644 index 0000000..8b34f69 --- /dev/null +++ b/Pods/KIF/Additions/NSBundle-KIFAdditions.m @@ -0,0 +1,27 @@ +// +// NSBundle+KIFAdditions.m +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import "NSBundle-KIFAdditions.h" +#import "KIFTestCase.h" +#import "LoadableCategory.h" + +MAKE_CATEGORIES_LOADABLE(NSBundle_KIFAdditions) + +@implementation NSBundle (KIFAdditions) + ++ (NSBundle *)KIFTestBundle +{ + static NSBundle *bundle; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + bundle = [self bundleForClass:[KIFTestCase class]]; + }); + return bundle; +} + +@end diff --git a/Pods/KIF/Additions/NSError-KIFAdditions.h b/Pods/KIF/Additions/NSError-KIFAdditions.h new file mode 100644 index 0000000..9232560 --- /dev/null +++ b/Pods/KIF/Additions/NSError-KIFAdditions.h @@ -0,0 +1,16 @@ +// +// NSError+KIFAdditions.h +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import + +@interface NSError (KIFAdditions) + ++ (instancetype)KIFErrorWithUnderlyingError:(NSError *)underlyingError format:(NSString *)format, ... NS_FORMAT_FUNCTION(2,3); ++ (instancetype)KIFErrorWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2); + +@end diff --git a/Pods/KIF/Additions/NSError-KIFAdditions.m b/Pods/KIF/Additions/NSError-KIFAdditions.m new file mode 100644 index 0000000..3cba684 --- /dev/null +++ b/Pods/KIF/Additions/NSError-KIFAdditions.m @@ -0,0 +1,37 @@ +// +// NSError+KIFAdditions.m +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import "NSError-KIFAdditions.h" +#import "LoadableCategory.h" +#import "KIFTestActor.h" + +MAKE_CATEGORIES_LOADABLE(NSError_KIFAdditions) + +@implementation NSError (KIFAdditions) + ++ (instancetype)KIFErrorWithFormat:(NSString *)format, ... +{ + va_list args; + va_start(args, format); + NSString *description = [[[NSString alloc] initWithFormat:format arguments:args] autorelease]; + va_end(args); + + return [self errorWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:@{NSLocalizedDescriptionKey: description}]; +} + ++ (instancetype)KIFErrorWithUnderlyingError:(NSError *)underlyingError format:(NSString *)format, ... +{ + va_list args; + va_start(args, format); + NSString *description = [[[NSString alloc] initWithFormat:format arguments:args] autorelease]; + va_end(args); + + return [self errorWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:@{NSLocalizedDescriptionKey: description, NSUnderlyingErrorKey: underlyingError}]; +} + +@end diff --git a/Pods/KIF/Additions/NSFileManager-KIFAdditions.h b/Pods/KIF/Additions/NSFileManager-KIFAdditions.h old mode 100755 new mode 100644 diff --git a/Pods/KIF/Additions/NSFileManager-KIFAdditions.m b/Pods/KIF/Additions/NSFileManager-KIFAdditions.m old mode 100755 new mode 100644 index f3ad07c..b41f4a5 --- a/Pods/KIF/Additions/NSFileManager-KIFAdditions.m +++ b/Pods/KIF/Additions/NSFileManager-KIFAdditions.m @@ -25,7 +25,7 @@ - (NSString *)createUserDirectory:(NSSearchPathDirectory)searchPath; return nil; } - NSString *rootDirectory = [paths objectAtIndex:0]; + NSString *rootDirectory = paths[0]; BOOL isDir; BOOL created = NO; diff --git a/Pods/KIF/Additions/SenTestCase-KIFAdditions.h b/Pods/KIF/Additions/SenTestCase-KIFAdditions.h new file mode 100644 index 0000000..c86cb55 --- /dev/null +++ b/Pods/KIF/Additions/SenTestCase-KIFAdditions.h @@ -0,0 +1,14 @@ +// +// SenTestCase-KIFAdditions.h +// KIF +// +// Created by Brian Nickel on 8/23/13. +// +// + +#import +#import "KIFTestActor.h" + +@interface SenTestCase (KIFAdditions) + +@end diff --git a/Pods/KIF/Additions/SenTestCase-KIFAdditions.m b/Pods/KIF/Additions/SenTestCase-KIFAdditions.m new file mode 100644 index 0000000..8f2fe06 --- /dev/null +++ b/Pods/KIF/Additions/SenTestCase-KIFAdditions.m @@ -0,0 +1,33 @@ +// +// SenTestCase-KIFAdditions.m +// KIF +// +// Created by Brian Nickel on 8/23/13. +// +// + +#import "SenTestCase-KIFAdditions.h" +#import "LoadableCategory.h" + +MAKE_CATEGORIES_LOADABLE(SenTestCase_KIFAdditions) + +@implementation SenTestCase (KIFAdditions) + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop +{ + if (stop) { + [self raiseAfterFailure]; + } + [self failWithException:exception]; + [self continueAfterFailure]; +} + +- (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop +{ + NSException *lastException = exceptions.lastObject; + for (NSException *exception in exceptions) { + [self failWithException:exception stopTest:(exception == lastException ? stop : NO)]; + } +} + +@end diff --git a/Pods/KIF/Additions/UIAccessibilityElement-KIFAdditions.h b/Pods/KIF/Additions/UIAccessibilityElement-KIFAdditions.h old mode 100755 new mode 100644 index 455f9e9..a4942ec --- a/Pods/KIF/Additions/UIAccessibilityElement-KIFAdditions.h +++ b/Pods/KIF/Additions/UIAccessibilityElement-KIFAdditions.h @@ -12,7 +12,48 @@ @interface UIAccessibilityElement (KIFAdditions) -// Finds the view that this element is a part of +/*! + @abstract Finds the first view that the accessibility element is part of. + @discussion There is not always a one-to-one mapping between views and accessibility elements. Accessibility elements may not even map to the view you will expect. For instance, table view cell accessibility elements return the @c UITableView and keyboard keys map to the keyboard as a whole. + + @param element The accessibility element. + @return The first matching @c UIView as determined by the accessibility API. + */ + (UIView *)viewContainingAccessibilityElement:(UIAccessibilityElement *)element; +/*! + @abstract Finds an accessibility element and view with a matching label, value, and traits, optionally passing a tappability test. + @discussion This method combines @c +accessibilityElementWithLabel:value:traits:error: and @c +viewContainingAccessibilityElement:tappable:error: for convenience. + @param foundElement The found accessibility element or @c nil if the method returns @c NO. Can be @c NULL. + @param foundView The first matching view for @c foundElement as determined by the accessibility API or @c nil if the view is hidden or fails the tappability test. Can be @c NULL. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + @param error A reference to an error object to be populated when no matching element or view is found. Can be @c NULL. + @result @c YES if the element and view were found. Otherwise @c NO. + */ ++ (BOOL)accessibilityElement:(out UIAccessibilityElement **)foundElement view:(out UIView **)foundView withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable error:(out NSError **)error; + +/*! + @abstract Finds an accessibility element with a matching label, value, and traits. + @discussion This functionality is identical to -[UIApplication accessibilityElementWithLabel:accessibilityValue:traits:] except that it detailed error messaging in the case where the element cannot be found. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + @param error A reference to an error object to be populated when no element is found. Can be @c NULL. + @return The found accessibility element. If @c nil see the @c error for a detailed reason. + */ ++ (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits error:(out NSError **)error; + +/*! + @abstract Finds and attempts to make visible a view for a given accessibility element. + @discussion If the element is found, off screen, and is inside a scroll view, this method will attempt to programmatically scroll the view onto the screen before performing any logic as to if the view is tappable. + + @param element The accessibility element. + @param mustBeTappable If @c YES, a tappability test will be performed. + @param error A reference to an error object to be populated when no element is found. Can be @c NULL. + @return The first matching view as determined by the accessibility API or nil if the view is hidden or fails the tappability test. + */ ++ (UIView *)viewContainingAccessibilityElement:(UIAccessibilityElement *)element tappable:(BOOL)mustBeTappable error:(NSError **)error; + @end diff --git a/Pods/KIF/Additions/UIAccessibilityElement-KIFAdditions.m b/Pods/KIF/Additions/UIAccessibilityElement-KIFAdditions.m old mode 100755 new mode 100644 index acb5ac4..6916731 --- a/Pods/KIF/Additions/UIAccessibilityElement-KIFAdditions.m +++ b/Pods/KIF/Additions/UIAccessibilityElement-KIFAdditions.m @@ -7,9 +7,13 @@ // See the LICENSE file distributed with this work for the terms under // which Square, Inc. licenses this file to you. +#import "NSError-KIFAdditions.h" #import "UIAccessibilityElement-KIFAdditions.h" +#import "UIApplication-KIFAdditions.h" +#import "UIScrollView-KIFAdditions.h" +#import "UIView-KIFAdditions.h" #import "LoadableCategory.h" - +#import "KIFTestActor.h" MAKE_CATEGORIES_LOADABLE(UIAccessibilityElement_KIFAdditions) @@ -25,4 +29,104 @@ + (UIView *)viewContainingAccessibilityElement:(UIAccessibilityElement *)element return (UIView *)element; } ++ (BOOL)accessibilityElement:(out UIAccessibilityElement **)foundElement view:(out UIView **)foundView withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable error:(out NSError **)error; +{ + UIAccessibilityElement *element = [self accessibilityElementWithLabel:label value:value traits:traits error:error]; + if (!element) { + return NO; + } + + UIView *view = [self viewContainingAccessibilityElement:element tappable:mustBeTappable error:error]; + if (!view) { + return NO; + } + + if (foundElement) { *foundElement = element; } + if (foundView) { *foundView = view; } + return YES; +} + ++ (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits error:(out NSError **)error; +{ + UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:value traits:traits]; + if (element || !error) { + return element; + } + + element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:nil traits:traits]; + // For purposes of a better error message, see if we can find the view, just not a view with the specified value. + if (value && element) { + *error = [NSError KIFErrorWithFormat:@"Found an accessibility element with the label \"%@\", but with the value \"%@\", not \"%@\"", label, element.accessibilityValue, value]; + return nil; + } + + // Check the traits, too. + element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:nil traits:UIAccessibilityTraitNone]; + if (traits != UIAccessibilityTraitNone && element) { + *error = [NSError KIFErrorWithFormat:@"Found an accessibility element with the label \"%@\", but not with the traits \"%llu\"", label, traits]; + return nil; + } + + *error = [NSError KIFErrorWithFormat:@"Failed to find accessibility element with the label \"%@\"", label]; + return nil; +} + ++ (UIView *)viewContainingAccessibilityElement:(UIAccessibilityElement *)element tappable:(BOOL)mustBeTappable error:(NSError **)error; +{ + // Small safety mechanism. If someone calls this method after a failing call to accessibilityElementWithLabel:..., we don't want to wipe out the error message. + if (!element && error && *error) { + return nil; + } + + // Make sure the element is visible + UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + if (!view) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Cannot find view containing accessibility element with the label \"%@\"", element.accessibilityLabel]; + } + return nil; + } + + // Scroll the view to be visible if necessary + UIScrollView *scrollView = (UIScrollView *)view; + while (scrollView && ![scrollView isKindOfClass:[UIScrollView class]]) { + scrollView = (UIScrollView *)scrollView.superview; + } + if (scrollView) { + if ((UIAccessibilityElement *)view == element) { + [scrollView scrollViewToVisible:view animated:YES]; + } else { + CGRect elementFrame = [view.window convertRect:element.accessibilityFrame toView:scrollView]; + [scrollView scrollRectToVisible:elementFrame animated:YES]; + } + + // Give the scroll view a small amount of time to perform the scroll. + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.3, false); + } + + if ([[UIApplication sharedApplication] isIgnoringInteractionEvents]) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Application is ignoring interaction events"]; + } + return nil; + } + + // If we don't require tappability, at least make sure it's not hidden + if ([view isHidden]) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Accessibility element with label \"%@\" is hidden.", element.accessibilityLabel]; + } + return nil; + } + + if (mustBeTappable && !view.isProbablyTappable) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Accessibility element with label \"%@\" is not tappable. It may be blocked by other views.", element.accessibilityLabel]; + } + return nil; + } + + return view; +} + @end diff --git a/Pods/KIF/Additions/UIApplication-KIFAdditions.h b/Pods/KIF/Additions/UIApplication-KIFAdditions.h old mode 100755 new mode 100644 index a0c6935..c26aa39 --- a/Pods/KIF/Additions/UIApplication-KIFAdditions.h +++ b/Pods/KIF/Additions/UIApplication-KIFAdditions.h @@ -9,15 +9,76 @@ #import +#define UIApplicationCurrentRunMode ([[UIApplication sharedApplication] currentRunLoopMode]) + +/*! + @abstract When mocking @c -openURL:, this notification is posted. + */ +UIKIT_EXTERN NSString *const UIApplicationDidMockOpenURLNotification; + +/*! + @abstract The key for the opened URL in the @c UIApplicationDidMockOpenURLNotification notification. + */ +UIKIT_EXTERN NSString *const UIApplicationOpenedURLKey; @interface UIApplication (KIFAdditions) -- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label; -- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; +/*! + @abstract Finds an accessibility element with a matching label, value, and traits across all windows in the application starting at the frontmost window. + @param label The accessibility label of the element to search for. + @param value The accessibility value of the element to search for. If @c nil, all values will be accepted. + @param traits The accessibility traits of the element to search for. Elements that do not include at least these traits are ignored. + @return The found accessibility element or @c nil if the element could not be found. + */ - (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label accessibilityValue:(NSString *)value traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Finds an accessibility element where @c matchBlock returns @c YES, across all windows in the application starting at the fronmost window. + @discussion This method should be used if @c accessibilityElementWithLabel:accessibilityValue:traits: does not meet your requirements. For example, if you are searching for an element that begins with a pattern or if of a certain view type. + @param matchBlock. A block to be performed on each element to see if it passes. + */ - (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessibilityElement *))matchBlock; +/*! + @returns The window containing the keyboard or @c nil if the keyboard is not visible. + */ - (UIWindow *)keyboardWindow; + +/*! + @returns The topmost window containing a @c UIPickerView. + */ - (UIWindow *)pickerViewWindow; +/*! + @returns The topmost window containing a @c UIDimmingView. + */ +- (UIWindow *)dimmingViewWindow; + +/*! + @returns All windows in the application, including the key window even if it does not appear in @c -windows. + */ +- (NSArray *)windowsWithKeyWindow; + +/*! + @returns The current run loop mode. + */ +- (CFStringRef)currentRunLoopMode; + +/*! + @abstract Swizzles the run loop modes so KIF can better switch between them. + */ ++ (void)swizzleRunLoop; + +/*! + @abstract Starts mocking requests to @c -openURL:, announcing all requests with a notification. + @discussion After calling this method, whenever @c -openURL: is called a notification named @c UIApplicationDidMockOpenURLNotification with the URL in the @c UIApplicationOpenedURL will be raised and the normal behavior will be cancelled. + @param returnValue The value to return when @c -openURL: is called. + */ ++ (void)startMockingOpenURLWithReturnValue:(BOOL)returnValue; + +/*! + @abstract Stops the application from mocking requests to @c -openURL:. + */ ++ (void)stopMockingOpenURL; + @end diff --git a/Pods/KIF/Additions/UIApplication-KIFAdditions.m b/Pods/KIF/Additions/UIApplication-KIFAdditions.m old mode 100755 new mode 100644 index d98cee8..e759c65 --- a/Pods/KIF/Additions/UIApplication-KIFAdditions.m +++ b/Pods/KIF/Additions/UIApplication-KIFAdditions.m @@ -10,28 +10,32 @@ #import "UIApplication-KIFAdditions.h" #import "LoadableCategory.h" #import "UIView-KIFAdditions.h" - +#import +#import MAKE_CATEGORIES_LOADABLE(UIApplication_KIFAdditions) +static BOOL _KIF_UIApplicationMockOpenURL = NO; +static BOOL _KIF_UIApplicationMockOpenURL_returnValue = NO; -@implementation UIApplication (KIFAdditions) +@interface UIApplication (Undocumented) +- (void)pushRunLoopMode:(id)arg1; +- (void)pushRunLoopMode:(id)arg1 requester:(id)requester; +- (void)popRunLoopMode:(id)arg1; +- (void)popRunLoopMode:(id)arg1 requester:(id)requester; +@end -- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label; -{ - return [self accessibilityElementWithLabel:label traits:UIAccessibilityTraitNone]; -} +NSString *const UIApplicationDidMockOpenURLNotification = @"UIApplicationDidMockOpenURLNotification"; +NSString *const UIApplicationOpenedURLKey = @"UIApplicationOpenedURL"; +static const void *KIFRunLoopModesKey = &KIFRunLoopModesKey; -- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; -{ - return [self accessibilityElementWithLabel:label accessibilityValue:nil traits:traits]; -} +@implementation UIApplication (KIFAdditions) - (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label accessibilityValue:(NSString *)value traits:(UIAccessibilityTraits)traits; { // Go through the array of windows in reverse order to process the frontmost window first. // When several elements with the same accessibilitylabel are present the one in front will be picked. - for (UIWindow *window in [self.windows reverseObjectEnumerator]) { + for (UIWindow *window in [self.windowsWithKeyWindow reverseObjectEnumerator]) { UIAccessibilityElement *element = [window accessibilityElementWithLabel:label accessibilityValue:value traits:traits]; if (element) { return element; @@ -43,7 +47,7 @@ - (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label acce - (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessibilityElement *))matchBlock; { - for (UIWindow *window in [self.windows reverseObjectEnumerator]) { + for (UIWindow *window in [self.windowsWithKeyWindow reverseObjectEnumerator]) { UIAccessibilityElement *element = [window accessibilityElementMatchingBlock:matchBlock]; if (element) { return element; @@ -55,7 +59,7 @@ - (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessi - (UIWindow *)keyboardWindow; { - for (UIWindow *window in self.windows) { + for (UIWindow *window in self.windowsWithKeyWindow) { if ([NSStringFromClass([window class]) isEqual:@"UITextEffectsWindow"]) { return window; } @@ -66,7 +70,7 @@ - (UIWindow *)keyboardWindow; - (UIWindow *)pickerViewWindow; { - for (UIWindow *window in [self windows]) { + for (UIWindow *window in self.windowsWithKeyWindow) { NSArray *pickerViews = [window subviewsWithClassNameOrSuperClassNamePrefix:@"UIPickerView"]; if (pickerViews.count > 0) { return window; @@ -76,4 +80,113 @@ - (UIWindow *)pickerViewWindow; return nil; } +- (UIWindow *)dimmingViewWindow; +{ + for (UIWindow *window in self.windowsWithKeyWindow) { + NSArray *dimmingViews = [window subviewsWithClassNameOrSuperClassNamePrefix:@"UIDimmingView"]; + if (dimmingViews.count > 0) { + return window; + } + } + + return nil; +} + +- (NSArray *)windowsWithKeyWindow +{ + NSMutableArray *windows = self.windows.mutableCopy; + UIWindow *keyWindow = self.keyWindow; + if (![windows containsObject:keyWindow]) { + [windows addObject:keyWindow]; + } + return [windows autorelease]; +} + +- (NSMutableArray *)KIF_runLoopModes; +{ + NSMutableArray *modes = objc_getAssociatedObject(self, KIFRunLoopModesKey); + if (!modes) { + modes = [NSMutableArray arrayWithObject:(id)kCFRunLoopDefaultMode]; + objc_setAssociatedObject(self, KIFRunLoopModesKey, modes, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return modes; +} + +- (CFStringRef)currentRunLoopMode; +{ + return (CFStringRef)[self KIF_runLoopModes].lastObject; +} + +- (void)KIF_pushRunLoopMode:(NSString *)mode; +{ + [[self KIF_runLoopModes] addObject:mode]; + [self KIF_pushRunLoopMode:mode]; +} + +- (void)KIF_pushRunLoopMode:(NSString *)mode requester:(id)requester; +{ + [[self KIF_runLoopModes] addObject:mode]; + [self KIF_pushRunLoopMode:mode requester:requester]; +} + +- (void)KIF_popRunLoopMode:(NSString *)mode; +{ + [[self KIF_runLoopModes] removeLastObject]; + [self KIF_popRunLoopMode:mode]; +} + + +- (void)KIF_popRunLoopMode:(NSString *)mode requester:(id)requester; +{ + [[self KIF_runLoopModes] removeLastObject]; + [self KIF_popRunLoopMode:mode requester:requester]; +} + +- (BOOL)KIF_openURL:(NSURL *)URL; +{ + if (_KIF_UIApplicationMockOpenURL) { + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidMockOpenURLNotification object:self userInfo:@{UIApplicationOpenedURLKey: URL}]; + return _KIF_UIApplicationMockOpenURL_returnValue; + } else { + return [self KIF_openURL:URL]; + } +} + +static inline void Swizzle(Class c, SEL orig, SEL new) +{ + Method origMethod = class_getInstanceMethod(c, orig); + Method newMethod = class_getInstanceMethod(c, new); + if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) + class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); + else + method_exchangeImplementations(origMethod, newMethod); +} + ++ (void)swizzleRunLoop; +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Swizzle(self, @selector(pushRunLoopMode:), @selector(KIF_pushRunLoopMode:)); + Swizzle(self, @selector(pushRunLoopMode:requester:), @selector(KIF_pushRunLoopMode:requester:)); + Swizzle(self, @selector(popRunLoopMode:), @selector(KIF_popRunLoopMode:)); + Swizzle(self, @selector(popRunLoopMode:requester:), @selector(KIF_popRunLoopMode:requester:)); + }); +} + ++ (void)startMockingOpenURLWithReturnValue:(BOOL)returnValue; +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Swizzle(self, @selector(openURL:), @selector(KIF_openURL:)); + }); + + _KIF_UIApplicationMockOpenURL = YES; + _KIF_UIApplicationMockOpenURL_returnValue = returnValue; +} + ++ (void)stopMockingOpenURL; +{ + _KIF_UIApplicationMockOpenURL = NO; +} + @end diff --git a/Pods/KIF/Additions/UIScrollView-KIFAdditions.h b/Pods/KIF/Additions/UIScrollView-KIFAdditions.h old mode 100755 new mode 100644 diff --git a/Pods/KIF/Additions/UIScrollView-KIFAdditions.m b/Pods/KIF/Additions/UIScrollView-KIFAdditions.m old mode 100755 new mode 100644 diff --git a/Pods/KIF/Additions/UITouch-KIFAdditions.h b/Pods/KIF/Additions/UITouch-KIFAdditions.h old mode 100755 new mode 100644 diff --git a/Pods/KIF/Additions/UITouch-KIFAdditions.m b/Pods/KIF/Additions/UITouch-KIFAdditions.m old mode 100755 new mode 100644 index 46c5cd9..39096a5 --- a/Pods/KIF/Additions/UITouch-KIFAdditions.m +++ b/Pods/KIF/Additions/UITouch-KIFAdditions.m @@ -14,6 +14,37 @@ MAKE_CATEGORIES_LOADABLE(UITouch_KIFAdditions) +@interface UITouch () { +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 60000 + // ivars declarations removed in 6.0 + NSTimeInterval _timestamp; + UITouchPhase _phase; + UITouchPhase _savedPhase; + NSUInteger _tapCount; + + UIWindow *_window; + UIView *_view; + UIView *_warpedIntoView; + NSMutableArray *_gestureRecognizers; + NSMutableArray *_forwardingRecord; + + CGPoint _locationInWindow; + CGPoint _previousLocationInWindow; + UInt8 _pathIndex; + UInt8 _pathIdentity; + float _pathMajorRadius; + struct { + unsigned int _firstTouchForView:1; + unsigned int _isTap:1; + unsigned int _isDelayed:1; + unsigned int _sentTouchesEnded:1; + unsigned int _abandonForwardingRecord:1; + } _touchFlags; +#endif +} +- (void)setGestureView:(UIView *)view; +@end + @implementation UITouch (KIFAdditions) - (id)initInView:(UIView *)view; @@ -39,11 +70,13 @@ - (id)initAtPoint:(CGPoint)point inWindow:(UIWindow *)window; _window = [window retain]; _view = [hitTestView retain]; - _gestureView = [hitTestView retain]; + if ([self respondsToSelector:@selector(setGestureView:)]) { + [self setGestureView:hitTestView]; + } _phase = UITouchPhaseBegan; _touchFlags._firstTouchForView = 1; _touchFlags._isTap = 1; - _timestamp = [NSDate timeIntervalSinceReferenceDate]; + _timestamp = [[NSProcessInfo processInfo] systemUptime]; return self; } @@ -56,7 +89,7 @@ - (id)initAtPoint:(CGPoint)point inView:(UIView *)view; - (void)setPhase:(UITouchPhase)phase; { _phase = phase; - _timestamp = [NSDate timeIntervalSinceReferenceDate]; + _timestamp = [[NSProcessInfo processInfo] systemUptime]; } // @@ -68,7 +101,7 @@ - (void)setLocationInWindow:(CGPoint)location { _previousLocationInWindow = _locationInWindow; _locationInWindow = location; - _timestamp = [NSDate timeIntervalSinceReferenceDate]; + _timestamp = [[NSProcessInfo processInfo] systemUptime]; } @end diff --git a/Pods/KIF/Additions/UIView-KIFAdditions.h b/Pods/KIF/Additions/UIView-KIFAdditions.h old mode 100755 new mode 100644 index 9cc7743..333fc9d --- a/Pods/KIF/Additions/UIView-KIFAdditions.h +++ b/Pods/KIF/Additions/UIView-KIFAdditions.h @@ -9,10 +9,11 @@ #import +typedef CGPoint KIFDisplacement; @interface UIView (KIFAdditions) -@property (nonatomic, readonly, getter=isTappable) BOOL tappable; +@property (nonatomic, readonly, getter=isProbablyTappable) BOOL probablyTappable; - (BOOL)isDescendantOfFirstResponder; - (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label; @@ -35,6 +36,7 @@ - (void)flash; - (void)tap; - (void)tapAtPoint:(CGPoint)point; +- (void)longPressAtPoint:(CGPoint)point duration:(NSTimeInterval)duration; /*! @method dragFromPoint:toPoint: @@ -44,6 +46,8 @@ @param endPoint The point at which to end the drag, in the coordinate system of the receiver. */ - (void)dragFromPoint:(CGPoint)startPoint toPoint:(CGPoint)endPoint; +- (void)dragFromPoint:(CGPoint)startPoint toPoint:(CGPoint)endPoint steps:(NSUInteger)stepCount; +- (void)dragFromPoint:(CGPoint)startPoint displacement:(KIFDisplacement)displacement steps:(NSUInteger)stepCount; - (void)dragAlongPathWithPoints:(CGPoint *)points count:(NSInteger)count; /*! @@ -73,4 +77,9 @@ */ - (CGPoint)tappablePointInRect:(CGRect)rect; +/*! + @abstract Evaluates if user interaction is enabled including edge cases. + */ +- (BOOL)isUserInteractionActuallyEnabled; + @end diff --git a/Pods/KIF/Additions/UIView-KIFAdditions.m b/Pods/KIF/Additions/UIView-KIFAdditions.m old mode 100755 new mode 100644 index e46fcd6..ab4b443 --- a/Pods/KIF/Additions/UIView-KIFAdditions.m +++ b/Pods/KIF/Additions/UIView-KIFAdditions.m @@ -10,6 +10,7 @@ #import "UIView-KIFAdditions.h" #import "CGGeometry-KIFAdditions.h" #import "UIAccessibilityElement-KIFAdditions.h" +#import "UIApplication-KIFAdditions.h" #import "UITouch-KIFAdditions.h" #import @@ -68,6 +69,19 @@ - (UIEvent *)_eventWithTouch:(UITouch *)touch; @implementation UIView (KIFAdditions) ++ (NSSet *)classesToSkipAccessibilitySearchRecursion +{ + static NSSet *classesToSkip; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // UIDatePicker contains hundreds of thousands of placeholder accessibility elements that aren't useful to KIF, + // so don't recurse into a date picker when searching for matching accessibility elements + classesToSkip = [[NSSet alloc] initWithObjects:[UIDatePicker class], nil]; + }); + + return classesToSkip; +} + - (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label { return [self accessibilityElementWithLabel:label traits:UIAccessibilityTraitNone]; @@ -81,9 +95,16 @@ - (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label trai - (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label accessibilityValue:(NSString *)value traits:(UIAccessibilityTraits)traits; { return [self accessibilityElementMatchingBlock:^(UIAccessibilityElement *element) { + + // TODO: This is a temporary fix for an SDK defect. + NSString *accessibilityValue = element.accessibilityValue; + if ([accessibilityValue isKindOfClass:[NSAttributedString class]]) { + accessibilityValue = [(NSAttributedString *)accessibilityValue string]; + } + BOOL labelsMatch = [element.accessibilityLabel isEqual:label]; BOOL traitsMatch = ((element.accessibilityTraits) & traits) == traits; - BOOL valuesMatch = !value || [value isEqual:element.accessibilityValue]; + BOOL valuesMatch = !value || [value isEqual:accessibilityValue]; return (BOOL)(labelsMatch && traitsMatch && valuesMatch); }]; @@ -101,13 +122,17 @@ - (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessi BOOL elementMatches = matchBlock((UIAccessibilityElement *)self); if (elementMatches) { - if (self.tappable) { + if (self.isTappable) { return (UIAccessibilityElement *)self; } else { matchingButOccludedElement = (UIAccessibilityElement *)self; } } + if ([[[self class] classesToSkipAccessibilitySearchRecursion] containsObject:[self class]]) { + return matchingButOccludedElement; + } + // Check the subviews first. Even if the receiver says it's an accessibility container, // the returned objects are UIAccessibilityElementMockViews (which aren't actually views) // rather than the real subviews it contains. We want the real views if possible. @@ -131,7 +156,7 @@ - (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessi NSMutableArray *elementStack = [NSMutableArray arrayWithObject:self]; while (elementStack.count) { - UIAccessibilityElement *element = [elementStack lastObject]; + UIAccessibilityElement *element = [[[elementStack lastObject] retain] autorelease]; [elementStack removeLastObject]; BOOL elementMatches = matchBlock(element); @@ -158,7 +183,9 @@ - (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessi for (NSInteger accessibilityElementIndex = 0; accessibilityElementIndex < accessibilityElementCount; accessibilityElementIndex++) { UIAccessibilityElement *subelement = [element accessibilityElementAtIndex:accessibilityElementIndex]; - [elementStack addObject:subelement]; + if (subelement) { + [elementStack addObject:subelement]; + } } } @@ -172,7 +199,7 @@ - (UIView *)subviewWithClassNamePrefix:(NSString *)prefix; return nil; } - return [subviews objectAtIndex:0]; + return subviews[0]; } - (NSArray *)subviewsWithClassNamePrefix:(NSString *)prefix; @@ -203,7 +230,7 @@ - (UIView *)subviewWithClassNameOrSuperClassNamePrefix:(NSString *)prefix; return nil; } - return [subviews objectAtIndex:0]; + return subviews[0]; } - (NSArray *)subviewsWithClassNameOrSuperClassNamePrefix:(NSString *)prefix; @@ -301,15 +328,65 @@ - (void)tapAtPoint:(CGPoint)point; [touch release]; } +#define DRAG_TOUCH_DELAY 0.01 + +- (void)longPressAtPoint:(CGPoint)point duration:(NSTimeInterval)duration +{ + UITouch *touch = [[UITouch alloc] initAtPoint:point inView:self]; + [touch setPhase:UITouchPhaseBegan]; + + UIEvent *eventDown = [self _eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventDown]; + + CFRunLoopRunInMode(kCFRunLoopDefaultMode, DRAG_TOUCH_DELAY, false); + + for (NSTimeInterval timeSpent = DRAG_TOUCH_DELAY; timeSpent < duration; timeSpent += DRAG_TOUCH_DELAY) + { + [touch setPhase:UITouchPhaseStationary]; + + UIEvent *eventStillDown = [self _eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventStillDown]; + + CFRunLoopRunInMode(kCFRunLoopDefaultMode, DRAG_TOUCH_DELAY, false); + } + + [touch setPhase:UITouchPhaseEnded]; + UIEvent *eventUp = [self _eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventUp]; + + // Dispatching the event doesn't actually update the first responder, so fake it + if ([touch.view isDescendantOfView:self] && [self canBecomeFirstResponder]) { + [self becomeFirstResponder]; + } + + [touch release]; +} - (void)dragFromPoint:(CGPoint)startPoint toPoint:(CGPoint)endPoint; { - // Handle touches in the normal way for other views - CGPoint points[] = {startPoint, CGPointMidPoint(startPoint, endPoint), endPoint}; - [self dragAlongPathWithPoints:points count:sizeof(points) / sizeof(CGPoint)]; + [self dragFromPoint:startPoint toPoint:endPoint steps:3]; } -#define DRAG_TOUCH_DELAY 0.01 + +- (void)dragFromPoint:(CGPoint)startPoint toPoint:(CGPoint)endPoint steps:(NSUInteger)stepCount; +{ + KIFDisplacement displacement = CGPointMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y); + [self dragFromPoint:startPoint displacement:displacement steps:stepCount]; +} + +- (void)dragFromPoint:(CGPoint)startPoint displacement:(KIFDisplacement)displacement steps:(NSUInteger)stepCount; +{ + CGPoint *path = alloca(stepCount * sizeof(CGPoint)); + + for (NSUInteger i = 0; i < stepCount; i++) + { + CGFloat progress = ((CGFloat)i)/(stepCount - 1); + path[i] = CGPointMake(startPoint.x + (progress * displacement.x), + startPoint.y + (progress * displacement.y)); + } + + [self dragAlongPathWithPoints:path count:stepCount]; +} - (void)dragAlongPathWithPoints:(CGPoint *)points count:(NSInteger)count; { @@ -324,17 +401,17 @@ - (void)dragAlongPathWithPoints:(CGPoint *)points count:(NSInteger)count; UIEvent *eventDown = [self _eventWithTouch:touch]; [[UIApplication sharedApplication] sendEvent:eventDown]; - - CFRunLoopRunInMode(kCFRunLoopDefaultMode, DRAG_TOUCH_DELAY, false); - for (NSInteger pointIndex = 1; pointIndex < count - 1; pointIndex++) { + CFRunLoopRunInMode(UIApplicationCurrentRunMode, DRAG_TOUCH_DELAY, false); + + for (NSInteger pointIndex = 1; pointIndex < count; pointIndex++) { [touch setLocationInWindow:[self.window convertPoint:points[pointIndex] fromView:self]]; [touch setPhase:UITouchPhaseMoved]; UIEvent *eventDrag = [self _eventWithTouch:touch]; [[UIApplication sharedApplication] sendEvent:eventDrag]; - CFRunLoopRunInMode(kCFRunLoopDefaultMode, DRAG_TOUCH_DELAY, false); + CFRunLoopRunInMode(UIApplicationCurrentRunMode, DRAG_TOUCH_DELAY, false); } [touch setPhase:UITouchPhaseEnded]; @@ -347,9 +424,18 @@ - (void)dragAlongPathWithPoints:(CGPoint *)points count:(NSInteger)count; [self becomeFirstResponder]; } + while (UIApplicationCurrentRunMode != kCFRunLoopDefaultMode) { + CFRunLoopRunInMode(UIApplicationCurrentRunMode, 0.1, false); + } [touch release]; } +- (BOOL)isProbablyTappable +{ + // There are some issues with the tappability check in UIWebViews, so if the view is a UIWebView we will just skip the check. + return [NSStringFromClass([self class]) isEqualToString:@"UIWebBrowserView"] || self.isTappable; +} + // Is this view currently on screen? - (BOOL)isTappable; { @@ -376,7 +462,7 @@ - (BOOL)isTappableWithHitTestResultView:(UIView *)hitView; // Button views in the nav bar (a private class derived from UINavigationItemView), do not return // themselves in a -hitTest:. Instead they return the nav bar. - if ([hitView isKindOfClass:[UINavigationBar class]] && [self isKindOfClass:NSClassFromString(@"UINavigationItemView")] && [self isDescendantOfView:hitView]) { + if ([hitView isKindOfClass:[UINavigationBar class]] && [self isNavigationItemView] && [self isDescendantOfView:hitView]) { return YES; } @@ -456,4 +542,40 @@ - (UIEvent *)_eventWithTouch:(UITouch *)touch; return event; } +- (BOOL)isUserInteractionActuallyEnabled; +{ + BOOL isUserInteractionEnabled = self.userInteractionEnabled; + + // Navigation item views don't have user interaction enabled, but their parent nav bar does and will forward the event + if (!isUserInteractionEnabled && [self isNavigationItemView]) { + // If this view is inside a nav bar, and the nav bar is enabled, then consider it enabled + UIView *navBar = [self superview]; + while (navBar && ![navBar isKindOfClass:[UINavigationBar class]]) { + navBar = [navBar superview]; + } + if (navBar && navBar.userInteractionEnabled) { + isUserInteractionEnabled = YES; + } + } + + // UIActionsheet Buttons have UIButtonLabels with userInteractionEnabled=NO inside, + // grab the superview UINavigationButton instead. + if (!isUserInteractionEnabled && [self isKindOfClass:NSClassFromString(@"UIButtonLabel")]) { + UIView *button = [self superview]; + while (button && ![button isKindOfClass:NSClassFromString(@"UINavigationButton")]) { + button = [button superview]; + } + if (button && button.userInteractionEnabled) { + isUserInteractionEnabled = YES; + } + } + + return isUserInteractionEnabled; +} + +- (BOOL)isNavigationItemView; +{ + return [self isKindOfClass:NSClassFromString(@"UINavigationItemView")] || [self isKindOfClass:NSClassFromString(@"_UINavigationBarBackIndicatorView")]; +} + @end diff --git a/Pods/KIF/Additions/UIWindow-KIFAdditions.h b/Pods/KIF/Additions/UIWindow-KIFAdditions.h old mode 100755 new mode 100644 diff --git a/Pods/KIF/Additions/UIWindow-KIFAdditions.m b/Pods/KIF/Additions/UIWindow-KIFAdditions.m old mode 100755 new mode 100644 diff --git a/Pods/KIF/Classes/KIF-Prefix.pch b/Pods/KIF/Classes/KIF-Prefix.pch deleted file mode 100755 index 69b4274..0000000 --- a/Pods/KIF/Classes/KIF-Prefix.pch +++ /dev/null @@ -1,7 +0,0 @@ -// -// Prefix header for all source files of the 'KIF' target in the 'KIF' project -// - -#ifdef __OBJC__ - #import -#endif diff --git a/Pods/KIF/Classes/KIF.h b/Pods/KIF/Classes/KIF.h new file mode 100644 index 0000000..ee4fe1e --- /dev/null +++ b/Pods/KIF/Classes/KIF.h @@ -0,0 +1,15 @@ +// +// KIF.h +// KIF +// +// Created by Jim Puls on 12/21/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTestActor.h" +#import "KIFTestCase.h" +#import "KIFSystemTestActor.h" +#import "KIFUITestActor.h" + +#import "SenTestCase-KIFAdditions.h" diff --git a/Pods/KIF/Classes/KIFSystemTestActor.h b/Pods/KIF/Classes/KIFSystemTestActor.h new file mode 100644 index 0000000..08f5a08 --- /dev/null +++ b/Pods/KIF/Classes/KIFSystemTestActor.h @@ -0,0 +1,56 @@ +// +// KIFTester+Generic.h +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTestActor.h" + +#define system KIFActorWithClass(KIFSystemTestActor) + +@interface KIFSystemTestActor : KIFTestActor + +/*! + @abstract Waits for a specific NSNotification. + @discussion Useful when a test requires an asynchronous task to complete, especially when that task does not trigger a visible change in the view hierarchy. + @param name The name of the NSNotification. + @param object The object to which the step should listen. Nil value will listen to all objects. + @return The detected NSNotification. + */ +- (NSNotification *)waitForNotificationName:(NSString*)name object:(id)object; + +/*! + @abstract Waits for a specific NSNotification, emitted during or after execution of a block. + @discussion Useful when step execution causes a notification to be emitted, but executes too quickly for waitForNotificationName: to observe it. + An observer will be registered for the notification before the block is executed. + @param name The name of the NSNotification. + @param object The object to which the step should listen. Nil value will listen to all objects. + @param block The block of code to be executed. + @return The detected NSNotification. + */ +- (NSNotification *)waitForNotificationName:(NSString *)name object:(id)object whileExecutingBlock:(void(^)())block; + +/*! + @abstract Simulates a memory warning. + */ +- (void)simulateMemoryWarning; + +/*! + @abstract Waits for the application to request a specific URL while executing a block. + @param URLString The absolute string representation of the URL to detect. + @param block The block of code to be executed. + @param returnValue The value to return from @c +[UIApplication openURL:]. + */ +- (void)waitForApplicationToOpenURL:(NSString *)URLString whileExecutingBlock:(void(^)())block returning:(BOOL)returnValue; + +/*! + @abstract Waits for the application to request any URL while executing a block. + @param block The block of code to be executed. + @param returnValue The value to return from @c +[UIApplication openURL:]. + */ +- (void)waitForApplicationToOpenAnyURLWhileExecutingBlock:(void(^)())block returning:(BOOL)returnValue; + +@end diff --git a/Pods/KIF/Classes/KIFSystemTestActor.m b/Pods/KIF/Classes/KIFSystemTestActor.m new file mode 100644 index 0000000..44af577 --- /dev/null +++ b/Pods/KIF/Classes/KIFSystemTestActor.m @@ -0,0 +1,76 @@ +// +// KIFTester+Generic.m +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFSystemTestActor.h" +#import +#import "UIApplication-KIFAdditions.h" +#import "NSError-KIFAdditions.h" + +@implementation KIFSystemTestActor + +- (NSNotification *)waitForNotificationName:(NSString*)name object:(id)object +{ + return [self waitForNotificationName:name object:object whileExecutingBlock:nil]; +} + +- (NSNotification *)waitForNotificationName:(NSString *)name object:(id)object whileExecutingBlock:(void(^)())block +{ + return [self waitForNotificationName:name object:object whileExecutingBlock:block complete:nil]; +} + +- (NSNotification *)waitForNotificationName:(NSString *)name object:(id)object whileExecutingBlock:(void(^)())block complete:(void(^)())complete +{ + __block NSNotification *detectedNotification = nil; + id observer = [[NSNotificationCenter defaultCenter] addObserverForName:name object:object queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { + [detectedNotification release]; + detectedNotification = [note retain]; + }]; + + if (block) { + block(); + } + + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestWaitCondition(detectedNotification, error, @"Waiting for notification \"%@\"", name); + return KIFTestStepResultSuccess; + } complete:^(KIFTestStepResult result, NSError *error) { + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + + if (complete) { + complete(); + } + }]; + + return [detectedNotification autorelease]; +} + +- (void)simulateMemoryWarning +{ + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification object:[UIApplication sharedApplication]]; +} + +- (void)waitForApplicationToOpenAnyURLWhileExecutingBlock:(void (^)())block returning:(BOOL)returnValue +{ + [self waitForApplicationToOpenURL:nil whileExecutingBlock:block returning:returnValue]; +} + +- (void)waitForApplicationToOpenURL:(NSString *)URLString whileExecutingBlock:(void (^)())block returning:(BOOL)returnValue +{ + [UIApplication startMockingOpenURLWithReturnValue:returnValue]; + NSNotification *notification = [self waitForNotificationName:UIApplicationDidMockOpenURLNotification object:[UIApplication sharedApplication] whileExecutingBlock:block complete:^{ + [UIApplication stopMockingOpenURL]; + }]; + + NSString *actualURLString = [[notification.userInfo objectForKey:UIApplicationOpenedURLKey] absoluteString]; + if (URLString && ![URLString isEqualToString:actualURLString]) { + [self failWithError:[NSError KIFErrorWithFormat:@"Expected %@, got %@", URLString, actualURLString] stopTest:YES]; + } +} + +@end diff --git a/Pods/KIF/Classes/KIFTestActor.h b/Pods/KIF/Classes/KIFTestActor.h new file mode 100644 index 0000000..72efd03 --- /dev/null +++ b/Pods/KIF/Classes/KIFTestActor.h @@ -0,0 +1,133 @@ +// +// KIFTester.h +// KIF +// +// Created by Brian Nickel on 12/13/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +#define KIFActorWithClass(clazz) [clazz actorInFile:[NSString stringWithUTF8String:__FILE__] atLine:__LINE__ delegate:self] + +/*! + @define KIFTestCondition + @abstract Tests a condition and returns a failure result if the condition isn't true. + @discussion This is a useful macro for quickly evaluating conditions in a test step. If the condition is false then the current test step will be aborted with a failure result. + @param condition The condition to test. + @param error The NSError object to put the error string into. May be nil, but should usually be the error parameter from the test step execution block. + @param ... A string describing what the failure was that occurred. This may be a format string with additional arguments. + */ +#define KIFTestCondition(condition, error, ...) ({ \ +if (!(condition)) { \ +if (error) { \ +*error = [NSError errorWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:__VA_ARGS__], NSLocalizedDescriptionKey, nil]]; \ +} \ +return KIFTestStepResultFailure; \ +} \ +}) + +/*! + @define KIFTestWaitCondition + @abstract Tests a condition and returns a wait result if the condition isn't true. + @discussion This is a useful macro for quickly evaluating conditions in a test step. If the condition is false then the current test step will be aborted with a wait result, indicating that it should be called again in the near future. + @param condition The condition to test. + @param error The NSError object to put the error string into. May be nil, but should usually be the error parameter from the test step execution block. + @param ... A string describing why the step needs to wait. This is important since this reason will be considered the cause of a timeout error if the step requires waiting for too long. This may be a format string with additional arguments. + */ +#define KIFTestWaitCondition(condition, error, ...) ({ \ +if (!(condition)) { \ +if (error) { \ +*error = [NSError errorWithDomain:@"KIFTest" code:KIFTestStepResultWait userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:__VA_ARGS__], NSLocalizedDescriptionKey, nil]]; \ +} \ +return KIFTestStepResultWait; \ +} \ +}) + + +/*! + @enum KIFTestStepResult + @abstract Result codes from a test step. + @constant KIFTestStepResultFailure The step failed and the test controller should move to the next scenario. + @constant KIFTestStepResultSuccess The step succeeded and the test controller should move to the next step in the current scenario. + @constant KIFTestStepResultWait The test isn't ready yet and should be tried again after a short delay. + */ +enum { + KIFTestStepResultFailure = 0, + KIFTestStepResultSuccess, + KIFTestStepResultWait, +}; +typedef NSInteger KIFTestStepResult; + +/*! + @typedef KIFTestExecutionBlock + @param error An error to fill out in the case of a failure or wait condition. Filling out this error is mandatory in these cases to ensure that testing output is useful. + @result A test result code. Returning KIFTestStepResultWait will cause the block to be tried again on the next iteration. + */ +typedef KIFTestStepResult (^KIFTestExecutionBlock)(NSError **error); + +/*! + @typedef KIFTestCompletionBlock + @param result The result of the test, either KIFTestStepResultSuccess or KIFTestStepResultFailure. + @param error An error provided by the test or nil if result is equal to KIFTestStepResultSuccess. + */ +typedef void (^KIFTestCompletionBlock)(KIFTestStepResult result, NSError *error); + +@protocol KIFTestActorDelegate; + +@interface KIFTestActor : NSObject + ++ (instancetype)actorInFile:(NSString *)file atLine:(NSInteger)line delegate:(id)delegate; + +@property (nonatomic, readonly) NSString *file; +@property (nonatomic, readonly) NSInteger line; +@property (nonatomic, readonly) id delegate; +@property (nonatomic) NSTimeInterval executionBlockTimeout; + +- (instancetype)usingTimeout:(NSTimeInterval)executionBlockTimeout; + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock timeout:(NSTimeInterval)timeout; +- (void)runBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock; +- (void)runBlock:(KIFTestExecutionBlock)executionBlock timeout:(NSTimeInterval)timeout; +- (void)runBlock:(KIFTestExecutionBlock)executionBlock; + +/*! + @method defaultTimeout + @abstract The default amount of time to assign to execution blocks before assuming they failed. + @discussion To change the default value of the timeout property, call +setDefaultTimeout: with a different value. + */ ++ (NSTimeInterval)defaultTimeout; + +/*! + @method setDefaultTimeout: + @abstract Sets the default amount of time to assign to execution blocks before assuming they failed. + */ ++ (void)setDefaultTimeout:(NSTimeInterval)newDefaultTimeout; + +/*! + @abstract Fails the test. + @discussion Mostly useful for test debugging or as a placeholder when building new tests. + */ +- (void)fail; + +- (void)failWithError:(NSError *)error stopTest:(BOOL)stopTest; + +/*! + @abstract Waits for a certain amount of time before returning. + @discussion In general when waiting for the app to get into a known state, it's better to use -waitForTappableViewWithAccessibilityLabel:, however this step may be useful in some situations as well. + @param interval The number of seconds to wait before returning. + */ +- (void)waitForTimeInterval:(NSTimeInterval)timeInterval; + +@end + +@protocol KIFTestActorDelegate + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop; +- (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop; + +@end + +@interface KIFTestActor (Delegate) +@end diff --git a/Pods/KIF/Classes/KIFTestActor.m b/Pods/KIF/Classes/KIFTestActor.m new file mode 100644 index 0000000..bef0751 --- /dev/null +++ b/Pods/KIF/Classes/KIFTestActor.m @@ -0,0 +1,181 @@ +// +// KIFTester.m +// KIF +// +// Created by Brian Nickel on 12/13/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTestActor.h" +#import "NSError-KIFAdditions.h" +#import +#import +#import +#import "UIApplication-KIFAdditions.h" + +@implementation KIFTestActor + ++ (void)load +{ + @autoreleasepool { + NSLog(@"KIFTester loaded"); + [KIFTestActor _enableAccessibility]; + + if ([[[NSProcessInfo processInfo] environment] objectForKey:@"StartKIFManually"]) { + [[NSUserDefaults standardUserDefaults] setBool:YES forKey:SenTestToolKey]; + SenSelfTestMain(); + } + + [UIApplication swizzleRunLoop]; + } +} + ++ (void)_enableAccessibility; +{ + NSString *appSupportLocation = @"/System/Library/PrivateFrameworks/AppSupport.framework/AppSupport"; + + NSDictionary *environment = [[NSProcessInfo processInfo] environment]; + NSString *simulatorRoot = [environment objectForKey:@"IPHONE_SIMULATOR_ROOT"]; + if (simulatorRoot) { + appSupportLocation = [simulatorRoot stringByAppendingString:appSupportLocation]; + } + + void *appSupportLibrary = dlopen([appSupportLocation fileSystemRepresentation], RTLD_LAZY); + + CFStringRef (*copySharedResourcesPreferencesDomainForDomain)(CFStringRef domain) = dlsym(appSupportLibrary, "CPCopySharedResourcesPreferencesDomainForDomain"); + + if (copySharedResourcesPreferencesDomainForDomain) { + CFStringRef accessibilityDomain = copySharedResourcesPreferencesDomainForDomain(CFSTR("com.apple.Accessibility")); + + if (accessibilityDomain) { + CFPreferencesSetValue(CFSTR("ApplicationAccessibilityEnabled"), kCFBooleanTrue, accessibilityDomain, kCFPreferencesAnyUser, kCFPreferencesAnyHost); + CFRelease(accessibilityDomain); + } + } +} + +- (instancetype)initWithFile:(NSString *)file line:(NSInteger)line delegate:(id)delegate +{ + self = [super init]; + if (self) { + _file = [file retain]; + _line = line; + _delegate = delegate; + _executionBlockTimeout = [[self class] defaultTimeout]; + } + return self; +} + ++ (instancetype)actorInFile:(NSString *)file atLine:(NSInteger)line delegate:(id)delegate +{ + return [[[self alloc] initWithFile:file line:line delegate:delegate] autorelease]; +} + +- (instancetype)usingTimeout:(NSTimeInterval)executionBlockTimeout +{ + self.executionBlockTimeout = executionBlockTimeout; + return self; +} + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock timeout:(NSTimeInterval)timeout +{ + NSDate *startDate = [NSDate date]; + KIFTestStepResult result; + NSError *error = nil; + + while ((result = executionBlock(&error)) == KIFTestStepResultWait && -[startDate timeIntervalSinceNow] < timeout) { + CFRunLoopRunInMode([[UIApplication sharedApplication] currentRunLoopMode] ?: kCFRunLoopDefaultMode, 0.1, false); + } + + if (result == KIFTestStepResultWait) { + error = [NSError KIFErrorWithUnderlyingError:error format:@"The step timed out after %.2f seconds: %@", timeout, error.localizedDescription]; + result = KIFTestStepResultFailure; + } + + if (completionBlock) { + completionBlock(result, error); + } + + if (result == KIFTestStepResultFailure) { + [self failWithError:error stopTest:YES]; + } +} + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock +{ + [self runBlock:executionBlock complete:completionBlock timeout:self.executionBlockTimeout]; +} + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock timeout:(NSTimeInterval)timeout +{ + [self runBlock:executionBlock complete:nil timeout:timeout]; +} + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock +{ + [self runBlock:executionBlock complete:nil]; +} + +- (void)dealloc +{ + [_file release]; + [super dealloc]; +} + +#pragma mark Class Methods + +static NSTimeInterval KIFTestStepDefaultTimeout = 10.0; + ++ (NSTimeInterval)defaultTimeout; +{ + return KIFTestStepDefaultTimeout; +} + ++ (void)setDefaultTimeout:(NSTimeInterval)newDefaultTimeout; +{ + KIFTestStepDefaultTimeout = newDefaultTimeout; +} + +#pragma mark Generic tests + +- (void)fail +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestCondition(NO, error, @"This test always fails"); + }]; +} + +- (void)failWithError:(NSError *)error stopTest:(BOOL)stopTest +{ + [self.delegate failWithException:[NSException failureInFile:self.file atLine:self.line withDescription:error.localizedDescription] stopTest:stopTest]; +} + +- (void)waitForTimeInterval:(NSTimeInterval)timeInterval +{ + NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate]; + + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestWaitCondition((([NSDate timeIntervalSinceReferenceDate] - startTime) >= timeInterval), error, @"Waiting for time interval to expire."); + return KIFTestStepResultSuccess; + } timeout:timeInterval + 1]; +} + +@end + +@implementation KIFTestActor (Delegate) + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop +{ + [self failWithExceptions:@[exception] stopTest:stop]; +} + +- (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop +{ + NSException *firstException = [exceptions objectAtIndex:0]; + NSException *newException = [NSException failureInFile:self.file atLine:self.line withDescription:@"Failure in child step: %@", firstException.description]; + + [self.delegate failWithExceptions:[exceptions arrayByAddingObject:newException] stopTest:stop]; +} + +@end diff --git a/Pods/KIF/Classes/KIFTestCase.h b/Pods/KIF/Classes/KIFTestCase.h new file mode 100644 index 0000000..d42d2bd --- /dev/null +++ b/Pods/KIF/Classes/KIFTestCase.h @@ -0,0 +1,23 @@ +// +// KIFTestCase.h +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import +#import "SenTestCase-KIFAdditions.h" + +@interface KIFTestCase : SenTestCase + +- (void)beforeAll; +- (void)beforeEach; +- (void)afterEach; +- (void)afterAll; + +@property (nonatomic, assign) BOOL stopTestsOnFirstBigFailure; + +@end + diff --git a/Pods/KIF/Classes/KIFTestCase.m b/Pods/KIF/Classes/KIFTestCase.m new file mode 100644 index 0000000..510d17e --- /dev/null +++ b/Pods/KIF/Classes/KIFTestCase.m @@ -0,0 +1,95 @@ +// +// KIFTestCase.m +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTestCase.h" +#import "KIFTestActor.h" + +#define SIG(class, selector) [class instanceMethodSignatureForSelector:selector] + +@implementation KIFTestCase + +- (id)initWithInvocation:(NSInvocation *)anInvocation; +{ + self = [super initWithInvocation:anInvocation]; + if (!self) { + return nil; + } + + [self raiseAfterFailure]; + return self; +} + +- (void)beforeEach { } +- (void)afterEach { } +- (void)beforeAll { } +- (void)afterAll { } + +- (void)setUp; +{ + [super setUp]; + + if ([self isNotBeforeOrAfter]) { + [self beforeEach]; + } +} + +- (void)tearDown; +{ + if ([self isNotBeforeOrAfter]) { + [self afterEach]; + } + + [super tearDown]; +} + ++ (NSArray *)testInvocations; +{ + if (self == [KIFTestCase class]) { + return nil; + } + + NSMutableArray *testInvocations = [NSMutableArray arrayWithArray:[super testInvocations]]; + + if ([self instancesRespondToSelector:@selector(beforeAll)]) { + NSInvocation *beforeAll = [NSInvocation invocationWithMethodSignature:SIG(self, @selector(beforeAll))]; + beforeAll.selector = @selector(beforeAll); + [testInvocations insertObject:beforeAll atIndex:0]; + } + + if ([self instancesRespondToSelector:@selector(afterAll)]) { + NSInvocation *afterAll = [NSInvocation invocationWithMethodSignature:SIG(self, @selector(afterAll))]; + afterAll.selector = @selector(afterAll); + [testInvocations addObject:afterAll]; + } + + return testInvocations; +} + +- (BOOL)isNotBeforeOrAfter; +{ + SEL selector = self.invocation.selector; + return selector != @selector(beforeAll) && selector != @selector(afterAll); +} + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop +{ + if (stop && self.stopTestsOnFirstBigFailure) { + NSLog(@"Fatal failure encountered: %@", exception.description); + NSLog(@"Stopping tests since stopTestsOnFirstBigFailure = YES"); + + KIFTestActor *waiter = [[[KIFTestActor alloc] init] autorelease]; + [waiter waitForTimeInterval:[[NSDate distantFuture] timeIntervalSinceNow]]; + + return; + } else { + [super failWithException:exception stopTest:stop]; + } +} + +@end diff --git a/Pods/KIF/Classes/KIFTestController.h b/Pods/KIF/Classes/KIFTestController.h deleted file mode 100755 index f2155ab..0000000 --- a/Pods/KIF/Classes/KIFTestController.h +++ /dev/null @@ -1,133 +0,0 @@ -// -// KIFTestController.h -// KIF -// -// Created by Michael Thole on 5/20/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import -#import "KIFTestScenario.h" -#import "KIFTestStep.h" - - -typedef void (^KIFTestControllerCompletionBlock)(); - -/*! - @class KIFTestController - @abstract The singleton controller in charge of running the integration tests. - @discussion The KIFTestController class is the test runner for KIF integration tests. It should be configured with a list of KIFTestScenarios to run. It will run the scenarios sequentially, aborting any given scenario and moving on to the next if a step in the scenario fails. - - The controller can be set up in one of two primary ways: - - Subclassing (Preferred) - Create a subclass of KIFTestController for your application. This class will encapsulate the logic of which scenarios to run, and helps minimize the amount of testing code within your core application. Your subclass should override the -initializeScenarios method, and in that method the scenarios to run should be created and added to the controller using -addScenario:. The -initializeScenarios method will be called automatically as part of starting the testing. To start running the tests, your application code then just needs to call the code below. -
-    [[YOURTestController sharedInstance] startTestingWithCompletionBlock:nil];
-   
- - Construction - You can initialize the test controller without subclassing by iteratively creating and adding scenarios (using -addScenario:) somewhere in your application code. You can then start testing by calling the code below. -
-    [[KIFTestController sharedInstance] startTestingWithCompletionBlock:nil];
-   
- */ -@interface KIFTestController : NSObject { - NSMutableArray *scenarios; - BOOL testing; - KIFTestControllerCompletionBlock completionBlock; - - KIFTestScenario *currentScenario; - KIFTestStep *currentStep; - - NSDate *testSuiteStartDate; - NSDate *currentStepStartDate; - NSDate *currentScenarioStartDate; - - NSInteger failureCount; - NSInteger completeScenarioCount; - NSMutableIndexSet *failedScenarioIndexes; - NSURL *failedScenarioFile; -} - -/*! - @property scenarios - @abstract The scenarios that comprise the testing suite. - @discussion You can add scenarios to the testing suite using -addScenario: - */ -@property (nonatomic, readonly, retain) NSArray *scenarios; - -/*! - @property testing - @abstract Whether or not the test suite is currently running. - */ -@property (nonatomic, readonly, getter=isTesting) BOOL testing; - -/*! - @property currentScenario - @abstract The scenario that is currently being run. - */ -@property (nonatomic, readonly, retain) KIFTestScenario *currentScenario; - -/*! - @property currentStep - @abstract The step in the current scenario that is currently being run. - */ -@property (nonatomic, readonly, retain) KIFTestStep *currentStep; - -/*! - @property failureCount - @abstract The number of failed scenarios so far. - */ -@property (nonatomic, readonly) NSInteger failureCount; - -/*! - @method sharedInstance - @abstract Retrieves the singleton instance of the test controller. - @discussion The test controller class should never be allocated manually. You should always use the singleton retrieved using this method. - If you subclass KIFTestController, then you should invoke your subclass's version of this class method to insure that the singleton is of the correct class type. - @result The singleton instance of the test controller. - */ -+ (id)sharedInstance; - -/*! - @method initializeScenarios - @abstract Configures the scenarios to run for the test suite. - @discussion The default implementation of this method does nothing. Subclasses should override it so that it configures the scenarios for the test controller to run. This method is invoked automatically and should never need to be invoked manually. - */ -- (void)initializeScenarios; - -/*! - @method addAllScenarios - @abstract Add all scenarios to the test suite. - @discussion This enumerates the list of class methods on KIFTestScenario and adds those starting with "scenario" alphabetically. - */ -- (void)addAllScenarios; - -/*! - @method addScenariosWithSelectorPrefix:fromClass: - @abstract Add all scenarios to the test suite with a selector prefix. - @discussion This enumerates the list of class methods on the given class and adds those starting with the given prefix alphabetically. - @param selectorPrefix Added selectors must have this prefix. - @param klass The class to search for scenarios. - */ -- (void)addAllScenariosWithSelectorPrefix:(NSString *)selectorPrefix fromClass:(Class)klass; - -/*! - @method addScenario: - @abstract Add a scenario to the test suite. - @discussion Scenarios will be run in the order that they're added. - @param scenario The scenario to add to the test suite. - */ -- (void)addScenario:(KIFTestScenario *)scenario; - -/*! - @method startTestingWithCompletionBlock: - @abstract Start the test suite. - @discussion Testing is done asynchronously by inserting itself into the run loop at appropriate times. As such, this method will not block. To be notified when testing is complete, implement the completionBlock. - @param completionBlock An optional execution block that will be invoked when testing is complete. - */ -- (void)startTestingWithCompletionBlock:(KIFTestControllerCompletionBlock)completionBlock; - -@end diff --git a/Pods/KIF/Classes/KIFTestController.m b/Pods/KIF/Classes/KIFTestController.m deleted file mode 100755 index a9d63fb..0000000 --- a/Pods/KIF/Classes/KIFTestController.m +++ /dev/null @@ -1,564 +0,0 @@ -// -// KIFTestController.m -// KIF -// -// Created by Michael Thole on 5/20/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import "KIFTestController.h" -#import "KIFTestScenario.h" -#import "KIFTestStep.h" -#import "NSFileManager-KIFAdditions.h" -#import -#import -#import - - -extern id objc_msgSend(id theReceiver, SEL theSelector, ...); - - -@interface KIFTestController () - -@property (nonatomic, retain) KIFTestScenario *currentScenario; -@property (nonatomic, retain) KIFTestStep *currentStep; -@property (nonatomic, retain) NSArray *scenarios; -@property (nonatomic, getter=isTesting) BOOL testing; -@property (nonatomic, retain) NSDate *testSuiteStartDate; -@property (nonatomic, retain) NSDate *currentScenarioStartDate; -@property (nonatomic, retain) NSDate *currentStepStartDate; -@property (nonatomic, copy) KIFTestControllerCompletionBlock completionBlock; - -+ (void)_enableAccessibility; - -- (void)_initializeScenariosIfNeeded; -- (BOOL)_isAccessibilityInspectorEnabled; -- (void)_scheduleCurrentTestStep; -- (void)_performTestStep:(KIFTestStep *)step; -- (void)_advanceWithResult:(KIFTestStepResult)result error:(NSError*) error; -- (KIFTestStep *)_nextStep; -- (KIFTestScenario *)_nextScenarioAfterResult:(KIFTestStepResult)result; -- (void)_writeScreenshotForStep:(KIFTestStep *)step; -- (void)_logTestingDidStart; -- (void)_logTestingDidFinish; -- (void)_logDidStartScenario:(KIFTestScenario *)scenario; -- (void)_logDidSkipScenario:(KIFTestScenario *)scenario; -- (void)_logDidSkipAddingScenarioGenerator:(NSString *)selectorString; -- (void)_logDidFinishScenario:(KIFTestScenario *)scenario duration:(NSTimeInterval)duration; -- (void)_logDidFailStep:(KIFTestStep *)step duration:(NSTimeInterval)duration error:(NSError *)error; -- (void)_logDidPassStep:(KIFTestStep *)step duration:(NSTimeInterval)duration; - -@end - - -@implementation KIFTestController - -@synthesize scenarios; -@synthesize testing; -@synthesize testSuiteStartDate; -@synthesize failureCount; -@synthesize currentScenario; -@synthesize currentStep; -@synthesize currentScenarioStartDate; -@synthesize currentStepStartDate; -@synthesize completionBlock; - -#pragma mark Static Methods - -+ (void)load -{ - [KIFTestController _enableAccessibility]; -} - -+ (void)_enableAccessibility; -{ - NSAutoreleasePool *autoreleasePool = [[NSAutoreleasePool alloc] init]; - NSString *appSupportLocation = @"/System/Library/PrivateFrameworks/AppSupport.framework/AppSupport"; - - NSDictionary *environment = [[NSProcessInfo processInfo] environment]; - NSString *simulatorRoot = [environment objectForKey:@"IPHONE_SIMULATOR_ROOT"]; - if (simulatorRoot) { - appSupportLocation = [simulatorRoot stringByAppendingString:appSupportLocation]; - } - - void *appSupportLibrary = dlopen([appSupportLocation fileSystemRepresentation], RTLD_LAZY); - - CFStringRef (*copySharedResourcesPreferencesDomainForDomain)(CFStringRef domain) = dlsym(appSupportLibrary, "CPCopySharedResourcesPreferencesDomainForDomain"); - - if (copySharedResourcesPreferencesDomainForDomain) { - CFStringRef accessibilityDomain = copySharedResourcesPreferencesDomainForDomain(CFSTR("com.apple.Accessibility")); - - if (accessibilityDomain) { - CFPreferencesSetValue(CFSTR("ApplicationAccessibilityEnabled"), kCFBooleanTrue, accessibilityDomain, kCFPreferencesAnyUser, kCFPreferencesAnyHost); - CFRelease(accessibilityDomain); - } - } - - [autoreleasePool drain]; -} - -static KIFTestController *sharedInstance = nil; - -static void releaseInstance() -{ - [sharedInstance release]; - sharedInstance = nil; -} - -+ (id)sharedInstance; -{ - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - sharedInstance = [[self alloc] init]; - atexit(releaseInstance); - }); - - return sharedInstance; -} - -#pragma mark Initialization Methods - -- (id)init; -{ - NSAssert(!sharedInstance, @"KIFTestController should not be initialized manually. Use +sharedInstance instead."); - - self = [super init]; - if (!self) { - return nil; - } - - NSString *failedScenarioPath = [[[NSProcessInfo processInfo] environment] objectForKey:@"KIF_FAILURE_FILE"]; - if (failedScenarioPath) { - failedScenarioFile = [[NSURL fileURLWithPath:failedScenarioPath] retain]; - failedScenarioIndexes = [[NSKeyedUnarchiver unarchiveObjectWithFile:failedScenarioPath] mutableCopy]; - } - if (!failedScenarioIndexes) { - failedScenarioIndexes = [[NSMutableIndexSet alloc] init]; - } - - return self; -} - -- (void)dealloc; -{ - self.currentStep = nil; - self.currentScenario = nil; - self.scenarios = nil; - self.testSuiteStartDate = nil; - self.currentScenarioStartDate = nil; - self.currentStepStartDate = nil; - self.completionBlock = nil; - - [failedScenarioFile release]; - failedScenarioFile = nil; - - [failedScenarioIndexes release]; - failedScenarioIndexes = nil; - - [super dealloc]; -} - -#pragma mark Public Methods - -- (void)initializeScenarios; -{ - [self addAllScenarios]; -} - -- (NSArray *)scenarios -{ - [self _initializeScenariosIfNeeded]; - return scenarios; -} - -- (void)addAllScenarios; -{ - [self addAllScenariosWithSelectorPrefix:@"scenario" fromClass:[KIFTestScenario class]]; -} - -- (void)addAllScenariosWithSelectorPrefix:(NSString *)selectorPrefix fromClass:(Class)klass; -{ - unsigned int count; - Method *methods = class_copyMethodList(object_getClass(klass), &count); - - if (!count) { - return; - } - - NSMutableArray *selectorStrings = [NSMutableArray array]; - - for (NSInteger index = 0; index < count; index++) { - SEL selector = method_getName(methods[index]); - NSString *selectorString = NSStringFromSelector(selector); - if ([selectorString hasPrefix:selectorPrefix]) { - if ([selectorString hasSuffix:@":"]) { - if (![selectorString isEqualToString:@"scenarioWithDescription:"]) { - // Logging about -scenarioWithDescription: would just be noise. - // But log that we're skipping the rest to not confuse people who would expect their scenario to get run automatically. - [self _logDidSkipAddingScenarioGenerator:selectorString]; - } - continue; - } - - [selectorStrings addObject:selectorString]; - } - } - - [selectorStrings sortUsingSelector:@selector(compare:)]; - [selectorStrings enumerateObjectsUsingBlock:^(id selectorString, NSUInteger idx, BOOL *stop) { - KIFTestScenario *scenario = (KIFTestScenario *)objc_msgSend(klass, NSSelectorFromString(selectorString)); - [self addScenario:scenario]; - }]; - - free(methods); -} - -- (void)addScenario:(KIFTestScenario *)scenario; -{ - NSAssert(![self.scenarios containsObject:scenario], @"The scenario %@ is already added", scenario); - NSAssert(scenario.description.length, @"Cannot add a scenario that does not have a description"); - - [self _initializeScenariosIfNeeded]; - [scenarios addObject:scenario]; -} - -- (void)startTestingWithCompletionBlock:(KIFTestControllerCompletionBlock)inCompletionBlock -{ - NSAssert(!self.testing, @"Testing is already in progress"); - NSAssert([self _isAccessibilityInspectorEnabled], @"The accessibility inspector must be enabled in order to run KIF tests. It can be turned on in the Settings app of the simulator by going to General -> Accessibility."); - - self.testing = YES; - self.testSuiteStartDate = [NSDate date]; - - if (!failedScenarioIndexes.count && self.scenarios.count) { - [failedScenarioIndexes addIndexesInRange:NSMakeRange(0, self.scenarios.count)]; - } - - [self _logTestingDidStart]; - - self.currentScenario = [self _nextScenarioAfterResult:KIFTestStepResultSuccess]; - self.currentScenarioStartDate = [NSDate date]; - self.currentStep = (self.currentScenario.steps.count ? [self.currentScenario.steps objectAtIndex:0] : nil); - self.currentStepStartDate = [NSDate date]; - self.completionBlock = inCompletionBlock; - - [self _scheduleCurrentTestStep]; -} - -- (void)_testingDidFinish -{ - [self _logTestingDidFinish]; - self.testing = NO; - - if (failedScenarioFile) { - [NSKeyedArchiver archiveRootObject:failedScenarioIndexes toFile:[failedScenarioFile path]]; - } - - if (self.completionBlock) { - self.completionBlock(); - } -} - -#pragma mark Private Methods - -- (void)_initializeScenariosIfNeeded -{ - if (!scenarios) { - self.scenarios = [NSMutableArray array]; - [self initializeScenarios]; - } -} - -- (BOOL)_isAccessibilityInspectorEnabled; -{ - // This method for testing if the inspector is enabled was taken from the Frank framework. - // https://github.com/moredip/Frank - UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; - NSString *originalAccessibilityLabel = [keyWindow accessibilityLabel]; - - [keyWindow setAccessibilityLabel:@"KIF Test Label"]; - BOOL isInspectorEnabled = [[keyWindow accessibilityLabel] isEqualToString:@"KIF Test Label"]; - - [keyWindow setAccessibilityLabel:originalAccessibilityLabel]; - - return isInspectorEnabled; -} - -- (void)_scheduleCurrentTestStep; -{ - [self performSelector:@selector(_delayedScheduleCurrentTestStep) withObject:nil afterDelay:0.01f]; -} - -- (void)_delayedScheduleCurrentTestStep; -{ - [self _performTestStep:self.currentStep]; -} - -- (void)_performTestStep:(KIFTestStep *)step; -{ - NSError *error = nil; - - if (!step) { - [self _testingDidFinish]; - return; - } - - KIFTestStepResult result = [step executeAndReturnError:&error]; - - [self _advanceWithResult:result error:error]; - - if (self.currentStep) { - [self _scheduleCurrentTestStep]; - } else { - [self _testingDidFinish]; - } -} - -- (void)_advanceWithResult:(KIFTestStepResult)result error:(NSError *)error; -{ - NSAssert((!self.currentStep || result == KIFTestStepResultSuccess || error), @"The step \"%@\" returned a non-successful result but did not include an error", self.currentStep.description); - - KIFTestStep *previousStep = self.currentStep; - NSTimeInterval currentStepDuration = -[self.currentStepStartDate timeIntervalSinceNow]; - - switch (result) { - case KIFTestStepResultFailure: { - [self _logDidFailStep:self.currentStep duration:currentStepDuration error:error]; - [self _writeScreenshotForStep:self.currentStep]; - [self.currentStep cleanUp]; - - self.currentScenario = [self _nextScenarioAfterResult:result]; - self.currentScenarioStartDate = [NSDate date]; - self.currentStep = (self.currentScenario.steps.count ? [self.currentScenario.steps objectAtIndex:0] : nil); - self.currentStepStartDate = [NSDate date]; - failureCount++; - break; - } - case KIFTestStepResultSuccess: { - [self _logDidPassStep:self.currentStep duration:currentStepDuration]; - [self.currentStep cleanUp]; - - self.currentStep = [self _nextStep]; - if (!self.currentStep) { - self.currentScenario = [self _nextScenarioAfterResult:result]; - self.currentScenarioStartDate = [NSDate date]; - self.currentStep = (self.currentScenario.steps.count ? [self.currentScenario.steps objectAtIndex:0] : nil); - } - self.currentStepStartDate = [NSDate date]; - break; - } - case KIFTestStepResultWait: { - // Don't do anything; the current step will be scheduled for execution again. - // If there's a timeout, then fail. - if (currentStepDuration > self.currentStep.timeout) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:error, NSUnderlyingErrorKey, [NSString stringWithFormat:@"The step timed out after %.2f seconds.", self.currentStep.timeout], NSLocalizedDescriptionKey, nil]; - error = [NSError errorWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:userInfo]; - [self _advanceWithResult:KIFTestStepResultFailure error:error]; - } - break; - } - } - - NSAssert(!self.currentStep || self.currentStep.description.length, @"The step following the step \"%@\" is missing a description", previousStep.description); -} - -- (KIFTestStep *)_nextStep; -{ - NSArray *steps = self.currentScenario.steps; - NSUInteger currentStepIndex = [steps indexOfObjectIdenticalTo:self.currentStep]; - NSAssert(currentStepIndex != NSNotFound, @"Current step %@ not found in current scenario %@, but should be!", self.currentStep, self.currentScenario); - - NSUInteger nextStepIndex = currentStepIndex + 1; - KIFTestStep *nextStep = nil; - if ([steps count] > nextStepIndex) { - nextStep = [steps objectAtIndex:nextStepIndex]; - } - - return nextStep; -} - -- (KIFTestScenario *)_nextScenarioAfterResult:(KIFTestStepResult)result; -{ - if (!self.scenarios.count) { - return nil; - } - - KIFTestScenario *nextScenario = nil; - NSUInteger nextScenarioIndex = NSNotFound; - NSUInteger currentScenarioIndex = NSNotFound; - NSInteger scenarioLimit = [[[[NSProcessInfo processInfo] environment] objectForKey:@"KIF_SCENARIO_LIMIT"] integerValue]; - - if (scenarioLimit > 0 && completeScenarioCount++ >= scenarioLimit) { - return nil; - } else if (result == KIFTestStepResultFailure && [[[[NSProcessInfo processInfo] environment] objectForKey:@"KIF_EXIT_ON_FAILURE"] boolValue]) { - return nil; - } else if (self.currentScenario) { - currentScenarioIndex = [self.scenarios indexOfObjectIdenticalTo:self.currentScenario]; - NSAssert(currentScenarioIndex != NSNotFound, @"Current scenario %@ not found in test scenarios %@, but should be!", self.currentScenario, self.scenarios); - - [self _logDidFinishScenario:self.currentScenario duration:-[self.currentScenarioStartDate timeIntervalSinceNow]]; - if (result == KIFTestStepResultSuccess) { - [failedScenarioIndexes removeIndex:currentScenarioIndex]; - } - - nextScenarioIndex = [failedScenarioIndexes indexGreaterThanIndex:currentScenarioIndex]; - currentScenarioIndex++; - } else { - currentScenarioIndex = [[[[NSProcessInfo processInfo] environment] objectForKey:@"KIF_INITIAL_SKIP_COUNT"] integerValue]; - nextScenarioIndex = MAX([failedScenarioIndexes firstIndex], currentScenarioIndex); - } - - do { - for (; currentScenarioIndex < nextScenarioIndex && currentScenarioIndex < [self.scenarios count]; currentScenarioIndex++) { - [self _logDidSkipScenario:[self.scenarios objectAtIndex:currentScenarioIndex]]; - } - - if ([self.scenarios count] > nextScenarioIndex) { - nextScenario = [self.scenarios objectAtIndex:nextScenarioIndex]; - if (nextScenario.skippedByFilter) { - [self _logDidSkipScenario:nextScenario]; - [failedScenarioIndexes removeIndex:nextScenarioIndex]; - } - } else { - nextScenario = nil; - } - currentScenarioIndex = nextScenarioIndex + 1; - nextScenarioIndex = [failedScenarioIndexes indexGreaterThanIndex:nextScenarioIndex]; - } while (nextScenario && nextScenario.skippedByFilter); - - if (nextScenario) { - [self _logDidStartScenario:nextScenario]; - } - - return nextScenario; -} - -- (void)_writeScreenshotForStep:(KIFTestStep *)step; -{ - NSString *outputPath = [[[NSProcessInfo processInfo] environment] objectForKey:@"KIF_SCREENSHOTS"]; - if (!outputPath) { - return; - } - - NSArray *windows = [[UIApplication sharedApplication] windows]; - if (windows.count == 0) { - return; - } - - UIGraphicsBeginImageContext([[windows objectAtIndex:0] bounds].size); - for (UIWindow *window in windows) { - [window.layer renderInContext:UIGraphicsGetCurrentContext()]; - } - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - outputPath = [outputPath stringByExpandingTildeInPath]; - outputPath = [outputPath stringByAppendingPathComponent:[step.description stringByReplacingOccurrencesOfString:@"/" withString:@"_"]]; - outputPath = [outputPath stringByAppendingPathExtension:@"png"]; - [UIImagePNGRepresentation(image) writeToFile:outputPath atomically:YES]; -} - -#pragma mark Logging - -#define KIFLog(...) [[self _logFileHandleForWriting] writeData:[[NSString stringWithFormat:@"%@\n", [NSString stringWithFormat:__VA_ARGS__]] dataUsingEncoding:NSUTF8StringEncoding]]; NSLog(__VA_ARGS__); -#define KIFLogBlankLine() KIFLog(@" "); -#define KIFLogSeparator() KIFLog(@"---------------------------------------------------"); - -- (NSFileHandle *)_logFileHandleForWriting; -{ - static NSFileHandle *fileHandle = nil; - if (!fileHandle) { - NSString *logsDirectory = [[NSFileManager defaultManager] createUserDirectory:NSLibraryDirectory]; - - if (logsDirectory) { - logsDirectory = [logsDirectory stringByAppendingPathComponent:@"Logs"]; - } - if (![[NSFileManager defaultManager] recursivelyCreateDirectory:logsDirectory]) { - logsDirectory = nil; - } - - NSString *dateString = [NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterLongStyle]; - dateString = [dateString stringByReplacingOccurrencesOfString:@"/" withString:@"."]; - dateString = [dateString stringByReplacingOccurrencesOfString:@":" withString:@"."]; - NSString *fileName = [NSString stringWithFormat:@"KIF Tests %@.log", dateString]; - - NSString *logFilePath = [logsDirectory stringByAppendingPathComponent:fileName]; - - if (![[NSFileManager defaultManager] fileExistsAtPath:logFilePath]) { - [[NSFileManager defaultManager] createFileAtPath:logFilePath contents:[NSData data] attributes:nil]; - } - - fileHandle = [[NSFileHandle fileHandleForWritingAtPath:logFilePath] retain]; - - if (fileHandle) { - NSLog(@"Logging KIF test activity to %@", logFilePath); - } - } - - return fileHandle; -} - -- (void)_logTestingDidStart; -{ - if (failedScenarioIndexes.count != self.scenarios.count) { - KIFLog(@"BEGIN KIF TEST RUN: re-running %d of %d scenarios that failed last time", failedScenarioIndexes.count, self.scenarios.count); - } else { - KIFLog(@"BEGIN KIF TEST RUN: %d scenarios", self.scenarios.count); - } -} - -- (void)_logTestingDidFinish; -{ - KIFLogBlankLine(); - KIFLogSeparator(); - KIFLog(@"KIF TEST RUN FINISHED: %d failures (duration %.2fs)", failureCount, -[self.testSuiteStartDate timeIntervalSinceNow]); - KIFLogSeparator(); - - // Also log the failure count to stdout, for easier integration with CI tools. - NSLog(@"*** KIF TESTING FINISHED: %d failures", failureCount); -} - -- (void)_logDidStartScenario:(KIFTestScenario *)scenario; -{ - KIFLogBlankLine(); - KIFLogSeparator(); - KIFLog(@"BEGIN SCENARIO %d/%d (%d steps)", [self.scenarios indexOfObjectIdenticalTo:scenario] + 1, self.scenarios.count, scenario.steps.count); - KIFLog(@"%@", scenario.description); - KIFLogSeparator(); -} - -- (void)_logDidSkipScenario:(KIFTestScenario *)scenario; -{ - KIFLogBlankLine(); - KIFLogSeparator(); - NSString *reason = (scenario.skippedByFilter ? @"filter doesn't match description" : @"only running previously-failed scenarios"); - KIFLog(@"SKIPPING SCENARIO %d/%d (%@)", [self.scenarios indexOfObjectIdenticalTo:scenario] + 1, self.scenarios.count, reason); - KIFLog(@"%@", scenario.description); - KIFLogSeparator(); -} - -- (void)_logDidSkipAddingScenarioGenerator:(NSString *)selectorString; -{ - KIFLog(@"Skipping scenario generator %@ because it takes arguments", selectorString); -} - -- (void)_logDidFinishScenario:(KIFTestScenario *)scenario duration:(NSTimeInterval)duration -{ - KIFLogSeparator(); - KIFLog(@"END OF SCENARIO (duration %.2fs)", duration); - KIFLogSeparator(); -} - -- (void)_logDidFailStep:(KIFTestStep *)step duration:(NSTimeInterval)duration error:(NSError *)error; -{ - KIFLog(@"FAIL (%.2fs): %@", duration, step); - KIFLog(@"FAILING ERROR: %@", error); -} - -- (void)_logDidPassStep:(KIFTestStep *)step duration:(NSTimeInterval)duration; -{ - KIFLog(@"PASS (%.2fs): %@", duration, step); -} - -@end diff --git a/Pods/KIF/Classes/KIFTestScenario.h b/Pods/KIF/Classes/KIFTestScenario.h deleted file mode 100755 index 4076b88..0000000 --- a/Pods/KIF/Classes/KIFTestScenario.h +++ /dev/null @@ -1,125 +0,0 @@ -// -// KIFTestScenario.h -// KIF -// -// Created by Michael Thole on 5/20/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import - - -@class KIFTestStep; - -/*! - @class KIFTestScenario - @abstract A single scenario to be tested. - @discussion A scenario represents a small, but cohesive unit of testing that usually maps to an available user action, such as logging in, or sending a message. Scenarios are comprised of smaller steps (represented by KIFTestSteps) for discrete interactions, such as tapping a button. - - A convenient practice is to add a category on KIFTestScenario which includes factory methods to create the scenarios you want to test. This provides a useful identifier for each scenario via the method name (something like +scenarioToLogInSuccessfully), and also provides an organized place for your application-specific scenarios. - */ -@interface KIFTestScenario : NSObject { - NSMutableArray *steps; - NSMutableArray *stepsToSetUp; - NSMutableArray *stepsToTearDown; - NSString *description; - BOOL skippedByFilter; -} - -/*! - @property description - @abstract A description of what the scenario tests. - @discussion This should be a thorough description of what the scenario is testing so that if the test fails it is clear which test it was. - */ -@property (nonatomic, retain) NSString *description; - -/*! - @property steps - @abstract The steps that comprise the scenario. - @discussion The steps are instances of KIFTestStep (or a subclass). This method returns all steps, including the steps to set up and the steps to tear down. - */ -@property (nonatomic, readonly, retain) NSArray *steps; - -/*! - @property stepsToSetUp - @abstract Steps that will be executed at the beginning of the scenario. - @discussion The steps to set up are an array of KIFTestStep (or subclass) instances that will be executed at the beginning of the scenario, before the steps specified in the -steps property. When initializing the scenario these steps are defaulted to the steps specified by +defaultStepsToSetUp, but may be overridden by setting them directly using this property. - */ -@property (nonatomic, copy) NSArray *stepsToSetUp; - -/*! - @property stepsToTearDown - @abstract Steps that will be executed at the end of the scenario. - @discussion The steps to tear down are an array of KIFTestStep (or subclass) instances that will be executed at the end of the scenario, after the steps specified in the -steps property. When initializing the scenario these steps are defaulted to the steps specified by +defaultStepsToTearDown, but may be overridden by setting them directly using this property. - */ -@property (nonatomic, copy) NSArray *stepsToTearDown; - -/*! - @property skippedByFilter - @abstract Whether this scenario is being skipped - @discussion Set the KIF_SCENARIO_FILTER environment variable to skip all scenarios not matching the variable's value - */ -@property (nonatomic, readonly) BOOL skippedByFilter; - -/*! - @method scenarioWithDescription - @abstract Create a new scenario. - @param description A description of what the scenario is testing. - @result An initialized scenario. - @discussion Creates a new instance of the scenario with a given description. As part of creating the instance, @link initializeSteps initializeSteps @/link will be called, so calling this method on a subclass of KIFTestScenario will return a fully initialized scenario. - */ -+ (id)scenarioWithDescription:(NSString *)description; - -/*! - @method setDefaultStepsToSetUp: - @abstract Set the default setup steps that will be added to new scenarios. - @param The default setup steps. - @discussion When initializing a new scenario these steps are set as the stepsToSetUp on the scenario. - */ -+ (void)setDefaultStepsToSetUp:(NSArray *)steps; - -/*! - @method defaultStepsToSetUp - @abstract The default setup steps that will be added to new scenarios. - @result The default setup steps. - @discussion When initializing a new scenario these steps are set as the stepsToSetUp on the scenario. These default steps can be set using +setDefaultStepsToSetUp: - */ -+ (NSArray *)defaultStepsToSetUp; - -/*! - @method setDefaultStepsToTearDown: - @abstract Set the default tear down steps that will be added to new scenarios. - @param The default tear down steps. - @discussion When initializing a new scenario these steps are set as the stepsToTearDown on the scenario. - */ -+ (void)setDefaultStepsToTearDown:(NSArray *)steps; - -/*! - @method defaultStepsToTearDown - @abstract The default tear down steps that will be added to new scenarios. - @result The default tear down steps. - @discussion When initializing a new scenario these steps are set as the stepsToTearDown on the scenario. These default steps can be set using +setDefaultStepsToTearDown: - */ -+ (NSArray *)defaultStepsToTearDown; - -/*! - @method initializeSteps; - @abstract A place for subclasses to add steps. - @discussion This is lazily called the first time the steps property is accessed. Subclasses can use model information to customize the set of steps that are returned. - */ -- (void)initializeSteps; - -/*! - @method addStep: - @abstract Add a step to the scenario. - */ -- (void)addStep:(KIFTestStep *)step; - -/*! - @method addStepsFromArray: - @abstract Add multiple steps to the scenario from an array. - */ -- (void)addStepsFromArray:(NSArray *)steps; - -@end diff --git a/Pods/KIF/Classes/KIFTestScenario.m b/Pods/KIF/Classes/KIFTestScenario.m deleted file mode 100755 index 51e17a4..0000000 --- a/Pods/KIF/Classes/KIFTestScenario.m +++ /dev/null @@ -1,178 +0,0 @@ -// -// KIFTestScenario.m -// KIF -// -// Created by Michael Thole on 5/20/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import "KIFTestScenario.h" -#import "KIFTestStep.h" - - -static NSArray *defaultStepsToSetUp = nil; -static NSArray *defaultStepsToTearDown = nil; - - -@interface KIFTestScenario () - -@property (nonatomic, readwrite, retain) NSArray *steps; -@property (nonatomic, readwrite) BOOL skippedByFilter; - -- (void)_initializeStepsIfNeeded; - -@end - - -@implementation KIFTestScenario - -@synthesize description; -@synthesize steps; -@synthesize stepsToSetUp; -@synthesize stepsToTearDown; -@synthesize skippedByFilter; - -#pragma mark Static Methods - -+ (id)scenarioWithDescription:(NSString *)description -{ - KIFTestScenario *scenario = [[self alloc] init]; - scenario.description = description; - NSString *filter = [[[NSProcessInfo processInfo] environment] objectForKey:@"KIF_SCENARIO_FILTER"]; - if (filter) { - scenario.skippedByFilter = ([description rangeOfString:filter options:NSRegularExpressionSearch].location == NSNotFound); - } - - return [scenario autorelease]; -} - -+ (void)setDefaultStepsToSetUp:(NSArray *)steps; -{ - if (defaultStepsToSetUp == steps) { - return; - } - - [defaultStepsToSetUp release]; - defaultStepsToSetUp = [steps copy]; -} - -+ (NSArray *)defaultStepsToSetUp; -{ - return defaultStepsToSetUp; -} - -+ (void)setDefaultStepsToTearDown:(NSArray *)steps; -{ - if (defaultStepsToTearDown == steps) { - return; - } - - [defaultStepsToTearDown release]; - defaultStepsToTearDown = [steps copy]; -} - -+ (NSArray *)defaultStepsToTearDown; -{ - return defaultStepsToTearDown; -} - -#pragma mark Initialization - -- (id)init -{ - self = [super init]; - if (!self) { - return nil; - } - - stepsToSetUp = [defaultStepsToSetUp copy]; - stepsToTearDown = [defaultStepsToTearDown copy]; - - return self; -} - -- (void)dealloc -{ - [steps release]; steps = nil; - [stepsToSetUp release]; stepsToSetUp = nil; - [stepsToTearDown release]; stepsToTearDown = nil; - [description release]; description = nil; - - [super dealloc]; -} - -#pragma mark Public Methods - -- (void)initializeSteps; -{ - // For subclasses -} - -- (NSArray *)steps; -{ - [self _initializeStepsIfNeeded]; - return steps; -} - -- (void)addStep:(KIFTestStep *)step; -{ - NSAssert(![steps containsObject:step], @"The step %@ is already added", step); - - [self _initializeStepsIfNeeded]; - [steps insertObject:step atIndex:(steps.count - self.stepsToTearDown.count)]; -} - -- (void)addStepsFromArray:(NSArray *)inSteps; -{ - for (KIFTestStep *step in inSteps) { - NSAssert(![steps containsObject:step], @"The step %@ is already added", step); - } - - [self _initializeStepsIfNeeded]; - [steps insertObjects:inSteps atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(steps.count - self.stepsToTearDown.count, inSteps.count)]]; -} - -- (void)setStepsToSetUp:(NSArray *)inStepsToSetUp; -{ - if ([stepsToSetUp isEqual:inStepsToSetUp]) { - return; - } - - // Remove the old set up steps and add the new ones - // If steps hasn't been set up yet, that's fine - [steps removeObjectsInRange:NSMakeRange(0, stepsToSetUp.count)]; - [steps insertObjects:inStepsToSetUp atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, inStepsToSetUp.count)]]; - - [stepsToSetUp release]; - stepsToSetUp = [inStepsToSetUp copy]; -} - -- (void)setStepsToTearDown:(NSArray *)inStepsToTearDown; -{ - if ([stepsToTearDown isEqual:inStepsToTearDown]) { - return; - } - - // Remove the old tear down steps and add the new ones - // If steps hasn't been set up yet, that's fine - [steps removeObjectsInRange:NSMakeRange(steps.count - stepsToTearDown.count, stepsToTearDown.count)]; - [steps insertObjects:inStepsToTearDown atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(steps.count, inStepsToTearDown.count)]]; - - [stepsToTearDown release]; - stepsToTearDown = [inStepsToTearDown copy]; -} - -#pragma mark Private Methods - -- (void)_initializeStepsIfNeeded; -{ - if (!steps && !self.skippedByFilter) { - NSMutableArray *initialSteps = [NSMutableArray arrayWithArray:self.stepsToSetUp]; - [initialSteps addObjectsFromArray:self.stepsToTearDown]; - self.steps = initialSteps; - [self initializeSteps]; - } -} - -@end diff --git a/Pods/KIF/Classes/KIFTestStep.h b/Pods/KIF/Classes/KIFTestStep.h deleted file mode 100755 index bcc8dcd..0000000 --- a/Pods/KIF/Classes/KIFTestStep.h +++ /dev/null @@ -1,434 +0,0 @@ -// -// KIFTestStep.h -// KIF -// -// Created by Michael Thole on 5/20/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import - - -/*! - @define KIFTestCondition - @abstract Tests a condition and returns a failure result if the condition isn't true. - @discussion This is a useful macro for quickly evaluating conditions in a test step. If the condition is false then the current test step will be aborted with a failure result. - @param condition The condition to test. - @param error The NSError object to put the error string into. May be nil, but should usually be the error parameter from the test step execution block. - @param ... A string describing what the failure was that occurred. This may be a format string with additional arguments. - */ -#define KIFTestCondition(condition, error, ...) ({ \ -if (!(condition)) { \ - if (error) { \ - *error = [NSError errorWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:__VA_ARGS__], NSLocalizedDescriptionKey, nil]]; \ - } \ - [KIFTestStep stepFailed]; \ - return KIFTestStepResultFailure; \ -} \ -}) - -/*! - @define KIFTestWaitCondition - @abstract Tests a condition and returns a wait result if the condition isn't true. - @discussion This is a useful macro for quickly evaluating conditions in a test step. If the condition is false then the current test step will be aborted with a wait result, indicating that it should be called again in the near future. - @param condition The condition to test. - @param error The NSError object to put the error string into. May be nil, but should usually be the error parameter from the test step execution block. - @param ... A string describing why the step needs to wait. This is important since this reason will be considered the cause of a timeout error if the step requires waiting for too long. This may be a format string with additional arguments. - */ -#define KIFTestWaitCondition(condition, error, ...) ({ \ -if (!(condition)) { \ - if (error) { \ - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultWait userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:__VA_ARGS__], NSLocalizedDescriptionKey, nil]] autorelease]; \ - } \ - return KIFTestStepResultWait; \ -} \ -}) - - -/*! - @enum KIFTestStepResult - @abstract Result codes from a test step. - @constant KIFTestStepResultFailure The step failed and the test controller should move to the next scenario. - @constant KIFTestStepResultSuccess The step succeeded and the test controller should move to the next step in the current scenario. - @constant KIFTestStepResultWait The test isn't ready yet and should be tried again after a short delay. - */ -enum { - KIFTestStepResultFailure = 0, - KIFTestStepResultSuccess, - KIFTestStepResultWait, -}; -typedef NSInteger KIFTestStepResult; - - -@class KIFTestStep; - -/*! - @typedef KIFTestStepExecutionBlock - @param step The step object itself. This is passed back to the block to ensure that there is a pointer to the fully initialized step at the time of execution. - @param error An error to fill out in the case of a failure or wait condition. Filling out this error is mandatory in these cases to ensure that testing output is useful. - @result A test result code. Returning KIFTestStepResultWait will cause the step to be tried again on the next iteration. - */ -typedef KIFTestStepResult (^KIFTestStepExecutionBlock)(KIFTestStep *step, NSError **error); - -/*! - @class KIFTestStep - @abstract A step in a testing sequence. - @discussion Steps are the most basic element of a test, and are added together to create the scenarios to be tested. - - Steps are the building blocks of scenarios, and should be very simple. A number of useful factory steps are provided for mimicking basic user interaction. These steps leverage the built in accessibility of iOS to find and interact with views. As such, the accessibility inspector needs to be enabled under Settings in the simulator for them to work. - */ -@interface KIFTestStep : NSObject { - KIFTestStepExecutionBlock executionBlock; - NSString *description; - NSString *notificationName; - id notificationObject; - BOOL notificationOccurred; - BOOL observingForNotification; - NSTimeInterval timeout; -} - -/*! - @property timeout - @abstract The amount of time to try the step before assuming that it failed. - @discussion The timeout comes into play if a step returns the KIFTestStepResultWait result. If the step returns this result such that the step has been called repeatedly for a time greater than the timeout, then the step is considered to have failed. Steps are assumed to be well-behaved, and the timeout will not interrupt a step if it is running synchronously for an extended period of time. - */ -@property (nonatomic) NSTimeInterval timeout; - -/*! - @property description - @abstract A description of what the step does. - @discussion This is used to help describe what the test script is doing and where it may have failed. - */ -@property (nonatomic, retain) NSString *description; - -/*! - @method defaultTimeout - @abstract The default amount of time to assign to new steps before assuming they failed. - @discussion To change the default value of the timeout property, either subclass KIFTestStep and override this method or call +setDefaultTimeout: with a different value. - */ -+ (NSTimeInterval)defaultTimeout; - -/*! - @method setDefaultTimeout: - @abstract Sets the default amount of time to assign to new steps before assuming they failed. - @discussion To change the default value of the timeout property, either subclass KIFTestStep and override +defaultTimeout or call this method with a different value. - */ -+ (void)setDefaultTimeout:(NSTimeInterval)newDefaultTimeout; - -/*! - @method stepWithDescription:executionBlock: - @abstract Convenience initializer to create a new custom step. - @param description A description of the what the step does. Required. - @param executionBlock A block to execute which performs the step. Required. - */ -+ (id)stepWithDescription:(NSString *)description executionBlock:(KIFTestStepExecutionBlock)executionBlock; - -/*! - @method executeAndReturnError: - @abstract Run the execution block for the receiver. - @discussion This method should not usually be invoked directly. The test controller will handle invoking steps as needed. - @param error An error that can be returned if the step fails or needs to wait. - @result The result code for the result of executing the step. - */ -- (KIFTestStepResult)executeAndReturnError:(NSError **)error; - -/*! - @method cleanUp: - @abstract Clean up any state and listeners once the step has completed. - @discussion For anything that needs to be removed at completion rather than dealloc - */ -- (void)cleanUp; - -#pragma mark Factory Steps - -/*! - @method stepThatFails - @abstract A step that always fails. - @discussion Mostly useful for test debugging or as a placeholder when building new tests. - @result A configured test step. - */ -+ (id)stepThatFails; - -/*! - @method stepThatSucceeds - @abstract A step that always succeeds. - @discussion Mostly useful for test debugging or as a placeholder when building new tests. - @result A configured test step. - */ -+ (id)stepThatSucceeds; - -/*! - @method stepToWaitForViewWithAccessibilityLabel: - @abstract A step that waits until a view or accessibility element is present. - @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found, then the step will attempt to wait until it is. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. - - If the view you want to wait for is tappable, use the -stepToWaitForTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. - @param label The accessibility label of the element to wait for. - @result A configured test step. - */ -+ (id)stepToWaitForViewWithAccessibilityLabel:(NSString *)label; - -/*! - @method stepToWaitForViewWithAccessibilityLabel:traits: - @abstract A step that waits until a view or accessibility element is present. - @discussionThe view or accessibility element with the given label is found in the view hierarchy. If the element isn't found, then the step will attempt to wait until it is. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. - - If the view you want to wait for is tappable, use the -stepToWaitForTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. - @param label The accessibility label of the element to wait for. - @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. - @result A configured test step. - */ -+ (id)stepToWaitForViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; - -/*! - @method stepToWaitForViewWithAccessibilityLabel:value:traits: - @abstract A step that waits until a view or accessibility element is present. - @discussionThe view or accessibility element with the given label is found in the view hierarchy. If the element isn't found, then the step will attempt to wait until it is. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. - - If the view you want to wait for is tappable, use the -stepToWaitForTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. - @param label The accessibility label of the element to wait for. - @param value The accessibility value of the element to tap. - @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. - @result A configured test step. - */ -+ (id)stepToWaitForViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; - -/*! - @method stepToWaitForAbsenceOfViewWithAccessibilityLabel: - @abstract A step that waits until a view or accessibility element is no longer present. - @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element is found, then the step will attempt to wait until it isn't. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are considered absent. - @param label The accessibility label of the element to wait for. - @result A configured test step. - */ -+ (id)stepToWaitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label; - -/*! - @method stepToWaitForAbsenceOfViewWithAccessibilityLabel:traits: - @abstract A step that waits until a view or accessibility element is no longer present. - @discussionThe view or accessibility element with the given label is found in the view hierarchy. If the element is found, then the step will attempt to wait until it isn't. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are considered absent. - @param label The accessibility label of the element to wait for. - @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. - @result A configured test step. - */ -+ (id)stepToWaitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; - -/*! - @method stepToWaitForAbsenceOfViewWithAccessibilityLabel:value:traits: - @abstract A step that waits until a view or accessibility element is no longer present. - @discussionThe view or accessibility element with the given label is found in the view hierarchy. If the element is found, then the step will attempt to wait until it isn't. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are considered absent. - @param label The accessibility label of the element to wait for. - @param value The accessibility value of the element to tap. - @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. - @result A configured test step. - */ -+ (id)stepToWaitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; - -/*! - @method stepToWaitForTappableViewWithAccessibilityLabel: - @abstract A step that waits until a view or accessibility element is present and available for tapping. - @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Whether or not a view is tappable is based on -[UIView hitTest:]. - @param label The accessibility label of the element to wait for. - @result A configured test step. - */ -+ (id)stepToWaitForTappableViewWithAccessibilityLabel:(NSString *)label; - -/*! - @method stepToWaitForTappableViewWithAccessibilityLabel:traits: - @abstract A step that waits until a view or accessibility element is present and available for tapping. - @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Whether or not a view is tappable is based on -[UIView hitTest:]. - @param label The accessibility label of the element to wait for. - @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. - @result A configured test step. - */ -+ (id)stepToWaitForTappableViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; - -/*! - @method stepToWaitForTappableViewWithAccessibilityLabel:value:traits: - @abstract A step that waits until a view or accessibility element is present and available for tapping. - @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Whether or not a view is tappable is based on -[UIView hitTest:]. - @param label The accessibility label of the element to wait for. - @param value The accessibility value of the element to tap. - @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. - @result A configured test step. - */ -+ (id)stepToWaitForTappableViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; - -/*! - @method stepToWaitForTimeInterval:description: - @abstract A step that waits for a certain amount of time. - @discussion In general when waiting for the app to get into a known state, it's better to use -stepToWaitForTappableViewWithAccessibilityLabel, however this step may be useful in some situations as well. - @param interval The number of seconds to wait before executing the next step. - @param description A description of why the wait is necessary. Required. - @result A configured test step. - */ -+ (id)stepToWaitForTimeInterval:(NSTimeInterval)interval description:(NSString *)description; - -/*! - @method stepToWaitForNotificationName:object: - @abstract A step that waits for an NSNotification - @discussion Useful when a test requires an asynchronous task to complete, especially when that task does not trigger a visible change in the view hierarchy - @param name The name of the NSNotification - @param object The object to which the step should listen. Nil value will listen to all objects. - @result A configured test step. - */ -+ (id)stepToWaitForNotificationName:(NSString*)name object:(id)object; - -/*! - @method stepToWaitForNotificationName:object:whileExecutingStep: - @abstract A step that waits for an NSNotification emitted during execution of a child step - @discussion Useful when step execution causes a notification to be emitted, but executes too quickly for stepToWaitForNotificationName: to observe it. - An observer will be registered for the notification before the observedStep is executed. - @param name The name of the NSNotification - @param object The object to which the step should listen. Nil value will listen to all objects. - @result A configured test step. - */ -+ (id)stepToWaitForNotificationName:(NSString *)name object:(id)object whileExecutingStep:(KIFTestStep *)childStep; - -/*! - @method stepToTapViewWithAccessibilityLabel: - @abstract A step that taps a particular view in the view hierarchy. - @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element. - @param label The accessibility label of the element to tap. - @result A configured test step. - */ -+ (id)stepToTapViewWithAccessibilityLabel:(NSString *)label; - -/*! - @method stepToTapViewWithAccessibilityLabel:traits: - @abstract A step that taps a particular view in the view hierarchy. - @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element. - @param label The accessibility label of the element to tap. - @param traits The accessibility traits of the element to tap. Elements that do not include at least these traits are ignored. - @result A configured test step. - */ -+ (id)stepToTapViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; - -/*! - @method stepToTapViewWithAccessibilityLabel:value:traits: - @abstract A step that taps a particular view in the view hierarchy. - @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element. - - This variation allows finding a particular instance of an accessibility element. For example, a table view might have multiple elements with the accessibility label of "Employee", but only one that also has the accessibility value of "Bob". - @param label The accessibility label of the element to tap. - @param value The accessibility value of the element to tap. - @param traits The accessibility traits of the element to tap. Elements that do not include at least these traits are ignored. - @result A configured test step. - */ -+ (id)stepToTapViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; - -/*! - @method stepToTapScreenAtPoint: - @abstract A step that taps the screen at a particular point. - @discussion Taps the screen at a specific point. In general you should use the factory steps that tap a view based on its accessibility label, but there are situations where it's not possible to access a view using accessibility mechanisms. This step is more lenient than the steps that use the accessibility label, and does not wait for any particular view to appear, or validate that the tapped view is enabled or has interaction enabled. Because this step doesn't doesn't validate that a view is present before tapping it, it's good practice to precede this step where possible with a -stepToWaitForViewWithAccessibilityLabel: with the label for another view that should appear on the same screen. - - @param screenPoint The point in screen coordinates to tap. Screen points originate from the top left of the screen. - @result A configured test step. - */ -+ (id)stepToTapScreenAtPoint:(CGPoint)screenPoint; - -/*! - @method stepToEnterText:intoViewWithAccessibilityLabel: - @abstract A step that enters text into a particular view in the view hierarchy. - @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element, then text is entered into the view by simulating taps on the appropriate keyboard keys. - @param text The text to enter. - @param label The accessibility label of the element to type into. - @result A configured test step. - */ -+ (id)stepToEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label; - -/*! - @method stepToEnterText:intoViewWithAccessibilityLabel:traits: - @abstract A step that enters text into a particular view in the view hierarchy. - @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element, then text is entered into the view by simulating taps on the appropriate keyboard keys. - @param text The text to enter. - @param label The accessibility label of the element to type into. - @param traits The accessibility traits of the element to type into. Elements that do not include at least these traits are ignored. - @param expectedResult What the text value should be after entry, including any formatting done by the field. If this is nil, the "text" parameter will be used. - @result A configured test step. - */ -+ (id)stepToEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult; - -/*! - @method stepToSelectPickerViewRowWithTitle: - @abstract A step that selects an item from a currently visible picker view. - @discussion With a picker view already visible, this step will find an item with the given title, select that item, and tap the Done button. - @param title The title of the row to select. - @result A configured test step. - */ -+ (id)stepToSelectPickerViewRowWithTitle:(NSString *)title; - -/*! - @method stepToSetOn:forSwitchWithAccessibilityLabel: - @abstract A step that toggles a UISwitch into a specified position. - @discussion The UISwitch with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present, the step will return if it's already in the desired position. If the switch is tappable but not in the desired position, a tap event is simulated in the center of the view or element, toggling the switch into the desired position. - @param switchIsOn The desired position of the UISwitch. - @param label The accessibility label of the element to switch. - @result A configured test step. - */ -+ (id)stepToSetOn:(BOOL)switchIsOn forSwitchWithAccessibilityLabel:(NSString *)label; - -/*! - @method stepToDismissPopover - @abstract A step that dismisses a popover on screen. - @discussion With a popover up, tap at the top-left corner of the screen. - @result A configured test step. - */ -+ (id)stepToDismissPopover; - -/*! - @method stepToSimulateMemoryWarning - @abstract Simulates a memory warning. - @result A configured test step. - */ -+ (id)stepToSimulateMemoryWarning; - -+ (void)stepFailed; - -/*! - @method stepsToChoosePhotoInAlbum:atRow:column: - @abstract Select a certain photo from the built in photo picker. - @discussion This set of steps expects that the photo picker has been initiated and that the sheet is up. From there it will tap the "Choose Photo" button and select the desired photo. - @param albumName The name of the album to select the photo from. - @param row The row number in the album for the desired photo. - @param column The column number in the album for the desired photo. - @result An array of configured test steps. - */ -+ (NSArray *)stepsToChoosePhotoInAlbum:(NSString *)albumName atRow:(NSInteger)row column:(NSInteger)column; - -/*! - @method stepToTapRowInTableViewWithAccessibilityLabel:atIndexPath: - @abstract A step that taps the row at IndexPath in a view with the given label. - @discussion This step will get the view with the specified accessibility label and tap the row at indexPath. - @param tableViewLabel Accessibility label of the table view. - @param indexPath Index path of the row to tap. - @result A configured test step. - */ -+ (id)stepToTapRowInTableViewWithAccessibilityLabel:(NSString*)tableViewLabel atIndexPath:(NSIndexPath *)indexPath; - -/*! - @enum KIFSwipeDirection - @abstract Directions in which to swipe. - @constant KIFSwipeDirectionRight Swipe to the right. - @constant KIFSwipeDirectionLeft Swipe to the left. - @constant KIFSwipeDirectionUp Swipe up. - @constant KIFSwipeDirectionDown Swipe down. - */ -typedef enum { - KIFSwipeDirectionRight, - KIFSwipeDirectionLeft, - KIFSwipeDirectionUp, - KIFSwipeDirectionDown -} KIFSwipeDirection; - -/*! - @method stepToSwipeViewWithAccessibilityLabel:inDirection: - @abstract A step that swipes a particular view in the view hierarchy in the given direction. - @discussion The view will get the view with the specified accessibility label and swipe the screen in the given direction from the view's center. - @param label The accessibility label of the view to swipe. - @param direction The direction in which to swipe. - @result A configured test step. - */ -+ (id)stepToSwipeViewWithAccessibilityLabel:(NSString *)label inDirection:(KIFSwipeDirection)direction; - -@end diff --git a/Pods/KIF/Classes/KIFTestStep.m b/Pods/KIF/Classes/KIFTestStep.m deleted file mode 100755 index f44fcba..0000000 --- a/Pods/KIF/Classes/KIFTestStep.m +++ /dev/null @@ -1,994 +0,0 @@ -// -// KIFTestStep.m -// KIF -// -// Created by Michael Thole on 5/20/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import "KIFTestStep.h" -#import "CGGeometry-KIFAdditions.h" -#import "UIAccessibilityElement-KIFAdditions.h" -#import "UIApplication-KIFAdditions.h" -#import "UIScrollView-KIFAdditions.h" -#import "UITouch-KIFAdditions.h" -#import "UIView-KIFAdditions.h" -#import "UIWindow-KIFAdditions.h" - - -static NSTimeInterval KIFTestStepDefaultTimeout = 10.0; - -@interface KIFTestStep () - -@property (nonatomic, copy) KIFTestStepExecutionBlock executionBlock; -@property (nonatomic, copy) NSString *notificationName; -@property (nonatomic, retain) id notificationObject; -@property BOOL notificationOccurred; -@property BOOL observingForNotification; -@property (nonatomic, retain) KIFTestStep *childStep; - -+ (BOOL)_isUserInteractionEnabledForView:(UIView *)view; - -+ (BOOL)_enterCharacter:(NSString *)characterString; -+ (BOOL)_enterCharacter:(NSString *)characterString history:(NSMutableDictionary *)history; -+ (BOOL)_enterCustomKeyboardCharacter:(NSString *)characterString; - -+ (UIAccessibilityElement *)_accessibilityElementWithLabel:(NSString *)label accessibilityValue:(NSString *)value tappable:(BOOL)mustBeTappable traits:(UIAccessibilityTraits)traits error:(out NSError **)error; - -typedef CGPoint KIFDisplacement; -+ (KIFDisplacement)_displacementForSwipingInDirection:(KIFSwipeDirection)direction; - -@end - - -@implementation KIFTestStep - -@synthesize description; -@synthesize executionBlock; -@synthesize notificationName; -@synthesize notificationObject; -@synthesize notificationOccurred; -@synthesize observingForNotification; -@synthesize timeout; -@synthesize childStep; - -#pragma mark Class Methods - -+ (NSTimeInterval)defaultTimeout; -{ - return KIFTestStepDefaultTimeout; -} - -+ (void)setDefaultTimeout:(NSTimeInterval)newDefaultTimeout; -{ - KIFTestStepDefaultTimeout = newDefaultTimeout; -} - -+ (id)stepWithDescription:(NSString *)description executionBlock:(KIFTestStepExecutionBlock)executionBlock; -{ - NSAssert(description.length, @"All steps must have a description"); - NSAssert(executionBlock, @"A custom step cannot be created with an execution block"); - - KIFTestStep *step = [[self alloc] init]; - step.description = description; - step.executionBlock = executionBlock; - return [step autorelease]; -} - -+ (id)stepThatFails; -{ - return [self stepWithDescription:@"Always fails" executionBlock:^(KIFTestStep *step, NSError **error) { - KIFTestCondition(NO, error, @"This test always fails"); - }]; -} - -+ (id)stepThatSucceeds; -{ - return [self stepWithDescription:@"Always succeeds" executionBlock:^(KIFTestStep *step, NSError **error) { - return KIFTestStepResultSuccess; - }]; -} - -+ (void)stepFailed; -{ - // Add a logging call here or set a breakpoint to debug failed KIFTestCondition calls -} - -+ (id)stepToWaitForViewWithAccessibilityLabel:(NSString *)label; -{ - return [self stepToWaitForViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone]; -} - -+ (id)stepToWaitForViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; -{ - return [self stepToWaitForViewWithAccessibilityLabel:label value:nil traits:traits]; -} - -+ (id)stepToWaitForViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; -{ - NSString *description = nil; - if (value.length) { - description = [NSString stringWithFormat:@"Wait for view with accessibility label \"%@\" and accessibility value \"%@\"", label, value]; - } else { - description = [NSString stringWithFormat:@"Wait for view with accessibility label \"%@\"", label]; - } - - return [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - UIAccessibilityElement *element = [self _accessibilityElementWithLabel:label accessibilityValue:value tappable:NO traits:traits error:error]; - - NSString *waitDescription = nil; - if (value.length) { - waitDescription = [NSString stringWithFormat:@"Waiting for presence of accessibility element with label \"%@\" and accessibility value \"%@\"", label, value]; - } else { - waitDescription = [NSString stringWithFormat:@"Waiting for presence of accessibility element with label \"%@\"", label]; - } - - KIFTestWaitCondition(element, error, @"%@", waitDescription); - - return KIFTestStepResultSuccess; - }]; -} - -+ (id)stepToWaitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label; -{ - return [self stepToWaitForAbsenceOfViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone]; -} - -+ (id)stepToWaitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; -{ - return [self stepToWaitForAbsenceOfViewWithAccessibilityLabel:label value:nil traits:traits]; -} - -+ (id)stepToWaitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; -{ - NSString *description = nil; - if (value.length) { - description = [NSString stringWithFormat:@"Wait for view with accessibility label \"%@\" and accessibility value \"%@\" to be gone", label, value]; - } else { - description = [NSString stringWithFormat:@"Wait for view with accessibility label \"%@\" to be gone", label]; - } - - return [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - - // If the app is ignoring interaction events, then wait before doing our analysis - KIFTestWaitCondition(![[UIApplication sharedApplication] isIgnoringInteractionEvents], error, @"Application is ignoring interaction events."); - - // If the element can't be found, then we're done - UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:value traits:traits]; - if (!element) { - return KIFTestStepResultSuccess; - } - - UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; - - // If we found an element, but it's not associated with a view, then something's wrong. Wait it out and try again. - KIFTestWaitCondition(view, error, @"Cannot find view containing accessibility element with the label \"%@\"", label); - - // Hidden views count as absent - KIFTestWaitCondition([view isHidden], error, @"Accessibility element with label \"%@\" is visible and not hidden.", label); - - return KIFTestStepResultSuccess; - }]; -} - -+ (id)stepToWaitForTappableViewWithAccessibilityLabel:(NSString *)label; -{ - return [self stepToWaitForTappableViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone]; -} - -+ (id)stepToWaitForTappableViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; -{ - return [self stepToWaitForTappableViewWithAccessibilityLabel:label value:nil traits:traits]; -} - -+ (id)stepToWaitForTappableViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; -{ - NSString *description = nil; - if (value.length) { - description = [NSString stringWithFormat:@"Wait for tappable view with accessibility label \"%@\" and accessibility value \"%@\"", label, value]; - } else { - description = [NSString stringWithFormat:@"Wait for tappable view with accessibility label \"%@\"", label]; - } - - return [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - UIAccessibilityElement *element = [self _accessibilityElementWithLabel:label accessibilityValue:value tappable:YES traits:traits error:error]; - return (element ? KIFTestStepResultSuccess : KIFTestStepResultWait); - }]; -} - -+ (id)stepToWaitForTimeInterval:(NSTimeInterval)interval description:(NSString *)description; -{ - // In general, we should discourage use of a step like this. It's pragmatic to include it though. - __block NSTimeInterval startTime = 0; - KIFTestStep *step = [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - if (startTime == 0) { - startTime = [NSDate timeIntervalSinceReferenceDate]; - } - - KIFTestWaitCondition((([NSDate timeIntervalSinceReferenceDate] - startTime) >= interval), error, @"Waiting for time interval to expire."); - - return KIFTestStepResultSuccess; - }]; - - // Make sure that the timeout is set so that it doesn't timeout prematurely. - step.timeout = interval + 1.0; - - return step; -} - -+ (id)stepToWaitForNotificationName:(NSString *)name object:(id)object; -{ - NSString *description = [NSString stringWithFormat:@"Wait for notification \"%@\"", name]; - - KIFTestStep *step = [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - if (!step.observingForNotification) { - step.notificationName = name; - step.notificationObject = object; - step.observingForNotification = YES; - [[NSNotificationCenter defaultCenter] addObserver:step selector:@selector(_onObservedNotification:) name:name object:object]; - } - - KIFTestWaitCondition(step.notificationOccurred, error, @"Waiting for notification \"%@\"", name); - return KIFTestStepResultSuccess; - }]; - return step; -} - -+ (id)stepToWaitForNotificationName:(NSString *)name object:(id)object whileExecutingStep:(KIFTestStep *)childStep; -{ - NSString *description = [NSString stringWithFormat:@"Wait for notification \"%@\" while executing child step \"%@\"", name, childStep]; - - KIFTestStep *step = [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - if (!step.observingForNotification) { - step.notificationName = name; - step.notificationObject = object; - step.observingForNotification = YES; - [[NSNotificationCenter defaultCenter] addObserver:step selector:@selector(_onObservedNotification:) name:name object:object]; - } - - // Execute the step we are observing for changes - KIFTestStepResult result = [step.childStep executeAndReturnError:error]; - KIFTestWaitCondition(result != KIFTestStepResultWait, error, @"Waiting for completion of child step \"%@\"", step.childStep); - - // Wait for the actual notification - KIFTestWaitCondition(step.notificationOccurred, error, @"Waiting for notification \"%@\"", name); - return KIFTestStepResultSuccess; - }]; - step.childStep = childStep; - return step; -} - -+ (id)stepToTapViewWithAccessibilityLabel:(NSString *)label; -{ - return [self stepToTapViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone]; -} - -+ (id)stepToTapViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; -{ - return [self stepToTapViewWithAccessibilityLabel:label value:nil traits:traits]; -} - -+ (id)stepToTapViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; -{ - NSString *description = nil; - if (value.length) { - description = [NSString stringWithFormat:@"Tap view with accessibility label \"%@\" and accessibility value \"%@\"", label, value]; - } else { - description = [NSString stringWithFormat:@"Tap view with accessibility label \"%@\"", label]; - } - - // After tapping the view we want to wait a short period to allow things to settle (animations and such). We can't do this using CFRunLoopRunInMode() because certain things, such as the built-in media picker, do things with the run loop that are not compatible with this kind of wait. Instead we leverage the way KIF hooks into the existing run loop by returning "wait" results for the desired period. - const NSTimeInterval quiesceWaitInterval = 0.5; - __block NSTimeInterval quiesceStartTime = 0.0; - - __block UIView *view = nil; - - return [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - - // If we've already tapped the view and stored it to a variable, and we've waited for the quiesce time to elapse, then we're done. - if (view) { - KIFTestWaitCondition(([NSDate timeIntervalSinceReferenceDate] - quiesceStartTime) >= quiesceWaitInterval, error, @"Waiting for view to become the first responder."); - return KIFTestStepResultSuccess; - } - - UIAccessibilityElement *element = [self _accessibilityElementWithLabel:label accessibilityValue:value tappable:YES traits:traits error:error]; - if (!element) { - return KIFTestStepResultWait; - } - - view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; - KIFTestWaitCondition(view, error, @"Failed to find view for accessibility element with label \"%@\"", label); - - if (![self _isUserInteractionEnabledForView:view]) { - if (error) { - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"View with accessibility label \"%@\" is not enabled for interaction", label], NSLocalizedDescriptionKey, nil]] autorelease]; - } - return KIFTestStepResultWait; - } - - CGRect elementFrame = [view.window convertRect:element.accessibilityFrame toView:view]; - CGPoint tappablePointInElement = [view tappablePointInRect:elementFrame]; - - // This is mostly redundant of the test in _accessibilityElementWithLabel: - KIFTestWaitCondition(!isnan(tappablePointInElement.x), error, @"The element with accessibility label %@ is not tappable", label); - [view tapAtPoint:tappablePointInElement]; - - KIFTestCondition(![view canBecomeFirstResponder] || [view isDescendantOfFirstResponder], error, @"Failed to make the view %@ which contains the accessibility element \"%@\" into the first responder", view, label); - - quiesceStartTime = [NSDate timeIntervalSinceReferenceDate]; - - KIFTestWaitCondition(NO, error, @"Waiting for the view to settle."); - }]; -} - -+ (id)stepToTapScreenAtPoint:(CGPoint)screenPoint; -{ - NSString *description = [NSString stringWithFormat:@"Tap screen at point \"%@\"", NSStringFromCGPoint(screenPoint)]; - - return [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - - // Try all the windows until we get one back that actually has something in it at the given point - UIView *view = nil; - for (UIWindow *window in [[[UIApplication sharedApplication] windows] reverseObjectEnumerator]) { - CGPoint windowPoint = [window convertPoint:screenPoint fromView:nil]; - view = [window hitTest:windowPoint withEvent:nil]; - - // If we hit the window itself, then skip it. - if (view == window || view == nil) { - continue; - } - } - - KIFTestWaitCondition(view, error, @"No view was found at the point %@", NSStringFromCGPoint(screenPoint)); - - // This is mostly redundant of the test in _accessibilityElementWithLabel: - CGPoint viewPoint = [view convertPoint:screenPoint fromView:nil]; - [view tapAtPoint:viewPoint]; - - return KIFTestStepResultSuccess; - }]; -} - -+ (id)stepToEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label; -{ - return [self stepToEnterText:text intoViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone expectedResult:nil]; -} - -+ (id)stepToEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult; -{ - NSString *description = [NSString stringWithFormat:@"Type the text \"%@\" into the view with accessibility label \"%@\"", text, label]; - return [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - - UIAccessibilityElement *element = [self _accessibilityElementWithLabel:label accessibilityValue:nil tappable:YES traits:traits error:error]; - if (!element) { - return KIFTestStepResultWait; - } - - UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; - KIFTestWaitCondition(view, error, @"Cannot find view with accessibility label \"%@\"", label); - - CGRect elementFrame = [view.window convertRect:element.accessibilityFrame toView:view]; - CGPoint tappablePointInElement = [view tappablePointInRect:elementFrame]; - - // This is mostly redundant of the test in _accessibilityElementWithLabel: - KIFTestCondition(!isnan(tappablePointInElement.x), error, @"The element with accessibility label %@ is not tappable", label); - [view tapAtPoint:tappablePointInElement]; - - KIFTestWaitCondition([view isDescendantOfFirstResponder], error, @"Failed to make the view with accessibility label \"%@\" the first responder. First responder is %@", label, [[[UIApplication sharedApplication] keyWindow] firstResponder]); - - // Wait for the keyboard - CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.5, false); - - for (NSUInteger characterIndex = 0; characterIndex < [text length]; characterIndex++) { - NSString *characterString = [text substringWithRange:NSMakeRange(characterIndex, 1)]; - - if (![self _enterCharacter:characterString]) { - // Attempt to cheat if we couldn't find the character - if ([view isKindOfClass:[UITextField class]] || [view isKindOfClass:[UITextView class]]) { - NSLog(@"KIF: Unable to find keyboard key for %@. Inserting manually.", characterString); - [(UITextField *)view setText:[[(UITextField *)view text] stringByAppendingString:characterString]]; - } else { - KIFTestCondition(NO, error, @"Failed to find key for character \"%@\"", characterString); - } - } - } - - // This is probably a UITextField- or UITextView-ish view, so make sure it worked - if ([view respondsToSelector:@selector(text)]) { - // We trim \n and \r because they trigger the return key, so they won't show up in the final product on single-line inputs - NSString *expected = [expectedResult ? expectedResult : text stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; - NSString *actual = [[view performSelector:@selector(text)] stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; - KIFTestCondition([actual isEqualToString:expected], error, @"Failed to actually enter text \"%@\" in field; instead, it was \"%@\"", text, actual); - } - - return KIFTestStepResultSuccess; - }]; -} - -+ (id)stepToSelectPickerViewRowWithTitle:(NSString *)title; -{ - NSString *description = [NSString stringWithFormat:@"Select the \"%@\" item from the picker", title]; - return [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - - // Find the picker view - UIPickerView *pickerView = [[[[UIApplication sharedApplication] pickerViewWindow] subviewsWithClassNameOrSuperClassNamePrefix:@"UIPickerView"] lastObject]; - KIFTestCondition(pickerView, error, @"No picker view is present"); - - NSInteger componentCount = [pickerView.dataSource numberOfComponentsInPickerView:pickerView]; - KIFTestCondition(componentCount == 1, error, @"The picker view has multiple columns, which is not supported in testing."); - - for (NSInteger componentIndex = 0; componentIndex < componentCount; componentIndex++) { - NSInteger rowCount = [pickerView.dataSource pickerView:pickerView numberOfRowsInComponent:componentIndex]; - for (NSInteger rowIndex = 0; rowIndex < rowCount; rowIndex++) { - NSString *rowTitle = nil; - if ([pickerView.delegate respondsToSelector:@selector(pickerView:titleForRow:forComponent:)]) { - rowTitle = [pickerView.delegate pickerView:pickerView titleForRow:rowIndex forComponent:componentIndex]; - } else if ([pickerView.delegate respondsToSelector:@selector(pickerView:viewForRow:forComponent:reusingView:)]) { - // This delegate inserts views directly, so try to figure out what the title is by looking for a label - UIView *rowView = [pickerView.delegate pickerView:pickerView viewForRow:rowIndex forComponent:componentIndex reusingView:nil]; - NSArray *labels = [rowView subviewsWithClassNameOrSuperClassNamePrefix:@"UILabel"]; - UILabel *label = (labels.count > 0 ? [labels objectAtIndex:0] : nil); - rowTitle = label.text; - } - - if ([rowTitle isEqual:title]) { - [pickerView selectRow:rowIndex inComponent:componentIndex animated:YES]; - CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.5, false); - - // Tap in the middle of the picker view to select the item - [pickerView tap]; - - // The combination of selectRow:inComponent:animated: and tap does not consistently result in - // pickerView:didSelectRow:inComponent: being called on the delegate. We need to do it explicitly. - if ([pickerView.delegate respondsToSelector:@selector(pickerView:didSelectRow:inComponent:)]) { - [pickerView.delegate pickerView:pickerView didSelectRow:rowIndex inComponent:componentIndex]; - } - - return KIFTestStepResultSuccess; - } - } - } - - KIFTestCondition(NO, error, @"Failed to find picker view value with title \"%@\"", title); - return KIFTestStepResultFailure; - }]; -} - -+ (id)stepToSetOn:(BOOL)switchIsOn forSwitchWithAccessibilityLabel:(NSString *)label; -{ - NSString *description = [NSString stringWithFormat:@"Toggle the switch with accessibility label \"%@\" to %@", label, switchIsOn ? @"ON" : @"OFF"]; - return [self stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - - UIAccessibilityElement *element = [self _accessibilityElementWithLabel:label accessibilityValue:nil tappable:YES traits:UIAccessibilityTraitNone error:error]; - if (!element) { - return KIFTestStepResultWait; - } - - UISwitch *switchView = (UISwitch *)[UIAccessibilityElement viewContainingAccessibilityElement:element]; - KIFTestWaitCondition(switchView, error, @"Cannot find switch with accessibility label \"%@\"", label); - KIFTestWaitCondition([switchView isKindOfClass:[UISwitch class]], error, @"View with accessibility label \"%@\" is a %@, not a UISwitch", label, NSStringFromClass([switchView class])); - - // No need to switch it if it's already in the correct position - BOOL current = switchView.on; - if (current == switchIsOn) { - return KIFTestStepResultSuccess; - } - - CGRect elementFrame = [switchView.window convertRect:element.accessibilityFrame toView:switchView]; - CGPoint tappablePointInElement = [switchView tappablePointInRect:elementFrame]; - - // This is mostly redundant of the test in _accessibilityElementWithLabel: - KIFTestCondition(!isnan(tappablePointInElement.x), error, @"The element with accessibility label %@ is not tappable", label); - [switchView tapAtPoint:tappablePointInElement]; - - // This is a UISwitch, so make sure it worked - if (switchIsOn != switchView.on) { - NSLog(@"Faking turning switch %@ with accessibility label %@", switchIsOn ? @"ON" : @"OFF", label); - [switchView setOn:switchIsOn animated:YES]; - [switchView sendActionsForControlEvents:UIControlEventValueChanged]; - } - - // The switch animation takes a second to finish, and the action callback doesn't get called until it does. - CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.5f, false); - - KIFTestCondition(switchView.on == switchIsOn, error, @"Failed to toggle switch to \"%@\"; instead, it was \"%@\"", switchIsOn ? @"ON" : @"OFF", switchView.on ? @"ON" : @"OFF"); - - return KIFTestStepResultSuccess; - }]; -} - -+ (id)stepToDismissPopover; -{ - return [self stepWithDescription:@"Dismiss the popover" executionBlock:^(KIFTestStep *step, NSError **error) { - const NSTimeInterval tapDelay = 0.05; - NSArray *windows = [[UIApplication sharedApplication] windows]; - KIFTestCondition(windows.count, error, @"Failed to find any windows in the application"); - UIView *dimmingView = [[[windows objectAtIndex:0] subviewsWithClassNamePrefix:@"UIDimmingView"] lastObject]; - [dimmingView tapAtPoint:CGPointMake(50.0f, 50.0f)]; - CFRunLoopRunInMode(kCFRunLoopDefaultMode, tapDelay, false); - return KIFTestStepResultSuccess; - }]; -} - -+ (id)stepToSimulateMemoryWarning; -{ - return [KIFTestStep stepWithDescription:@"Simulate a memory warning" executionBlock:^(KIFTestStep *step, NSError **error) { - [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification object:[UIApplication sharedApplication]]; - return KIFTestStepResultSuccess; - }]; -} - -+ (id)stepToTapRowInTableViewWithAccessibilityLabel:(NSString*)tableViewLabel atIndexPath:(NSIndexPath *)indexPath -{ - NSString *description = [NSString stringWithFormat:@"Step to tap row %d in tableView with label %@", [indexPath row], tableViewLabel]; - return [KIFTestStep stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementWithLabel:tableViewLabel]; - KIFTestCondition(element, error, @"View with label %@ not found", tableViewLabel); - UITableView *tableView = (UITableView*)[UIAccessibilityElement viewContainingAccessibilityElement:element]; - - KIFTestCondition([tableView isKindOfClass:[UITableView class]], error, @"Specified view is not a UITableView"); - - KIFTestCondition(tableView, error, @"Table view with label %@ not found", tableViewLabel); - - UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; - CGRect cellFrame = [cell.contentView convertRect:[cell.contentView frame] toView:tableView]; - [tableView tapAtPoint:CGPointCenteredInRect(cellFrame)]; - - return KIFTestStepResultSuccess; - }]; -} - -#define NUM_POINTS_IN_SWIPE_PATH 20 - -+ (id)stepToSwipeViewWithAccessibilityLabel:(NSString *)label inDirection:(KIFSwipeDirection)direction -{ - // The original version of this came from http://groups.google.com/group/kif-framework/browse_thread/thread/df3f47eff9f5ac8c - NSString *directionDescription = nil; - - switch(direction) - { - case KIFSwipeDirectionRight: - directionDescription = @"right"; - break; - case KIFSwipeDirectionLeft: - directionDescription = @"left"; - break; - case KIFSwipeDirectionUp: - directionDescription = @"up"; - break; - case KIFSwipeDirectionDown: - directionDescription = @"down"; - break; - } - - NSString *description = [NSString stringWithFormat:@"Step to swipe %@ on view with accessibility label %@", directionDescription, label]; - return [KIFTestStep stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - UIAccessibilityElement *element = [self _accessibilityElementWithLabel:label accessibilityValue:nil tappable:NO traits:UIAccessibilityTraitNone error:error]; - if (!element) { - return KIFTestStepResultWait; - } - - UIView *viewToSwipe = [UIAccessibilityElement viewContainingAccessibilityElement:element]; - KIFTestWaitCondition(viewToSwipe, error, @"Cannot find view with accessibility label \"%@\"", label); - - // Within this method, all geometry is done in the coordinate system of - // the view to swipe. - - CGRect elementFrame = [viewToSwipe.window convertRect:element.accessibilityFrame toView:viewToSwipe]; - CGPoint swipeStart = CGPointCenteredInRect(elementFrame); - - KIFDisplacement swipeDisplacement = [self _displacementForSwipingInDirection:direction]; - - CGPoint swipePath[NUM_POINTS_IN_SWIPE_PATH]; - - for (int pointIndex = 0; pointIndex < NUM_POINTS_IN_SWIPE_PATH; pointIndex++) - { - CGFloat swipeProgress = ((CGFloat)pointIndex)/(NUM_POINTS_IN_SWIPE_PATH - 1); - swipePath[pointIndex] = CGPointMake(swipeStart.x + (swipeProgress * swipeDisplacement.x), - swipeStart.y + (swipeProgress * swipeDisplacement.y)); - } - - [viewToSwipe dragAlongPathWithPoints:swipePath count:NUM_POINTS_IN_SWIPE_PATH]; - - return KIFTestStepResultSuccess; - }]; -} - -#pragma mark Step Collections - -+ (NSArray *)stepsToChoosePhotoInAlbum:(NSString *)albumName atRow:(NSInteger)row column:(NSInteger)column; -{ - NSMutableArray *steps = [NSMutableArray array]; - [steps addObject:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"Choose Photo"]]; - - // This is basically the same as the step to tap with an accessibility label except that the accessibility labels for the albums have the number of photos appended to the end, such as "My Photos (3)." This means that we have to do a prefix match rather than an exact match. - NSString *description = [NSString stringWithFormat:@"Select the \"%@\" photo album", albumName]; - [steps addObject:[KIFTestStep stepWithDescription:description executionBlock:^(KIFTestStep *step, NSError **error) { - - NSString *labelPrefix = [NSString stringWithFormat:@"%@, (", albumName]; - UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementMatchingBlock:^(UIAccessibilityElement *element) { - return [element.accessibilityLabel hasPrefix:labelPrefix]; - }]; - - KIFTestWaitCondition(element, error, @"Failed to find photo album with name %@", albumName); - - UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; - KIFTestWaitCondition(view, error, @"Failed to find view for photo album with name %@", albumName); - - if (![self _isUserInteractionEnabledForView:view]) { - if (error) { - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"Album picker is not enabled for interaction"], NSLocalizedDescriptionKey, nil]] autorelease]; - } - return KIFTestStepResultWait; - } - - CGRect elementFrame = [view.window convertRect:element.accessibilityFrame toView:view]; - CGPoint tappablePointInElement = [view tappablePointInRect:elementFrame]; - - [view tapAtPoint:tappablePointInElement]; - - return KIFTestStepResultSuccess; - }]]; - - [steps addObject:[KIFTestStep stepToWaitForTimeInterval:0.5 description:@"Wait for media picker view controller to be pushed."]]; - - // Tap the desired photo in the grid - // TODO: This currently only works for the first page of photos. It should scroll appropriately at some point. - const CGFloat headerHeight = 64.0; - const CGSize thumbnailSize = CGSizeMake(75.0, 75.0); - const CGFloat thumbnailMargin = 5.0; - CGPoint thumbnailCenter; - thumbnailCenter.x = thumbnailMargin + (MAX(0, column - 1) * (thumbnailSize.width + thumbnailMargin)) + thumbnailSize.width / 2.0; - thumbnailCenter.y = headerHeight + thumbnailMargin + (MAX(0, row - 1) * (thumbnailSize.height + thumbnailMargin)) + thumbnailSize.height / 2.0; - [steps addObject:[KIFTestStep stepToTapScreenAtPoint:thumbnailCenter]]; - - // Dismiss the resize UI - [steps addObject:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"Choose"]]; - - return steps; -} - -#pragma mark Initialization - -- (id)init; -{ - self = [super init]; - if (!self) { - return nil; - } - - self.timeout = [[self class] defaultTimeout]; - - return self; -} - -- (void)dealloc; -{ - [executionBlock release]; - executionBlock = nil; - [description release]; - description = nil; - [notificationName release]; - notificationName = nil; - [notificationObject release]; - notificationObject = nil; - [childStep release]; - childStep = nil; - - [super dealloc]; -} - -#pragma mark Public Methods - -- (KIFTestStepResult)executeAndReturnError:(NSError **)error; -{ - KIFTestStepResult result = KIFTestStepResultFailure; - - if (self.executionBlock) { - @try { - result = self.executionBlock(self, error); - } - @catch (id exception) { - // We need to catch exceptions and things like NSInternalInconsistencyException, which is actually an NSString - KIFTestCondition(NO, error, @"Step threw exception: %@", exception); - } - } - - return result; -} - -- (void)cleanUp; -{ - if (notificationName || notificationObject) { - [[NSNotificationCenter defaultCenter] removeObserver:self name:notificationName object:notificationObject]; - } -} - -#pragma mark Private Methods - -- (void)_onObservedNotification:(NSNotification *)notification; -{ - self.notificationOccurred = YES; -} - -+ (BOOL)_isUserInteractionEnabledForView:(UIView *)view; -{ - BOOL isUserInteractionEnabled = view.userInteractionEnabled; - - // Navigation item views don't have user interaction enabled, but their parent nav bar does and will forward the event - if (!isUserInteractionEnabled && [view isKindOfClass:NSClassFromString(@"UINavigationItemView")]) { - // If this view is inside a nav bar, and the nav bar is enabled, then consider it enabled - UIView *navBar = [view superview]; - while (navBar && ![navBar isKindOfClass:[UINavigationBar class]]) { - navBar = [navBar superview]; - } - if (navBar && navBar.userInteractionEnabled) { - isUserInteractionEnabled = YES; - } - } - - // UIActionsheet Buttons have UIButtonLabels with userInteractionEnabled=NO inside, - // grab the superview UINavigationButton instead. - if (!isUserInteractionEnabled && [view isKindOfClass:NSClassFromString(@"UIButtonLabel")]) { - UIView *button = [view superview]; - while (button && ![button isKindOfClass:NSClassFromString(@"UINavigationButton")]) { - button = [button superview]; - } - if (button && button.userInteractionEnabled) { - isUserInteractionEnabled = YES; - } - } - - return isUserInteractionEnabled; -} - -+ (NSString *)_representedKeyboardStringForCharacter:(NSString *)characterString; -{ - // Interpret control characters appropriately - if ([characterString isEqual:@"\b"]) { - characterString = @"Delete"; - } - - return characterString; -} - -+ (BOOL)_enterCharacter:(NSString *)characterString; -{ - return [self _enterCharacter:characterString history:[NSMutableDictionary dictionary]]; -} - -+ (BOOL)_enterCharacter:(NSString *)characterString history:(NSMutableDictionary *)history; -{ - const NSTimeInterval keystrokeDelay = 0.05f; - - // Each key on the keyboard does not have its own view, so we have to ask for the list of keys, - // find the appropriate one, and tap inside the frame of that key on the main keyboard view. - if (!characterString.length) { - return YES; - } - - UIWindow *keyboardWindow = [[UIApplication sharedApplication] keyboardWindow]; - UIView *keyboardView = [[keyboardWindow subviewsWithClassNamePrefix:@"UIKBKeyplaneView"] lastObject]; - - // If we didn't find the standard keyboard view, then we may have a custom keyboard - if (!keyboardView) { - return [self _enterCustomKeyboardCharacter:characterString]; - } - id /*UIKBKeyplane*/ keyplane = [keyboardView valueForKey:@"keyplane"]; - BOOL isShiftKeyplane = [[keyplane valueForKey:@"isShiftKeyplane"] boolValue]; - - NSMutableArray *unvisitedForKeyplane = [history objectForKey:[NSValue valueWithNonretainedObject:keyplane]]; - if (!unvisitedForKeyplane) { - unvisitedForKeyplane = [NSMutableArray arrayWithObjects:@"More", @"International", nil]; - if (!isShiftKeyplane) { - [unvisitedForKeyplane insertObject:@"Shift" atIndex:0]; - } - [history setObject:unvisitedForKeyplane forKey:[NSValue valueWithNonretainedObject:keyplane]]; - } - - NSArray *keys = [keyplane valueForKey:@"keys"]; - - // Interpret control characters appropriately - characterString = [self _representedKeyboardStringForCharacter:characterString]; - - id keyToTap = nil; - id modifierKey = nil; - NSString *selectedModifierRepresentedString = nil; - - while (YES) { - for (id/*UIKBKey*/ key in keys) { - NSString *representedString = [key valueForKey:@"representedString"]; - - // Find the key based on the key's represented string - if ([representedString isEqual:characterString]) { - keyToTap = key; - } - - if (!modifierKey && unvisitedForKeyplane.count && [[unvisitedForKeyplane objectAtIndex:0] isEqual:representedString]) { - modifierKey = key; - selectedModifierRepresentedString = representedString; - [unvisitedForKeyplane removeObjectAtIndex:0]; - } - } - - if (keyToTap) { - break; - } - - if (modifierKey) { - break; - } - - if (!unvisitedForKeyplane.count) { - return NO; - } - - // If we didn't find the key or the modifier, then this modifier must not exist on this keyboard. Remove it. - [unvisitedForKeyplane removeObjectAtIndex:0]; - } - - if (keyToTap) { - [keyboardView tapAtPoint:CGPointCenteredInRect([keyToTap frame])]; - CFRunLoopRunInMode(kCFRunLoopDefaultMode, keystrokeDelay, false); - - return YES; - } - - // We didn't find anything, so try the symbols pane - if (modifierKey) { - [keyboardView tapAtPoint:CGPointCenteredInRect([modifierKey frame])]; - CFRunLoopRunInMode(kCFRunLoopDefaultMode, keystrokeDelay, false); - - // If we're back at a place we've been before, and we still have things to explore in the previous - id /*UIKBKeyplane*/ newKeyplane = [keyboardView valueForKey:@"keyplane"]; - id /*UIKBKeyplane*/ previousKeyplane = [history valueForKey:@"previousKeyplane"]; - - if (newKeyplane == previousKeyplane) { - // Come back to the keyplane that we just tested so that we can try the other modifiers - NSMutableArray *previousKeyplaneHistory = [history objectForKey:[NSValue valueWithNonretainedObject:newKeyplane]]; - [previousKeyplaneHistory insertObject:[history valueForKey:@"lastModifierRepresentedString"] atIndex:0]; - } else { - [history setValue:keyplane forKey:@"previousKeyplane"]; - [history setValue:selectedModifierRepresentedString forKey:@"lastModifierRepresentedString"]; - } - - return [self _enterCharacter:characterString history:history]; - } - - return NO; -} - -+ (BOOL)_enterCustomKeyboardCharacter:(NSString *)characterString; -{ - const NSTimeInterval keystrokeDelay = 0.05f; - - if (!characterString.length) { - return YES; - } - - characterString = [self _representedKeyboardStringForCharacter:characterString]; - - // For custom keyboards, use the classic methods of looking up views based on accessibility labels - UIWindow *keyboardWindow = [[UIApplication sharedApplication] keyboardWindow]; - - UIAccessibilityElement *element = [keyboardWindow accessibilityElementWithLabel:characterString]; - if (!element) { - return NO; - } - - UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; - CGRect keyFrame = [view.window convertRect:[element accessibilityFrame] toView:view]; - [view tapAtPoint:CGPointCenteredInRect(keyFrame)]; - CFRunLoopRunInMode(kCFRunLoopDefaultMode, keystrokeDelay, false); - - return YES; -} - -+ (UIAccessibilityElement *)_accessibilityElementWithLabel:(NSString *)label accessibilityValue:(NSString *)value tappable:(BOOL)mustBeTappable traits:(UIAccessibilityTraits)traits error:(out NSError **)error; -{ - UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:value traits:traits]; - if (!element) { - if (error) { - // For purposes of a better error message, see if we can find the view, just not a view with the specified value. - if (value && [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:nil traits:traits]) { - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"Found an accessibility element with the label \"%@\", but not with the value \"%@\"", label, value], NSLocalizedDescriptionKey, nil]] autorelease]; - - // Check the traits, too. - } else if (traits != UIAccessibilityTraitNone && [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:nil traits:UIAccessibilityTraitNone]) { - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"Found an accessibility element with the label \"%@\", but not with the traits \"%d\"", label, traits], NSLocalizedDescriptionKey, nil]] autorelease]; - - } else { - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"Failed to find accessibility element with the label \"%@\"", label], NSLocalizedDescriptionKey, nil]] autorelease]; - } - } - return nil; - } - - // Make sure the element is visible - UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; - if (!view) { - if (error) { - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat: @"Cannot find view containing accessibility element with the label \"%@\"", label], NSLocalizedDescriptionKey, nil]] autorelease]; - } - return nil; - } - - // Scroll the view to be visible if necessary - UIScrollView *scrollView = (UIScrollView *)view; - while (scrollView && ![scrollView isKindOfClass:[UIScrollView class]]) { - scrollView = (UIScrollView *)scrollView.superview; - } - if (scrollView) { - if ((UIAccessibilityElement *)view == element) { - [scrollView scrollViewToVisible:view animated:YES]; - } else { - CGRect elementFrame = [view.window convertRect:element.accessibilityFrame toView:scrollView]; - [scrollView setContentOffset:CGPointMake(0, elementFrame.origin.y) animated:YES]; - } - - // Give the scroll view a small amount of time to perform the scroll. - CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.3, false); - } - - if ([[UIApplication sharedApplication] isIgnoringInteractionEvents]) { - if (error) { - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"Application is ignoring interaction events", NSLocalizedDescriptionKey, nil]] autorelease]; - } - return nil; - } - - // There are some issues with the tappability check in UIWebViews, so if the view is a UIWebView we will just skip the check. - if ([NSStringFromClass([view class]) isEqualToString:@"UIWebBrowserView"]) { - return element; - } - - if (mustBeTappable) { - // Make sure the view is tappable - if (![view isTappable]) { - if (error) { - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"Accessibility element with label \"%@\" is not tappable. It may be blocked by other views.", label], NSLocalizedDescriptionKey, nil]] autorelease]; - } - return nil; - } - } else { - // If we don't require tappability, at least make sure it's not hidden - if ([view isHidden]) { - if (error) { - *error = [[[NSError alloc] initWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"Accessibility element with label \"%@\" is hidden.", label], NSLocalizedDescriptionKey, nil]] autorelease]; - } - return nil; - } - } - - return element; -} - -#define MAJOR_SWIPE_DISPLACEMENT 200 -#define MINOR_SWIPE_DISPLACEMENT 5 - -+ (KIFDisplacement)_displacementForSwipingInDirection:(KIFSwipeDirection)direction -{ - switch (direction) - { - // As discovered on the Frank mailing lists, it won't register as a - // swipe if you move purely horizontally or vertically, so need a - // slight orthogonal offset too. - case KIFSwipeDirectionRight: - return CGPointMake(MAJOR_SWIPE_DISPLACEMENT, MINOR_SWIPE_DISPLACEMENT); - break; - case KIFSwipeDirectionLeft: - return CGPointMake(-MAJOR_SWIPE_DISPLACEMENT, MINOR_SWIPE_DISPLACEMENT); - break; - case KIFSwipeDirectionUp: - return CGPointMake(MINOR_SWIPE_DISPLACEMENT, -MAJOR_SWIPE_DISPLACEMENT); - break; - case KIFSwipeDirectionDown: - return CGPointMake(MINOR_SWIPE_DISPLACEMENT, MAJOR_SWIPE_DISPLACEMENT); - break; - default: - return CGPointZero; - } -} - -@end diff --git a/Pods/KIF/Classes/KIFTestStepValidation.h b/Pods/KIF/Classes/KIFTestStepValidation.h new file mode 100644 index 0000000..9dffa1d --- /dev/null +++ b/Pods/KIF/Classes/KIFTestStepValidation.h @@ -0,0 +1,47 @@ +// +// KIFTestStepValidation.h +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import +#import "KIFTestCase.h" + +#define KIFExpectFailure(stmt) \ +{\ + _MockKIFTestActorDelegate *mockDelegate = [_MockKIFTestActorDelegate mockDelegate];\ + {\ + _MockKIFTestActorDelegate *self = mockDelegate;\ + @try { stmt; }\ + @catch (NSException *exception) { }\ + }\ + if (!mockDelegate.failed) {\ + STFail(@"%s should have failed.", #stmt);\ + }\ +} + +#define KIFExpectFailureWithCount(stmt, cnt) \ +{\ + _MockKIFTestActorDelegate *mockDelegate = [_MockKIFTestActorDelegate mockDelegate];\ + {\ + _MockKIFTestActorDelegate *self = mockDelegate;\ + @try { stmt; }\ + @catch (NSException *exception) { }\ + }\ + if (!mockDelegate.failed) {\ + STFail(@"%s should have failed.", #stmt);\ + }\ + STAssertEquals((NSUInteger)cnt, mockDelegate.exceptions.count, @"Expected a different number of exceptions.");\ +} + + +@interface _MockKIFTestActorDelegate : NSObject +@property (nonatomic, assign) BOOL failed; +@property (nonatomic, retain) NSArray *exceptions; +@property (nonatomic, assign) BOOL stopped; + ++ (instancetype)mockDelegate; + +@end diff --git a/Pods/KIF/Classes/KIFTestStepValidation.m b/Pods/KIF/Classes/KIFTestStepValidation.m new file mode 100644 index 0000000..53a89fd --- /dev/null +++ b/Pods/KIF/Classes/KIFTestStepValidation.m @@ -0,0 +1,39 @@ +// +// KIFTestStepValidation.m +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import "KIFTestStepValidation.h" + +@implementation _MockKIFTestActorDelegate + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop +{ + [self failWithExceptions:@[exception] stopTest:stop]; +} + +- (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop +{ + self.failed = YES; + self.exceptions = exceptions; + self.stopped = stop; + if (stop) { + [[exceptions objectAtIndex:0] raise]; + } +} + ++ (instancetype)mockDelegate +{ + return [[[self alloc] init] autorelease]; +} + +- (void)dealloc +{ + [_exceptions release]; + [super dealloc]; +} + +@end diff --git a/Pods/KIF/Classes/KIFTypist.h b/Pods/KIF/Classes/KIFTypist.h new file mode 100644 index 0000000..8cbee86 --- /dev/null +++ b/Pods/KIF/Classes/KIFTypist.h @@ -0,0 +1,15 @@ +// +// KIFTypist.h +// KIF +// +// Created by Pete Hodgson on 8/12/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + + +@interface KIFTypist : NSObject + ++ (BOOL)enterCharacter:(NSString *)characterString; + +@end diff --git a/Pods/KIF/Classes/KIFTypist.m b/Pods/KIF/Classes/KIFTypist.m new file mode 100644 index 0000000..565a548 --- /dev/null +++ b/Pods/KIF/Classes/KIFTypist.m @@ -0,0 +1,169 @@ +// +// KIFTypist.m +// KIF +// +// Created by Pete Hodgson on 8/12/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTypist.h" +#import "UIApplication-KIFAdditions.h" +#import "UIView-KIFAdditions.h" +#import "CGGeometry-KIFAdditions.h" +#import "UIAccessibilityElement-KIFAdditions.h" + +@interface KIFTypist() ++ (NSString *)_representedKeyboardStringForCharacter:(NSString *)characterString; ++ (BOOL)_enterCharacter:(NSString *)characterString history:(NSMutableDictionary *)history; ++ (BOOL)_enterCustomKeyboardCharacter:(NSString *)characterString; +@end + +@implementation KIFTypist + ++ (NSString *)_representedKeyboardStringForCharacter:(NSString *)characterString; +{ + // Interpret control characters appropriately + if ([characterString isEqual:@"\b"]) { + characterString = @"Delete"; + } + + return characterString; +} + ++ (BOOL)enterCharacter:(NSString *)characterString; +{ + return [self _enterCharacter:characterString history:[NSMutableDictionary dictionary]]; +} + ++ (BOOL)_enterCharacter:(NSString *)characterString history:(NSMutableDictionary *)history; +{ + const NSTimeInterval keystrokeDelay = 0.05f; + + // Each key on the keyboard does not have its own view, so we have to ask for the list of keys, + // find the appropriate one, and tap inside the frame of that key on the main keyboard view. + if (!characterString.length) { + return YES; + } + + UIWindow *keyboardWindow = [[UIApplication sharedApplication] keyboardWindow]; + UIView *keyboardView = [[keyboardWindow subviewsWithClassNamePrefix:@"UIKBKeyplaneView"] lastObject]; + + // If we didn't find the standard keyboard view, then we may have a custom keyboard + if (!keyboardView) { + return [self _enterCustomKeyboardCharacter:characterString]; + } + id /*UIKBKeyplane*/ keyplane = [keyboardView valueForKey:@"keyplane"]; + BOOL isShiftKeyplane = [[keyplane valueForKey:@"isShiftKeyplane"] boolValue]; + + NSValue *keyplaneValue = [NSValue valueWithNonretainedObject:keyplane]; + + NSMutableArray *unvisitedForKeyplane = [history objectForKey:keyplaneValue]; + if (!unvisitedForKeyplane) { + unvisitedForKeyplane = [NSMutableArray arrayWithObjects:@"More", @"International", nil]; + if (!isShiftKeyplane) { + [unvisitedForKeyplane insertObject:@"Shift" atIndex:0]; + } + [history setObject:unvisitedForKeyplane forKey:keyplaneValue]; + } + + NSArray *keys = [keyplane valueForKey:@"keys"]; + + // Interpret control characters appropriately + characterString = [self _representedKeyboardStringForCharacter:characterString]; + + id keyToTap = nil; + id modifierKey = nil; + NSString *selectedModifierRepresentedString = nil; + + while (YES) { + for (id/*UIKBKey*/ key in keys) { + NSString *representedString = [key valueForKey:@"representedString"]; + + // Find the key based on the key's represented string + if ([representedString isEqual:characterString]) { + keyToTap = key; + } + + if (!modifierKey && unvisitedForKeyplane.count && [[unvisitedForKeyplane objectAtIndex:0] isEqual:representedString]) { + modifierKey = key; + selectedModifierRepresentedString = representedString; + [unvisitedForKeyplane removeObjectAtIndex:0]; + } + } + + if (keyToTap) { + break; + } + + if (modifierKey) { + break; + } + + if (!unvisitedForKeyplane.count) { + return NO; + } + + // If we didn't find the key or the modifier, then this modifier must not exist on this keyboard. Remove it. + [unvisitedForKeyplane removeObjectAtIndex:0]; + } + + if (keyToTap) { + [keyboardView tapAtPoint:CGPointCenteredInRect([keyToTap frame])]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, keystrokeDelay, false); + + return YES; + } + + // We didn't find anything, so try the symbols pane + if (modifierKey) { + [keyboardView tapAtPoint:CGPointCenteredInRect([modifierKey frame])]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, keystrokeDelay, false); + + // If we're back at a place we've been before, and we still have things to explore in the previous + id /*UIKBKeyplane*/ newKeyplane = [keyboardView valueForKey:@"keyplane"]; + id /*UIKBKeyplane*/ previousKeyplane = [history valueForKey:@"previousKeyplane"]; + + if (newKeyplane == previousKeyplane) { + // Come back to the keyplane that we just tested so that we can try the other modifiers + NSValue *keyplaneValue = [NSValue valueWithNonretainedObject:newKeyplane]; + NSMutableArray *previousKeyplaneHistory = [history objectForKey:keyplaneValue]; + [previousKeyplaneHistory insertObject:[history valueForKey:@"lastModifierRepresentedString"] atIndex:0]; + } else { + [history setValue:keyplane forKey:@"previousKeyplane"]; + [history setValue:selectedModifierRepresentedString forKey:@"lastModifierRepresentedString"]; + } + + return [self _enterCharacter:characterString history:history]; + } + + return NO; +} + ++ (BOOL)_enterCustomKeyboardCharacter:(NSString *)characterString; +{ + const NSTimeInterval keystrokeDelay = 0.05f; + + if (!characterString.length) { + return YES; + } + + characterString = [self _representedKeyboardStringForCharacter:characterString]; + + // For custom keyboards, use the classic methods of looking up views based on accessibility labels + UIWindow *keyboardWindow = [[UIApplication sharedApplication] keyboardWindow]; + + UIAccessibilityElement *element = [keyboardWindow accessibilityElementWithLabel:characterString]; + if (!element) { + return NO; + } + + UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + CGRect keyFrame = [view.window convertRect:[element accessibilityFrame] toView:view]; + [view tapAtPoint:CGPointCenteredInRect(keyFrame)]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, keystrokeDelay, false); + + return YES; +} + +@end diff --git a/Pods/KIF/Classes/KIFUITestActor.h b/Pods/KIF/Classes/KIFUITestActor.h new file mode 100644 index 0000000..6ad5460 --- /dev/null +++ b/Pods/KIF/Classes/KIFUITestActor.h @@ -0,0 +1,325 @@ +// +// KIFTester+UI.h +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTestActor.h" +#import +#import "UIView-KIFAdditions.h" + +#define tester KIFActorWithClass(KIFUITestActor) + +/*! + @enum KIFSwipeDirection + @abstract Directions in which to swipe. + @constant KIFSwipeDirectionRight Swipe to the right. + @constant KIFSwipeDirectionLeft Swipe to the left. + @constant KIFSwipeDirectionUp Swipe up. + @constant KIFSwipeDirectionDown Swipe down. + */ +typedef NS_ENUM(NSUInteger, KIFSwipeDirection) { + KIFSwipeDirectionRight, + KIFSwipeDirectionLeft, + KIFSwipeDirectionUp, + KIFSwipeDirectionDown +}; + +#define kKIFMajorSwipeDisplacement 200 +#define kKIFMinorSwipeDisplacement 5 + +static inline KIFDisplacement KIFDisplacementForSwipingInDirection(KIFSwipeDirection direction) +{ + switch (direction) + { + // As discovered on the Frank mailing lists, it won't register as a + // swipe if you move purely horizontally or vertically, so need a + // slight orthogonal offset too. + case KIFSwipeDirectionRight: + return CGPointMake(kKIFMajorSwipeDisplacement, kKIFMinorSwipeDisplacement); + case KIFSwipeDirectionLeft: + return CGPointMake(-kKIFMajorSwipeDisplacement, kKIFMinorSwipeDisplacement); + case KIFSwipeDirectionUp: + return CGPointMake(kKIFMinorSwipeDisplacement, -kKIFMajorSwipeDisplacement); + case KIFSwipeDirectionDown: + return CGPointMake(kKIFMinorSwipeDisplacement, kKIFMajorSwipeDisplacement); + } +} + +@interface KIFUITestActor : KIFTestActor + +/*! + @abstract Waits until a view or accessibility element is present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found, then the step will attempt to wait until it is. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + + If the view you want to wait for is tappable, use the -waitForTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. + @param label The accessibility label of the element to wait for. + */ +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Waits until a view or accessibility element is present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found, then the step will attempt to wait until it is. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + + If the view you want to wait for is tappable, use the -waitForTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. + @param label The accessibility label of the element to wait for. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + + +/*! + @abstract Waits until a view or accessibility element is present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found, then the step will attempt to wait until it is. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + + If the view you want to wait for is tappable, use the -waitForTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + @result A configured test step. + */ +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Waits until a view or accessibility element is no longer present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element is found, then the step will attempt to wait until it isn't. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are considered absent. + @param label The accessibility label of the element to wait for. + */ +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Waits until a view or accessibility element is no longer present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element is found, then the step will attempt to wait until it isn't. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are considered absent. + @param label The accessibility label of the element to wait for. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Waits until a view or accessibility element is no longer present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element is found, then the step will attempt to wait until it isn't. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are considered absent. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Waits until a view or accessibility element is present and available for tapping. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Whether or not a view is tappable is based on -[UIView hitTest:]. + @param label The accessibility label of the element to wait for. + */ +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Waits until a view or accessibility element is present and available for tapping. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Whether or not a view is tappable is based on -[UIView hitTest:]. + @param label The accessibility label of the element to wait for. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Waits until a view or accessibility element is present and available for tapping. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Whether or not a view is tappable is based on -[UIView hitTest:]. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; + + +/* + @abstract Waits for an accessibility element and its containing view based on a variety of criteria. + @discussion This method provides a more verbose API for achieving what is available in the waitForView/waitForTappableView family of methods, exposing both the found element and its containing view. + @param element To be populated with the matching accessibility element when found. Can be NULL. + @param view To be populated with the matching view when found. Can be NULL. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + @param mustBeTappable If YES, only an element that can be tapped on will be returned. + */ +- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable; + +/*! + @abstract Taps a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element. + @param label The accessibility label of the element to tap. + */ +- (void)tapViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Taps a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element. + @param label The accessibility label of the element to tap. + @param traits The accessibility traits of the element to tap. Elements that do not include at least these traits are ignored. + */ +- (void)tapViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Taps a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element. + + This variation allows finding a particular instance of an accessibility element. For example, a table view might have multiple elements with the accessibility label of "Employee", but only one that also has the accessibility value of "Bob". + @param label The accessibility label of the element to tap. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to tap. Elements that do not include at least these traits are ignored. + */ +- (void)tapViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Taps a particular view in the view heirarchy. + @discussion Unlike the -tapViewWithAccessibilityLabel: family of methods, this method allows you to tap an arbitrary element. Combined with -waitForAccessibilityElement:view:withLabel:value:traits:tappable: or +[UIAccessibilityElement accessibilityElement:view:withLabel:value:traits:tappable:error:] this provides an opportunity for more complex logic. + @param element The accessibility element to tap. + @param view The view containing the accessibility element. + */ +- (void)tapAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)view; + +/*! + @abstract Taps the screen at a particular point. + @discussion Taps the screen at a specific point. In general you should use the factory steps that tap a view based on its accessibility label, but there are situations where it's not possible to access a view using accessibility mechanisms. This step is more lenient than the steps that use the accessibility label, and does not wait for any particular view to appear, or validate that the tapped view is enabled or has interaction enabled. Because this step doesn't doesn't validate that a view is present before tapping it, it's good practice to precede this step where possible with a -waitForViewWithAccessibilityLabel: with the label for another view that should appear on the same screen. + + @param screenPoint The point in screen coordinates to tap. Screen points originate from the top left of the screen. + */ +- (void)tapScreenAtPoint:(CGPoint)screenPoint; + +/*! + @abstract Performs a long press on a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, touch events are simulated in the center of the view or element. + @param label The accessibility label of the element to tap. + @param duration The length of time to long press the element. + */ +- (void)longPressViewWithAccessibilityLabel:(NSString *)label duration:(NSTimeInterval)duration; + +/*! + @abstract Performs a long press on a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, touch events are simulated in the center of the view or element. + + This variation allows finding a particular instance of an accessibility element. For example, a table view might have multiple elements with the accessibility label of "Employee", but only one that also has the accessibility value of "Bob". + @param label The accessibility label of the element to tap. + @param value The accessibility value of the element to tap. + @param duration The length of time to long press the element. + */ +- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value duration:(NSTimeInterval)duration; + +/*! + @abstract Performs a long press on a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, touch events are simulated in the center of the view or element. + + This variation allows finding a particular instance of an accessibility element. For example, a table view might have multiple elements with the accessibility label of "Employee", but only one that also has the accessibility value of "Bob". + @param label The accessibility label of the element to tap. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to tap. Elements that do not include at least these traits are ignored. + @param duration The length of time to long press the element. + */ +- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits duration:(NSTimeInterval)duration; + +/*! + @abstract Enters text into a the current first responder. + @discussion Text is entered into the view by simulating taps on the appropriate keyboard keys if the keyboard is already displayed. Useful to enter text in UIWebViews or components with no accessibility labels. + @param text The text to enter. + */ +- (void)enterTextIntoCurrentFirstResponder:(NSString *)text; + +/*! + @abstract Enters text into a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element, then text is entered into the view by simulating taps on the appropriate keyboard keys. + @param text The text to enter. + @param label The accessibility label of the element to type into. + */ +- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Enters text into a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element, then text is entered into the view by simulating taps on the appropriate keyboard keys. + @param text The text to enter. + @param label The accessibility label of the element to type into. + @param traits The accessibility traits of the element to type into. Elements that do not include at least these traits are ignored. + @param expectedResult What the text value should be after entry, including any formatting done by the field. If this is nil, the "text" parameter will be used. + */ +- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult; + +- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label; +- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label; +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult; + +/*! + @abstract ASelects an item from a currently visible picker view. + @discussion With a picker view already visible, this step will find an item with the given title, select that item, and tap the Done button. + @param title The title of the row to select. + */ +- (void)selectPickerViewRowWithTitle:(NSString *)title; + +/*! + @abstract Toggles a UISwitch into a specified position. + @discussion The UISwitch with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present, the step will return if it's already in the desired position. If the switch is tappable but not in the desired position, a tap event is simulated in the center of the view or element, toggling the switch into the desired position. + @param switchIsOn The desired position of the UISwitch. + @param label The accessibility label of the element to switch. + */ +- (void)setOn:(BOOL)switchIsOn forSwitchWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Slides a UISlider to a specified value. + @discussion The UISlider with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present, the step will attempt to drag the slider to the new value. The step will fail if it finds a view with the given accessibility label that is not a UISlider or if value is outside of the possible values. Because this step simulates drag events, the value reached may not be the exact value requested and the app may ignore the touch events if the movement is less than the drag gesture recognizer's minimum distance. + @param value The desired value of the UISlider. + @param label The accessibility label of the element to drag. + */ +- (void)setValue:(float)value forSliderWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Dismisses a popover on screen. + @discussion With a popover up, tap at the top-left corner of the screen. + */ +- (void)dismissPopover; + +/*! + @abstract Select a certain photo from the built in photo picker. + @discussion This set of steps expects that the photo picker has been initiated and that the sheet is up. From there it will tap the "Choose Photo" button and select the desired photo. + @param albumName The name of the album to select the photo from. + @param row The row number in the album for the desired photo. + @param column The column number in the album for the desired photo. + */ +- (void)choosePhotoInAlbum:(NSString *)albumName atRow:(NSInteger)row column:(NSInteger)column; + +/*! + @abstract Taps the row at IndexPath in a view with the given label. + @discussion This step will get the view with the specified accessibility label and tap the row at indexPath. + + For cases where you may need to work from the end of a table view rather than the beginning, negative sections count back from the end of the table view (-1 is the last section) and negative rows count back from the end of the section (-1 is the last row for that section). + @param tableViewLabel Accessibility label of the table view. + @param indexPath Index path of the row to tap. + */ +- (void)tapRowInTableViewWithAccessibilityLabel:(NSString*)tableViewLabel atIndexPath:(NSIndexPath *)indexPath; + +/*! + @abstract Swipes a particular view in the view hierarchy in the given direction. + @discussion The view will get the view with the specified accessibility label and swipe the screen in the given direction from the view's center. + @param label The accessibility label of the view to swipe. + @param direction The direction in which to swipe. + */ +- (void)swipeViewWithAccessibilityLabel:(NSString *)label inDirection:(KIFSwipeDirection)direction; + +/*! + @abstract Scrolls a particular view in the view hierarchy by an amount indicated as a fraction of its size. + @discussion The view will get the view with the specified accessibility label and scroll it by the indicated fraction of its size, with the scroll centered on the center of the view. + @param label The accessibility label of the view to scroll. + @param horizontalFraction The horizontal displacement of the scroll action, as a fraction of the width of the view. + @param verticalFraction The vertical displacement of the scroll action, as a fraction of the height of the view. + */ +- (void)scrollViewWithAccessibilityLabel:(NSString *)label byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction; + +/*! + @abstract Waits until a view or accessibility element is the first responder. + @discussion The first responder is found by searching the view hierarchy of the application's + main window and its accessibility label is compared to the given value. If they match, the + step returns success else it will attempt to wait until they do. + @param label The accessibility label of the element to wait for. + */ +- (void)waitForFirstResponderWithAccessibilityLabel:(NSString *)label; + +@end diff --git a/Pods/KIF/Classes/KIFUITestActor.m b/Pods/KIF/Classes/KIFUITestActor.m new file mode 100644 index 0000000..ca45166 --- /dev/null +++ b/Pods/KIF/Classes/KIFUITestActor.m @@ -0,0 +1,583 @@ +// +// KIFTester+UI.m +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFUITestActor.h" +#import "UIApplication-KIFAdditions.h" +#import "UIWindow-KIFAdditions.h" +#import "UIAccessibilityElement-KIFAdditions.h" +#import "UIView-KIFAdditions.h" +#import "CGGeometry-KIFAdditions.h" +#import "NSError-KIFAdditions.h" +#import "KIFTypist.h" + +@implementation KIFUITestActor + +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label +{ + return [self waitForViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone tappable:NO]; +} + +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + return [self waitForViewWithAccessibilityLabel:label value:nil traits:traits tappable:NO]; +} + +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits +{ + return [self waitForViewWithAccessibilityLabel:label value:value traits:traits tappable:NO]; +} + +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label +{ + return [self waitForViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone tappable:YES]; +} + +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + return [self waitForViewWithAccessibilityLabel:label value:nil traits:traits tappable:YES]; +} + +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits +{ + return [self waitForViewWithAccessibilityLabel:label value:value traits:traits tappable:YES]; +} + +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable +{ + UIView *view = nil; + [self waitForAccessibilityElement:NULL view:&view withLabel:label value:value traits:traits tappable:mustBeTappable]; + return view; +} + +- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable +{ + + [self runBlock:^KIFTestStepResult(NSError **error) { + return [UIAccessibilityElement accessibilityElement:element view:view withLabel:label value:value traits:traits tappable:mustBeTappable error:error] ? KIFTestStepResultSuccess : KIFTestStepResultWait; + }]; +} + +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label +{ + [self waitForAbsenceOfViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone]; +} + +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + [self waitForAbsenceOfViewWithAccessibilityLabel:label value:nil traits:traits]; +} + +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + // If the app is ignoring interaction events, then wait before doing our analysis + KIFTestWaitCondition(![[UIApplication sharedApplication] isIgnoringInteractionEvents], error, @"Application is ignoring interaction events."); + + // If the element can't be found, then we're done + UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:value traits:traits]; + if (!element) { + return KIFTestStepResultSuccess; + } + + UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + + // If we found an element, but it's not associated with a view, then something's wrong. Wait it out and try again. + KIFTestWaitCondition(view, error, @"Cannot find view containing accessibility element with the label \"%@\"", label); + + // Hidden views count as absent + KIFTestWaitCondition([view isHidden], error, @"Accessibility element with label \"%@\" is visible and not hidden.", label); + + return KIFTestStepResultSuccess; + }]; +} + +- (void)tapViewWithAccessibilityLabel:(NSString *)label +{ + [self tapViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone]; +} + +- (void)tapViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + [self tapViewWithAccessibilityLabel:label value:nil traits:traits]; +} + +- (void)tapViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:value traits:traits tappable:YES]; + [self tapAccessibilityElement:element inView:view]; +} + +- (void)tapAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)view +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + + KIFTestWaitCondition(view.isUserInteractionActuallyEnabled, error, @"View is not enabled for interaction"); + + // If the accessibilityFrame is not set, fallback to the view frame. + CGRect elementFrame; + if (CGRectEqualToRect(CGRectZero, element.accessibilityFrame)) { + elementFrame.origin = CGPointZero; + elementFrame.size = view.frame.size; + } else { + elementFrame = [view.window convertRect:element.accessibilityFrame toView:view]; + } + CGPoint tappablePointInElement = [view tappablePointInRect:elementFrame]; + + // This is mostly redundant of the test in _accessibilityElementWithLabel: + KIFTestWaitCondition(!isnan(tappablePointInElement.x), error, @"View is not tappable"); + [view tapAtPoint:tappablePointInElement]; + + KIFTestCondition(![view canBecomeFirstResponder] || [view isDescendantOfFirstResponder], error, @"Failed to make the view into the first responder"); + + return KIFTestStepResultSuccess; + }]; + + // Wait for the view to stabilize. + [self waitForTimeInterval:0.5]; +} + +- (void)tapScreenAtPoint:(CGPoint)screenPoint +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + + // Try all the windows until we get one back that actually has something in it at the given point + UIView *view = nil; + for (UIWindow *window in [[[UIApplication sharedApplication] windowsWithKeyWindow] reverseObjectEnumerator]) { + CGPoint windowPoint = [window convertPoint:screenPoint fromView:nil]; + view = [window hitTest:windowPoint withEvent:nil]; + + // If we hit the window itself, then skip it. + if (view == window || view == nil) { + continue; + } + } + + KIFTestWaitCondition(view, error, @"No view was found at the point %@", NSStringFromCGPoint(screenPoint)); + + // This is mostly redundant of the test in _accessibilityElementWithLabel: + CGPoint viewPoint = [view convertPoint:screenPoint fromView:nil]; + [view tapAtPoint:viewPoint]; + + return KIFTestStepResultSuccess; + }]; +} + +- (void)longPressViewWithAccessibilityLabel:(NSString *)label duration:(NSTimeInterval)duration; +{ + [self longPressViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone duration:duration]; +} + +- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value duration:(NSTimeInterval)duration; +{ + [self longPressViewWithAccessibilityLabel:label value:value traits:UIAccessibilityTraitNone duration:duration]; +} + +- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits duration:(NSTimeInterval)duration; +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:value traits:traits tappable:YES]; + [self longPressAccessibilityElement:element inView:view duration:duration]; +} + +- (void)longPressAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)view duration:(NSTimeInterval)duration; +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + + KIFTestWaitCondition(view.isUserInteractionActuallyEnabled, error, @"View is not enabled for interaction"); + + CGRect elementFrame = [view.window convertRect:element.accessibilityFrame toView:view]; + CGPoint tappablePointInElement = [view tappablePointInRect:elementFrame]; + + // This is mostly redundant of the test in _accessibilityElementWithLabel: + KIFTestWaitCondition(!isnan(tappablePointInElement.x), error, @"View is not tappable"); + [view longPressAtPoint:tappablePointInElement duration:duration]; + + KIFTestCondition(![view canBecomeFirstResponder] || [view isDescendantOfFirstResponder], error, @"Failed to make the view into the first responder"); + + return KIFTestStepResultSuccess; + }]; + + // Wait for view to settle. + [self waitForTimeInterval:0.5]; +} + +- (void)enterTextIntoCurrentFirstResponder:(NSString *)text; +{ + // Wait for the keyboard + [self waitForTimeInterval:0.5]; + [self enterTextIntoCurrentFirstResponder:text fallbackView:nil]; +} + +- (void)enterTextIntoCurrentFirstResponder:(NSString *)text fallbackView:(UIView *)fallbackView; +{ + for (NSUInteger characterIndex = 0; characterIndex < [text length]; characterIndex++) { + NSString *characterString = [text substringWithRange:NSMakeRange(characterIndex, 1)]; + + if (![KIFTypist enterCharacter:characterString]) { + // Attempt to cheat if we couldn't find the character + if (!fallbackView) { + UIResponder *firstResponder = [[[UIApplication sharedApplication] keyWindow] firstResponder]; + + if ([firstResponder isKindOfClass:[UIView class]]) { + fallbackView = (UIView *)firstResponder; + } + } + + if ([fallbackView isKindOfClass:[UITextField class]] || [fallbackView isKindOfClass:[UITextView class]]) { + NSLog(@"KIF: Unable to find keyboard key for %@. Inserting manually.", characterString); + [(UITextField *)fallbackView setText:[[(UITextField *)fallbackView text] stringByAppendingString:characterString]]; + } else { + [self failWithError:[NSError KIFErrorWithFormat:@"Failed to find key for character \"%@\"", characterString] stopTest:YES]; + } + } + } +} + +- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label +{ + return [self enterText:text intoViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone expectedResult:nil]; +} + +- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:nil traits:traits tappable:YES]; + [self tapAccessibilityElement:element inView:view]; + [self enterTextIntoCurrentFirstResponder:text fallbackView:view]; + + // We will perform some additional validation if the view is UITextField or UITextView. + if (![view respondsToSelector:@selector(text)]) { + return; + } + + UITextView *textView = (UITextView *)view; + + // Some slower machines take longer for typing to catch up, so wait for a bit before failing + [self runBlock:^KIFTestStepResult(NSError **error) { + // We trim \n and \r because they trigger the return key, so they won't show up in the final product on single-line inputs + NSString *expected = [expectedResult ?: text stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; + NSString *actual = [textView.text stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; + + KIFTestWaitCondition([actual isEqualToString:expected], error, @"Failed to get text \"%@\" in field; instead, it was \"%@\"", expected, actual); + + return KIFTestStepResultSuccess; + } timeout:1.0]; +} + + +- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label +{ + [self clearTextFromViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone]; +} + +- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:nil traits:traits tappable:YES]; + + NSUInteger numberOfCharacters = [view respondsToSelector:@selector(text)] ? [(UITextField *)view text].length : element.accessibilityValue.length; + + NSMutableString *text = [NSMutableString string]; + for (NSInteger i = 0; i < numberOfCharacters; i ++) { + [text appendString:@"\b"]; + } + + [self enterText:text intoViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone expectedResult:@""]; +} + +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label +{ + [self clearTextFromViewWithAccessibilityLabel:label]; + [self enterText:text intoViewWithAccessibilityLabel:label]; +} + +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult +{ + [self clearTextFromViewWithAccessibilityLabel:label traits:traits]; + [self enterText:text intoViewWithAccessibilityLabel:label traits:traits expectedResult:expectedResult]; +} + +- (void)selectPickerViewRowWithTitle:(NSString *)title +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + // Find the picker view + UIPickerView *pickerView = [[[[UIApplication sharedApplication] pickerViewWindow] subviewsWithClassNameOrSuperClassNamePrefix:@"UIPickerView"] lastObject]; + KIFTestCondition(pickerView, error, @"No picker view is present"); + + NSInteger componentCount = [pickerView.dataSource numberOfComponentsInPickerView:pickerView]; + KIFTestCondition(componentCount == 1, error, @"The picker view has multiple columns, which is not supported in testing."); + + for (NSInteger componentIndex = 0; componentIndex < componentCount; componentIndex++) { + NSInteger rowCount = [pickerView.dataSource pickerView:pickerView numberOfRowsInComponent:componentIndex]; + for (NSInteger rowIndex = 0; rowIndex < rowCount; rowIndex++) { + NSString *rowTitle = nil; + if ([pickerView.delegate respondsToSelector:@selector(pickerView:titleForRow:forComponent:)]) { + rowTitle = [pickerView.delegate pickerView:pickerView titleForRow:rowIndex forComponent:componentIndex]; + } else if ([pickerView.delegate respondsToSelector:@selector(pickerView:viewForRow:forComponent:reusingView:)]) { + // This delegate inserts views directly, so try to figure out what the title is by looking for a label + UIView *rowView = [pickerView.delegate pickerView:pickerView viewForRow:rowIndex forComponent:componentIndex reusingView:nil]; + NSArray *labels = [rowView subviewsWithClassNameOrSuperClassNamePrefix:@"UILabel"]; + UILabel *label = (labels.count > 0 ? labels[0] : nil); + rowTitle = label.text; + } + + if ([rowTitle isEqual:title]) { + [pickerView selectRow:rowIndex inComponent:componentIndex animated:YES]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.5, false); + + // Tap in the middle of the picker view to select the item + [pickerView tap]; + + // The combination of selectRow:inComponent:animated: and tap does not consistently result in + // pickerView:didSelectRow:inComponent: being called on the delegate. We need to do it explicitly. + if ([pickerView.delegate respondsToSelector:@selector(pickerView:didSelectRow:inComponent:)]) { + [pickerView.delegate pickerView:pickerView didSelectRow:rowIndex inComponent:componentIndex]; + } + + return KIFTestStepResultSuccess; + } + } + } + + KIFTestCondition(NO, error, @"Failed to find picker view value with title \"%@\"", title); + return KIFTestStepResultFailure; + }]; +} + +- (void)setOn:(BOOL)switchIsOn forSwitchWithAccessibilityLabel:(NSString *)label +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:nil traits:UIAccessibilityTraitNone tappable:YES]; + + if (![view isKindOfClass:[UISwitch class]]) { + [self failWithError:[NSError KIFErrorWithFormat:@"View with accessibility label \"%@\" is a %@, not a UISwitch", label, NSStringFromClass([view class])] stopTest:YES]; + } + + UISwitch *switchView = (UISwitch *)view; + + // No need to switch it if it's already in the correct position + if (switchView.isOn == switchIsOn) { + return; + } + + [self tapAccessibilityElement:element inView:view]; + + // If we succeeded, stop the test. + if (switchView.isOn == switchIsOn) { + return; + } + + NSLog(@"Faking turning switch %@ with accessibility label %@", switchIsOn ? @"ON" : @"OFF", label); + [switchView setOn:switchIsOn animated:YES]; + [switchView sendActionsForControlEvents:UIControlEventValueChanged]; + [self waitForTimeInterval:0.5]; + + // We gave it our best shot. Fail the test. + if (switchView.isOn != switchIsOn) { + [self failWithError:[NSError KIFErrorWithFormat:@"Failed to toggle switch to \"%@\"; instead, it was \"%@\"", switchIsOn ? @"ON" : @"OFF", switchView.on ? @"ON" : @"OFF"] stopTest:YES]; + } +} + +- (void)setValue:(float)value forSliderWithAccessibilityLabel:(NSString *)label +{ + UISlider *slider = nil; + UIAccessibilityElement *element = nil; + [self waitForAccessibilityElement:&element view:&slider withLabel:label value:nil traits:UIAccessibilityTraitNone tappable:YES]; + + if (![slider isKindOfClass:[UISlider class]]) { + [self failWithError:[NSError KIFErrorWithFormat:@"View with accessibility label \"%@\" is a %@, not a UISlider", label, NSStringFromClass([slider class])] stopTest:YES]; + } + + if (value < slider.minimumValue) { + [self failWithError:[NSError KIFErrorWithFormat:@"Cannot slide past minimum value of %f", slider.minimumValue] stopTest:YES]; + } + + if (value > slider.maximumValue) { + [self failWithError:[NSError KIFErrorWithFormat:@"Cannot slide past maximum value of %f", slider.maximumValue] stopTest:YES]; + } + + CGRect trackRect = [slider trackRectForBounds:slider.bounds]; + CGPoint currentPosition = CGPointCenteredInRect([slider thumbRectForBounds:slider.bounds trackRect:trackRect value:slider.value]); + CGPoint finalPosition = CGPointCenteredInRect([slider thumbRectForBounds:slider.bounds trackRect:trackRect value:value]); + + [slider dragFromPoint:currentPosition toPoint:finalPosition steps:10]; +} + +- (void)dismissPopover +{ + const NSTimeInterval tapDelay = 0.05; + UIWindow *window = [[UIApplication sharedApplication] dimmingViewWindow]; + if (!window) { + [self failWithError:[NSError KIFErrorWithFormat:@"Failed to find any dimming views in the application"] stopTest:YES]; + } + UIView *dimmingView = [[window subviewsWithClassNamePrefix:@"UIDimmingView"] lastObject]; + [dimmingView tapAtPoint:CGPointMake(50.0f, 50.0f)]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, tapDelay, false); +} + +- (void)choosePhotoInAlbum:(NSString *)albumName atRow:(NSInteger)row column:(NSInteger)column +{ + [self tapViewWithAccessibilityLabel:@"Choose Photo"]; + + // This is basically the same as the step to tap with an accessibility label except that the accessibility labels for the albums have the number of photos appended to the end, such as "My Photos (3)." This means that we have to do a prefix match rather than an exact match. + [self runBlock:^KIFTestStepResult(NSError **error) { + + NSString *labelPrefix = [NSString stringWithFormat:@"%@, (", albumName]; + UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementMatchingBlock:^(UIAccessibilityElement *element) { + return [element.accessibilityLabel hasPrefix:labelPrefix]; + }]; + + KIFTestWaitCondition(element, error, @"Failed to find photo album with name %@", albumName); + + UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + KIFTestWaitCondition(view, error, @"Failed to find view for photo album with name %@", albumName); + + if (![view isUserInteractionActuallyEnabled]) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Album picker is not enabled for interaction"]; + } + return KIFTestStepResultWait; + } + + CGRect elementFrame = [view.window convertRect:element.accessibilityFrame toView:view]; + CGPoint tappablePointInElement = [view tappablePointInRect:elementFrame]; + + [view tapAtPoint:tappablePointInElement]; + + return KIFTestStepResultSuccess; + }]; + + // Wait for media picker view controller to be pushed. + [self waitForTimeInterval:0.5]; + + // Tap the desired photo in the grid + // TODO: This currently only works for the first page of photos. It should scroll appropriately at some point. + const CGFloat headerHeight = 64.0; + const CGSize thumbnailSize = CGSizeMake(75.0, 75.0); + const CGFloat thumbnailMargin = 5.0; + CGPoint thumbnailCenter; + thumbnailCenter.x = thumbnailMargin + (MAX(0, column - 1) * (thumbnailSize.width + thumbnailMargin)) + thumbnailSize.width / 2.0; + thumbnailCenter.y = headerHeight + thumbnailMargin + (MAX(0, row - 1) * (thumbnailSize.height + thumbnailMargin)) + thumbnailSize.height / 2.0; + [self tapScreenAtPoint:thumbnailCenter]; + + // Dismiss the resize UI + [self tapViewWithAccessibilityLabel:@"Choose"]; +} + +- (void)tapRowInTableViewWithAccessibilityLabel:(NSString*)tableViewLabel atIndexPath:(NSIndexPath *)indexPath +{ + UITableView *tableView = (UITableView *)[self waitForViewWithAccessibilityLabel:tableViewLabel]; + + if (![tableView isKindOfClass:[UITableView class]]) { + [self failWithError:[NSError KIFErrorWithFormat:@"View is not a table view"] stopTest:YES]; + } + + UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + + // If section < 0, search from the end of the table. + if (indexPath.section < 0) { + indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:tableView.numberOfSections + indexPath.section]; + } + + // If row < 0, search from the end of the section. + if (indexPath.row < 0) { + indexPath = [NSIndexPath indexPathForRow:[tableView numberOfRowsInSection:indexPath.section] + indexPath.row inSection:indexPath.section]; + } + + if (!cell) { + if (indexPath.section >= tableView.numberOfSections) { + [self failWithError:[NSError KIFErrorWithFormat:@"Section %d is not found in '%@' table view", indexPath.section, tableViewLabel] stopTest:YES]; + } + + if (indexPath.row >= [tableView numberOfRowsInSection:indexPath.section]) { + [self failWithError:[NSError KIFErrorWithFormat:@"Row %d is not found in section %d of '%@' table view", indexPath.row, indexPath.section, tableViewLabel] stopTest:YES]; + } + + [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; + [self waitForTimeInterval:0.5]; + cell = [tableView cellForRowAtIndexPath:indexPath]; + } + + if (!cell) { + [self failWithError:[NSError KIFErrorWithFormat: @"Table view cell at index path %@ not found", indexPath] stopTest:YES]; + } + + CGRect cellFrame = [cell.contentView convertRect:cell.contentView.frame toView:tableView]; + [tableView tapAtPoint:CGPointCenteredInRect(cellFrame)]; + +} + +- (void)swipeViewWithAccessibilityLabel:(NSString *)label inDirection:(KIFSwipeDirection)direction +{ + const NSUInteger kNumberOfPointsInSwipePath = 20; + + // The original version of this came from http://groups.google.com/group/kif-framework/browse_thread/thread/df3f47eff9f5ac8c + + UIView *viewToSwipe; + UIAccessibilityElement *element; + + [self waitForAccessibilityElement:&element view:&viewToSwipe withLabel:label value:nil traits:UIAccessibilityTraitNone tappable:NO]; + + // Within this method, all geometry is done in the coordinate system of the view to swipe. + + CGRect elementFrame = [viewToSwipe.window convertRect:element.accessibilityFrame toView:viewToSwipe]; + CGPoint swipeStart = CGPointCenteredInRect(elementFrame); + KIFDisplacement swipeDisplacement = KIFDisplacementForSwipingInDirection(direction); + + [viewToSwipe dragFromPoint:swipeStart displacement:swipeDisplacement steps:kNumberOfPointsInSwipePath]; +} + +- (void)scrollViewWithAccessibilityLabel:(NSString *)label byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction +{ + const NSUInteger kNumberOfPointsInScrollPath = 5; + + UIView *viewToScroll; + UIAccessibilityElement *element; + + [self waitForAccessibilityElement:&element view:&viewToScroll withLabel:label value:nil traits:UIAccessibilityTraitNone tappable:NO]; + + // Within this method, all geometry is done in the coordinate system of the view to scroll. + + CGRect elementFrame = [viewToScroll.window convertRect:element.accessibilityFrame toView:viewToScroll]; + + KIFDisplacement scrollDisplacement = CGPointMake(elementFrame.size.width * horizontalFraction, elementFrame.size.height * verticalFraction); + + CGPoint scrollStart = CGPointCenteredInRect(elementFrame); + scrollStart.x -= scrollDisplacement.x / 2; + scrollStart.y -= scrollDisplacement.y / 2; + + [viewToScroll dragFromPoint:scrollStart displacement:scrollDisplacement steps:kNumberOfPointsInScrollPath]; +} + +- (void)waitForFirstResponderWithAccessibilityLabel:(NSString *)label +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + UIResponder *firstResponder = [[[UIApplication sharedApplication] keyWindow] firstResponder]; + if ([firstResponder isKindOfClass:NSClassFromString(@"UISearchBarTextField")]) { + firstResponder = [(UIView *)firstResponder superview]; + } + KIFTestWaitCondition([[firstResponder accessibilityLabel] isEqualToString:label], error, @"Expected accessibility label for first responder to be '%@', got '%@'", label, [firstResponder accessibilityLabel]); + + return KIFTestStepResultSuccess; + }]; +} + +@end + diff --git a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/Additions b/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/Additions deleted file mode 120000 index e5c4230..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/Additions +++ /dev/null @@ -1 +0,0 @@ -../../../../../Additions \ No newline at end of file diff --git a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/Classes b/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/Classes deleted file mode 120000 index 76f1949..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/Classes +++ /dev/null @@ -1 +0,0 @@ -../../../../../Classes \ No newline at end of file diff --git a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/KIF.xcodeproj b/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/KIF.xcodeproj deleted file mode 120000 index d06fa53..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/KIF.xcodeproj +++ /dev/null @@ -1 +0,0 @@ -../../../../../KIF.xcodeproj \ No newline at end of file diff --git a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/LICENSE b/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/LICENSE deleted file mode 120000 index 2a64f9d..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/LICENSE +++ /dev/null @@ -1 +0,0 @@ -../../../../../LICENSE \ No newline at end of file diff --git a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/README.md b/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/README.md deleted file mode 120000 index 1dfab24..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Frameworks/KIF/README.md +++ /dev/null @@ -1 +0,0 @@ -../../../../../README.md \ No newline at end of file diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable.xcodeproj/project.pbxproj b/Pods/KIF/Documentation/Examples/Testable/Testable.xcodeproj/project.pbxproj deleted file mode 100755 index 4a9b2bf..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable.xcodeproj/project.pbxproj +++ /dev/null @@ -1,501 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - A868094B13E32D51005DDA1F /* libKIF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A868094613E32C77005DDA1F /* libKIF.a */; }; - A868094C13E32D55005DDA1F /* libKIF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A868094613E32C77005DDA1F /* libKIF.a */; }; - AA0A22AA13A7D372004789C0 /* EXTestController.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073E513997527008AF393 /* EXTestController.m */; }; - AAB073AD139861C0008AF393 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073AC139861C0008AF393 /* UIKit.framework */; }; - AAB073AF139861C0008AF393 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073AE139861C0008AF393 /* Foundation.framework */; }; - AAB073B1139861C0008AF393 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073B0139861C0008AF393 /* CoreGraphics.framework */; }; - AAB073B7139861C0008AF393 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = AAB073B5139861C0008AF393 /* InfoPlist.strings */; }; - AAB073BA139861C0008AF393 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073B9139861C0008AF393 /* main.m */; }; - AAB073BD139861C0008AF393 /* TestableAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073BC139861C0008AF393 /* TestableAppDelegate.m */; }; - AAB073C0139861C0008AF393 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = AAB073BE139861C0008AF393 /* MainWindow.xib */; }; - AAB073C3139861C0008AF393 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073C2139861C0008AF393 /* RootViewController.m */; }; - AAB073C6139861C0008AF393 /* RootViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AAB073C4139861C0008AF393 /* RootViewController.xib */; }; - AAB073D113994E20008AF393 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073B9139861C0008AF393 /* main.m */; }; - AAB073D213994E20008AF393 /* TestableAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073BC139861C0008AF393 /* TestableAppDelegate.m */; }; - AAB073D313994E20008AF393 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073C2139861C0008AF393 /* RootViewController.m */; }; - AAB073D513994E20008AF393 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073AC139861C0008AF393 /* UIKit.framework */; }; - AAB073D613994E20008AF393 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073AE139861C0008AF393 /* Foundation.framework */; }; - AAB073D713994E20008AF393 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073B0139861C0008AF393 /* CoreGraphics.framework */; }; - AAB073D913994E20008AF393 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = AAB073B5139861C0008AF393 /* InfoPlist.strings */; }; - AAB073DA13994E20008AF393 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = AAB073BE139861C0008AF393 /* MainWindow.xib */; }; - AAB073DB13994E20008AF393 /* RootViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AAB073C4139861C0008AF393 /* RootViewController.xib */; }; - AAC634C113A5EAF900634049 /* KIFTestScenario+EXAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAC634BE13A5E8E200634049 /* KIFTestScenario+EXAdditions.m */; }; - AADF7E2413EC7211006410B2 /* KIFTestStep+EXAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAC634C313A68BF000634049 /* KIFTestStep+EXAdditions.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - A868094513E32C77005DDA1F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A868094113E32C77005DDA1F /* KIF.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AAB07268139719AC008AF393; - remoteInfo = KIF; - }; - A868094713E32C89005DDA1F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A868094113E32C77005DDA1F /* KIF.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = AAB07267139719AC008AF393; - remoteInfo = KIF; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - A868094113E32C77005DDA1F /* KIF.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = KIF.xcodeproj; path = Frameworks/KIF/KIF.xcodeproj; sourceTree = ""; }; - AAB073A8139861C0008AF393 /* Testable.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Testable.app; sourceTree = BUILT_PRODUCTS_DIR; }; - AAB073AC139861C0008AF393 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - AAB073AE139861C0008AF393 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - AAB073B0139861C0008AF393 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - AAB073B4139861C0008AF393 /* Testable-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Testable-Info.plist"; sourceTree = ""; }; - AAB073B6139861C0008AF393 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - AAB073B8139861C0008AF393 /* Testable-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Testable-Prefix.pch"; sourceTree = ""; }; - AAB073B9139861C0008AF393 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - AAB073BB139861C0008AF393 /* TestableAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TestableAppDelegate.h; sourceTree = ""; }; - AAB073BC139861C0008AF393 /* TestableAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TestableAppDelegate.m; sourceTree = ""; }; - AAB073BF139861C0008AF393 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainWindow.xib; sourceTree = ""; }; - AAB073C1139861C0008AF393 /* RootViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = ""; }; - AAB073C2139861C0008AF393 /* RootViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = ""; }; - AAB073C5139861C0008AF393 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/RootViewController.xib; sourceTree = ""; }; - AAB073DF13994E20008AF393 /* Testable (Integration Tests).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Testable (Integration Tests).app"; sourceTree = BUILT_PRODUCTS_DIR; }; - AAB073E413997527008AF393 /* EXTestController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EXTestController.h; path = Testable/Testing/EXTestController.h; sourceTree = ""; }; - AAB073E513997527008AF393 /* EXTestController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EXTestController.m; path = Testable/Testing/EXTestController.m; sourceTree = ""; }; - AAC634BD13A5E8E200634049 /* KIFTestScenario+EXAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "KIFTestScenario+EXAdditions.h"; path = "Testable/Testing/KIFTestScenario+EXAdditions.h"; sourceTree = ""; }; - AAC634BE13A5E8E200634049 /* KIFTestScenario+EXAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "KIFTestScenario+EXAdditions.m"; path = "Testable/Testing/KIFTestScenario+EXAdditions.m"; sourceTree = ""; }; - AAC634C213A68BF000634049 /* KIFTestStep+EXAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "KIFTestStep+EXAdditions.h"; path = "Testable/Testing/KIFTestStep+EXAdditions.h"; sourceTree = ""; }; - AAC634C313A68BF000634049 /* KIFTestStep+EXAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "KIFTestStep+EXAdditions.m"; path = "Testable/Testing/KIFTestStep+EXAdditions.m"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - AAB073A5139861C0008AF393 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AAB073AD139861C0008AF393 /* UIKit.framework in Frameworks */, - AAB073AF139861C0008AF393 /* Foundation.framework in Frameworks */, - AAB073B1139861C0008AF393 /* CoreGraphics.framework in Frameworks */, - A868094B13E32D51005DDA1F /* libKIF.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AAB073D413994E20008AF393 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AAB073D513994E20008AF393 /* UIKit.framework in Frameworks */, - AAB073D613994E20008AF393 /* Foundation.framework in Frameworks */, - AAB073D713994E20008AF393 /* CoreGraphics.framework in Frameworks */, - A868094C13E32D55005DDA1F /* libKIF.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - A868094213E32C77005DDA1F /* Products */ = { - isa = PBXGroup; - children = ( - A868094613E32C77005DDA1F /* libKIF.a */, - ); - name = Products; - sourceTree = ""; - }; - AAB0739D139861C0008AF393 = { - isa = PBXGroup; - children = ( - A868094113E32C77005DDA1F /* KIF.xcodeproj */, - AAB073B2139861C0008AF393 /* Testable */, - AAB073E3139974AD008AF393 /* Testing */, - AAB073AB139861C0008AF393 /* Frameworks */, - AAB073A9139861C0008AF393 /* Products */, - ); - sourceTree = ""; - }; - AAB073A9139861C0008AF393 /* Products */ = { - isa = PBXGroup; - children = ( - AAB073A8139861C0008AF393 /* Testable.app */, - AAB073DF13994E20008AF393 /* Testable (Integration Tests).app */, - ); - name = Products; - sourceTree = ""; - }; - AAB073AB139861C0008AF393 /* Frameworks */ = { - isa = PBXGroup; - children = ( - AAB073AC139861C0008AF393 /* UIKit.framework */, - AAB073AE139861C0008AF393 /* Foundation.framework */, - AAB073B0139861C0008AF393 /* CoreGraphics.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - AAB073B2139861C0008AF393 /* Testable */ = { - isa = PBXGroup; - children = ( - AAB073BB139861C0008AF393 /* TestableAppDelegate.h */, - AAB073BC139861C0008AF393 /* TestableAppDelegate.m */, - AAB073BE139861C0008AF393 /* MainWindow.xib */, - AAB073C1139861C0008AF393 /* RootViewController.h */, - AAB073C2139861C0008AF393 /* RootViewController.m */, - AAB073C4139861C0008AF393 /* RootViewController.xib */, - AAB073B3139861C0008AF393 /* Supporting Files */, - ); - path = Testable; - sourceTree = ""; - }; - AAB073B3139861C0008AF393 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - AAB073B4139861C0008AF393 /* Testable-Info.plist */, - AAB073B5139861C0008AF393 /* InfoPlist.strings */, - AAB073B8139861C0008AF393 /* Testable-Prefix.pch */, - AAB073B9139861C0008AF393 /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - AAB073E3139974AD008AF393 /* Testing */ = { - isa = PBXGroup; - children = ( - AAB073E413997527008AF393 /* EXTestController.h */, - AAB073E513997527008AF393 /* EXTestController.m */, - AAC634BD13A5E8E200634049 /* KIFTestScenario+EXAdditions.h */, - AAC634BE13A5E8E200634049 /* KIFTestScenario+EXAdditions.m */, - AAC634C213A68BF000634049 /* KIFTestStep+EXAdditions.h */, - AAC634C313A68BF000634049 /* KIFTestStep+EXAdditions.m */, - ); - name = Testing; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - AAB073A7139861C0008AF393 /* Testable */ = { - isa = PBXNativeTarget; - buildConfigurationList = AAB073C9139861C0008AF393 /* Build configuration list for PBXNativeTarget "Testable" */; - buildPhases = ( - AAB073A4139861C0008AF393 /* Sources */, - AAB073A5139861C0008AF393 /* Frameworks */, - AAB073A6139861C0008AF393 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - A868094813E32C89005DDA1F /* PBXTargetDependency */, - ); - name = Testable; - productName = Testable; - productReference = AAB073A8139861C0008AF393 /* Testable.app */; - productType = "com.apple.product-type.application"; - }; - AAB073CF13994E20008AF393 /* Integration Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = AAB073DC13994E20008AF393 /* Build configuration list for PBXNativeTarget "Integration Tests" */; - buildPhases = ( - AAB073D013994E20008AF393 /* Sources */, - AAB073D413994E20008AF393 /* Frameworks */, - AAB073D813994E20008AF393 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Integration Tests"; - productName = Testable; - productReference = AAB073DF13994E20008AF393 /* Testable (Integration Tests).app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - AAB0739F139861C0008AF393 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0420; - }; - buildConfigurationList = AAB073A2139861C0008AF393 /* Build configuration list for PBXProject "Testable" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = AAB0739D139861C0008AF393; - productRefGroup = AAB073A9139861C0008AF393 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = A868094213E32C77005DDA1F /* Products */; - ProjectRef = A868094113E32C77005DDA1F /* KIF.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - AAB073A7139861C0008AF393 /* Testable */, - AAB073CF13994E20008AF393 /* Integration Tests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - A868094613E32C77005DDA1F /* libKIF.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libKIF.a; - remoteRef = A868094513E32C77005DDA1F /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - AAB073A6139861C0008AF393 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAB073B7139861C0008AF393 /* InfoPlist.strings in Resources */, - AAB073C0139861C0008AF393 /* MainWindow.xib in Resources */, - AAB073C6139861C0008AF393 /* RootViewController.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AAB073D813994E20008AF393 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAB073D913994E20008AF393 /* InfoPlist.strings in Resources */, - AAB073DA13994E20008AF393 /* MainWindow.xib in Resources */, - AAB073DB13994E20008AF393 /* RootViewController.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - AAB073A4139861C0008AF393 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAB073BA139861C0008AF393 /* main.m in Sources */, - AAB073BD139861C0008AF393 /* TestableAppDelegate.m in Sources */, - AAB073C3139861C0008AF393 /* RootViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AAB073D013994E20008AF393 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAB073D113994E20008AF393 /* main.m in Sources */, - AAB073D213994E20008AF393 /* TestableAppDelegate.m in Sources */, - AAB073D313994E20008AF393 /* RootViewController.m in Sources */, - AAC634C113A5EAF900634049 /* KIFTestScenario+EXAdditions.m in Sources */, - AA0A22AA13A7D372004789C0 /* EXTestController.m in Sources */, - AADF7E2413EC7211006410B2 /* KIFTestStep+EXAdditions.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - A868094813E32C89005DDA1F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = KIF; - targetProxy = A868094713E32C89005DDA1F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - AAB073B5139861C0008AF393 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - AAB073B6139861C0008AF393 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - AAB073BE139861C0008AF393 /* MainWindow.xib */ = { - isa = PBXVariantGroup; - children = ( - AAB073BF139861C0008AF393 /* en */, - ); - name = MainWindow.xib; - sourceTree = ""; - }; - AAB073C4139861C0008AF393 /* RootViewController.xib */ = { - isa = PBXVariantGroup; - children = ( - AAB073C5139861C0008AF393 /* en */, - ); - name = RootViewController.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - AAB073C7139861C0008AF393 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = DEBUG; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvmgcc42; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - SDKROOT = iphoneos; - }; - name = Debug; - }; - AAB073C8139861C0008AF393 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_VERSION = com.apple.compilers.llvmgcc42; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - SDKROOT = iphoneos; - }; - name = Release; - }; - AAB073CA139861C0008AF393 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Testable/Testable-Prefix.pch"; - INFOPLIST_FILE = "Testable/Testable-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - AAB073CB139861C0008AF393 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Testable/Testable-Prefix.pch"; - INFOPLIST_FILE = "Testable/Testable-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; - AAB073DD13994E20008AF393 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Testable/Testable-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - RUN_KIF_TESTS, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Frameworks/KIF/**", - ); - INFOPLIST_FILE = "Testable/Testable-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_NAME = "Testable (Integration Tests)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - AAB073DE13994E20008AF393 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Testable/Testable-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - RUN_KIF_TESTS, - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/Frameworks/KIF/**", - ); - INFOPLIST_FILE = "Testable/Testable-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_NAME = "Testable (Integration Tests)"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - AAB073A2139861C0008AF393 /* Build configuration list for PBXProject "Testable" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AAB073C7139861C0008AF393 /* Debug */, - AAB073C8139861C0008AF393 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AAB073C9139861C0008AF393 /* Build configuration list for PBXNativeTarget "Testable" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AAB073CA139861C0008AF393 /* Debug */, - AAB073CB139861C0008AF393 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AAB073DC13994E20008AF393 /* Build configuration list for PBXNativeTarget "Integration Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AAB073DD13994E20008AF393 /* Debug */, - AAB073DE13994E20008AF393 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = AAB0739F139861C0008AF393 /* Project object */; -} diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/RootViewController.h b/Pods/KIF/Documentation/Examples/Testable/Testable/RootViewController.h deleted file mode 100755 index 1ba4f02..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/RootViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// RootViewController.h -// Testable -// -// Created by Eric Firestone on 6/2/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import - -@interface RootViewController : UITableViewController { - NSArray *titles; -} - -@property (nonatomic, strong) NSArray *titles; - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/RootViewController.m b/Pods/KIF/Documentation/Examples/Testable/Testable/RootViewController.m deleted file mode 100755 index 67f3abb..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/RootViewController.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// RootViewController.m -// Testable -// -// Created by Eric Firestone on 6/2/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import "RootViewController.h" - -@implementation RootViewController - -@synthesize titles; - -- (void)viewDidLoad -{ - self.tableView.delegate = self; - self.titles = [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", @"Purple", nil]; - - [super viewDidLoad]; -} - -// Customize the number of sections in the table view. -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.titles.count; -} - -// Customize the appearance of table view cells. -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; - } - - cell.textLabel.text = [self.titles objectAtIndex:indexPath.row]; - - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - self.navigationController.navigationBar.topItem.title = [NSString stringWithFormat:@"Selected: %@", [self.titles objectAtIndex:indexPath.row]]; -} - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/Testable-Info.plist b/Pods/KIF/Documentation/Examples/Testable/Testable/Testable-Info.plist deleted file mode 100755 index 027e35a..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/Testable-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - com.squareup.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - NSMainNibFile - MainWindow - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/Testable-Prefix.pch b/Pods/KIF/Documentation/Examples/Testable/Testable/Testable-Prefix.pch deleted file mode 100755 index 183f828..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/Testable-Prefix.pch +++ /dev/null @@ -1,14 +0,0 @@ -// -// Prefix header for all source files of the 'Testable' target in the 'Testable' project -// - -#import - -#ifndef __IPHONE_3_0 -#warning "This project uses features only available in iPhone SDK 3.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/TestableAppDelegate.h b/Pods/KIF/Documentation/Examples/Testable/Testable/TestableAppDelegate.h deleted file mode 100755 index 4bea315..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/TestableAppDelegate.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// TestableAppDelegate.h -// Testable -// -// Created by Eric Firestone on 6/2/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import - -@interface TestableAppDelegate : NSObject { - -} - -@property (nonatomic, strong) IBOutlet UIWindow *window; -@property (nonatomic, strong) IBOutlet UINavigationController *navigationController; - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/TestableAppDelegate.m b/Pods/KIF/Documentation/Examples/Testable/Testable/TestableAppDelegate.m deleted file mode 100755 index 54f8ab1..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/TestableAppDelegate.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// TestableAppDelegate.m -// Testable -// -// Created by Eric Firestone on 6/2/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import "TestableAppDelegate.h" - -#if RUN_KIF_TESTS -#import "EXTestController.h" -#endif - -@implementation TestableAppDelegate - - -@synthesize window=_window; - -@synthesize navigationController=_navigationController; - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - // Override point for customization after application launch. - // Add the navigation controller's view to the window and display. - self.window.rootViewController = self.navigationController; - [self.window makeKeyAndVisible]; - -#if RUN_KIF_TESTS - [[EXTestController sharedInstance] startTestingWithCompletionBlock:^{ - // Exit after the tests complete. When running on CI, this lets you check the return value for pass/fail. - exit([[EXTestController sharedInstance] failureCount]); - }]; -#endif - - return YES; -} - - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/EXTestController.h b/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/EXTestController.h deleted file mode 100755 index dd29288..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/EXTestController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// EXTestController.h -// Testable -// -// Created by Eric Firestone on 6/3/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import -#import "KIFTestController.h" - - -@interface EXTestController : KIFTestController { - -} - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/EXTestController.m b/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/EXTestController.m deleted file mode 100755 index c6edac5..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/EXTestController.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// EXTestController.m -// Testable -// -// Created by Eric Firestone on 6/3/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import "EXTestController.h" -#import "KIFTestScenario+EXAdditions.h" - -@implementation EXTestController - -- (void)initializeScenarios; -{ - // If your app is doing anything interesting with parameterized scenarios, - // you'll want to override this method and add them manually. -// [self addScenario:[KIFTestScenario scenarioToLogin]]; -// [self addScenario:[KIFTestScenario scenarioToSelectDifferentColors]]; - - // If you're not, - [super initializeScenarios]; -} - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestScenario+EXAdditions.h b/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestScenario+EXAdditions.h deleted file mode 100755 index 1a67e2d..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestScenario+EXAdditions.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// KIFTestScenario+EXAdditions.h -// Testable -// -// Created by Eric Firestone on 6/12/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import -#import "KIFTestScenario.h" - -@interface KIFTestScenario (EXAdditions) - -+ (id)scenarioToLogin; - -+ (id)scenarioToSelectDifferentColors; - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestScenario+EXAdditions.m b/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestScenario+EXAdditions.m deleted file mode 100755 index cef6041..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestScenario+EXAdditions.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// KIFTestScenario+EXAdditions.m -// Testable -// -// Created by Eric Firestone on 6/12/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import "KIFTestScenario+EXAdditions.h" -#import "KIFTestStep.h" -#import "KIFTestStep+EXAdditions.h" - -@implementation KIFTestScenario (EXAdditions) - -+ (id)scenarioToLogin; -{ - KIFTestScenario *scenario = [KIFTestScenario scenarioWithDescription:@"Test that a user can successfully log in."]; - [scenario addStep:[KIFTestStep stepToReset]]; - [scenario addStepsFromArray:[KIFTestStep stepsToGoToLoginPage]]; - [scenario addStep:[KIFTestStep stepToEnterText:@"user@example.com" intoViewWithAccessibilityLabel:@"Login User Name"]]; - [scenario addStep:[KIFTestStep stepToEnterText:@"thisismypassword" intoViewWithAccessibilityLabel:@"Login Password"]]; - [scenario addStep:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"Log In"]]; - - // Verify that the login succeeded - [scenario addStep:[KIFTestStep stepToWaitForTappableViewWithAccessibilityLabel:@"Welcome"]]; - - return scenario; -} - -+ (id)scenarioToSelectDifferentColors; -{ - KIFTestScenario *scenario = [KIFTestScenario scenarioWithDescription:[NSString stringWithFormat:@"Select the a few different colors."]]; - [scenario addStep:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"Purple"]]; - [scenario addStep:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"Blue"]]; - [scenario addStep:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"Red"]]; - [scenario addStep:[KIFTestStep stepToWaitForTimeInterval:5.0 description:@"An arbitrary wait just to demonstrate adding an additional step"]]; - [scenario addStep:[KIFTestStep stepToWaitForViewWithAccessibilityLabel:@"Selected: Red"]]; - - return scenario; -} - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestStep+EXAdditions.h b/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestStep+EXAdditions.h deleted file mode 100755 index 2eceae9..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestStep+EXAdditions.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// KIFTestStep+EXAdditions.h -// Testable -// -// Created by Eric Firestone on 6/13/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import -#import "KIFTestStep.h" - -@interface KIFTestStep (EXAdditions) - -// Factory Steps - -+ (id)stepToReset; - -// Step Collections - -// Assumes the application was reset and sitting at the welcome screen -+ (NSArray *)stepsToGoToLoginPage; - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestStep+EXAdditions.m b/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestStep+EXAdditions.m deleted file mode 100755 index b0c4a99..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/Testing/KIFTestStep+EXAdditions.m +++ /dev/null @@ -1,44 +0,0 @@ -// -// KIFTestStep+EXAdditions.m -// Testable -// -// Created by Eric Firestone on 6/13/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import "KIFTestStep+EXAdditions.h" - -@implementation KIFTestStep (EXAdditions) - -#pragma mark - Factory Steps - -+ (id)stepToReset; -{ - return [KIFTestStep stepWithDescription:@"Reset the application state." executionBlock:^(KIFTestStep *step, NSError **error) { - BOOL successfulReset = YES; - - // Do the actual reset for your app. Set successfulReset = NO if it fails. - - KIFTestCondition(successfulReset, error, @"Failed to reset some part of the application."); - - return KIFTestStepResultSuccess; - }]; -} - -#pragma mark - Step Collections - -+ (NSArray *)stepsToGoToLoginPage; -{ - NSMutableArray *steps = [NSMutableArray array]; - - // Dismiss the welcome message - [steps addObject:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"That's awesome!"]]; - - // Tap the "I already have an account" button - [steps addObject:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"I already have an account."]]; - - return steps; -} - -@end diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/en.lproj/InfoPlist.strings b/Pods/KIF/Documentation/Examples/Testable/Testable/en.lproj/InfoPlist.strings deleted file mode 100755 index 477b28f..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/en.lproj/MainWindow.xib b/Pods/KIF/Documentation/Examples/Testable/Testable/en.lproj/MainWindow.xib deleted file mode 100755 index ebc2151..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/en.lproj/MainWindow.xib +++ /dev/null @@ -1,542 +0,0 @@ - - - - 1024 - 10D571 - 786 - 1038.29 - 460.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 112 - - - YES - - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - IBCocoaTouchFramework - - - - 1316 - - {320, 480} - - 1 - MSAxIDEAA - - NO - NO - - IBCocoaTouchFramework - YES - - - - - 1 - - IBCocoaTouchFramework - NO - - - 256 - {0, 0} - NO - YES - YES - IBCocoaTouchFramework - - - YES - - - - IBCocoaTouchFramework - - - RootViewController - - - 1 - - IBCocoaTouchFramework - NO - - - - - - - YES - - - delegate - - - - 4 - - - - window - - - - 5 - - - - navigationController - - - - 15 - - - - - YES - - 0 - - - - - - 2 - - - YES - - - - - -1 - - - File's Owner - - - 3 - - - - - -2 - - - - - 9 - - - YES - - - - - - - 11 - - - - - 13 - - - YES - - - - - - 14 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 11.IBPluginDependency - 13.CustomClassName - 13.IBPluginDependency - 2.IBAttributePlaceholdersKey - 2.IBEditorWindowLastContentRect - 2.IBPluginDependency - 3.CustomClassName - 3.IBPluginDependency - 9.IBEditorWindowLastContentRect - 9.IBPluginDependency - - - YES - UIApplication - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - RootViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - YES - - - YES - - - {{673, 376}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - TestableAppDelegate - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - {{186, 376}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - YES - - - - - YES - - - YES - - - - 16 - - - - YES - - RootViewController - UITableViewController - - IBProjectSource - RootViewController.h - - - - UIWindow - UIView - - IBUserSource - - - - - TestableAppDelegate - NSObject - - YES - - YES - navigationController - window - - - YES - UINavigationController - UIWindow - - - - YES - - YES - navigationController - window - - - YES - - navigationController - UINavigationController - - - window - UIWindow - - - - - IBProjectSource - TestableAppDelegate.h - - - - - YES - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UIApplication - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIApplication.h - - - - UIBarButtonItem - UIBarItem - - IBFrameworkSource - UIKit.framework/Headers/UIBarButtonItem.h - - - - UIBarItem - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIBarItem.h - - - - UINavigationBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UINavigationBar.h - - - - UINavigationController - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UINavigationItem - NSObject - - - - UIResponder - NSObject - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UITableViewController - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITableViewController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UIPopoverController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UISplitViewController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - UIWindow - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIWindow.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - Testable.xcodeproj - 3 - 112 - - diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/en.lproj/RootViewController.xib b/Pods/KIF/Documentation/Examples/Testable/Testable/en.lproj/RootViewController.xib deleted file mode 100755 index 855c7ab..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/en.lproj/RootViewController.xib +++ /dev/null @@ -1,384 +0,0 @@ - - - - 784 - 10D541 - 760 - 1038.29 - 460.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 81 - - - YES - - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - {320, 247} - - - 3 - MQA - - NO - YES - NO - IBCocoaTouchFramework - NO - 1 - 0 - YES - 44 - 22 - 22 - - - - - YES - - - view - - - - 3 - - - - dataSource - - - - 4 - - - - delegate - - - - 5 - - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 2.IBEditorWindowLastContentRect - 2.IBPluginDependency - - - YES - RootViewController - UIResponder - {{144, 609}, {320, 247}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - YES - - - - - YES - - - YES - - - - 5 - - - - YES - - RootViewController - UITableViewController - - IBProjectSource - RootViewController.h - - - - - YES - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSNetServices.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSPort.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSStream.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSXMLParser.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UIResponder - NSObject - - - - UIScrollView - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIScrollView.h - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UITableView - UIScrollView - - IBFrameworkSource - UIKit.framework/Headers/UITableView.h - - - - UITableViewController - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITableViewController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - Testable.xcodeproj - 3 - 81 - - diff --git a/Pods/KIF/Documentation/Examples/Testable/Testable/main.m b/Pods/KIF/Documentation/Examples/Testable/Testable/main.m deleted file mode 100755 index cddbc3d..0000000 --- a/Pods/KIF/Documentation/Examples/Testable/Testable/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// Testable -// -// Created by Eric Firestone on 6/2/11. -// Licensed to Square, Inc. under one or more contributor license agreements. -// See the LICENSE file distributed with this work for the terms under -// which Square, Inc. licenses this file to you. - -#import - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - int retVal = UIApplicationMain(argc, argv, nil, nil); - return retVal; - } -} diff --git a/Pods/KIF/Documentation/Images/Add Category Linker Flags.png b/Pods/KIF/Documentation/Images/Add Category Linker Flags.png deleted file mode 100755 index 44871d3..0000000 Binary files a/Pods/KIF/Documentation/Images/Add Category Linker Flags.png and /dev/null differ diff --git a/Pods/KIF/Documentation/Images/Add Header Search Paths.png b/Pods/KIF/Documentation/Images/Add Header Search Paths.png deleted file mode 100755 index 9a5f168..0000000 Binary files a/Pods/KIF/Documentation/Images/Add Header Search Paths.png and /dev/null differ diff --git a/Pods/KIF/Documentation/Images/Add KIF Preprocessor Macro.png b/Pods/KIF/Documentation/Images/Add KIF Preprocessor Macro.png deleted file mode 100755 index d2e4a2f..0000000 Binary files a/Pods/KIF/Documentation/Images/Add KIF Preprocessor Macro.png and /dev/null differ diff --git a/Pods/KIF/Documentation/Images/Add Library Sheet.png b/Pods/KIF/Documentation/Images/Add Library Sheet.png deleted file mode 100755 index ae72efe..0000000 Binary files a/Pods/KIF/Documentation/Images/Add Library Sheet.png and /dev/null differ diff --git a/Pods/KIF/Documentation/Images/Add Library.png b/Pods/KIF/Documentation/Images/Add Library.png deleted file mode 100755 index 075ad8d..0000000 Binary files a/Pods/KIF/Documentation/Images/Add Library.png and /dev/null differ diff --git a/Pods/KIF/Documentation/Images/Create Workspace.png b/Pods/KIF/Documentation/Images/Create Workspace.png deleted file mode 100755 index a729d87..0000000 Binary files a/Pods/KIF/Documentation/Images/Create Workspace.png and /dev/null differ diff --git a/Pods/KIF/Documentation/Images/Duplicate Target Confirmation.png b/Pods/KIF/Documentation/Images/Duplicate Target Confirmation.png deleted file mode 100755 index ec1380d..0000000 Binary files a/Pods/KIF/Documentation/Images/Duplicate Target Confirmation.png and /dev/null differ diff --git a/Pods/KIF/Documentation/Images/Duplicate Target.png b/Pods/KIF/Documentation/Images/Duplicate Target.png deleted file mode 100755 index 98b3b10..0000000 Binary files a/Pods/KIF/Documentation/Images/Duplicate Target.png and /dev/null differ diff --git a/Pods/KIF/Documentation/Images/Rename Product.png b/Pods/KIF/Documentation/Images/Rename Product.png deleted file mode 100755 index bacde80..0000000 Binary files a/Pods/KIF/Documentation/Images/Rename Product.png and /dev/null differ diff --git a/Pods/KIF/Documentation/Images/Rename Target.png b/Pods/KIF/Documentation/Images/Rename Target.png deleted file mode 100755 index f141cab..0000000 Binary files a/Pods/KIF/Documentation/Images/Rename Target.png and /dev/null differ diff --git a/Pods/KIF/KIF.xcodeproj/project.pbxproj b/Pods/KIF/KIF.xcodeproj/project.pbxproj deleted file mode 100755 index 8aefd7e..0000000 --- a/Pods/KIF/KIF.xcodeproj/project.pbxproj +++ /dev/null @@ -1,328 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 39160B1113D1E6BB00311E38 /* LoadableCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 39160B1013D1E6BB00311E38 /* LoadableCategory.h */; }; - AAB0726C139719AC008AF393 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB0726B139719AC008AF393 /* Foundation.framework */; }; - AAB0728213971A63008AF393 /* KIF-Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = AAB0728113971A63008AF393 /* KIF-Prefix.pch */; }; - AAB0728D13971A98008AF393 /* KIFTestController.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0728613971A98008AF393 /* KIFTestController.h */; }; - AAB0728E13971A98008AF393 /* KIFTestController.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0728713971A98008AF393 /* KIFTestController.m */; }; - AAB0728F13971A98008AF393 /* KIFTestScenario.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0728813971A98008AF393 /* KIFTestScenario.h */; }; - AAB0729013971A98008AF393 /* KIFTestScenario.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0728913971A98008AF393 /* KIFTestScenario.m */; }; - AAB0729113971A98008AF393 /* KIFTestStep.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0728A13971A98008AF393 /* KIFTestStep.h */; }; - AAB0729213971A98008AF393 /* KIFTestStep.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0728B13971A98008AF393 /* KIFTestStep.m */; }; - AAB072A413971AB2008AF393 /* CGGeometry-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729413971AB2008AF393 /* CGGeometry-KIFAdditions.h */; }; - AAB072A513971AB2008AF393 /* CGGeometry-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729513971AB2008AF393 /* CGGeometry-KIFAdditions.m */; }; - AAB072A613971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729613971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.h */; }; - AAB072A713971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729713971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.m */; }; - AAB072A813971AB2008AF393 /* UIApplication-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729813971AB2008AF393 /* UIApplication-KIFAdditions.h */; }; - AAB072A913971AB2008AF393 /* UIApplication-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729913971AB2008AF393 /* UIApplication-KIFAdditions.m */; }; - AAB072AA13971AB2008AF393 /* UIScrollView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729A13971AB2008AF393 /* UIScrollView-KIFAdditions.h */; }; - AAB072AB13971AB2008AF393 /* UIScrollView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729B13971AB2008AF393 /* UIScrollView-KIFAdditions.m */; }; - AAB072AC13971AB2008AF393 /* UITouch-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729C13971AB2008AF393 /* UITouch-KIFAdditions.h */; }; - AAB072AD13971AB2008AF393 /* UITouch-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729D13971AB2008AF393 /* UITouch-KIFAdditions.m */; }; - AAB072B013971AB2008AF393 /* UIView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB072A013971AB2008AF393 /* UIView-KIFAdditions.h */; }; - AAB072B113971AB2008AF393 /* UIView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB072A113971AB2008AF393 /* UIView-KIFAdditions.m */; }; - AAB072B213971AB2008AF393 /* UIWindow-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB072A213971AB2008AF393 /* UIWindow-KIFAdditions.h */; }; - AAB072B313971AB2008AF393 /* UIWindow-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB072A313971AB2008AF393 /* UIWindow-KIFAdditions.m */; }; - AAB072B513971AEA008AF393 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB072B413971AEA008AF393 /* UIKit.framework */; }; - CDFD8E86139728B4008D299F /* NSFileManager-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CDFD8E84139728B4008D299F /* NSFileManager-KIFAdditions.h */; }; - CDFD8E87139728B4008D299F /* NSFileManager-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFD8E85139728B4008D299F /* NSFileManager-KIFAdditions.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 39160B1013D1E6BB00311E38 /* LoadableCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadableCategory.h; sourceTree = ""; }; - AAB07268139719AC008AF393 /* libKIF.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libKIF.a; sourceTree = BUILT_PRODUCTS_DIR; }; - AAB0726B139719AC008AF393 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - AAB0728113971A63008AF393 /* KIF-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "KIF-Prefix.pch"; path = "Classes/KIF-Prefix.pch"; sourceTree = SOURCE_ROOT; }; - AAB0728513971A98008AF393 /* KIF-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KIF-Prefix.pch"; sourceTree = ""; }; - AAB0728613971A98008AF393 /* KIFTestController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIFTestController.h; sourceTree = ""; }; - AAB0728713971A98008AF393 /* KIFTestController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIFTestController.m; sourceTree = ""; }; - AAB0728813971A98008AF393 /* KIFTestScenario.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIFTestScenario.h; sourceTree = ""; }; - AAB0728913971A98008AF393 /* KIFTestScenario.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIFTestScenario.m; sourceTree = ""; }; - AAB0728A13971A98008AF393 /* KIFTestStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIFTestStep.h; sourceTree = ""; }; - AAB0728B13971A98008AF393 /* KIFTestStep.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIFTestStep.m; sourceTree = ""; }; - AAB0729413971AB2008AF393 /* CGGeometry-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CGGeometry-KIFAdditions.h"; sourceTree = ""; }; - AAB0729513971AB2008AF393 /* CGGeometry-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CGGeometry-KIFAdditions.m"; sourceTree = ""; }; - AAB0729613971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIAccessibilityElement-KIFAdditions.h"; sourceTree = ""; }; - AAB0729713971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIAccessibilityElement-KIFAdditions.m"; sourceTree = ""; }; - AAB0729813971AB2008AF393 /* UIApplication-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIApplication-KIFAdditions.h"; sourceTree = ""; }; - AAB0729913971AB2008AF393 /* UIApplication-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIApplication-KIFAdditions.m"; sourceTree = ""; }; - AAB0729A13971AB2008AF393 /* UIScrollView-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView-KIFAdditions.h"; sourceTree = ""; }; - AAB0729B13971AB2008AF393 /* UIScrollView-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView-KIFAdditions.m"; sourceTree = ""; }; - AAB0729C13971AB2008AF393 /* UITouch-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITouch-KIFAdditions.h"; sourceTree = ""; }; - AAB0729D13971AB2008AF393 /* UITouch-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITouch-KIFAdditions.m"; sourceTree = ""; }; - AAB072A013971AB2008AF393 /* UIView-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView-KIFAdditions.h"; sourceTree = ""; }; - AAB072A113971AB2008AF393 /* UIView-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView-KIFAdditions.m"; sourceTree = ""; }; - AAB072A213971AB2008AF393 /* UIWindow-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWindow-KIFAdditions.h"; sourceTree = ""; }; - AAB072A313971AB2008AF393 /* UIWindow-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWindow-KIFAdditions.m"; sourceTree = ""; }; - AAB072B413971AEA008AF393 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - CDFD8E84139728B4008D299F /* NSFileManager-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSFileManager-KIFAdditions.h"; sourceTree = ""; }; - CDFD8E85139728B4008D299F /* NSFileManager-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFileManager-KIFAdditions.m"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - AAB07265139719AC008AF393 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AAB0726C139719AC008AF393 /* Foundation.framework in Frameworks */, - AAB072B513971AEA008AF393 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - AAB0725D139719AC008AF393 = { - isa = PBXGroup; - children = ( - AAB0729313971AB2008AF393 /* Additions */, - AAB0728413971A98008AF393 /* Classes */, - AAB0726E139719AC008AF393 /* Supporting Files */, - AAB0726A139719AC008AF393 /* Frameworks */, - AAB07269139719AC008AF393 /* Products */, - ); - sourceTree = ""; - }; - AAB07269139719AC008AF393 /* Products */ = { - isa = PBXGroup; - children = ( - AAB07268139719AC008AF393 /* libKIF.a */, - ); - name = Products; - sourceTree = ""; - }; - AAB0726A139719AC008AF393 /* Frameworks */ = { - isa = PBXGroup; - children = ( - AAB072B413971AEA008AF393 /* UIKit.framework */, - AAB0726B139719AC008AF393 /* Foundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - AAB0726E139719AC008AF393 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - AAB0728113971A63008AF393 /* KIF-Prefix.pch */, - ); - name = "Supporting Files"; - path = KIF; - sourceTree = ""; - }; - AAB0728413971A98008AF393 /* Classes */ = { - isa = PBXGroup; - children = ( - AAB0728513971A98008AF393 /* KIF-Prefix.pch */, - AAB0728613971A98008AF393 /* KIFTestController.h */, - AAB0728713971A98008AF393 /* KIFTestController.m */, - AAB0728813971A98008AF393 /* KIFTestScenario.h */, - AAB0728913971A98008AF393 /* KIFTestScenario.m */, - AAB0728A13971A98008AF393 /* KIFTestStep.h */, - AAB0728B13971A98008AF393 /* KIFTestStep.m */, - ); - path = Classes; - sourceTree = ""; - }; - AAB0729313971AB2008AF393 /* Additions */ = { - isa = PBXGroup; - children = ( - 39160B1013D1E6BB00311E38 /* LoadableCategory.h */, - AAB0729413971AB2008AF393 /* CGGeometry-KIFAdditions.h */, - AAB0729513971AB2008AF393 /* CGGeometry-KIFAdditions.m */, - CDFD8E84139728B4008D299F /* NSFileManager-KIFAdditions.h */, - CDFD8E85139728B4008D299F /* NSFileManager-KIFAdditions.m */, - AAB0729613971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.h */, - AAB0729713971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.m */, - AAB0729813971AB2008AF393 /* UIApplication-KIFAdditions.h */, - AAB0729913971AB2008AF393 /* UIApplication-KIFAdditions.m */, - AAB0729A13971AB2008AF393 /* UIScrollView-KIFAdditions.h */, - AAB0729B13971AB2008AF393 /* UIScrollView-KIFAdditions.m */, - AAB0729C13971AB2008AF393 /* UITouch-KIFAdditions.h */, - AAB0729D13971AB2008AF393 /* UITouch-KIFAdditions.m */, - AAB072A013971AB2008AF393 /* UIView-KIFAdditions.h */, - AAB072A113971AB2008AF393 /* UIView-KIFAdditions.m */, - AAB072A213971AB2008AF393 /* UIWindow-KIFAdditions.h */, - AAB072A313971AB2008AF393 /* UIWindow-KIFAdditions.m */, - ); - path = Additions; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - AAB07266139719AC008AF393 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - AAB0728213971A63008AF393 /* KIF-Prefix.pch in Headers */, - AAB0728D13971A98008AF393 /* KIFTestController.h in Headers */, - AAB0728F13971A98008AF393 /* KIFTestScenario.h in Headers */, - AAB0729113971A98008AF393 /* KIFTestStep.h in Headers */, - AAB072A413971AB2008AF393 /* CGGeometry-KIFAdditions.h in Headers */, - AAB072A613971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.h in Headers */, - AAB072A813971AB2008AF393 /* UIApplication-KIFAdditions.h in Headers */, - AAB072AA13971AB2008AF393 /* UIScrollView-KIFAdditions.h in Headers */, - AAB072AC13971AB2008AF393 /* UITouch-KIFAdditions.h in Headers */, - AAB072B013971AB2008AF393 /* UIView-KIFAdditions.h in Headers */, - AAB072B213971AB2008AF393 /* UIWindow-KIFAdditions.h in Headers */, - CDFD8E86139728B4008D299F /* NSFileManager-KIFAdditions.h in Headers */, - 39160B1113D1E6BB00311E38 /* LoadableCategory.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - AAB07267139719AC008AF393 /* KIF */ = { - isa = PBXNativeTarget; - buildConfigurationList = AAB07272139719AC008AF393 /* Build configuration list for PBXNativeTarget "KIF" */; - buildPhases = ( - AAB07264139719AC008AF393 /* Sources */, - AAB07265139719AC008AF393 /* Frameworks */, - AAB07266139719AC008AF393 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = KIF; - productName = KIF; - productReference = AAB07268139719AC008AF393 /* libKIF.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - AAB0725F139719AC008AF393 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0430; - }; - buildConfigurationList = AAB07262139719AC008AF393 /* Build configuration list for PBXProject "KIF" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = AAB0725D139719AC008AF393; - productRefGroup = AAB07269139719AC008AF393 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - AAB07267139719AC008AF393 /* KIF */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - AAB07264139719AC008AF393 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAB0728E13971A98008AF393 /* KIFTestController.m in Sources */, - AAB0729013971A98008AF393 /* KIFTestScenario.m in Sources */, - AAB0729213971A98008AF393 /* KIFTestStep.m in Sources */, - AAB072A513971AB2008AF393 /* CGGeometry-KIFAdditions.m in Sources */, - AAB072A713971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.m in Sources */, - AAB072A913971AB2008AF393 /* UIApplication-KIFAdditions.m in Sources */, - AAB072AB13971AB2008AF393 /* UIScrollView-KIFAdditions.m in Sources */, - AAB072AD13971AB2008AF393 /* UITouch-KIFAdditions.m in Sources */, - AAB072B113971AB2008AF393 /* UIView-KIFAdditions.m in Sources */, - AAB072B313971AB2008AF393 /* UIWindow-KIFAdditions.m in Sources */, - CDFD8E87139728B4008D299F /* NSFileManager-KIFAdditions.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - AAB07270139719AC008AF393 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = DEBUG; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvmgcc42; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - SDKROOT = iphoneos; - }; - name = Debug; - }; - AAB07271139719AC008AF393 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_VERSION = com.apple.compilers.llvmgcc42; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - SDKROOT = iphoneos; - }; - name = Release; - }; - AAB07273139719AC008AF393 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - DSTROOT = /tmp/KIF.dst; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Classes/KIF-Prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - AAB07274139719AC008AF393 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - DSTROOT = /tmp/KIF.dst; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Classes/KIF-Prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - AAB07262139719AC008AF393 /* Build configuration list for PBXProject "KIF" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AAB07270139719AC008AF393 /* Debug */, - AAB07271139719AC008AF393 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AAB07272139719AC008AF393 /* Build configuration list for PBXNativeTarget "KIF" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AAB07273139719AC008AF393 /* Debug */, - AAB07274139719AC008AF393 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = AAB0725F139719AC008AF393 /* Project object */; -} diff --git a/Pods/KIF/LICENSE b/Pods/KIF/LICENSE old mode 100755 new mode 100644 diff --git a/Pods/KIF/README.md b/Pods/KIF/README.md old mode 100755 new mode 100644 index 0d8fc16..db2d837 --- a/Pods/KIF/README.md +++ b/Pods/KIF/README.md @@ -3,10 +3,14 @@ KIF iOS Integration Testing Framework KIF, which stands for Keep It Functional, is an iOS integration test framework. It allows for easy automation of iOS apps by leveraging the accessibility attributes that the OS makes available for those with visual disabilities. +KIF-next is a branch of KIF which builds and performs the tests using a standard `ocunit` testing target. Testing is conducted synchronously (running the run loop to force the passage of time) rather than by constructing an array of steps allowing for more complex logic and composition. This also allows KIF-next to take advantage of the Xcode 5 Test Navigator, command line build tools, and Bot test reports. [Find out more about Xcode 5 features.](https://developer.apple.com/technologies/tools/whats-new.html) + **KIF uses undocumented Apple APIs.** This is true of most iOS testing frameworks, and is safe for testing purposes, but it's important that KIF does not make it into production code, as it will get your app submission denied by Apple. Follow the instructions below to ensure that KIF is configured correctly for your project. There's [a port underway to use KIF with Mac OS X apps](https://github.com/joshaber/KIF), as well. +**Note:** KIF 2.0 is not API compatible with KIF 1.0 and uses a different test execution mechanism. KIF 1.0 can be found in the [Releases](https://github.com/kif-framework/KIF/releases/) section or on [CocoaPods](http://cocoapods.org). + Features -------- @@ -19,20 +23,46 @@ KIF integrates directly into your iOS app, so there's no need to run an addition #### Test Like a User KIF attempts to imitate actual user input. Automation is done using tap events wherever possible. +#### Automatic Integration with Xcode 5 Testing Tools +Xcode 5 introduces [new testing an continuous integration tools](https://developer.apple.com/technologies/tools/whats-new.html) built on the same testing platform as KIF-next. You can easily run a single KIF test with the Test Navigator or kick off nightly acceptance tests with Bots. -Installation ------------- +See KIF in Action +----------------- + +KIF-next uses techniques described below to validate its internal functionality. You can see a test suite that exercises its entire functionality by simply building and testing the KIF scheme with ⌘U. Look at the tests in the "KIF Tests" group for ideas on how to build your own tests. + +Installation (with CocoaPods) +----------------------------- + +[CocoaPods](http://cocoapods.org) are the easiest way to get set up with KIF. + +The first thing you will want to do is set up a test target you will be using for KIF. You may already have one named *MyApplication*_Tests if you selected to automatically create unit tests. If you did, you can keep using it if you aren't using it for unit tests. Otherwise, follow these directions to create a new one. + +Select your project in Xcode and click on "Add Target" in the bottom left corner of the editor. Select iOS -> Other -> Cocoa Touch Unit Testing Bundle. Give it a product name like "Acceptance Tests", "UI Tests", or something that indicates the intent of your testing process. You can select "Use Automatic Reference Counting" even if the remainder of your app doesn't, just to make your life easier. + +The testing target will add a header and implementation file, likely "Acceptance_Tests.m/h" to match your target name. Delete those. + +Once your test target set up, add the following to your Podspec file. Use your target's name as appropriate. + + target 'Acceptance Tests' do + pod 'KIF', '~> 2.0' + end + +After running `pod install` complete the tasks in [**Final Test Target Configurations**](#configure-the-testing-target) below for the final details on getting your tests to run. -To install KIF, you'll need to link the libKIF static library directly into your application. Download the source from the [KIF GitHub repository](https://github.com/square/KIF) and follow the instructions below. +Installation (from GitHub) +-------------------------- -*NOTE* These instruction assume you are using Xcode 4. For Xcode 3 you won't be able to take advantage of Workspaces, so the instructions will differ slightly. +To install KIF, you'll need to link the libKIF static library directly into your application. Download the source from the [bnickel/KIF/tree/kif-next](https://github.com/bnickel/KIF/tree/kif-next) and follow the instructions below. + +*NOTE* These instruction assume you are using Xcode 4 or later. For Xcode 3 you won't be able to take advantage of Workspaces, so the instructions will differ slightly. ### Add KIF to your project files The first step is to add the KIF project into the ./Frameworks/KIF subdirectory of your existing app. If your project uses Git for version control, you can use submodules to make updating in the future easier: cd /path/to/MyApplicationSource mkdir Frameworks - git submodule add https://github.com/square/KIF.git Frameworks/KIF + git submodule add -b KIF-next https://github.com/square/KIF.git Frameworks/KIF If you're not using Git, simply download the source and copy it into the ./Frameworks/KIF directory. @@ -42,262 +72,157 @@ Let your project know about KIF by adding the KIF project into a workspace along ![Create workspace screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Create Workspace.png) ### Create a Testing Target -You'll need to create a second target for the KIF-enabled version of the app to test. This gives you an easy way to begin testing -- just run this second target -- and also helps make sure that no testing code ever makes it into your App Store submission and gets your app rejected. - -The new target will start as a duplicate of your old target. To create the duplicate target, select the project file for your app in the Project Navigator. From there, CTRL+click the target for your app and select the "Duplicate" option. - -![Duplicate target screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Duplicate Target.png) - -Xcode may ask you if you want your copy to be for a different iOS device, which you don't, so choose "Duplicate Only". - -![Duplicate target confirmation screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Duplicate Target Confirmation.png) - -The new target will be created and you can rename it to something like "Integration Tests" if you wish. +You'll need to create a test target for your app. You may already have one named *MyApplication*_Tests if you selected to automatically create unit tests. If you did, you can keep using it if you aren't using it for unit tests. Otherwise, follow these directions to create a new one. -![Rename target screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Rename Target.png) +Select your project in Xcode and click on "Add Target" in the bottom left corner of the editor. Select iOS -> Other -> Cocoa Touch Unit Testing Bundle. Give it a product name like "Acceptance Tests", "UI Tests", or something that indicates the intent of your testing process. You can select "Use Automatic Reference Counting" even if the remainder of your app doesn't, just to make your life easier. -You can also (optionally) rename the new target from the default "MyApp copy" to something like "MyApp (Integration Tests)" by selecting the "Build Settings" tab and searching for "Product Name", then changing the value to what you want. - -![Rename product screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Rename Product.png) +The testing target will add a header and implementation file, likely "Acceptance_Tests.m/h" to match your target name. Delete those. ### Configure the Testing Target -Now that you have a target for your tests, add the tests to that target. With the project settings still selected in the Project Navigator, and the new integration tests target selected in the project settings, select the "Build Phases" tab. Under the "Link Binary With Libraries" section, hit the "+" button. In the sheet that appears, select "libKIF.a" and click "Add". +Now that you have a target for your tests, add the tests to that target. With the project settings still selected in the Project Navigator, and the new integration tests target selected in the project settings, select the "Build Phases" tab. Under the "Link Binary With Libraries" section, hit the "+" button. In the sheet that appears, select "libKIF.a" and click "Add". Repeat the process for CoreGraphics.framework. ![Add libKIF library screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Add Library.png) ![Add libKIF library screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Add Library Sheet.png) -Next, make sure that we can access the KIF header files. To do this, add the KIF directory to the "Header Search Paths" build setting. Start by selecting the "Build Settings" tab of the project settings, and from there, use the filter control to find the "Header Search Paths" setting. Double click the value, and add the search path `$(SRCROOT)/Frameworks/KIF/` to the list. Mark the entry as recursive. If it's not there already, you should add the `$(inherited)` entry as the first entry in this list. +KIF takes advantage of Objective C's ability to add categories on an object, but this isn't enabled for static libraries by default. To enable this, add the `-ObjC` flag to the "Other Linker Flags" build setting as shown below. -![Add header search paths screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Add Header Search Paths.png) +![Add category linker flags screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Add Category Linker Flags.png) -KIF takes advantage of Objective C's ability to add categories on an object, but this isn't enabled for static libraries by default. To enable this, add the `-ObjC` and `-all_load` flags to the "Other Linker Flags" build setting as shown below. +Read **Final Test Target Configurations** below for the final details on getting your tests to run. -![Add category linker flags screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Add Category Linker Flags.png) +Final Test Target Configurations +-------------------------------- -Finally, add a preprocessor flag to the testing target so that you can conditionally include code. This will help make sure that none of the testing code makes it into the production app. Call the flag `RUN_KIF_TESTS` and add it under the "Preprocessor Macros." Again, make sure the `$(inherited)` entry is first in the list, +You need your tests to run hosted in your application. To do this, first add your application by first selecting "Build Phases", expanding the "Target Dependencies" section, clicking on the "+" button, and in the new sheet that appears selecting your application target and clicking "Add". -![Add preprocessor macro screen shot](https://github.com/square/KIF/raw/master/Documentation/Images/Add KIF Preprocessor Macro.png) +Next, configure your bundle loader. In "Build Settings", expand "Linking" and edit "Bundle Loader" to be `$(BUILT_PRODUCTS_DIR)/My App.app/My App` where *My App* is the name of your app. Expand the "Unit Testing" section and edit "Test Host" to be `$(BUNDLE_LOADER)`. Also make sure that "Wrapper Extension" is set to "octest". + +The last step is to configure your unit tests to run when you trigger a test (⌘U). Click on your scheme name and select "Edit Scheme…". Click on "Test" in the sidebar followed by the "+" in the bottom left corner. Select your testing target and click "OK". Example ------- -With your project configured to use KIF, it's time to start writing tests. There are three main classes used in KIF testing: the test runner (`KIFTestController`), a testable scenario (`KIFTestScenario`), and a test step (`KIFTestStep`). The test runner is composed of a list of scenarios that it runs, and in turn each scenario is composed of a list of steps. A step is a small and simple action which is generally used to imitate a user interaction. Three of the most common steps are "tap this view," "enter text into this view," and "wait for this view." These steps are included as factory methods on `KIFTestStep` in the base KIF implementation. +With your project configured to use KIF, it's time to start writing tests. There are two main classes used in KIF testing: the the test case (`KIFTestCase`, subclass of `SenTestCase`) and the UI test actor (`KIFUITestActor`). The the ocunit test runner loads the test case classes and executes their test. Inside these tests, the tester performs the UI operations which generally imitate a user interaction. Three of the most common tester actions are "tap this view," "enter text into this view," and "wait for this view." These steps are included as factory methods on `KIFUITestActor` in the base KIF implementation. KIF relies on the built-in accessibility of iOS to perform its test steps. As such, it's important that your app is fully accessible. This is also a great way to ensure that your app is usable by the sight impaired. Making your application accessible is usually as easy as giving your views reasonable labels. More details are available in [Apple's Documentation](http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/iPhoneAccessibility/Making_Application_Accessible/Making_Application_Accessible.html#//apple_ref/doc/uid/TP40008785-CH102-SW5). -Although not required, it's recommended that you create a subclass of `KIFTestController` that is specific to your application. This subclass will override the `-initializeScenarios` method, which will contain a list of invocations for the scenarios that your test suite will run. We'll call our subclass `EXTestController`, and will add an initial test scenario, which we will define later. - -*EXTestController.h* +The first step is to create a test class to test some functionality. In our case, we will create a login test (`LoginTests`). Create a new class that inherits from KIFTestCase. You may have to update the import to point to ``. The test method name provides a unique identifier. Your `KIFTestCase` subclass should look something like this: - #import - #import "KIFTestController.h" - - @interface EXTestController : KIFTestController {} +*LoginTestCase.h* + #import + + @interface LoginTests : KIFTestCase @end -*EXTestController.m* +*LoginTestCase.m* - #import "EXTestController.h" + #import "LoginTests.h" + #import "KIFUITestActor+EXAdditions.h" - @implementation EXTestController + @implementation LoginTests - - (void)initializeScenarios; + - (void)beforeEach { - [self addScenario:[KIFTestScenario scenarioToLogIn]]; - // Add additional scenarios you want to test here + [tester navigateToLoginPage]; } - - @end - -The next step is to implement a scenario to test the login (`+[KIFTestScenario scenarioToLogin]`). We'll implement the scenarios as category class methods on `KIFTestScenario`. This will allow us to easily add on these category methods without needing additional subclasses, and the method name provides a unique identifier for referencing each scenario. Your `KIFTestScenario` category should look something like this: - -*KIFTestScenario+EXAdditions.h* - - #import - #import "KIFTestScenario.h" - - @interface KIFTestScenario (EXAdditions) - - + (id)scenarioToLogIn; - - @end - -*KIFTestScenario+EXAdditions.m* - - #import "KIFTestScenario+EXAdditions.h" - #import "KIFTestStep.h" - #import "KIFTestStep+EXAdditions.h" - - @implementation KIFTestScenario (EXAdditions) - - + (id)scenarioToLogIn; + + - (void)afterEach { - KIFTestScenario *scenario = [KIFTestScenario scenarioWithDescription:@"Test that a user can successfully log in."]; - [scenario addStep:[KIFTestStep stepToReset]]; - [scenario addStepsFromArray:[KIFTestStep stepsToGoToLoginPage]]; - [scenario addStep:[KIFTestStep stepToEnterText:@"user@example.com" intoViewWithAccessibilityLabel:@"Login User Name"]]; - [scenario addStep:[KIFTestStep stepToEnterText:@"thisismypassword" intoViewWithAccessibilityLabel:@"Login Password"]]; - [scenario addStep:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"Log In"]]; - - // Verify that the login succeeded - [scenario addStep:[KIFTestStep stepToWaitForTappableViewWithAccessibilityLabel:@"Welcome"]]; - - return scenario; + [tester returnToLoggedOutHomeScreen]; } - - @end - -Most of the steps in the scenario are already defined by the KIF framework, but `+stepToReset` is not. This is an example of a custom step which is specific to your application. Adding such a step is easy, and is done using a factory method in a category of `KIFTestStep`, similar to how we added the scenario. - -*KIFTestStep+EXAdditions.h* - - #import - #import "KIFTestStep.h" - - @interface KIFTestStep (EXAdditions) - - + (id)stepToReset; - - @end - -*KIFTestStep+EXAdditions.m* - - #import "KIFTestStep+EXAdditions.h" - - @implementation KIFTestStep (EXAdditions) - - + (id)stepToReset; + + - (void)testSuccessfulLogin { - return [KIFTestStep stepWithDescription:@"Reset the application state." executionBlock:^(KIFTestStep *step, NSError **error) { - BOOL successfulReset = YES; - - // Do the actual reset for your app. Set successfulReset = NO if it fails. - - KIFTestCondition(successfulReset, error, @"Failed to reset the application."); - - return KIFTestStepResultSuccess; - }]; - } + [tester enterText:@"user@example.com" intoViewWithAccessibilityLabel:@"Login User Name"]; + [tester enterText:@"thisismypassword" intoViewWithAccessibilityLabel:@"Login Password"]; + [tester tapViewWithAccessibilityLabel:@"Log In"]; + // Verify that the login succeeded + [tester waitForTappableViewWithAccessibilityLabel:@"Welcome"]; + } + @end -The other line to notice in the sample scenario is the one that calls `+[KIFTestStep stepsToGoToLoginPage]`. This is an example of an organizational technique which allows for easy code reuse. If you have a set of steps that are reused in a number of your scenarios, then you can group them together as a factory method that returns them as an array. Here's the `KIFTestStep` category again, this time including the step collection array: - -*KIFTestStep+EXAdditions.h* - - #import - #import "KIFTestStep.h" - - @interface KIFTestStep (EXAdditions) - - // Factory Steps +Most of the tester actions in the test are already defined by the KIF framework, but `-navigateToLoginPage` and `-returnToLoggedOutHomeScreen` are not. These are examples of custom actions which are specific to your application. Adding such steps is easy, and is done using a factory method in a category of `KIFUITestActor`, similar to how we added the scenario. - + (id)stepToReset; +*KIFUITestActor+EXAdditions.h* - // Step Collections + #import - // Assumes the application was reset and sitting at the welcome screen - + (NSArray *)stepsToGoToLoginPage; + @interface KIFUITestActor (EXAdditions) + + - (void)navigateToLoginPage; + - (void)returnToLoggedOutHomeScreen; @end -*KIFTestStep+EXAdditions.m* - - #import "KIFTestStep+EXAdditions.h" +*KIFUITestActor+EXAdditions.m* - @implementation KIFTestStep (EXAdditions) + #import "KIFUITestActor+EXAdditions.h" - #pragma mark - Factory Steps + @implementation KIFUITestActor (EXAdditions) - + (id)stepToReset; + - (void)navigateToLoginPage { - return [KIFTestStep stepWithDescription:@"Reset the application state." executionBlock:^(KIFTestStep *step, NSError **error) { - BOOL successfulReset = YES; - - // Do the actual reset for your app. Set successfulReset = NO if it fails. - - KIFTestCondition(successfulReset, error, @"Failed to reset some part of the application."); - - return KIFTestStepResultSuccess; - }]; + [self tapViewWithAccessibilityLabel:@"Login/Sign Up"]; + [self tapViewWithAccessibilityLabel:@"Skip this ad"]; } - #pragma mark - Step Collections - - + (NSArray *)stepsToGoToLoginPage; + - (void)returnToLoggedOutHomeScreen { - NSMutableArray *steps = [NSMutableArray array]; - - // Dismiss the welcome message - [steps addObject:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"That's awesome!"]]; - - // Tap the "I already have an account" button - [steps addObject:[KIFTestStep stepToTapViewWithAccessibilityLabel:@"I already have an account."]]; - - return steps; + [self tapViewWithAccessibilityLabel:@"Logout"]; + [self tapViewWithAccessibilityLabel:@"Logout"]; // Dismiss alert. } @end -Finally, the app needs a hook so that it actually runs the KIF tests when executing the Integration Tests target. To do this we'll take advantage of the `RUN_KIF_TESTS` macro that was defined earlier. This macro is only defined in the testing target, so the tests won't run in the regular target. To invoke the test suite, add the following code to the end of the `-application:didFinishLaunchingWithOptions:` method in your application delegate: - - #if RUN_KIF_TESTS - [[EXTestController sharedInstance] startTestingWithCompletionBlock:^{ - // Exit after the tests complete so that CI knows we're done - exit([[EXTestController sharedInstance] failureCount]); - }]; - #endif - -Everything should now be configured. When you run the integration tests target it will launch your app and begin running the testing scenarios. When the scenarios finish, the app will exit and return a zero if all scenarios pass, or the number of failures if any fail. - -KIF also generates a nicely formatted log containing the full results and timings of the test suite run. The logs can be found in - - ~/Library/Application Support/iPhone Simulator//Applications//Library/Logs/ - -For a simple but complete example of KIF in action, check out the Testable sample project in Documentation/Examples. +Everything should now be configured. When you run the integration tests using the test button, ⌘U, or the Xcode 5 Test Navigator (⌘5). -Environment Variables ---------------------- +Use with other testing frameworks +--------------------------------- -You can set a number of environment variables to unlock hidden features of KIF. +`KIFTestCase` is not necessary for running KIF tests. Tests can run directly in `SenTestCase` or any subclass. The basic requirement is that when you call `tester` or `system`, `self` must be an instance of `SenTestCase`. -### `KIF_SCREENSHOTS` +For example, the following [Specta](https://github.com/specta/specta) test works without any changes to KIF or Specta: -Set `KIF_SCREENSHOTS` to the full path to a folder on your computer to have KIF output a screenshot of your app as it appears when any given step fails. + #import + #import -### `KIF_FAILURE_FILE` + SpecBegin(App) -Set `KIF_FAILURE_FILE` to the full path to a file on your computer -- that need not exist -- to have KIF keep track of the failing scenarios it encounters during a test run. If any scenarios fail during a run and `KIF_FAILURE_FILE` is set, the next run will only run the scenarios that failed the previous time. Once all of the scenarios succeed again, KIF will return to running all scenarios. This is useful if you're fixing a failing scenario, as it allows you to jump right back to where the problem was. - -### `KIF_SCENARIO_FILTER` + describe(@"Tab controller", ^{ + + it(@"should show second view when I tap on the second tab", ^{ + [tester tapViewWithAccessibilityLabel:@"Second" traits:UIAccessibilityTraitButton]; + [tester waitForViewWithAccessibilityLabel:@"Second View"]; + }); + + }); -Set `KIF_SCENARIO_FILTER` to a regular expression and KIF will only run scenarios with descriptions matching the expression. This can be useful to skip straight to a particular point in your testing suite. + SpecEnd -### `KIF_SCENARIO_LIMIT` +If you want to use KIF with a test runner that does not subclass `SenTestCase`, your runner class just needs to implement the `KIFTestActorDelegate` protocol which contains two required methods. -Set `KIF_SCENARIO_LIMIT` to exit after a certain number of scenarios. This can be useful if you want to divide your test suite among several machines or several devices when combined with `KIF_INITIAL_SKIP_COUNT` below. + - (void)failWithException:(NSException *)exception stopTest:(BOOL)stop; + - (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop; -### `KIF_INITIAL_SKIP_COUNT` +In the first case, the test runner should log the exception and halt the test execution if `stop` is `YES`. In the second, the runner should log all the exceptions and halt the test execution if `stop` is `YES`. The exceptions take advantage of OCUnit's extensions to `NSException` with the properties `lineNumber` and `filename` to be used in recording the error's origin. -Set `KIF_INITIAL_SKIP_COUNT` to skip a certain number of scenarios at the beginning of the testing run. For example, if you wanted to split your suite of 100 scenarios between two iPads, you could set `KIF_SCENARIO_LIMIT` to 50, start the first iPad, then set `KIF_INITIAL_SKIP_COUNT` to 50 and start the second iPad. +Troubleshooting +--------------- -### `KIF_EXIT_ON_FAILURE` +### Simulator launches but app doesn't appear, steps time out after 10 seconds -Set this to a value that evaluates to true to make KIF exit on the first failing scenario. This may be useful if you want to isolate failures or if your app doesn't properly recover when a test fails. +This issue occurs when ocunit does not have a valid test host. When this occurs, ocunit will run your tests in logic mode without an app, which causes the UI tests to fail. -Troubleshooting ---------------- +Reread the instructions above with regards to the "Bundle Loader" and "Test Host" settings. You may have missed something. ### Step fails because a view cannot be found If KIF is failing to find a view, the most likely cause is that the view doesn't have its accessibility label set. If the view is defined in a xib, then the label can be set using the inspector. If it's created programmatically, simply set the accessibilityLabel attribute to the desired label. -If the label is definitely set correctly, take a closer look at the error given by KIF. This error should tell you more specifically why the view was not accessible. If you are using `-stepToWaitForTappableViewWithAccessibilityLabel:`, then make sure the view is actually tappable. For items such as labels which cannot become the first responder, you may need to use `-stepToWaitForViewWithAccessibilityLabel:` instead. - -### Project fails to build because KIF classes are missing - -If your project doesn't build because the compiler can't find the KIF classes, there are common problems. First, check that the header search paths points to the correct location, as described above. Second, make sure that all of your KIF related implementation files (.m files) are included in the correct target. Select each of the your KIF related files and check the Target Membership section of the inspector on the righthand side of Xcode. For each file, *only* the integration tests target should be checked. +If the label is definitely set correctly, take a closer look at the error given by KIF. This error should tell you more specifically why the view was not accessible. If you are using `-waitForTappableViewWithAccessibilityLabel:`, then make sure the view is actually tappable. For items such as labels which cannot become the first responder, you may need to use `-waitForViewWithAccessibilityLabel:` instead. ### Unrecognized selector when first trying to run @@ -306,31 +231,12 @@ If the first time you try to run KIF you get the following error: 2011-06-13 13:54:53.295 Testable (Integration Tests)[12385:207] -[NSFileManager createUserDirectory:]: unrecognized selector sent to instance 0x4e02830 2011-06-13 13:54:53.298 Testable (Integration Tests)[12385:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSFileManager createUserDirectory:]: unrecognized selector sent to instance 0x4e02830' -or if you get another "unrecognized selector" error inside the KIF code, make sure that you've properly set the -ObjC and -all_load flags as described above. Without these flags your app can't access the category methods that are necessary for KIF to work properly. +or if you get another "unrecognized selector" error inside the KIF code, make sure that you've properly set the -ObjC flag as described above. Without this flag your app can't access the category methods that are necessary for KIF to work properly. Continuous Integration ---------------------- -A continuous integration (CI) process is highly recommended and is extremely useful in ensuring that your application stays functional. In order to run our KIF tests in CI, you'll need to be able to launch the simulator from the command line. One tool for accomplishing this is [WaxSim](https://github.com/square/waxsim). Note that the Square fork of WaxSim provides a number of bug fixes and some useful additional functionality. Your CI script should resemble something like the this: - - #!/bin/bash - - killall "iPhone Simulator" - - set -o errexit - set -o verbose - - # Build the "Integration Tests" target to run in the simulator - xcodebuild -target "Integration Tests" -configuration Release -sdk iphonesimulator build - - # Run the app we just built in the simulator and send its output to a file - # /path/to/MyApp.app should be the relative or absolute path to the application bundle that was built in the previous step - /path/to/waxsim -f "ipad" "/path/to/MyApp.app" > /tmp/KIF-$$.out 2>&1 - - # WaxSim hides the return value from the app, so to determine success we search for a "no failures" line - grep -q "TESTING FINISHED: 0 failures" /tmp/KIF-$$.out - -This should provide a strong starting point, but you'll likely want to customize the script further. For example, you may want it to run `iphone` rather than `ipad`, or perhaps both. +A continuous integration (CI) process is highly recommended and is extremely useful in ensuring that your application stays functional. The easiest way to do this will be with Xcode 5, either using Bots, or Jenkins or another tool that uses xcodebuild. For tools using xcodebuild, review the manpage for instructions on using test destinations. Contributing ------------ diff --git a/Pods/Kiwi/.gitignore b/Pods/Kiwi/.gitignore deleted file mode 100755 index bfdbb50..0000000 --- a/Pods/Kiwi/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -.DS_Store -.localized - -# Build directory -build/ - -# XCode user specific files -xcuserdata/ -*.xcworkspace/ -*.mode1v3 -*.mode2v3 -*.perspectivev3 -*.pbxuser diff --git a/Pods/Kiwi/Classes/Core/KWAny.h b/Pods/Kiwi/Classes/Core/KWAny.h new file mode 100644 index 0000000..0e58e60 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWAny.h @@ -0,0 +1,17 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +// KWAny exists to determine arguments in a message pattern that should +// match any value. Used for pointers as well as for scalar values. +@interface KWAny : NSObject + +#pragma mark - Initializing + ++ (id)any; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWAny.m b/Pods/Kiwi/Classes/Core/KWAny.m new file mode 100644 index 0000000..880ae29 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWAny.m @@ -0,0 +1,23 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWAny.h" + +@implementation KWAny + +#pragma mark - Initializing + ++ (id)any { + static KWAny *sharedAny = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedAny = [self new]; + + }); + return sharedAny; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWBlock.h b/Pods/Kiwi/Classes/Core/KWBlock.h new file mode 100644 index 0000000..3a14764 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWBlock.h @@ -0,0 +1,25 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface KWBlock : NSObject + +#pragma mark - Initializing +- (id)initWithBlock:(void (^)(void))block; + ++ (id)blockWithBlock:(void (^)(void))block; + +#pragma mark - Calling Blocks + +- (void)call; + +@end + +#pragma mark - Creating Blocks + +KWBlock *theBlock(void (^block)(void)); +KWBlock *lambda(void (^block)(void)); diff --git a/Pods/Kiwi/Classes/Core/KWBlock.m b/Pods/Kiwi/Classes/Core/KWBlock.m new file mode 100644 index 0000000..39b6b8d --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWBlock.m @@ -0,0 +1,50 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBlock.h" + +@interface KWBlock() + +#pragma mark - Properties + +@property (nonatomic, readonly, copy) void (^block)(void); + +@end + +@implementation KWBlock + +#pragma mark - Initializing + +- (id)initWithBlock:(void (^)(void))block { + self = [super init]; + if (self) { + _block = [block copy]; + } + + return self; +} + ++ (id)blockWithBlock:(void (^)(void))aBlock { + return [[self alloc] initWithBlock:aBlock]; +} + +#pragma mark - Calling Blocks + +- (void)call { + self.block(); +} + +@end + +#pragma mark - Creating Blocks + +KWBlock *theBlock(void (^block)(void)) { + return lambda(block); +} + +KWBlock *lambda(void (^block)(void)) { + return [KWBlock blockWithBlock:block]; +} diff --git a/Pods/Kiwi/Classes/Core/KWCallSite.h b/Pods/Kiwi/Classes/Core/KWCallSite.h new file mode 100644 index 0000000..fdb7590 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWCallSite.h @@ -0,0 +1,26 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface KWCallSite : NSObject + +#pragma mark - Initializing + +- (id)initWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber; + ++ (id)callSiteWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber; + +#pragma mark - Properties + +@property (nonatomic, readonly, copy) NSString *filename; +@property (nonatomic, readonly) NSUInteger lineNumber; + +#pragma mark - Identifying and Comparing + +- (BOOL)isEqualToCallSite:(KWCallSite *)aCallSite; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWCallSite.m b/Pods/Kiwi/Classes/Core/KWCallSite.m new file mode 100644 index 0000000..0ab6115 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWCallSite.m @@ -0,0 +1,44 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWCallSite.h" + +@implementation KWCallSite + +#pragma mark - Initializing + +- (id)initWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { + self = [super init]; + if (self) { + _filename = [aFilename copy]; + _lineNumber = aLineNumber; + } + + return self; +} + ++ (id)callSiteWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { + return [[self alloc] initWithFilename:aFilename lineNumber:aLineNumber]; +} + +#pragma mark - Identifying and Comparing + +- (NSUInteger)hash { + return [[NSString stringWithFormat:@"%@%u", self.filename, (unsigned)self.lineNumber] hash]; +} + +- (BOOL)isEqual:(id)anObject { + if (![anObject isKindOfClass:[KWCallSite class]]) + return NO; + + return [self isEqualToCallSite:anObject]; +} + +- (BOOL)isEqualToCallSite:(KWCallSite *)aCallSite { + return [self.filename isEqualToString:aCallSite.filename] && (self.lineNumber == aCallSite.lineNumber); +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWCaptureSpy.h b/Pods/Kiwi/Classes/Core/KWCaptureSpy.h new file mode 100644 index 0000000..de5b657 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWCaptureSpy.h @@ -0,0 +1,9 @@ +#import "KWMessageSpying.h" + +@interface KWCaptureSpy : NSObject + +@property (nonatomic, strong, readonly) id argument; + +- (id)initWithArgumentIndex:(NSUInteger)index; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWCaptureSpy.m b/Pods/Kiwi/Classes/Core/KWCaptureSpy.m new file mode 100644 index 0000000..a90af61 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWCaptureSpy.m @@ -0,0 +1,64 @@ +#import "KWCaptureSpy.h" + +#import "KWObjCUtilities.h" +#import "KWNull.h" +#import "KWValue.h" +#import "NSInvocation+KiwiAdditions.h" +#import "NSMethodSignature+KiwiAdditions.h" + +@interface KWCaptureSpy() + +@property (nonatomic, strong) id argument; + +@end + +@implementation KWCaptureSpy { + NSUInteger _argumentIndex; +} + +- (id)initWithArgumentIndex:(NSUInteger)index { + self = [super init]; + if (self) { + _argumentIndex = index; + } + return self; +} + +- (id)argument { + if (!_argument) { + @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Argument requested has yet to be captured." userInfo:nil]; + } + + if(_argument == [KWNull null]) { + return nil; + } + else { + return _argument; + } +} + +- (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation { + if (!_argument) { + NSMethodSignature *signature = [anInvocation methodSignature]; + const char *objCType = [signature messageArgumentTypeAtIndex:_argumentIndex]; + if (KWObjCTypeIsObject(objCType) || KWObjCTypeIsClass(objCType)) { + void* argumentBuffer = NULL; + [anInvocation getMessageArgument:&argumentBuffer atIndex:_argumentIndex]; + id argument = (__bridge id)argumentBuffer; + if (KWObjCTypeIsBlock(objCType)) { + _argument = [argument copy]; + } else { + if(argument == nil) { + _argument = [KWNull null]; + } else { + _argument = argument; + } + } + } else { + NSData *data = [anInvocation messageArgumentDataAtIndex:_argumentIndex]; + _argument = [KWValue valueWithBytes:[data bytes] objCType:objCType]; + } + } +} + +@end diff --git a/Pods/Kiwi/Kiwi/KWCountType.h b/Pods/Kiwi/Classes/Core/KWCountType.h old mode 100755 new mode 100644 similarity index 100% rename from Pods/Kiwi/Kiwi/KWCountType.h rename to Pods/Kiwi/Classes/Core/KWCountType.h diff --git a/Pods/Kiwi/Classes/Core/KWDeviceInfo.h b/Pods/Kiwi/Classes/Core/KWDeviceInfo.h new file mode 100644 index 0000000..7e0ca36 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWDeviceInfo.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface KWDeviceInfo : NSObject + +#pragma mark - Getting the Device Type + ++ (BOOL)isSimulator; ++ (BOOL)isPhysical; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWDeviceInfo.m b/Pods/Kiwi/Classes/Core/KWDeviceInfo.m new file mode 100644 index 0000000..3abb1ab --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWDeviceInfo.m @@ -0,0 +1,31 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWDeviceInfo.h" + +#if TARGET_IPHONE_SIMULATOR + +#import + +#endif // #if TARGET_IPHONE_SIMULATOR + +@implementation KWDeviceInfo + +#pragma mark - Getting the Device Type + ++ (BOOL)isSimulator { +#if TARGET_IPHONE_SIMULATOR + return YES; +#else + return NO; +#endif // #if TARGET_IPHONE_SIMULATOR +} + ++ (BOOL)isPhysical { + return ![self isSimulator]; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWExample.h b/Pods/Kiwi/Classes/Core/KWExample.h new file mode 100644 index 0000000..7d3e14f --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExample.h @@ -0,0 +1,91 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWBlock.h" +#import "KWVerifying.h" +#import "KWExpectationType.h" +#import "KWExampleNode.h" +#import "KWExampleNodeVisitor.h" +#import "KWReporting.h" +#import "KWExampleDelegate.h" + +@class KWCallSite; +@class KWExampleSuite; +@class KWContextNode; +@class KWSpec; +@class KWMatcherFactory; + +@interface KWExample : NSObject + +@property (nonatomic, strong, readonly) NSMutableArray *lastInContexts; +@property (nonatomic, weak) KWExampleSuite *suite; +@property (nonatomic, strong) id unresolvedVerifier; + + +- (id)initWithExampleNode:(id)node; + +#pragma mark - Adding Verifiers + +- (id)addVerifier:(id)aVerifier; +- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; +- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; +- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait; + +#pragma mark - Report failure + +- (void)reportFailure:(KWFailure *)failure; + +#pragma mark - Running + +- (void)runWithDelegate:(id)delegate; + +#pragma mark - Anonymous It Node Descriptions + +- (NSString *)generateDescriptionForAnonymousItNode; + +#pragma mark - Checking if last in context + +- (BOOL)isLastInContext:(KWContextNode *)context; + +#pragma mark - Full description with context + +- (NSString *)descriptionWithContext; + +@end + +#pragma mark - Building Example Groups + +void describe(NSString *aDescription, void (^block)(void)); +void context(NSString *aDescription, void (^block)(void)); +void registerMatchers(NSString *aNamespacePrefix); +void beforeAll(void (^block)(void)); +void afterAll(void (^block)(void)); +void beforeEach(void (^block)(void)); +void afterEach(void (^block)(void)); +void it(NSString *aDescription, void (^block)(void)); +void specify(void (^block)(void)); +void pending_(NSString *aDescription, void (^block)(void)); + +void describeWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)); +void contextWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)); +void registerMatchersWithCallSite(KWCallSite *aCallSite, NSString *aNamespacePrefix); +void beforeAllWithCallSite(KWCallSite *aCallSite, void (^block)(void)); +void afterAllWithCallSite(KWCallSite *aCallSite, void (^block)(void)); +void beforeEachWithCallSite(KWCallSite *aCallSite, void (^block)(void)); +void afterEachWithCallSite(KWCallSite *aCallSite, void (^block)(void)); +void itWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)); +void pendingWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)); + +#define PRAGMA(x) _Pragma (#x) +#define PENDING(x) PRAGMA(message ( "Pending: " #x )) + +#define pending(title, args...) \ +PENDING(title) \ +pending_(title, ## args) +#define xit(title, args...) \ +PENDING(title) \ +pending_(title, ## args) diff --git a/Pods/Kiwi/Classes/Core/KWExample.m b/Pods/Kiwi/Classes/Core/KWExample.m new file mode 100644 index 0000000..41dd1a0 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExample.m @@ -0,0 +1,376 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWExample.h" +#import "KWExampleSuiteBuilder.h" +#import "KWContextNode.h" +#import "KWMatcherFactory.h" +#import "KWExistVerifier.h" +#import "KWMatchVerifier.h" +#import "KWAsyncVerifier.h" +#import "KWFailure.h" +#import "KWContextNode.h" +#import "KWBeforeEachNode.h" +#import "KWBeforeAllNode.h" +#import "KWItNode.h" +#import "KWAfterEachNode.h" +#import "KWAfterAllNode.h" +#import "KWPendingNode.h" +#import "KWRegisterMatchersNode.h" +#import "KWWorkarounds.h" +#import "KWIntercept.h" +#import "KWExampleNode.h" +#import "KWExampleSuite.h" +#import "KWCallSite.h" +#import "KWSymbolicator.h" + +@interface KWExample () + +@property (nonatomic, readonly) NSMutableArray *verifiers; +@property (nonatomic, readonly) KWMatcherFactory *matcherFactory; +@property (nonatomic, weak) id delegate; +@property (nonatomic, assign) BOOL didNotFinish; +@property (nonatomic, strong) id exampleNode; +@property (nonatomic, assign) BOOL passed; + +- (void)reportResultForExampleNodeWithLabel:(NSString *)label; + +@end + +@implementation KWExample + +- (id)initWithExampleNode:(id)node { + self = [super init]; + if (self) { + _exampleNode = node; + _matcherFactory = [[KWMatcherFactory alloc] init]; + _verifiers = [[NSMutableArray alloc] init]; + _lastInContexts = [[NSMutableArray alloc] init]; + _passed = YES; + } + return self; +} + + +- (BOOL)isLastInContext:(KWContextNode *)context { + for (KWContextNode *contextWhereItLast in self.lastInContexts) { + if (context == contextWhereItLast) { + return YES; + } + } + return NO; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"", self.exampleNode.description]; +} + +#pragma mark - Adding Verifiers + +- (id)addVerifier:(id)aVerifier { + if (![self.verifiers containsObject:aVerifier]) + [self.verifiers addObject:aVerifier]; + + return aVerifier; +} + +- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { + id verifier = [KWExistVerifier existVerifierWithExpectationType:anExpectationType callSite:aCallSite reporter:self]; + [self addVerifier:verifier]; + return verifier; +} + +- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { + if (self.unresolvedVerifier) { + @throw [NSException exceptionWithName:NSInternalInconsistencyException + reason:@"Trying to add another verifier without specifying a matcher for the previous one." + userInfo:nil]; + } + id verifier = [KWMatchVerifier matchVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self]; + [self addVerifier:verifier]; + self.unresolvedVerifier = verifier; + return verifier; +} + +- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait { + id verifier = [KWAsyncVerifier asyncVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self probeTimeout:timeout shouldWait: shouldWait]; + [self addVerifier:verifier]; + return verifier; +} + +#pragma mark - Running examples + +- (void)runWithDelegate:(id)delegate; { + self.delegate = delegate; + [self.matcherFactory registerMatcherClassesWithNamespacePrefix:@"KW"]; + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setCurrentExample:self]; + [self.exampleNode acceptExampleNodeVisitor:self]; +} + +#pragma mark - Reporting failure + +- (NSString *)descriptionForExampleContext { + NSMutableArray *parts = [NSMutableArray array]; + + for (KWContextNode *context in [[self.exampleNode contextStack] reverseObjectEnumerator]) { + if ([context description] != nil) { + [parts addObject:[[context description] stringByAppendingString:@","]]; + } + } + + return [parts componentsJoinedByString:@" "]; +} + +- (KWFailure *)outputReadyFailureWithFailure:(KWFailure *)aFailure { + NSString *annotatedFailureMessage = [NSString stringWithFormat:@"'%@ %@' [FAILED], %@", + [self descriptionForExampleContext], [self.exampleNode description], + aFailure.message]; + +#if TARGET_IPHONE_SIMULATOR + // \uff1a is the unicode for a fill width colon, as opposed to a regular + // colon character (':'). This escape is performed so that Xcode doesn't + // truncate the error output in the build results window, which is running + // build time specs. + annotatedFailureMessage = [annotatedFailureMessage stringByReplacingOccurrencesOfString:@":" withString:@"\uff1a"]; +#endif // #if TARGET_IPHONE_SIMULATOR + + return [KWFailure failureWithCallSite:aFailure.callSite message:annotatedFailureMessage]; +} + +- (void)reportFailure:(KWFailure *)failure { + self.passed = NO; + [self.delegate example:self didFailWithFailure:[self outputReadyFailureWithFailure:failure]]; +} + +- (void)reportResultForExampleNodeWithLabel:(NSString *)label { + NSLog(@"+ '%@ %@' [%@]", [self descriptionForExampleContext], [self.exampleNode description], label); +} + +#pragma mark - Full description with context + +/** Pending cases will be marked yellow by XCode as not finished, because their description differs for -[SenTestCaseRun start] and -[SenTestCaseRun stop] methods + */ + +- (NSString *)pendingNotFinished { + BOOL reportPending = self.didNotFinish; + self.didNotFinish = YES; + return reportPending ? @"(PENDING)" : @""; +} + +- (NSString *)descriptionWithContext { + NSString *descriptionWithContext = [NSString stringWithFormat:@"%@ %@", + [self descriptionForExampleContext], + [self.exampleNode description] ? [self.exampleNode description] : @""]; + BOOL isPending = [self.exampleNode isKindOfClass:[KWPendingNode class]]; + return isPending ? [descriptionWithContext stringByAppendingString:[self pendingNotFinished]] : descriptionWithContext; +} + +#pragma mark - Visiting Nodes + +- (void)visitRegisterMatchersNode:(KWRegisterMatchersNode *)aNode { + [self.matcherFactory registerMatcherClassesWithNamespacePrefix:aNode.namespacePrefix]; +} + +- (void)visitBeforeAllNode:(KWBeforeAllNode *)aNode { + if (aNode.block == nil) + return; + + aNode.block(); +} + +- (void)visitAfterAllNode:(KWAfterAllNode *)aNode { + if (aNode.block == nil) + return; + + aNode.block(); +} + +- (void)visitBeforeEachNode:(KWBeforeEachNode *)aNode { + if (aNode.block == nil) + return; + + aNode.block(); +} + +- (void)visitAfterEachNode:(KWAfterEachNode *)aNode { + if (aNode.block == nil) + return; + + aNode.block(); +} + +- (void)visitItNode:(KWItNode *)aNode { + if (aNode.block == nil || aNode != self.exampleNode) + return; + + aNode.example = self; + + [aNode.context performExample:self withBlock:^{ + + @try { + + aNode.block(); + +#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + NSException *invocationException = KWGetAndClearExceptionFromAcrossInvocationBoundary(); + [invocationException raise]; +#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + + // Finish verifying and clear + for (id verifier in self.verifiers) { + [verifier exampleWillEnd]; + } + + if (self.unresolvedVerifier) { + KWFailure *failure = [KWFailure failureWithCallSite:self.unresolvedVerifier.callSite format:@"expected subject not to be nil"]; + [self reportFailure:failure]; + } + + } @catch (NSException *exception) { + KWFailure *failure = [KWFailure failureWithCallSite:aNode.callSite format:@"%@ \"%@\" raised", + [exception name], + [exception reason]]; + [self reportFailure:failure]; + } + + if (self.passed) { + [self reportResultForExampleNodeWithLabel:@"PASSED"]; + } + + // Always clear stubs and spies at the end of it blocks + KWClearStubsAndSpies(); + }]; +} + +- (void)visitPendingNode:(KWPendingNode *)aNode { + if (aNode != self.exampleNode) + return; + + [self reportResultForExampleNodeWithLabel:@"PENDING"]; +} + +- (NSString *)generateDescriptionForAnonymousItNode { + // anonymous specify blocks should only have one verifier, but use the first in any case + return [(self.verifiers)[0] descriptionForAnonymousItNode]; +} + +@end + +#pragma mark - Looking up CallSites + +KWCallSite *callSiteWithAddress(long address); +KWCallSite *callSiteAtAddressIfNecessary(long address); + +KWCallSite *callSiteAtAddressIfNecessary(long address){ + BOOL shouldLookup = [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] isFocused] && ![[KWExampleSuiteBuilder sharedExampleSuiteBuilder] foundFocus]; + return shouldLookup ? callSiteWithAddress(address) : nil; +} + +KWCallSite *callSiteWithAddress(long address){ + NSArray *args = @[@"-d", + @"-p", @(getpid()).stringValue, [NSString stringWithFormat:@"%lx", address]]; + NSString *callSite = [NSString stringWithShellCommand:@"/usr/bin/atos" arguments:args]; + + NSString *pattern = @".+\\((.+):([0-9]+)\\)"; + NSError *e; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&e]; + NSArray *res = [regex matchesInString:callSite options:0 range:NSMakeRange(0, callSite.length)]; + + NSString *fileName = nil; + NSInteger lineNumber = 0; + + for (NSTextCheckingResult *ntcr in res) { + fileName = [callSite substringWithRange:[ntcr rangeAtIndex:1]]; + NSString *lineNumberMatch = [callSite substringWithRange:[ntcr rangeAtIndex:2]]; + lineNumber = lineNumberMatch.integerValue; + } + return [KWCallSite callSiteWithFilename:fileName lineNumber:lineNumber]; +} + +#pragma mark - Building Example Groups + +void describe(NSString *aDescription, void (^block)(void)) { + KWCallSite *callSite = callSiteAtAddressIfNecessary(kwCallerAddress()); + describeWithCallSite(callSite, aDescription, block); +} + +void context(NSString *aDescription, void (^block)(void)) { + KWCallSite *callSite = callSiteAtAddressIfNecessary(kwCallerAddress()); + contextWithCallSite(callSite, aDescription, block); +} + +void registerMatchers(NSString *aNamespacePrefix) { + registerMatchersWithCallSite(nil, aNamespacePrefix); +} + +void beforeAll(void (^block)(void)) { + beforeAllWithCallSite(nil, block); +} + +void afterAll(void (^block)(void)) { + afterAllWithCallSite(nil, block); +} + +void beforeEach(void (^block)(void)) { + beforeEachWithCallSite(nil, block); +} + +void afterEach(void (^block)(void)) { + afterEachWithCallSite(nil, block); +} + +void it(NSString *aDescription, void (^block)(void)) { + KWCallSite *callSite = callSiteAtAddressIfNecessary(kwCallerAddress()); + itWithCallSite(callSite, aDescription, block); +} + +void specify(void (^block)(void)) +{ + itWithCallSite(nil, nil, block); +} + +void pending_(NSString *aDescription, void (^ignoredBlock)(void)) { + pendingWithCallSite(nil, aDescription, ignoredBlock); +} + +void describeWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)) { + + contextWithCallSite(aCallSite, aDescription, block); +} + +void contextWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] pushContextNodeWithCallSite:aCallSite description:aDescription]; + block(); + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] popContextNode]; +} + +void registerMatchersWithCallSite(KWCallSite *aCallSite, NSString *aNamespacePrefix) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setRegisterMatchersNodeWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; +} + +void beforeAllWithCallSite(KWCallSite *aCallSite, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setBeforeAllNodeWithCallSite:aCallSite block:block]; +} + +void afterAllWithCallSite(KWCallSite *aCallSite, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setAfterAllNodeWithCallSite:aCallSite block:block]; +} + +void beforeEachWithCallSite(KWCallSite *aCallSite, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setBeforeEachNodeWithCallSite:aCallSite block:block]; +} + +void afterEachWithCallSite(KWCallSite *aCallSite, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] setAfterEachNodeWithCallSite:aCallSite block:block]; +} + +void itWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^block)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] addItNodeWithCallSite:aCallSite description:aDescription block:block]; +} + +void pendingWithCallSite(KWCallSite *aCallSite, NSString *aDescription, void (^ignoredBlock)(void)) { + [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] addPendingNodeWithCallSite:aCallSite description:aDescription]; +} diff --git a/Pods/Kiwi/Classes/Core/KWExampleDelegate.h b/Pods/Kiwi/Classes/Core/KWExampleDelegate.h new file mode 100644 index 0000000..cdcceab --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExampleDelegate.h @@ -0,0 +1,18 @@ +// +// KWExampleGroupDelegate.h +// Kiwi +// +// Created by Luke Redpath on 08/09/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import + +@class KWExample; +@class KWFailure; + +@protocol KWExampleDelegate + +- (void)example:(KWExample *)example didFailWithFailure:(KWFailure *)failure; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWExampleNodeVisitor.h b/Pods/Kiwi/Classes/Core/KWExampleNodeVisitor.h new file mode 100644 index 0000000..0e28f30 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExampleNodeVisitor.h @@ -0,0 +1,33 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@class KWAfterAllNode; +@class KWAfterEachNode; +@class KWBeforeAllNode; +@class KWBeforeEachNode; +@class KWContextNode; +@class KWItNode; +@class KWPendingNode; +@class KWRegisterMatchersNode; + +@protocol KWExampleNodeVisitor + +#pragma mark - Visiting Nodes + +@optional + +- (void)visitContextNode:(KWContextNode *)aNode; +- (void)visitRegisterMatchersNode:(KWRegisterMatchersNode *)aNode; +- (void)visitBeforeAllNode:(KWBeforeAllNode *)aNode; +- (void)visitAfterAllNode:(KWAfterAllNode *)aNode; +- (void)visitBeforeEachNode:(KWBeforeEachNode *)aNode; +- (void)visitAfterEachNode:(KWAfterEachNode *)aNode; +- (void)visitItNode:(KWItNode *)aNode; +- (void)visitPendingNode:(KWPendingNode *)aNode; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWExampleSuite.h b/Pods/Kiwi/Classes/Core/KWExampleSuite.h new file mode 100644 index 0000000..e0f9a03 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExampleSuite.h @@ -0,0 +1,27 @@ +// +// KWExampleSuite.h +// Kiwi +// +// Created by Luke Redpath on 17/10/2011. +// Copyright (c) 2011 Allen Ding. All rights reserved. +// + +#import +#import "KWExampleNodeVisitor.h" + +@class KWContextNode; +@class KWExample; +@class SenTestCase; + +@interface KWExampleSuite : NSObject + +- (id)initWithRootNode:(KWContextNode *)contextNode; +- (void)addExample:(KWExample *)example; +- (void)markLastExampleAsLastInContext:(KWContextNode *)context; +- (NSArray *)invocationsForTestCase; +@end + +@interface NSInvocation (KWExampleGroup) +- (void)kw_setExample:(KWExample *)exampleGroup; +- (KWExample *)kw_example; +@end diff --git a/Pods/Kiwi/Classes/Core/KWExampleSuite.m b/Pods/Kiwi/Classes/Core/KWExampleSuite.m new file mode 100644 index 0000000..94e9dc6 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExampleSuite.m @@ -0,0 +1,86 @@ +// +// KWExampleSuite.m +// Kiwi +// +// Created by Luke Redpath on 17/10/2011. +// Copyright (c) 2011 Allen Ding. All rights reserved. +// + +#import "KWExampleSuite.h" + +#import "KWAfterAllNode.h" +#import "KWBeforeAllNode.h" +#import "KWContextNode.h" +#import "KWExample.h" +#import "KWStringUtilities.h" +#import "NSMethodSignature+KiwiAdditions.h" +#import + +#define kKWINVOCATION_EXAMPLE_GROUP_KEY @"__KWExampleGroupKey" + +@interface KWExampleSuite() + +@property (nonatomic, strong) KWContextNode *rootNode; +@property (nonatomic, strong) NSMutableArray *examples; + +@end + +@implementation KWExampleSuite + +- (id)initWithRootNode:(KWContextNode *)contextNode { + self = [super init]; + if (self) { + _rootNode = contextNode; + _examples = [[NSMutableArray alloc] init]; + } + return self; +} + + +- (void)addExample:(KWExample *)example { + [self.examples addObject:example]; + example.suite = self; +} + +- (void)markLastExampleAsLastInContext:(KWContextNode *)context +{ + if ([self.examples count] > 0) { + KWExample *lastExample = (KWExample *)[self.examples lastObject]; + [lastExample.lastInContexts addObject:context]; + } +} + +- (NSArray *)invocationsForTestCase { + NSMutableArray *invocations = [NSMutableArray array]; + + // Add a single dummy invocation for each example group + + for (KWExample *exampleGroup in self.examples) { + NSMethodSignature *methodSignature = [NSMethodSignature signatureWithObjCTypes:[KWEncodingForDefaultMethod() UTF8String]]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; + [invocations addObject:invocation]; + [invocation kw_setExample:exampleGroup]; + } + + return invocations; +} + +@end + +#pragma mark - + +// because SenTest will modify the invocation target, we'll have to store +// another reference to the example group so we can retrieve it later + +@implementation NSInvocation (KWExampleGroup) + +- (void)kw_setExample:(KWExample *)exampleGroup { + objc_setAssociatedObject(self, kKWINVOCATION_EXAMPLE_GROUP_KEY, exampleGroup, OBJC_ASSOCIATION_RETAIN); +} + +- (KWExample *)kw_example { + return objc_getAssociatedObject(self, kKWINVOCATION_EXAMPLE_GROUP_KEY); +} + +@end + diff --git a/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.h b/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.h new file mode 100644 index 0000000..a2dc30a --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.h @@ -0,0 +1,45 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWBlock.h" + +@class KWCallSite; +@class KWExample; +@class KWExampleSuite; +@class KWContextNode; + +@interface KWExampleSuiteBuilder : NSObject + +#pragma mark - Initializing + ++ (id)sharedExampleSuiteBuilder; + +#pragma mark - Building Example Groups + +@property (nonatomic, readonly) BOOL isBuildingExampleSuite; +@property (nonatomic, strong, readonly) KWExampleSuite *currentExampleSuite; +@property (nonatomic, strong) KWExample *currentExample; +@property (nonatomic, strong) KWCallSite *focusedCallSite; + +//spec file name:line number of callsite +- (void)focusWithURI:(NSString *)nodeUrl; +- (KWExampleSuite *)buildExampleSuite:(void (^)(void))buildingBlock; + +- (void)pushContextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; +- (void)popContextNode; +- (void)setRegisterMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; +- (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; +- (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; +- (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; +- (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; +- (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block; +- (void)addPendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; + +- (BOOL)isFocused; +- (BOOL)foundFocus; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.m b/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.m new file mode 100644 index 0000000..f1fc005 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.m @@ -0,0 +1,225 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWExampleSuiteBuilder.h" + +#import "KWAfterAllNode.h" +#import "KWAfterEachNode.h" +#import "KWBeforeAllNode.h" +#import "KWBeforeEachNode.h" +#import "KWCallSite.h" +#import "KWContextNode.h" +#import "KWExample.h" +#import "KWExampleSuite.h" +#import "KWItNode.h" +#import "KWPendingNode.h" +#import "KWRegisterMatchersNode.h" +#import "KWSymbolicator.h" + +@interface KWExampleSuiteBuilder() + +#pragma mark - Building Example Groups + +@property (nonatomic, strong) KWExampleSuite *currentExampleSuite; +@property (nonatomic, readonly) NSMutableArray *contextNodeStack; + +@property (nonatomic, strong) NSMutableSet *suites; + +@property (nonatomic, assign) BOOL focusedContextNode; +@property (nonatomic, assign) BOOL focusedItNode; + +@end + +@implementation KWExampleSuiteBuilder + + +#pragma mark - Initializing + + +- (id)init { + self = [super init]; + if (self) { + _contextNodeStack = [[NSMutableArray alloc] init]; + _suites = [[NSMutableSet alloc] init]; + [self focusWithURI:[[[NSProcessInfo processInfo] environment] objectForKey:@"KW_SPEC"]]; + } + return self; +} + + ++ (id)sharedExampleSuiteBuilder { + static KWExampleSuiteBuilder *sharedExampleSuiteBuilder = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedExampleSuiteBuilder = [self new]; + }); + + return sharedExampleSuiteBuilder; +} + +#pragma mark - Focus + +- (void)focusWithURI:(NSString *)nodeUrl { + NSArray *focusInfo = [nodeUrl componentsSeparatedByString:@":"]; + if (!focusInfo || focusInfo.count != 2) + return; + self.focusedCallSite = [KWCallSite callSiteWithFilename:focusInfo[0] lineNumber:[focusInfo[1] intValue]]; +} + +- (void)setFocusedCallSite:(KWCallSite *)aFocusedCallSite { + _focusedCallSite = aFocusedCallSite; + self.focusedItNode = NO; + self.focusedContextNode = NO; +} + +- (BOOL)isFocused { + return self.focusedCallSite != nil; +} + +- (BOOL)foundFocus { + return self.focusedContextNode || self.focusedItNode; +} + +#pragma mark - Building Example Groups + +- (BOOL)isBuildingExampleSuite { + return [self.contextNodeStack count] > 0; +} + +- (KWExampleSuite *)buildExampleSuite:(void (^)(void))buildingBlock +{ + KWContextNode *rootNode = [KWContextNode contextNodeWithCallSite:nil parentContext:nil description:nil]; + + self.currentExampleSuite = [[KWExampleSuite alloc] initWithRootNode:rootNode]; + + [self.suites addObject:self.currentExampleSuite]; + + [self.contextNodeStack addObject:rootNode]; + buildingBlock(); + [self.contextNodeStack removeAllObjects]; + + return self.currentExampleSuite; +} + +- (void)pushContextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { + + KWContextNode *contextNode = [self.contextNodeStack lastObject]; + KWContextNode *node = [KWContextNode contextNodeWithCallSite:aCallSite parentContext:contextNode description:aDescription]; + + if (self.isFocused) + node.isFocused = [self shouldFocusContextNodeWithCallSite:aCallSite parentNode:contextNode]; + + [contextNode addContextNode:node]; + [self.contextNodeStack addObject:node]; +} + +- (BOOL)shouldFocusContextNodeWithCallSite:(KWCallSite *)aCallSite parentNode:(KWContextNode *)parentNode { + if (parentNode.isFocused) + return YES; + + if ([aCallSite isEqualToCallSite:self.focusedCallSite]) { + self.focusedContextNode = YES; + return YES; + } + return NO; +} + +- (void)popContextNode { + KWContextNode *contextNode = [self.contextNodeStack lastObject]; + + [self.currentExampleSuite markLastExampleAsLastInContext:contextNode]; + + if ([self.contextNodeStack count] == 1) + [NSException raise:@"KWExampleSuiteBuilderException" format:@"there is no open context to pop"]; + + [self.contextNodeStack removeLastObject]; +} + +- (void)setRegisterMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { + if ([self.contextNodeStack count] == 0) + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; + + KWContextNode *contextNode = [self.contextNodeStack lastObject]; + KWRegisterMatchersNode *registerMatchersNode = [KWRegisterMatchersNode registerMatchersNodeWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; + [contextNode setRegisterMatchersNode:registerMatchersNode]; +} + +- (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + if ([self.contextNodeStack count] == 0) + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; + + KWContextNode *contextNode = [self.contextNodeStack lastObject]; + KWBeforeAllNode *beforeAllNode = [KWBeforeAllNode beforeAllNodeWithCallSite:aCallSite block:block]; + [contextNode setBeforeAllNode:beforeAllNode]; +} + +- (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + if ([self.contextNodeStack count] == 0) + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; + + KWContextNode *contextNode = [self.contextNodeStack lastObject]; + KWAfterAllNode *afterAllNode = [KWAfterAllNode afterAllNodeWithCallSite:aCallSite block:block]; + [contextNode setAfterAllNode:afterAllNode]; +} + +- (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + if ([self.contextNodeStack count] == 0) + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; + + KWContextNode *contextNode = [self.contextNodeStack lastObject]; + KWBeforeEachNode *beforeEachNode = [KWBeforeEachNode beforeEachNodeWithCallSite:aCallSite block:block]; + [contextNode setBeforeEachNode:beforeEachNode]; +} + +- (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + if ([self.contextNodeStack count] == 0) + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; + + KWContextNode *contextNode = [self.contextNodeStack lastObject]; + KWAfterEachNode *afterEachNode = [KWAfterEachNode afterEachNodeWithCallSite:aCallSite block:block]; + [contextNode setAfterEachNode:afterEachNode]; +} + +- (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block { + if ([self.contextNodeStack count] == 0) + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; + + KWContextNode *contextNode = [self.contextNodeStack lastObject]; + + if (self.isFocused && ![self shouldAddItNodeWithCallSite:aCallSite toContextNode:contextNode]) + return; + + KWItNode* itNode = [KWItNode itNodeWithCallSite:aCallSite description:aDescription context:contextNode block:block]; + [contextNode addItNode:itNode]; + + KWExample *example = [[KWExample alloc] initWithExampleNode:itNode]; + [self.currentExampleSuite addExample:example]; +} + +- (BOOL)shouldAddItNodeWithCallSite:(KWCallSite *)aCallSite toContextNode:(KWContextNode *)contextNode { + if (contextNode.isFocused) + return YES; + + if([aCallSite isEqualToCallSite:self.focusedCallSite]){ + self.focusedItNode = YES; + return YES; + } + + return NO; +} + +- (void)addPendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { + if ([self.contextNodeStack count] == 0) + [NSException raise:@"KWExampleSuiteBuilderException" format:@"an example group has not been started"]; + + KWContextNode *contextNode = [self.contextNodeStack lastObject]; + KWPendingNode *pendingNode = [KWPendingNode pendingNodeWithCallSite:aCallSite context:contextNode description:aDescription]; + [contextNode addPendingNode:pendingNode]; + KWExample *example = [[KWExample alloc] initWithExampleNode:pendingNode]; + [self.currentExampleSuite addExample:example]; +} + +@end diff --git a/Pods/Kiwi/Kiwi/KWExpectationType.h b/Pods/Kiwi/Classes/Core/KWExpectationType.h old mode 100755 new mode 100644 similarity index 100% rename from Pods/Kiwi/Kiwi/KWExpectationType.h rename to Pods/Kiwi/Classes/Core/KWExpectationType.h diff --git a/Pods/Kiwi/Classes/Core/KWFailure.h b/Pods/Kiwi/Classes/Core/KWFailure.h new file mode 100644 index 0000000..d516d68 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWFailure.h @@ -0,0 +1,30 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@class KWCallSite; + +@interface KWFailure : NSObject + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage; +- (id)initWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ...; + ++ (id)failureWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage; ++ (id)failureWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ...; + +#pragma mark - Properties + +@property (nonatomic, readonly) NSString *message; +@property (nonatomic, weak, readonly) KWCallSite *callSite; + +#pragma mark - Getting Exception Representations + +- (NSException *)exceptionValue; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWFailure.m b/Pods/Kiwi/Classes/Core/KWFailure.m new file mode 100644 index 0000000..4bbea8f --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWFailure.m @@ -0,0 +1,57 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWFailure.h" +#import +#import "KWCallSite.h" + +@implementation KWFailure + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { + self = [super init]; + if (self) { + _callSite = aCallSite; + _message = [aMessage copy]; + } + + return self; +} + +- (id)initWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { + va_list argumentList; + va_start(argumentList, format); + NSString *aMessage = [[NSString alloc] initWithFormat:format arguments:argumentList]; + return [self initWithCallSite:aCallSite message:aMessage]; +} + ++ (id)failureWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { + return [[self alloc] initWithCallSite:aCallSite message:aMessage]; +} + ++ (id)failureWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { + va_list argumentList; + va_start(argumentList, format); + NSString *message = [[NSString alloc] initWithFormat:format arguments:argumentList]; + return [self failureWithCallSite:aCallSite message:message]; +} + +#pragma mark - Getting Exception Representations + +- (NSException *)exceptionValue { + NSDictionary *userInfo = nil; + if (self.callSite) { + NSNumber *lineNumber = @(self.callSite.lineNumber); + userInfo = @{ + @"SenTestFilenameKey": self.callSite.filename, + @"SenTestLineNumberKey": lineNumber + }; + } + return [NSException exceptionWithName:@"KWFailureException" reason:self.message userInfo:userInfo]; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWFormatter.h b/Pods/Kiwi/Classes/Core/KWFormatter.h new file mode 100644 index 0000000..34f8655 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWFormatter.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface KWFormatter : NSObject + +#pragma mark - Getting Descriptions + ++ (NSString *)formatObject:(id)anObject; ++ (NSString *)formatObjectIncludingClass:(id)anObject; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWFormatter.m b/Pods/Kiwi/Classes/Core/KWFormatter.m new file mode 100644 index 0000000..f12917e --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWFormatter.m @@ -0,0 +1,59 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWFormatter.h" + +@implementation KWFormatter + + +#pragma mark - Getting Descriptions + ++ (NSString *)formatObject:(id)anObject { + if ([anObject isKindOfClass:[NSString class]]) + return [NSString stringWithFormat:@"\"%@\"", anObject]; + + else if ([anObject isKindOfClass:[NSDictionary class]]) + return [anObject description]; // NSDictionary conforms to NSFastEnumeration + + else if ([anObject conformsToProtocol:@protocol(NSFastEnumeration)]) + return [self formattedCollection:anObject]; + + return [anObject description]; +} + ++ (NSString *)formatObjectIncludingClass:(id)anObject { + NSString *classString = [[anObject class] description]; + + if ([anObject isKindOfClass:[NSString class]]) + classString = @"NSString"; + + return [NSString stringWithFormat:@"(%@) %@", classString, [self formatObject:anObject]]; +} + + +#pragma mark - Private + ++ (NSString *)formattedCollection:(id)collection { + + NSMutableString *description = [[NSMutableString alloc] initWithString:@"("]; + NSUInteger index = 0; + + for (id object in collection) { + if (index == 0) + [description appendFormat:@"%@", [self formatObject:object]]; + else + [description appendFormat:@", %@", [self formatObject:object]]; + + ++index; + } + + [description appendString:@")"]; + return description; +} + + + +@end diff --git a/Pods/Kiwi/Classes/Core/KWFutureObject.h b/Pods/Kiwi/Classes/Core/KWFutureObject.h new file mode 100644 index 0000000..f45ff51 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWFutureObject.h @@ -0,0 +1,20 @@ +// +// KWFutureObject.h +// iOSFalconCore +// +// Created by Luke Redpath on 13/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import + +typedef id (^KWFutureObjectBlock)(void); + +@interface KWFutureObject : NSObject + ++ (id)objectWithObjectPointer:(id *)pointer; ++ (id)futureObjectWithBlock:(KWFutureObjectBlock)block; +- (id)initWithBlock:(KWFutureObjectBlock)aBlock; +- (id)object; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWFutureObject.m b/Pods/Kiwi/Classes/Core/KWFutureObject.m new file mode 100644 index 0000000..52c654b --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWFutureObject.m @@ -0,0 +1,40 @@ +// +// KWFutureObject.m +// iOSFalconCore +// +// Created by Luke Redpath on 13/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import "KWFutureObject.h" + +@interface KWFutureObject() + +@property (nonatomic, strong) KWFutureObjectBlock block; + +@end + +@implementation KWFutureObject + ++ (id)objectWithObjectPointer:(id *)pointer { + return [self futureObjectWithBlock:^{ return *pointer; }]; +} + ++ (id)futureObjectWithBlock:(KWFutureObjectBlock)block { + return [[self alloc] initWithBlock:block]; +} + +- (id)initWithBlock:(KWFutureObjectBlock)aBlock { + self = [super init]; + if (self) { + _block = [aBlock copy]; + } + return self; +} + +- (id)object; { + return self.block(); +} + + +@end diff --git a/Pods/Kiwi/Classes/Core/KWInvocationCapturer.h b/Pods/Kiwi/Classes/Core/KWInvocationCapturer.h new file mode 100644 index 0000000..c02ab0c --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWInvocationCapturer.h @@ -0,0 +1,35 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@protocol KWInvocationCapturerDelegate; + +@interface KWInvocationCapturer : NSProxy + +#pragma mark - Initializing + +- (id)initWithDelegate:(id)aDelegate; +- (id)initWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo; + ++ (id)invocationCapturerWithDelegate:(id)aDelegate; ++ (id)invocationCapturerWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo; + +#pragma mark - Properties + +@property (nonatomic, weak, readonly) id delegate; +@property (nonatomic, strong, readonly) NSDictionary *userInfo; + +@end + +@protocol KWInvocationCapturerDelegate + +#pragma mark - Capturing Invocations + +- (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector; +- (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation; + +@end diff --git a/Pods/Kiwi/Kiwi/KWInvocationCapturer.m b/Pods/Kiwi/Classes/Core/KWInvocationCapturer.m old mode 100755 new mode 100644 similarity index 83% rename from Pods/Kiwi/Kiwi/KWInvocationCapturer.m rename to Pods/Kiwi/Classes/Core/KWInvocationCapturer.m index 12599d6..e340972 --- a/Pods/Kiwi/Kiwi/KWInvocationCapturer.m +++ b/Pods/Kiwi/Classes/Core/KWInvocationCapturer.m @@ -10,8 +10,7 @@ @implementation KWInvocationCapturer -#pragma mark - -#pragma mark Initializing +#pragma mark - Initializing - (id)initWithDelegate:(id)aDelegate { return [self initWithDelegate:aDelegate userInfo:nil]; @@ -19,7 +18,7 @@ - (id)initWithDelegate:(id)aDelegate { - (id)initWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo { delegate = aDelegate; - userInfo = [aUserInfo retain]; + userInfo = aUserInfo; return self; } @@ -28,29 +27,22 @@ + (id)invocationCapturerWithDelegate:(id)aDelegate { } + (id)invocationCapturerWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo { - return [[[self alloc] initWithDelegate:aDelegate userInfo:aUserInfo] autorelease]; + return [[self alloc] initWithDelegate:aDelegate userInfo:aUserInfo]; } -- (void)dealloc { - [userInfo release]; - [super dealloc]; -} -#pragma mark - -#pragma mark Properties +#pragma mark - Properties @synthesize delegate; @synthesize userInfo; -#pragma mark - -#pragma mark Capturing Invocations +#pragma mark - Capturing Invocations - (void)KW_captureInvocation:(NSInvocation *)anInvocation { [self.delegate invocationCapturer:self didCaptureInvocation:anInvocation]; } -#pragma mark - -#pragma mark Handling Invocations +#pragma mark - Handling Invocations - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { return [self.delegate invocationCapturer:self methodSignatureForSelector:aSelector]; @@ -70,8 +62,7 @@ - (void)forwardInvocation:(NSInvocation *)anInvocation { #endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG } -#pragma mark - -#pragma mark Whitelisted NSObject Methods +#pragma mark - Whitelisted NSObject Methods // The return values from these methods should never be needed, so just call // the super implementation after capturing the invocation. diff --git a/Pods/Kiwi/Classes/Core/KWMatcher.h b/Pods/Kiwi/Classes/Core/KWMatcher.h new file mode 100644 index 0000000..407cd9d --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMatcher.h @@ -0,0 +1,39 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatching.h" + +@interface KWMatcher : NSObject + +#pragma mark - Initializing + +- (id)initWithSubject:(id)anObject; + ++ (id)matcherWithSubject:(id)anObject; + +#pragma mark - Properties + +@property (nonatomic, strong) id subject; + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings; + +#pragma mark - Getting Matcher Compatability + ++ (BOOL)canMatchSubject:(id)anObject; + +#pragma mark - Matching + +- (BOOL)evaluate; + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould; +- (NSString *)failureMessageForShouldNot; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWMatcher.m b/Pods/Kiwi/Classes/Core/KWMatcher.m new file mode 100644 index 0000000..9b3c481 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMatcher.m @@ -0,0 +1,80 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWMatcher.h" +#import "KWFormatter.h" +#import "KWFutureObject.h" + +@implementation KWMatcher + +#pragma mark - Initializing + +- (id)initWithSubject:(id)anObject { + self = [super init]; + if (self) { + _subject = anObject; + } + + return self; +} + ++ (id)matcherWithSubject:(id)anObject { + return [[self alloc] initWithSubject:anObject]; +} + + +#pragma mark - Properties + +- (id)subject +{ + if ([_subject isKindOfClass:[KWFutureObject class]]) { + return [(KWFutureObject *)_subject object]; + } + return _subject; +} + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return nil; +} + +#pragma mark - Getting Matcher Compatability + ++ (BOOL)canMatchSubject:(id)anObject { + return YES; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + [NSException raise:NSInternalInconsistencyException format:@"%@ must override -evaluate", + [KWFormatter formatObject:[self class]]]; + return NO; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return @"subject did not meet expectation"; +} + +- (NSString *)failureMessageForShouldNot { + NSString *failureMessageForShould = [self failureMessageForShould]; + NSRange markerRange = [failureMessageForShould rangeOfString:@" to "]; + + if (markerRange.location == NSNotFound) + return @"subject did not meet expectation"; + + NSRange replacementRange = NSMakeRange(0, markerRange.location + markerRange.length); + NSString *message = [failureMessageForShould stringByReplacingOccurrencesOfString:@" to " + withString:@" not to " + options:0 + range:replacementRange]; + return message; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWMatcherFactory.h b/Pods/Kiwi/Classes/Core/KWMatcherFactory.h new file mode 100644 index 0000000..9e910be --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMatcherFactory.h @@ -0,0 +1,41 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatching.h" + +@class KWFailure; +@class KWMatcher; +@class KWUserDefinedMatcherBuilder; + +@interface KWMatcherFactory : NSObject + +#pragma mark - Initializing + +- (id)init; + +#pragma mark - Properties + +@property (nonatomic, readonly) NSArray *registeredMatcherClasses; + +#pragma mark - Registering Matcher Classes + +- (void)registerMatcherClass:(Class)aClass; +- (void)registerMatcherClassesWithNamespacePrefix:(NSString *)aNamespacePrefix; + +#pragma mark - Registering User Defined Matchers + +//- (void)registerUserDefinedMatcherWithBuilder:(KWUserDefinedMatcherBuilder *)aBuilder; + +#pragma mark - Getting Method Signatures + +- (NSMethodSignature *)methodSignatureForMatcherSelector:(SEL)aSelector; + +#pragma mark - Getting Matchers + +- (KWMatcher *)matcherFromInvocation:(NSInvocation *)anInvocation subject:(id)subject; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWMatcherFactory.m b/Pods/Kiwi/Classes/Core/KWMatcherFactory.m new file mode 100644 index 0000000..79885bf --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMatcherFactory.m @@ -0,0 +1,140 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWMatcherFactory.h" +#import +#import "KWMatching.h" +#import "KWStringUtilities.h" +#import "KWUserDefinedMatcher.h" +#import "KWMatchers.h" + +@interface KWMatcherFactory() + +@property (nonatomic, strong) NSMutableDictionary *matcherClassChains; + +@end + +@implementation KWMatcherFactory + +#pragma mark - Initializing + +- (id)init { + self = [super init]; + if (self) { + _matcherClassChains = [[NSMutableDictionary alloc] init]; + _registeredMatcherClasses = [[NSMutableArray alloc] init]; + } + + return self; +} + +#pragma mark - Registering Matcher Classes + +- (void)registerMatcherClass:(Class)aClass { + if ([self.registeredMatcherClasses containsObject:aClass]) + return; + + [(NSMutableArray *)self.registeredMatcherClasses addObject:aClass]; + + for (NSString *verificationSelectorString in [aClass matcherStrings]) { + NSMutableArray *matcherClassChain = self.matcherClassChains[verificationSelectorString]; + + if (matcherClassChain == nil) { + matcherClassChain = [[NSMutableArray alloc] init]; + self.matcherClassChains[verificationSelectorString] = matcherClassChain; + } + + [matcherClassChain removeObject:aClass]; + [matcherClassChain insertObject:aClass atIndex:0]; + } +} + +- (void)registerMatcherClassesWithNamespacePrefix:(NSString *)aNamespacePrefix { + static NSMutableArray *matcherClasses = nil; + + // Cache all classes that conform to KWMatching. + if (matcherClasses == nil) { + matcherClasses = [[NSMutableArray alloc] init]; + int numberOfClasses = objc_getClassList(NULL, 0); + Class *classes = (Class *)malloc(sizeof(Class) * numberOfClasses); + numberOfClasses = objc_getClassList(classes, numberOfClasses); + + if (numberOfClasses == 0) { + free(classes); + return; + } + + for (int i = 0; i < numberOfClasses; ++i) { + Class candidateClass = classes[i]; + + if (!class_respondsToSelector(candidateClass, @selector(conformsToProtocol:))) + continue; + + if (![candidateClass conformsToProtocol:@protocol(KWMatching)]) + continue; + + [matcherClasses addObject:candidateClass]; + } + + free(classes); + } + + for (Class matcherClass in matcherClasses) { + NSString *className = NSStringFromClass(matcherClass); + + if (KWStringHasStrictWordPrefix(className, aNamespacePrefix)) + [self registerMatcherClass:matcherClass]; + } +} + +#pragma mark - Registering User Defined Matchers + +//- (void)registerUserDefinedMatcherWithBuilder:(KWUserDefinedMatcherBuilder *)aBuilder +//{ +// +//} + +#pragma mark - Getting Method Signatures + +- (NSMethodSignature *)methodSignatureForMatcherSelector:(SEL)aSelector { + NSMutableArray *matcherClassChain = self.matcherClassChains[NSStringFromSelector(aSelector)]; + + if ([matcherClassChain count] == 0) + return nil; + + Class matcherClass = matcherClassChain[0]; + return [matcherClass instanceMethodSignatureForSelector:aSelector]; +} + +#pragma mark - Getting Matchers + +- (KWMatcher *)matcherFromInvocation:(NSInvocation *)anInvocation subject:(id)subject { + SEL selector = [anInvocation selector]; + + // try and match a built-in or registered matcher class + Class matcherClass = [self matcherClassForSelector:selector subject:subject]; + + if (matcherClass == nil) { + // see if we can match with a user-defined matcher instead + return [[KWMatchers matchers] matcherForSelector:selector subject:subject]; + } + return [[matcherClass alloc] initWithSubject:subject]; +} + +#pragma mark - Private methods + +- (Class)matcherClassForSelector:(SEL)aSelector subject:(id)anObject { + NSArray *matcherClassChain = self.matcherClassChains[NSStringFromSelector(aSelector)]; + + for (Class matcherClass in matcherClassChain) { + if ([matcherClass canMatchSubject:anObject]) + return matcherClass; + } + + return nil; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWMatchers.h b/Pods/Kiwi/Classes/Core/KWMatchers.h new file mode 100644 index 0000000..3f1b6e6 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMatchers.h @@ -0,0 +1,32 @@ +// +// KWMatchers.h +// Kiwi +// +// Created by Luke Redpath on 17/06/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import + +@class KWUserDefinedMatcherBuilder; + +typedef void (^KWMatchersBuildingBlock)(KWUserDefinedMatcherBuilder *); + +@class KWUserDefinedMatcher; + +@interface KWMatchers : NSObject + ++ (id)matchers; + +#pragma mark - Defining Matchers + ++ (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block; +- (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block; +- (void)addUserDefinedMatcherBuilder:(KWUserDefinedMatcherBuilder *)builder; + +#pragma mark - Building Matchers + +- (KWUserDefinedMatcher *)matcherForSelector:(SEL)selector subject:(id)subject; +@end + +void KWDefineMatchers(NSString *selectorString, KWMatchersBuildingBlock block); diff --git a/Pods/Kiwi/Classes/Core/KWMatchers.m b/Pods/Kiwi/Classes/Core/KWMatchers.m new file mode 100644 index 0000000..ab27895 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMatchers.m @@ -0,0 +1,75 @@ +// +// KWMatchers.m +// Kiwi +// +// Created by Luke Redpath on 17/06/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import "KWMatchers.h" +#import "KWUserDefinedMatcher.h" + +@interface KWMatchers() { + NSMutableDictionary *userDefinedMatchers; +} +@end + +@implementation KWMatchers + +#pragma mark - Singleton implementation + +static id sharedMatchers = nil; + ++ (void)initialize { + if (self == [KWMatchers class]) { + sharedMatchers = [[self alloc] init]; + } +} + ++ (id)matchers { + return sharedMatchers; +} + +- (id)init { + self = [super init]; + if (self) { + userDefinedMatchers = [[NSMutableDictionary alloc] init]; + } + return self; +} + +#pragma mark - Defining Matchers + ++ (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block { + [[self matchers] defineMatcher:selectorString as:block]; +} + +- (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block { + KWUserDefinedMatcherBuilder *builder = [KWUserDefinedMatcherBuilder builderForSelector:NSSelectorFromString(selectorString)]; + block(builder); + userDefinedMatchers[builder.key] = builder; +} + +- (void)addUserDefinedMatcherBuilder:(KWUserDefinedMatcherBuilder *)builder { + userDefinedMatchers[builder.key] = builder; +} + +#pragma mark - Building Matchers + +- (KWUserDefinedMatcher *)matcherForSelector:(SEL)selector subject:(id)subject { + KWUserDefinedMatcherBuilder *builder = userDefinedMatchers[NSStringFromSelector(selector)]; + + if (builder == nil) + return nil; + + return [builder buildMatcherWithSubject:subject]; +} + + +@end + +void KWDefineMatchers(NSString *selectorString, KWMatchersBuildingBlock block) +{ + [KWMatchers defineMatcher:selectorString as:block]; +} + diff --git a/Pods/Kiwi/Classes/Core/KWMatching.h b/Pods/Kiwi/Classes/Core/KWMatching.h new file mode 100644 index 0000000..bf7c81a --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMatching.h @@ -0,0 +1,41 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@protocol KWMatching + +#pragma mark - Initializing + +- (id)initWithSubject:(id)anObject; + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings; + +#pragma mark - Getting Matcher Compatability + ++ (BOOL)canMatchSubject:(id)anObject; + +#pragma mark - Matching + +@optional + +- (BOOL)isNilMatcher; +- (BOOL)shouldBeEvaluatedAtEndOfExample; +- (BOOL)willEvaluateMultipleTimes; +- (void)setWillEvaluateMultipleTimes:(BOOL)shouldEvaluateMultipleTimes; + +@required + +- (BOOL)evaluate; + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould; +- (NSString *)failureMessageForShouldNot; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWMessageSpying.h b/Pods/Kiwi/Classes/Core/KWMessageSpying.h new file mode 100644 index 0000000..0ac1aa7 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMessageSpying.h @@ -0,0 +1,15 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@protocol KWMessageSpying + +#pragma mark - Spying on Messages + +- (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWMessageTracker.h b/Pods/Kiwi/Classes/Core/KWMessageTracker.h new file mode 100644 index 0000000..5bf5f56 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMessageTracker.h @@ -0,0 +1,41 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWCountType.h" +#import "KWMessageSpying.h" + +@class KWMessagePattern; + +@interface KWMessageTracker : NSObject + +#pragma mark - Initializing + +- (id)initWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; + ++ (id)messageTrackerWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; + +#pragma mark - Properties + +@property (nonatomic, readonly) id subject; +@property (nonatomic, readonly) KWMessagePattern *messagePattern; +@property (nonatomic, readonly) KWCountType countType; +@property (nonatomic, readonly) NSUInteger count; + +#pragma mark - Stopping Tracking + +- (void)stopTracking; + +#pragma mark - Getting Message Tracker Status + +- (BOOL)succeeded; + +#pragma mark - Getting Phrases + +- (NSString *)expectedCountPhrase; +- (NSString *)receivedCountPhrase; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWMessageTracker.m b/Pods/Kiwi/Classes/Core/KWMessageTracker.m new file mode 100644 index 0000000..121e374 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWMessageTracker.m @@ -0,0 +1,130 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWMessageTracker.h" +#import "KWMessagePattern.h" +#import "NSObject+KiwiStubAdditions.h" + +@interface KWMessageTracker() + +#pragma mark - Properties + +@property (nonatomic, assign) NSUInteger receivedCount; + +@end + +@implementation KWMessageTracker + +#pragma mark - Initializing + +- (id)initWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount { + self = [super init]; + if (self) { + _subject = anObject; + _messagePattern = aMessagePattern; + _countType = aCountType; + _count = aCount; + [anObject addMessageSpy:self forMessagePattern:aMessagePattern]; + } + + return self; +} + ++ (id)messageTrackerWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount { + return [[self alloc] initWithSubject:anObject messagePattern:aMessagePattern countType:aCountType count:aCount]; +} + +#pragma mark - Spying on Messages + +- (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation { + if (![self.messagePattern matchesInvocation:anInvocation]) + return; + + ++self.receivedCount; +} + +#pragma mark - Stopping Tracking + +- (void)stopTracking { + [self.subject removeMessageSpy:self forMessagePattern:self.messagePattern]; +} + +#pragma mark - Getting Message Tracker Status + +- (BOOL)succeeded { + switch (self.countType) { + case KWCountTypeExact: + return self.receivedCount == self.count; + case KWCountTypeAtLeast: + return self.receivedCount >= self.count; + case KWCountTypeAtMost: + return self.receivedCount <= self.count; + default: + break; + } + + assert(0 && "should never reach here"); + return NO; +} + +#pragma mark - Getting Phrases + +- (NSString *)phraseForCount:(NSUInteger)aCount { + if (aCount == 1) + return @"1 time"; + + return [NSString stringWithFormat:@"%d times", (int)aCount]; +} + +- (NSString *)expectedCountPhrase { + NSString *countPhrase = [self phraseForCount:self.count]; + + switch (self.countType) { + case KWCountTypeExact: + return [NSString stringWithFormat:@"exactly %@", countPhrase]; + case KWCountTypeAtLeast: + return [NSString stringWithFormat:@"at least %@", countPhrase]; + case KWCountTypeAtMost: + return [NSString stringWithFormat:@"at most %@", countPhrase]; + default: + break; + } + + assert(0 && "should never reach here"); + return nil; +} + +- (NSString *)receivedCountPhrase { + return [self phraseForCount:self.receivedCount]; +} + +#pragma mark - Debugging + +- (NSString *)modeString { + switch (self.countType) { + case KWCountTypeExact: + return @"KWCountTypeExact"; + case KWCountTypeAtLeast: + return @"KWCountTypeAtLeast"; + case KWCountTypeAtMost: + return @"KWCountTypeAtMost"; + default: + break; + } + + assert(0 && "should never reach here"); + return nil; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"messagePattern: %@\nmode: %@\ncount: %d\nreceiveCount: %d", + self.messagePattern, + self.modeString, + (int)self.count, + (int)self.receivedCount]; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWNull.h b/Pods/Kiwi/Classes/Core/KWNull.h new file mode 100644 index 0000000..4208a57 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWNull.h @@ -0,0 +1,18 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +// KWNull exists to represent the same thing as NSNull, except that Kiwi needs +// to distinguish between null singletons used internally and those a user +// is using as an object parameter. +@interface KWNull : NSObject + +#pragma mark - Initializing + ++ (id)null; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWNull.m b/Pods/Kiwi/Classes/Core/KWNull.m new file mode 100644 index 0000000..6d3bf73 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWNull.m @@ -0,0 +1,25 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWNull.h" + +@implementation KWNull + +#pragma mark - Initializing + + ++ (id)null { + static KWNull *sharedNull = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedNull = [self new]; + + }); + + return sharedNull; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWObjCUtilities.h b/Pods/Kiwi/Classes/Core/KWObjCUtilities.h new file mode 100644 index 0000000..ea97878 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWObjCUtilities.h @@ -0,0 +1,30 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +#pragma mark - Objective-C Type Utilities + +BOOL KWObjCTypeEqualToObjCType(const char *firstObjCType, const char *secondObjCType); +BOOL KWObjCTypeIsNumeric(const char *objCType); +BOOL KWObjCTypeIsFloatingPoint(const char *objCType); +BOOL KWObjCTypeIsIntegral(const char *objCType); +BOOL KWObjCTypeIsSignedIntegral(const char *objCType); +BOOL KWObjCTypeIsUnsignedIntegral(const char *objCType); +BOOL KWObjCTypeIsObject(const char *objCType); +BOOL KWObjCTypeIsCharString(const char *objCType); +BOOL KWObjCTypeIsClass(const char *objCType); +BOOL KWObjCTypeIsSelector(const char *objCType); +BOOL KWObjCTypeIsPointerToType(const char *objCType); +BOOL KWObjCTypeIsPointerLike(const char *objCType); +BOOL KWObjCTypeIsUnknown(const char *objCType); +BOOL KWObjCTypeIsBlock(const char *objCType); + +NSUInteger KWObjCTypeLength(const char *objCType); + +#pragma mark - Selector Utlities + +NSUInteger KWSelectorParameterCount(SEL selector); diff --git a/Pods/Kiwi/Kiwi/KWObjCUtilities.m b/Pods/Kiwi/Classes/Core/KWObjCUtilities.m old mode 100755 new mode 100644 similarity index 89% rename from Pods/Kiwi/Kiwi/KWObjCUtilities.m rename to Pods/Kiwi/Classes/Core/KWObjCUtilities.m index 6e50258..eb4a63c --- a/Pods/Kiwi/Kiwi/KWObjCUtilities.m +++ b/Pods/Kiwi/Classes/Core/KWObjCUtilities.m @@ -7,8 +7,7 @@ #import "KWObjCUtilities.h" #import "KWStringUtilities.h" -#pragma mark - -#pragma mark Objective-C Type Utilities +#pragma mark - Objective-C Type Utilities BOOL KWObjCTypeEqualToObjCType(const char *firstObjCType, const char *secondObjCType) { return strcmp(firstObjCType, secondObjCType) == 0; @@ -75,13 +74,17 @@ BOOL KWObjCTypeIsUnknown(const char *objCType) { } NSUInteger KWObjCTypeLength(const char *objCType) { - NSString *encoding = KWEncodingWithObjCTypes(objCType, @encode(id), @encode(SEL), nil); - NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; - return [signature methodReturnLength]; + NSUInteger typeSize = 0; + NSGetSizeAndAlignment(objCType, &typeSize, NULL); + return typeSize; } -#pragma mark - -#pragma mark Selector Utlities +BOOL KWObjCTypeIsBlock(const char *objCType) { + return strcmp(objCType, "@?") == 0; +} + + +#pragma mark - Selector Utlities NSUInteger KWSelectorParameterCount(SEL selector) { NSString *selectorString = NSStringFromSelector(selector); diff --git a/Pods/Kiwi/Kiwi/KWProbe.h b/Pods/Kiwi/Classes/Core/KWProbe.h old mode 100755 new mode 100644 similarity index 100% rename from Pods/Kiwi/Kiwi/KWProbe.h rename to Pods/Kiwi/Classes/Core/KWProbe.h diff --git a/Pods/Kiwi/Classes/Core/KWProbePoller.h b/Pods/Kiwi/Classes/Core/KWProbePoller.h new file mode 100644 index 0000000..543a117 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWProbePoller.h @@ -0,0 +1,19 @@ +// +// KWProbePoller.h +// iOSFalconCore +// +// Created by Luke Redpath on 13/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import +#import "KWProbe.h" + +#define kKW_DEFAULT_PROBE_DELAY 0.1 + +@interface KWProbePoller : NSObject + +- (id)initWithTimeout:(NSTimeInterval)theTimeout delay:(NSTimeInterval)theDelay shouldWait:(BOOL)wait; +- (BOOL)check:(id)probe; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWProbePoller.m b/Pods/Kiwi/Classes/Core/KWProbePoller.m new file mode 100644 index 0000000..b411da9 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWProbePoller.m @@ -0,0 +1,72 @@ +// +// KWProbePoller.m +// iOSFalconCore +// +// Created by Luke Redpath on 13/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import "KWProbePoller.h" + +@interface KWTimeout : NSObject + +@property (nonatomic, strong) NSDate *timeoutDate; + +@end + +@implementation KWTimeout + +- (id)initWithTimeout:(NSTimeInterval)timeout +{ + self = [super init]; + if (self) { + _timeoutDate = [[NSDate alloc] initWithTimeIntervalSinceNow:timeout]; + } + return self; +} + + +- (BOOL)hasTimedOut { + return [self.timeoutDate timeIntervalSinceDate:[NSDate date]] < 0; +} + +@end + + +@interface KWProbePoller() + +@property (nonatomic, assign) NSTimeInterval timeoutInterval; +@property (nonatomic, assign) NSTimeInterval delayInterval; +@property (nonatomic, assign) BOOL shouldWait; + +@end + +@implementation KWProbePoller + +- (id)initWithTimeout:(NSTimeInterval)theTimeout + delay:(NSTimeInterval)theDelay + shouldWait:(BOOL)wait { + self = [super init]; + if (self) { + _timeoutInterval = theTimeout; + _delayInterval = theDelay; + _shouldWait = wait; + } + return self; +} + +- (BOOL)check:(id)probe; { + KWTimeout *timeout = [[KWTimeout alloc] initWithTimeout:self.timeoutInterval]; + + while (self.shouldWait || ![probe isSatisfied]) { + if ([timeout hasTimedOut]) { + return [probe isSatisfied]; + } + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:self.delayInterval]]; + [probe sample]; + } + + return YES; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWReporting.h b/Pods/Kiwi/Classes/Core/KWReporting.h new file mode 100644 index 0000000..d9e9fc0 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWReporting.h @@ -0,0 +1,17 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@class KWFailure; + +@protocol KWReporting + +#pragma mark - Reporting Failures + +- (void)reportFailure:(KWFailure *)failure; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWSpec.h b/Pods/Kiwi/Classes/Core/KWSpec.h new file mode 100644 index 0000000..2ecf726 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWSpec.h @@ -0,0 +1,34 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import +#import "KWExpectationType.h" +#import "KWVerifying.h" +#import "KWExampleDelegate.h" + + +@class KWCallSite; + +#ifdef XCT_EXPORT +@interface KWSpec : XCTestCase +#else +@interface KWSpec : SenTestCase +#endif + +#pragma mark - Adding Verifiers + ++ (id)addVerifier:(id)aVerifier; ++ (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; ++ (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; ++ (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait; + +#pragma mark - Building Example Groups + ++ (NSString *)file; ++ (void)buildExampleGroups; + +@end diff --git a/Pods/Kiwi/Classes/Core/KWSpec.m b/Pods/Kiwi/Classes/Core/KWSpec.m new file mode 100644 index 0000000..e8cee22 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWSpec.m @@ -0,0 +1,156 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWSpec.h" +#import +#import +#import "KWCallSite.h" +#import "KWExample.h" +#import "KWExampleSuiteBuilder.h" +#import "KWIntercept.h" +#import "KWObjCUtilities.h" +#import "KWStringUtilities.h" +#import "NSMethodSignature+KiwiAdditions.h" +#import "KWFailure.h" +#import "KWExampleSuite.h" + + +@interface KWSpec() + +@property (nonatomic, strong) KWExample *currentExample; + +@end + +@implementation KWSpec + +/* Methods are only implemented by sub-classes */ + ++ (NSString *)file { return nil; } + ++ (void)buildExampleGroups {} + +/* SenTestingKit uses -description, XCTest uses -name when displaying tests + in test navigator. Use camel case to make method friendly names from example description. + */ + +- (NSString *)name { + return [self description]; +} + +- (NSString *)description { + KWExample *currentExample = self.currentExample ? self.currentExample : [[self invocation] kw_example]; + NSString *name = [currentExample descriptionWithContext]; + + // CamelCase the string + NSArray *words = [name componentsSeparatedByString:@" "]; + name = @""; + for (NSString *word in words) { + if ([word length] < 1) + { + continue; + } + name = [name stringByAppendingString:[[word substringToIndex:1] uppercaseString]]; + name = [name stringByAppendingString:[word substringFromIndex:1]]; + } + + // Replace the commas with underscores to separate the levels of context + name = [name stringByReplacingOccurrencesOfString:@"," withString:@"_"]; + + // Strip out characters not legal in function names + NSError *error = nil; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^a-zA-Z0-9_]*" options:0 error:&error]; + name = [regex stringByReplacingMatchesInString:name options:0 range:NSMakeRange(0, name.length) withTemplate:@""]; + + return [NSString stringWithFormat:@"-[%@ %@]", NSStringFromClass([self class]), name]; +} + +#pragma mark - Getting Invocations + +/* Called by the SenTestingKit test suite to get an array of invocations that + should be run on instances of test cases. */ + ++ (NSArray *)testInvocations { + SEL buildExampleGroups = @selector(buildExampleGroups); + + // Only return invocation if the receiver is a concrete spec that has overridden -buildExampleGroups. + if ([self methodForSelector:buildExampleGroups] == [KWSpec methodForSelector:buildExampleGroups]) + return nil; + + KWExampleSuite *exampleSuite = [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] buildExampleSuite:^{ + [self buildExampleGroups]; + }]; + + return [exampleSuite invocationsForTestCase]; +} + +#pragma mark - Running Specs + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + +- (void)invokeTest { + self.currentExample = [[self invocation] kw_example]; + + @autoreleasepool { + + @try { + [self.currentExample runWithDelegate:self]; + } @catch (NSException *exception) { + if ([self respondsToSelector:@selector(recordFailureWithDescription:inFile:atLine:expected:)]) { + objc_msgSend(self, + @selector(recordFailureWithDescription:inFile:atLine:expected:), + [exception description], @"", 0, NO); + } else { + objc_msgSend(self, @selector(failWithException:), exception); + } + } + + [[self invocation] kw_setExample:nil]; + + } +} + +#pragma clang diagnostic pop + +#pragma mark - KWExampleGroupDelegate methods + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + +- (void)example:(KWExample *)example didFailWithFailure:(KWFailure *)failure { + if ([self respondsToSelector:@selector(recordFailureWithDescription:inFile:atLine:expected:)]) { + objc_msgSend(self, + @selector(recordFailureWithDescription:inFile:atLine:expected:), + [[failure exceptionValue] description], + failure.callSite.filename, + failure.callSite.lineNumber, + NO); + } else { + objc_msgSend(self, @selector(failWithException:), [failure exceptionValue]); + } +} + +#pragma clang diagnostic pop + +#pragma mark - Verification proxies + ++ (id)addVerifier:(id)aVerifier { + return [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] addVerifier:aVerifier]; +} + ++ (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { + return [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] addExistVerifierWithExpectationType:anExpectationType callSite:aCallSite]; +} + ++ (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { + return [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] addMatchVerifierWithExpectationType:anExpectationType callSite:aCallSite]; +} + ++ (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout shouldWait:(BOOL)shouldWait { + return [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] addAsyncVerifierWithExpectationType:anExpectationType callSite:aCallSite timeout:timeout shouldWait: shouldWait]; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/KWStringUtilities.h b/Pods/Kiwi/Classes/Core/KWStringUtilities.h new file mode 100644 index 0000000..90264d9 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWStringUtilities.h @@ -0,0 +1,19 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +#pragma mark - Checking for Case Separated Words + +BOOL KWStringHasWordPrefix(NSString *string, NSString *prefix); +BOOL KWStringHasStrictWordPrefix(NSString *string, NSString *prefix); +BOOL KWStringHasWord(NSString *string, NSString *word); + +#pragma mark - Getting Type Encodings + +NSString *KWEncodingWithObjCTypes(const char *firstType, ...) NS_REQUIRES_NIL_TERMINATION; +NSString *KWEncodingForVoidMethod(void); +NSString *KWEncodingForDefaultMethod(void); diff --git a/Pods/Kiwi/Kiwi/KWStringUtilities.m b/Pods/Kiwi/Classes/Core/KWStringUtilities.m old mode 100755 new mode 100644 similarity index 92% rename from Pods/Kiwi/Kiwi/KWStringUtilities.m rename to Pods/Kiwi/Classes/Core/KWStringUtilities.m index 4ceceb5..4e17197 --- a/Pods/Kiwi/Kiwi/KWStringUtilities.m +++ b/Pods/Kiwi/Classes/Core/KWStringUtilities.m @@ -6,8 +6,7 @@ #import "KWStringUtilities.h" -#pragma mark - -#pragma mark Checking for Case Separated Words +#pragma mark - Checking for Case Separated Words BOOL KWStringHasWordPrefix(NSString *string, NSString *prefix) { return [string isEqualToString:prefix] || KWStringHasStrictWordPrefix(string, prefix); @@ -64,8 +63,7 @@ BOOL KWStringHasWord(NSString *string, NSString *word) { } } -#pragma mark - -#pragma mark Getting Type Encodings +#pragma mark - Getting Type Encodings NSString *KWEncodingWithObjCTypes(const char *firstType, ...) { if (firstType == nil) @@ -88,3 +86,7 @@ BOOL KWStringHasWord(NSString *string, NSString *word) { NSString *KWEncodingForVoidMethod(void) { return KWEncodingWithObjCTypes(@encode(void), @encode(id), @encode(SEL), nil); } + +NSString *KWEncodingForDefaultMethod(void) { + return KWEncodingWithObjCTypes(@encode(id), @encode(id), @encode(SEL), nil); +} diff --git a/Pods/Kiwi/Classes/Core/KWValue.h b/Pods/Kiwi/Classes/Core/KWValue.h new file mode 100644 index 0000000..78cbb66 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWValue.h @@ -0,0 +1,87 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface KWValue : NSObject + +#pragma mark - Initializing + +- (id)initWithBytes:(const void *)bytes objCType:(const char *)anObjCType; + ++ (id)valueWithBytes:(const void *)bytes objCType:(const char *)anObjCType; ++ (id)valueWithBool:(BOOL)aValue; ++ (id)valueWithChar:(char)aValue; ++ (id)valueWithDouble:(double)aValue; ++ (id)valueWithFloat:(float)aValue; ++ (id)valueWithInt:(int)aValue; ++ (id)valueWithInteger:(NSInteger)aValue; ++ (id)valueWithLong:(long)aValue; ++ (id)valueWithLongLong:(long long)value; ++ (id)valueWithShort:(short)aValue; ++ (id)valueWithUnsignedChar:(unsigned char)aValue; ++ (id)valueWithUnsignedInt:(unsigned int)aValue; ++ (id)valueWithUnsignedInteger:(NSUInteger)aValue; ++ (id)valueWithUnsignedLong:(unsigned long)aValue; ++ (id)valueWithUnsignedLongLong:(unsigned long long)aValue; ++ (id)valueWithUnsignedShort:(unsigned short)aValue; + +#pragma mark - Properties + +@property (nonatomic, readonly) const char *objCType; +@property (nonatomic, readonly) BOOL isNumeric; + +#pragma mark - Accessing Numeric Values + +- (NSNumber *)numberValue; +- (BOOL)boolValue; +- (char)charValue; +- (double)doubleValue; +- (float)floatValue; +- (int)intValue; +- (NSInteger)integerValue; +- (long)longValue; +- (long long)longLongValue; +- (short)shortValue; +- (unsigned char)unsignedCharValue; +- (unsigned int)unsignedIntValue; +- (NSUInteger)unsignedIntegerValue; +- (unsigned long)unsignedLongValue; +- (unsigned long long)unsignedLongLongValue; +- (unsigned short)unsignedShortValue; + +#pragma mark - Accessing Data + +- (NSData *)dataValue; +- (void)getValue:(void *)buffer; + +#pragma mark - Accessing Numeric Data + +- (NSData *)dataForObjCType:(const char *)anObjCType; +- (NSData *)boolData; +- (NSData *)charData; +- (NSData *)doubleData; +- (NSData *)floatData; +- (NSData *)intData; +- (NSData *)integerData; +- (NSData *)longData; +- (NSData *)longLongData; +- (NSData *)shortData; +- (NSData *)unsignedCharData; +- (NSData *)unsignedIntData; +- (NSData *)unsignedIntegerData; +- (NSData *)unsignedLongData; +- (NSData *)unsignedLongLongData; +- (NSData *)unsignedShortData; + +#pragma mark - Comparing Values + +- (NSComparisonResult)compare:(KWValue *)aValue; + +- (BOOL)isEqualToKWValue:(KWValue *)aValue; +- (BOOL)isEqualToNumber:(NSNumber *)aValue; + +@end diff --git a/Pods/Kiwi/Kiwi/KWValue.m b/Pods/Kiwi/Classes/Core/KWValue.m old mode 100755 new mode 100644 similarity index 94% rename from Pods/Kiwi/Kiwi/KWValue.m rename to Pods/Kiwi/Classes/Core/KWValue.m index e76ca86..c131ce2 --- a/Pods/Kiwi/Kiwi/KWValue.m +++ b/Pods/Kiwi/Classes/Core/KWValue.m @@ -10,8 +10,7 @@ @interface KWValue() -#pragma mark - -#pragma mark Properties +#pragma mark - Properties @property (nonatomic, readonly) id value; @@ -19,11 +18,11 @@ @interface KWValue() @implementation KWValue -#pragma mark - -#pragma mark Initializing +#pragma mark - Initializing - (id)initWithBytes:(const void *)bytes objCType:(const char *)anObjCType { - if ((self = [super init])) { + self = [super init]; + if (self) { objCType = anObjCType; value = [[NSValue alloc] initWithBytes:bytes objCType:anObjCType]; } @@ -32,7 +31,7 @@ - (id)initWithBytes:(const void *)bytes objCType:(const char *)anObjCType { } + (id)valueWithBytes:(const void *)bytes objCType:(const char *)type { - return [[[self alloc] initWithBytes:bytes objCType:type] autorelease]; + return [[self alloc] initWithBytes:bytes objCType:type]; } + (id)valueWithBool:(BOOL)aValue { @@ -95,13 +94,8 @@ + (id)valueWithUnsignedShort:(unsigned short)aValue { return [self valueWithBytes:&aValue objCType:@encode(unsigned short)]; } -- (void)dealloc { - [value release]; - [super dealloc]; -} -#pragma mark - -#pragma mark Properties +#pragma mark - Properties @synthesize objCType; @@ -111,8 +105,7 @@ - (BOOL)isNumeric { @synthesize value; -#pragma mark - -#pragma mark Accessing Numeric Values +#pragma mark - Accessing Numeric Values - (NSNumber *)numberValue { if (!KWObjCTypeIsNumeric(self.objCType)) @@ -181,8 +174,7 @@ - (unsigned short)unsignedShortValue { return [[self numberValue] unsignedShortValue]; } -#pragma mark - -#pragma mark Accessing Data +#pragma mark - Accessing Data - (NSData *)dataValue { NSUInteger length = KWObjCTypeLength(self.objCType); @@ -197,8 +189,7 @@ - (void)getValue:(void *)buffer { [self.value getValue:buffer]; } -#pragma mark - -#pragma mark Accessing Numeric Data +#pragma mark - Accessing Numeric Data - (NSData *)dataForObjCType:(const char *)anObjCType { // Yeah, this is ugly. @@ -311,8 +302,7 @@ - (NSData *)unsignedShortData { return [NSData dataWithBytes:&aValue length:sizeof(unsigned short)]; } -#pragma mark - -#pragma mark Comparing Objects +#pragma mark - Comparing Objects - (NSUInteger)hash { if (self.isNumeric) @@ -346,8 +336,7 @@ - (BOOL)isEqualToNumber:(NSNumber *)aValue { return [[self numberValue] isEqualToNumber:aValue]; } -#pragma mark - -#pragma mark Representing Values +#pragma mark - Representing Values - (NSString *)description { if ([self isNumeric]) diff --git a/Pods/Kiwi/Classes/Core/KWWorkarounds.h b/Pods/Kiwi/Classes/Core/KWWorkarounds.h new file mode 100644 index 0000000..8242a98 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KWWorkarounds.h @@ -0,0 +1,17 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + +#pragma mark - Invocation Exception Bug Workaround + +// See KiwiConfiguration.h for notes. +void KWSetExceptionFromAcrossInvocationBoundary(NSException *anException); +NSException *KWGetAndClearExceptionFromAcrossInvocationBoundary(void); + +#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG diff --git a/Pods/Kiwi/Kiwi/KWWorkarounds.m b/Pods/Kiwi/Classes/Core/KWWorkarounds.m old mode 100755 new mode 100644 similarity index 80% rename from Pods/Kiwi/Kiwi/KWWorkarounds.m rename to Pods/Kiwi/Classes/Core/KWWorkarounds.m index e4e98e9..2d866bb --- a/Pods/Kiwi/Kiwi/KWWorkarounds.m +++ b/Pods/Kiwi/Classes/Core/KWWorkarounds.m @@ -14,11 +14,11 @@ void KWSetExceptionFromAcrossInvocationBoundary(NSException *anException) { if (KWExceptionAcrossInvokeBoundary != nil) return; - KWExceptionAcrossInvokeBoundary = [anException retain]; + KWExceptionAcrossInvokeBoundary = anException; } NSException *KWGetAndClearExceptionFromAcrossInvocationBoundary(void) { - NSException *exception = [KWExceptionAcrossInvokeBoundary autorelease]; + NSException *exception = KWExceptionAcrossInvokeBoundary; KWExceptionAcrossInvokeBoundary = nil; return exception; } diff --git a/Pods/Kiwi/Classes/Core/Kiwi.h b/Pods/Kiwi/Classes/Core/Kiwi.h new file mode 100644 index 0000000..f260798 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/Kiwi.h @@ -0,0 +1,101 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +// This needs to come first. +#import "KiwiConfiguration.h" +#import + +#if defined(__cplusplus) +extern "C" { +#endif + +#import "KWAfterAllNode.h" +#import "KWAfterEachNode.h" +#import "KWAny.h" +#import "KWAsyncVerifier.h" +#import "KWBeBetweenMatcher.h" +#import "KWBeEmptyMatcher.h" +#import "KWBeIdenticalToMatcher.h" +#import "KWBeKindOfClassMatcher.h" +#import "KWBeMemberOfClassMatcher.h" +#import "KWBeSubclassOfClassMatcher.h" +#import "KWBeTrueMatcher.h" +#import "KWNilMatcher.h" +#import "KWBeWithinMatcher.h" +#import "KWBeZeroMatcher.h" +#import "KWBeforeAllNode.h" +#import "KWBeforeEachNode.h" +#import "KWBlock.h" +#import "KWBlockNode.h" +#import "KWBlockRaiseMatcher.h" +#import "KWCallSite.h" +#import "KWChangeMatcher.h" +#import "KWConformToProtocolMatcher.h" +#import "KWContainMatcher.h" +#import "KWContainStringMatcher.h" +#import "KWContextNode.h" +#import "KWDeviceInfo.h" +#import "KWEqualMatcher.h" +#import "KWExample.h" +#import "KWExampleSuiteBuilder.h" +#import "KWExampleNode.h" +#import "KWExampleNodeVisitor.h" +#import "KWExistVerifier.h" +#import "KWExpectationType.h" +#import "KWFailure.h" +#import "KWFormatter.h" +#import "KWFutureObject.h" +#import "KWGenericMatcher.h" +#import "KWHaveMatcher.h" +#import "KWHaveValueMatcher.h" +#import "KWInequalityMatcher.h" +#import "KWInvocationCapturer.h" +#import "KWItNode.h" +#import "KWMatchVerifier.h" +#import "KWMatcher.h" +#import "KWMatchers.h" +#import "KWMatcherFactory.h" +#import "KWMatching.h" +#import "KWMessagePattern.h" +#import "KWMessageSpying.h" +#import "KWMock.h" +#import "KWNull.h" +#import "KWObjCUtilities.h" +#import "KWPendingNode.h" +#import "KWRaiseMatcher.h" +#import "KWReceiveMatcher.h" +#import "KWRegisterMatchersNode.h" +#import "KWRegularExpressionPatternMatcher.h" +#import "KWRespondToSelectorMatcher.h" +#import "KWSpec.h" +#import "KWStringUtilities.h" +#import "KWStub.h" +#import "KWUserDefinedMatcher.h" +#import "KWValue.h" +#import "KWVerifying.h" +#import "KWCaptureSpy.h" +#import "KWStringPrefixMatcher.h" +#import "KWStringContainsMatcher.h" + + +// Public Foundation Categories +#import "NSObject+KiwiMockAdditions.h" +#import "NSObject+KiwiSpyAdditions.h" +#import "NSObject+KiwiStubAdditions.h" +#import "NSObject+KiwiVerifierAdditions.h" +#import "NSProxy+KiwiVerifierAdditions.h" + +#import "KiwiMacros.h" + +// Some Foundation headers use Kiwi keywords (e.g. 'should') as identifiers for +// parameter names. Including this last allows the use of Kiwi keywords without +// conflicting with these headers (hopefully!). +#import "KiwiBlockMacros.h" + +#if defined(__cplusplus) +} +#endif + diff --git a/Pods/Kiwi/Kiwi/KiwiBlockMacros.h b/Pods/Kiwi/Classes/Core/KiwiBlockMacros.h old mode 100755 new mode 100644 similarity index 100% rename from Pods/Kiwi/Kiwi/KiwiBlockMacros.h rename to Pods/Kiwi/Classes/Core/KiwiBlockMacros.h diff --git a/Pods/Kiwi/Classes/Core/KiwiConfiguration.h b/Pods/Kiwi/Classes/Core/KiwiConfiguration.h new file mode 100644 index 0000000..1b54283 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KiwiConfiguration.h @@ -0,0 +1,18 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +// As of iPhone SDK 4 GM, exceptions thrown across an NSInvocation -invoke or +// forwardInvocation: boundary in the simulator will terminate the app instead +// of being caught in @catch blocks from the caller side of the -invoke. Kiwi +// tries to handle this by storing the first exception that it would have +// otherwise thrown in a nasty global that callers can look for and handle. +// (Buggy termination is less desirable than global variables). +// +// Obviously, this can only handles cases where Kiwi itself would have raised +// an exception. +#if TARGET_IPHONE_SIMULATOR + #define KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 1 +#endif diff --git a/Pods/Kiwi/Classes/Core/KiwiMacros.h b/Pods/Kiwi/Classes/Core/KiwiMacros.h new file mode 100644 index 0000000..368bfe7 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/KiwiMacros.h @@ -0,0 +1,98 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +// This category is solely meant to coax Xcode into exposing the method names below during autocompletion. +// There is no implementation and this class definition must come before the macro definitions below. +@interface NSObject (KiwiVerifierMacroNames) + +- (void)should; +- (void)shouldNot; +- (void)shouldBeNil DEPRECATED_ATTRIBUTE; +- (void)shouldNotBeNil DEPRECATED_ATTRIBUTE; +- (void)shouldEventually; +- (void)shouldNotEventually; +- (void)shouldEventuallyBeforeTimingOutAfter; +- (void)shouldNotEventuallyBeforeTimingOutAfter; + +- (void)shouldAfterWait; +- (void)shouldNotAfterWait; +- (void)shouldAfterWaitOf; +- (void)shouldNotAfterWaitOf; + +@end + +#pragma mark - Support Macros + +#define KW_THIS_CALLSITE [KWCallSite callSiteWithFilename:@__FILE__ lineNumber:__LINE__] +#define KW_ADD_EXIST_VERIFIER(expectationType) [self addExistVerifierWithExpectationType:expectationType callSite:KW_THIS_CALLSITE] +#define KW_ADD_MATCH_VERIFIER(expectationType) [self addMatchVerifierWithExpectationType:expectationType callSite:KW_THIS_CALLSITE] +#define KW_ADD_ASYNC_VERIFIER(expectationType, timeOut, wait) [self addAsyncVerifierWithExpectationType:expectationType callSite:KW_THIS_CALLSITE timeout:timeOut shouldWait:wait] + +#pragma mark - Keywords + +// Kiwi macros used in specs for verifying expectations. +#define should attachToVerifier:KW_ADD_MATCH_VERIFIER(KWExpectationTypeShould) +#define shouldNot attachToVerifier:KW_ADD_MATCH_VERIFIER(KWExpectationTypeShouldNot) +#define shouldBeNil attachToVerifier:KW_ADD_EXIST_VERIFIER(KWExpectationTypeShouldNot) +#define shouldNotBeNil attachToVerifier:KW_ADD_EXIST_VERIFIER(KWExpectationTypeShould) + +#define shouldEventually attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShould, kKW_DEFAULT_PROBE_TIMEOUT, NO) +#define shouldNotEventually attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShouldNot, kKW_DEFAULT_PROBE_TIMEOUT, NO) +#define shouldEventuallyBeforeTimingOutAfter(timeout) attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShould, timeout, NO) +#define shouldNotEventuallyBeforeTimingOutAfter(timeout) attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShouldNot, timeout, NO) + +#define shouldAfterWait attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShould, kKW_DEFAULT_PROBE_TIMEOUT, YES) +#define shouldNotAfterWait attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShouldNot, kKW_DEFAULT_PROBE_TIMEOUT, YES) +#define shouldAfterWaitOf(timeout) attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShould, timeout, YES) +#define shouldNotAfterWaitOf(timeout) attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShouldNot, timeout, YES) + +#define beNil beNil:[KWNilMatcher verifyNilSubject] +#define beNonNil beNonNil:[KWNilMatcher verifyNonNilSubject] + +// used to wrap a pointer to an object that will change in the future (used with shouldEventually) +#define theObject(objectPtr) [KWFutureObject objectWithObjectPointer:objectPtr] // DEPRECATED +#define theReturnValueOfBlock(block) [KWFutureObject futureObjectWithBlock:block] // DEPRECATED +#define expectFutureValue(futureValue) [KWFutureObject futureObjectWithBlock:^{ return futureValue; }] + +// `fail` triggers a failure report when called +#define fail(message, ...) [[[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample] reportFailure:[KWFailure failureWithCallSite:KW_THIS_CALLSITE format:message, ##__VA_ARGS__]] + +// used for message patterns to allow matching any value +#define any() [KWAny any] + +// If a gcc compatible compiler is available, use the statement and +// declarations in expression extension to provide a convenient catch-all macro +// to create KWValues. +#if defined(__GNUC__) + #define theValue(expr) \ + ({ \ + __typeof__(expr) kiwiReservedPrefix_lVar = expr; \ + [KWValue valueWithBytes:&kiwiReservedPrefix_lVar objCType:@encode(__typeof__(expr))]; \ + }) +#endif // #if defined(__GNUC__) + +// Allows for comparision of pointer values in expectations +#define thePointerValue(expr) [NSValue valueWithPointer:(expr)] + +// Example group declarations. +#define SPEC_BEGIN(name) \ + \ + @interface name : KWSpec \ + \ + @end \ + \ + @implementation name \ + \ + + (NSString *)file { return @__FILE__; } \ + \ + + (void)buildExampleGroups { \ + +#define SPEC_END \ + } \ + \ + @end diff --git a/Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h b/Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h new file mode 100644 index 0000000..d663b4c --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h @@ -0,0 +1,26 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface NSInvocation(KiwiAdditions) + +#pragma mark - Creating NSInvocation Objects + ++ (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector; ++ (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector messageArguments:(const void *)firstBytes, ...; + +#pragma mark - Accessing Message Arguments + +// Message arguments are invocation arguments that begin after the target and selector arguments. These methods provide +// convenient ways to access them. + +- (NSData *)messageArgumentDataAtIndex:(NSUInteger)anIndex; +- (void)getMessageArgument:(void *)buffer atIndex:(NSUInteger)anIndex; +- (void)setMessageArgument:(const void *)bytes atIndex:(NSUInteger)anIndex; +- (void)setMessageArguments:(const void *)firstBytes, ...; + +@end diff --git a/Pods/Kiwi/Kiwi/NSInvocation+KiwiAdditions.m b/Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.m old mode 100755 new mode 100644 similarity index 96% rename from Pods/Kiwi/Kiwi/NSInvocation+KiwiAdditions.m rename to Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.m index 6f9cb78..23065a2 --- a/Pods/Kiwi/Kiwi/NSInvocation+KiwiAdditions.m +++ b/Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.m @@ -11,8 +11,7 @@ @implementation NSInvocation(KiwiAdditions) -#pragma mark - -#pragma mark Creating NSInvocation Objects +#pragma mark - Creating NSInvocation Objects + (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector { return [self invocationWithTarget:anObject selector:aSelector messageArguments:nil]; @@ -52,8 +51,7 @@ + (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector mess return invocation; } -#pragma mark - -#pragma mark Accessing Message Arguments +#pragma mark - Accessing Message Arguments - (NSData *)messageArgumentDataAtIndex:(NSUInteger)anIndex { NSUInteger length = KWObjCTypeLength([[self methodSignature] messageArgumentTypeAtIndex:anIndex]); diff --git a/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.h b/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.h new file mode 100644 index 0000000..04f22cd --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.h @@ -0,0 +1,34 @@ +//--------------------------------------------------------------------------------------- +// $Id$ +// Copyright (c) 2006-2009 by Mulle Kybernetik. See License file for details. +//--------------------------------------------------------------------------------------- + +#import + +@interface NSInvocation(OCMAdditions) + +- (id)getArgumentAtIndexAsObject:(int)argIndex; + +- (NSString *)invocationDescription; + +- (NSString *)argumentDescriptionAtIndex:(int)argIndex; + +- (NSString *)objectDescriptionAtIndex:(int)anInt; +- (NSString *)charDescriptionAtIndex:(int)anInt; +- (NSString *)unsignedCharDescriptionAtIndex:(int)anInt; +- (NSString *)intDescriptionAtIndex:(int)anInt; +- (NSString *)unsignedIntDescriptionAtIndex:(int)anInt; +- (NSString *)shortDescriptionAtIndex:(int)anInt; +- (NSString *)unsignedShortDescriptionAtIndex:(int)anInt; +- (NSString *)longDescriptionAtIndex:(int)anInt; +- (NSString *)unsignedLongDescriptionAtIndex:(int)anInt; +- (NSString *)longLongDescriptionAtIndex:(int)anInt; +- (NSString *)unsignedLongLongDescriptionAtIndex:(int)anInt; +- (NSString *)doubleDescriptionAtIndex:(int)anInt; +- (NSString *)floatDescriptionAtIndex:(int)anInt; +- (NSString *)structDescriptionAtIndex:(int)anInt; +- (NSString *)pointerDescriptionAtIndex:(int)anInt; +- (NSString *)cStringDescriptionAtIndex:(int)anInt; +- (NSString *)selectorDescriptionAtIndex:(int)anInt; + +@end diff --git a/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.m b/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.m new file mode 100644 index 0000000..a53804b --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.m @@ -0,0 +1,343 @@ +//--------------------------------------------------------------------------------------- +// $Id$ +// Copyright (c) 2006-2009 by Mulle Kybernetik. See License file for details. +//--------------------------------------------------------------------------------------- + +#import "NSInvocation+OCMAdditions.h" + + +@implementation NSInvocation(OCMAdditions) + +- (id)getArgumentAtIndexAsObject:(int)argIndex +{ + const char* argType; + + argType = [[self methodSignature] getArgumentTypeAtIndex:argIndex]; + while(strchr("rnNoORV", argType[0]) != NULL) + argType += 1; + + if((strlen(argType) > 1) && (strchr("{^", argType[0]) == NULL) && (strcmp("@?", argType) != 0)) + [NSException raise:NSInvalidArgumentException format:@"Cannot handle argument type '%s'.", argType]; + + switch (argType[0]) + { + case '#': + case '@': + { + __unsafe_unretained id value; + [self getArgument:&value atIndex:argIndex]; + return value; + } + case ':': + { + SEL s = (SEL)0; + [self getArgument:&s atIndex:argIndex]; + id value = NSStringFromSelector(s); + return value; + } + case 'i': + { + int value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 's': + { + short value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'l': + { + long value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'q': + { + long long value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'c': + { + char value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'C': + { + unsigned char value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'I': + { + unsigned int value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'S': + { + unsigned short value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'L': + { + unsigned long value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'Q': + { + unsigned long long value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'f': + { + float value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'd': + { + double value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case 'B': + { + bool value; + [self getArgument:&value atIndex:argIndex]; + return @(value); + } + case '^': + { + void *value = NULL; + [self getArgument:&value atIndex:argIndex]; + return [NSValue valueWithPointer:value]; + } + case '*': + { + char *value = NULL; + [self getArgument:&value atIndex:argIndex]; + return [NSValue valueWithPointer:value]; + } + case '{': // structure + { + NSUInteger maxArgSize = [[self methodSignature] frameLength]; + NSMutableData *argumentData = [[NSMutableData alloc] initWithLength:maxArgSize]; + [self getArgument:[argumentData mutableBytes] atIndex:argIndex]; + return [NSValue valueWithBytes:[argumentData bytes] objCType:argType]; + } + + } + [NSException raise:NSInvalidArgumentException format:@"Argument type '%s' not supported", argType]; + return nil; +} + +- (NSString *)invocationDescription +{ + NSMethodSignature *methodSignature = [self methodSignature]; + NSUInteger numberOfArgs = [methodSignature numberOfArguments]; + + if (numberOfArgs == 2) + return NSStringFromSelector([self selector]); + + NSArray *selectorParts = [NSStringFromSelector([self selector]) componentsSeparatedByString:@":"]; + NSMutableString *description = [[NSMutableString alloc] init]; + unsigned int i; + for(i = 2; i < numberOfArgs; i++) + { + [description appendFormat:@"%@%@:", (i > 2 ? @" " : @""), selectorParts[(i - 2)]]; + [description appendString:[self argumentDescriptionAtIndex:i]]; + } + + return description; +} + +- (NSString *)argumentDescriptionAtIndex:(int)argIndex +{ + const char *argType = [[self methodSignature] getArgumentTypeAtIndex:argIndex]; + if(strchr("rnNoORV", argType[0]) != NULL) + argType += 1; + + switch(*argType) + { + case '@': return [self objectDescriptionAtIndex:argIndex]; + case 'c': return [self charDescriptionAtIndex:argIndex]; + case 'C': return [self unsignedCharDescriptionAtIndex:argIndex]; + case 'i': return [self intDescriptionAtIndex:argIndex]; + case 'I': return [self unsignedIntDescriptionAtIndex:argIndex]; + case 's': return [self shortDescriptionAtIndex:argIndex]; + case 'S': return [self unsignedShortDescriptionAtIndex:argIndex]; + case 'l': return [self longDescriptionAtIndex:argIndex]; + case 'L': return [self unsignedLongDescriptionAtIndex:argIndex]; + case 'q': return [self longLongDescriptionAtIndex:argIndex]; + case 'Q': return [self unsignedLongLongDescriptionAtIndex:argIndex]; + case 'd': return [self doubleDescriptionAtIndex:argIndex]; + case 'f': return [self floatDescriptionAtIndex:argIndex]; + // Why does this throw EXC_BAD_ACCESS when appending the string? + // case NSObjCStructType: return [self structDescriptionAtIndex:index]; + case '^': return [self pointerDescriptionAtIndex:argIndex]; + case '*': return [self cStringDescriptionAtIndex:argIndex]; + case ':': return [self selectorDescriptionAtIndex:argIndex]; + default: return [@""]; // avoid confusion with trigraphs... + } + +} + + +- (NSString *)objectDescriptionAtIndex:(int)anInt +{ + __unsafe_unretained id object; + + [self getArgument:&object atIndex:anInt]; + if (object == nil) + return @"nil"; + else if(![object isProxy] && [object isKindOfClass:[NSString class]]) + return [NSString stringWithFormat:@"@\"%@\"", [object description]]; + else + return [object description]; +} + +- (NSString *)charDescriptionAtIndex:(int)anInt +{ + unsigned char buffer[128]; + memset(buffer, 0x0, 128); + + [self getArgument:&buffer atIndex:anInt]; + + // If there's only one character in the buffer, and it's 0 or 1, then we have a BOOL + if (buffer[1] == '\0' && (buffer[0] == 0 || buffer[0] == 1)) + return [NSString stringWithFormat:@"%@", (buffer[0] == 1 ? @"YES" : @"NO")]; + else + return [NSString stringWithFormat:@"'%c'", *buffer]; +} + +- (NSString *)unsignedCharDescriptionAtIndex:(int)anInt +{ + unsigned char buffer[128]; + memset(buffer, 0x0, 128); + + [self getArgument:&buffer atIndex:anInt]; + return [NSString stringWithFormat:@"'%c'", *buffer]; +} + +- (NSString *)intDescriptionAtIndex:(int)anInt +{ + int intValue; + + [self getArgument:&intValue atIndex:anInt]; + return [NSString stringWithFormat:@"%d", intValue]; +} + +- (NSString *)unsignedIntDescriptionAtIndex:(int)anInt +{ + unsigned int intValue; + + [self getArgument:&intValue atIndex:anInt]; + return [NSString stringWithFormat:@"%d", intValue]; +} + +- (NSString *)shortDescriptionAtIndex:(int)anInt +{ + short shortValue; + + [self getArgument:&shortValue atIndex:anInt]; + return [NSString stringWithFormat:@"%hi", shortValue]; +} + +- (NSString *)unsignedShortDescriptionAtIndex:(int)anInt +{ + unsigned short shortValue; + + [self getArgument:&shortValue atIndex:anInt]; + return [NSString stringWithFormat:@"%hu", shortValue]; +} + +- (NSString *)longDescriptionAtIndex:(int)anInt +{ + long longValue; + + [self getArgument:&longValue atIndex:anInt]; + return [NSString stringWithFormat:@"%ld", longValue]; +} + +- (NSString *)unsignedLongDescriptionAtIndex:(int)anInt +{ + unsigned long longValue; + + [self getArgument:&longValue atIndex:anInt]; + return [NSString stringWithFormat:@"%lu", longValue]; +} + +- (NSString *)longLongDescriptionAtIndex:(int)anInt +{ + long long longLongValue; + + [self getArgument:&longLongValue atIndex:anInt]; + return [NSString stringWithFormat:@"%qi", longLongValue]; +} + +- (NSString *)unsignedLongLongDescriptionAtIndex:(int)anInt +{ + unsigned long long longLongValue; + + [self getArgument:&longLongValue atIndex:anInt]; + return [NSString stringWithFormat:@"%qu", longLongValue]; +} + +- (NSString *)doubleDescriptionAtIndex:(int)anInt; +{ + double doubleValue; + + [self getArgument:&doubleValue atIndex:anInt]; + return [NSString stringWithFormat:@"%f", doubleValue]; +} + +- (NSString *)floatDescriptionAtIndex:(int)anInt +{ + float floatValue; + + [self getArgument:&floatValue atIndex:anInt]; + return [NSString stringWithFormat:@"%f", floatValue]; +} + +- (NSString *)structDescriptionAtIndex:(int)anInt; +{ + void *buffer; + + [self getArgument:&buffer atIndex:anInt]; + return [NSString stringWithFormat:@":(struct)%p", buffer]; +} + +- (NSString *)pointerDescriptionAtIndex:(int)anInt +{ + void *buffer; + + [self getArgument:&buffer atIndex:anInt]; + return [NSString stringWithFormat:@"%p", buffer]; +} + +- (NSString *)cStringDescriptionAtIndex:(int)anInt +{ + char buffer[128]; + + memset(buffer, 0x0, 128); + + [self getArgument:&buffer atIndex:anInt]; + return [NSString stringWithFormat:@"\"%s\"", buffer]; +} + +- (NSString *)selectorDescriptionAtIndex:(int)anInt +{ + SEL selectorValue; + + [self getArgument:&selectorValue atIndex:anInt]; + return [NSString stringWithFormat:@"@selector(%@)", NSStringFromSelector(selectorValue)]; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h b/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h new file mode 100644 index 0000000..e7c44a3 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface NSMethodSignature(KiwiAdditions) + +#pragma mark - Getting Information on Message Arguments + +- (NSUInteger)numberOfMessageArguments; +- (const char *)messageArgumentTypeAtIndex:(NSUInteger)anIndex; + +@end diff --git a/Pods/Kiwi/Kiwi/NSMethodSignature+KiwiAdditions.m b/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.m old mode 100755 new mode 100644 similarity index 85% rename from Pods/Kiwi/Kiwi/NSMethodSignature+KiwiAdditions.m rename to Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.m index 68b99a5..3d1b887 --- a/Pods/Kiwi/Kiwi/NSMethodSignature+KiwiAdditions.m +++ b/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.m @@ -8,8 +8,7 @@ @implementation NSMethodSignature(KiwiAdditions) -#pragma mark - -#pragma mark Getting Information on Message Arguments +#pragma mark - Getting Information on Message Arguments - (NSUInteger)numberOfMessageArguments { return [self numberOfArguments] - 2; diff --git a/Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.h b/Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.h new file mode 100644 index 0000000..1600af8 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.h @@ -0,0 +1,30 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface NSNumber(KiwiAdditions) + +#pragma mark - Creating Numbers + ++ (id)numberWithBytes:(const void *)bytes objCType:(const char *)anObjCType; ++ (id)numberWithBoolBytes:(const void *)bytes; ++ (id)numberWithCharBytes:(const void *)bytes; ++ (id)numberWithDoubleBytes:(const void *)bytes; ++ (id)numberWithFloatBytes:(const void *)bytes; ++ (id)numberWithIntBytes:(const void *)bytes; ++ (id)numberWithIntegerBytes:(const void *)bytes; ++ (id)numberWithLongBytes:(const void *)bytes; ++ (id)numberWithLongLongBytes:(const void *)bytes; ++ (id)numberWithShortBytes:(const void *)bytes; ++ (id)numberWithUnsignedCharBytes:(const void *)bytes; ++ (id)numberWithUnsignedIntBytes:(const void *)bytes; ++ (id)numberWithUnsignedIntegerBytes:(const void *)bytes; ++ (id)numberWithUnsignedLongBytes:(const void *)bytes; ++ (id)numberWithUnsignedLongLongBytes:(const void *)bytes; ++ (id)numberWithUnsignedShortBytes:(const void *)bytes; + +@end diff --git a/Pods/Kiwi/Kiwi/NSNumber+KiwiAdditions.m b/Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.m old mode 100755 new mode 100644 similarity index 75% rename from Pods/Kiwi/Kiwi/NSNumber+KiwiAdditions.m rename to Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.m index bc8d68d..f4ebdcb --- a/Pods/Kiwi/Kiwi/NSNumber+KiwiAdditions.m +++ b/Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.m @@ -9,8 +9,7 @@ @implementation NSNumber(KiwiAdditions) -#pragma mark - -#pragma mark Creating Numbers +#pragma mark - Creating Numbers + (id)numberWithBytes:(const void *)bytes objCType:(const char *)anObjCType { // Yeah, this is ugly. @@ -49,63 +48,63 @@ + (id)numberWithBytes:(const void *)bytes objCType:(const char *)anObjCType { } + (id)numberWithBoolBytes:(const void *)bytes { - return [NSNumber numberWithBool:*(const BOOL *)bytes]; + return @(*(const BOOL *)bytes); } + (id)numberWithCharBytes:(const void *)bytes { - return [NSNumber numberWithChar:*(const char *)bytes]; + return @(*(const char *)bytes); } + (id)numberWithDoubleBytes:(const void *)bytes { - return [NSNumber numberWithDouble:*(const double *)bytes]; + return @(*(const double *)bytes); } + (id)numberWithFloatBytes:(const void *)bytes { - return [NSNumber numberWithFloat:*(const float *)bytes]; + return @(*(const float *)bytes); } + (id)numberWithIntBytes:(const void *)bytes { - return [NSNumber numberWithInt:*(const int *)bytes]; + return @(*(const int *)bytes); } + (id)numberWithIntegerBytes:(const void *)bytes { - return [NSNumber numberWithInteger:*(const NSInteger *)bytes]; + return @(*(const NSInteger *)bytes); } + (id)numberWithLongBytes:(const void *)bytes { - return [NSNumber numberWithLong:*(const long *)bytes]; + return @(*(const long *)bytes); } + (id)numberWithLongLongBytes:(const void *)bytes { - return [NSNumber numberWithLongLong:*(const long long *)bytes]; + return @(*(const long long *)bytes); } + (id)numberWithShortBytes:(const void *)bytes { - return [NSNumber numberWithShort:*(const short *)bytes]; + return @(*(const short *)bytes); } + (id)numberWithUnsignedCharBytes:(const void *)bytes { - return [NSNumber numberWithChar:*(const unsigned char *)bytes]; + return @(*(const unsigned char *)bytes); } + (id)numberWithUnsignedIntBytes:(const void *)bytes { - return [NSNumber numberWithInt:*(const unsigned int *)bytes]; + return @(*(const unsigned int *)bytes); } + (id)numberWithUnsignedIntegerBytes:(const void *)bytes { - return [NSNumber numberWithInteger:*(const NSUInteger *)bytes]; + return @(*(const NSUInteger *)bytes); } + (id)numberWithUnsignedLongBytes:(const void *)bytes { - return [NSNumber numberWithLong:*(const unsigned long *)bytes]; + return @(*(const unsigned long *)bytes); } + (id)numberWithUnsignedLongLongBytes:(const void *)bytes { - return [NSNumber numberWithLongLong:*(const unsigned long long *)bytes]; + return @(*(const unsigned long long *)bytes); } + (id)numberWithUnsignedShortBytes:(const void *)bytes { - return [NSNumber numberWithShort:*(const unsigned short *)bytes]; + return @(*(const unsigned short *)bytes); } @end diff --git a/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h b/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h new file mode 100644 index 0000000..ac0427b --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h @@ -0,0 +1,14 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@class KWCaptureSpy; + +@interface NSObject (KiwiSpyAdditions) +- (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; ++ (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; +@end diff --git a/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.m b/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.m new file mode 100644 index 0000000..321ea8a --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.m @@ -0,0 +1,29 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "NSObject+KiwiSpyAdditions.h" + +#import "KWCaptureSpy.h" +#import "KWMessagePattern.h" +#import "NSObject+KiwiStubAdditions.h" + +@implementation NSObject (KiwiSpyAdditions) + +- (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { + KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; + KWMessagePattern *pattern = [[KWMessagePattern alloc] initWithSelector:selector]; + [self addMessageSpy:spy forMessagePattern:pattern]; + return spy; +} + ++ (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { + KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; + KWMessagePattern *pattern = [[KWMessagePattern alloc] initWithSelector:selector]; + [self addMessageSpy:spy forMessagePattern:pattern]; + return spy; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h b/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h new file mode 100644 index 0000000..9b5de33 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h @@ -0,0 +1,17 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@protocol KWVerifying; + +@interface NSObject(KiwiVerifierAdditions) + +#pragma mark - Attaching to Verifiers + +- (id)attachToVerifier:(id)aVerifier; + +@end diff --git a/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.m b/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.m new file mode 100644 index 0000000..be9fa93 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.m @@ -0,0 +1,19 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "NSObject+KiwiVerifierAdditions.h" +#import "KWVerifying.h" + +@implementation NSObject(KiwiVerifierAdditions) + +#pragma mark - Attaching to Verifiers + +- (id)attachToVerifier:(id)aVerifier { + [aVerifier setSubject:self]; + return aVerifier; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h b/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h new file mode 100644 index 0000000..30426fd --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h @@ -0,0 +1,20 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2013 Allen Ding. All rights reserved. +// +// Contributed by https://github.com/dwlnetnl +// + +#import "KiwiConfiguration.h" + +@protocol KWVerifying; + +@interface NSProxy (KiwiVerifierAdditions) + +#pragma mark - Attaching to Verifiers + +- (id)attachToVerifier:(id)aVerifier; +- (id)attachToVerifier:(id)firstVerifier verifier:(id)secondVerifier; + +@end diff --git a/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.m b/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.m new file mode 100644 index 0000000..027c6e3 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.m @@ -0,0 +1,27 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2013 Allen Ding. All rights reserved. +// +// Contributed by https://github.com/dwlnetnl +// + +#import "NSProxy+KiwiVerifierAdditions.h" +#import "KWVerifying.h" + +@implementation NSProxy (KiwiVerifierAdditions) + +#pragma mark - Attaching to Verifiers + +- (id)attachToVerifier:(id)aVerifier { + [aVerifier setSubject:self]; + return aVerifier; +} + +- (id)attachToVerifier:(id)firstVerifier verifier:(id)secondVerifier { + [firstVerifier setSubject:self]; + [secondVerifier setSubject:self]; + return firstVerifier; +} + +@end diff --git a/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.h b/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.h new file mode 100644 index 0000000..dd96003 --- /dev/null +++ b/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.h @@ -0,0 +1,15 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface NSValue(KiwiAdditions) + +#pragma mark - Accessing Data + +- (NSData *)dataValue; + +@end diff --git a/Pods/Kiwi/Kiwi/NSValue+KiwiAdditions.m b/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.m old mode 100755 new mode 100644 similarity index 91% rename from Pods/Kiwi/Kiwi/NSValue+KiwiAdditions.m rename to Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.m index 99454ae..4ff3c77 --- a/Pods/Kiwi/Kiwi/NSValue+KiwiAdditions.m +++ b/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.m @@ -9,8 +9,7 @@ @implementation NSValue(KiwiAdditions) -#pragma mark - -#pragma mark Accessing Data +#pragma mark - Accessing Data - (NSData *)dataValue { NSUInteger length = KWObjCTypeLength([self objCType]); diff --git a/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.h new file mode 100644 index 0000000..fa08c75 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.h @@ -0,0 +1,18 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBeBetweenMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +// TODO: 'and' below is a reserved word in C++ +- (void)beBetween:(id)aLowerEndpoint and:(id)anUpperEndpoint; +- (void)beInTheIntervalFrom:(id)aLowerEndpoint to:(id)anUpperEndpoint; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.m new file mode 100644 index 0000000..b33e3a2 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.m @@ -0,0 +1,63 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeBetweenMatcher.h" +#import "KWFormatter.h" + +@interface KWBeBetweenMatcher() + +#pragma mark - Properties + +@property (nonatomic, strong) id lowerEndpoint; +@property (nonatomic, strong) id upperEndpoint; + +@end + +@implementation KWBeBetweenMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beBetween:and:", @"beInTheIntervalFrom:to:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + if (![self.subject respondsToSelector:@selector(compare:)]) + [NSException raise:@"KWMatcherException" format:@"subject does not respond to -compare:"]; + + NSComparisonResult lowerResult = [self.subject compare:self.lowerEndpoint]; + NSComparisonResult upperResult = [self.subject compare:self.upperEndpoint]; + return (lowerResult == NSOrderedDescending || lowerResult == NSOrderedSame) && + (upperResult == NSOrderedAscending || upperResult == NSOrderedSame); +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to be in the interval [%@, %@], got %@", + [KWFormatter formatObject:self.lowerEndpoint], + [KWFormatter formatObject:self.upperEndpoint], + [KWFormatter formatObject:self.subject]]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"be between %@ and %@", self.lowerEndpoint, self.upperEndpoint]; +} + +#pragma mark - Configuring Matchers + +- (void)beBetween:(id)aLowerEndpoint and:(id)anUpperEndpoint { + [self beInTheIntervalFrom:aLowerEndpoint to:anUpperEndpoint]; +} + +- (void)beInTheIntervalFrom:(id)aLowerEndpoint to:(id)anUpperEndpoint { + self.lowerEndpoint = aLowerEndpoint; + self.upperEndpoint = anUpperEndpoint; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.h new file mode 100644 index 0000000..540e6dd --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBeEmptyMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)beEmpty; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.m new file mode 100644 index 0000000..8f0194d --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.m @@ -0,0 +1,68 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeEmptyMatcher.h" +#import "KWFormatter.h" + +@interface KWBeEmptyMatcher() + +#pragma mark - Properties + +@property (nonatomic, readwrite) NSUInteger count; + +@end + +@implementation KWBeEmptyMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beEmpty"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + if ([self.subject respondsToSelector:@selector(count)]) { + self.count = [self.subject count]; + return self.count == 0; + } + else if ([self.subject respondsToSelector:@selector(length)]) { + self.count = [self.subject length]; + return self.count == 0; + } + + [NSException raise:@"KWMatcherException" format:@"subject does not respond to -count or -length"]; + return NO; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)countPhrase { + if (self.count == 1) + return @"1 item"; + else + return [NSString stringWithFormat:@"%u items", (unsigned)self.count]; +} + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to be empty, got %@", [self countPhrase]]; +} + +- (NSString *)failureMessageForShouldNot { + return @"expected subject not to be empty"; +} + +- (NSString *)description { + return @"be empty"; +} + +#pragma mark - Configuring Matchers + +- (void)beEmpty { +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h new file mode 100644 index 0000000..09cc4b6 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBeIdenticalToMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)beIdenticalTo:(id)anObject; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.m new file mode 100644 index 0000000..beb9886 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.m @@ -0,0 +1,58 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeIdenticalToMatcher.h" +#import "KWFormatter.h" + +@interface KWBeIdenticalToMatcher() + +#pragma mark - Properties + +@property (nonatomic, readwrite, strong) id otherSubject; + +@end + +@implementation KWBeIdenticalToMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beIdenticalTo:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + return self.subject == self.otherSubject; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to be identical to %@ (%p), got %@ (%p)", + [KWFormatter formatObject:self.otherSubject], + self.otherSubject, + [KWFormatter formatObject:self.subject], + self.subject]; +} + +- (NSString *)failureMessageForShouldNot { + return [NSString stringWithFormat:@"expected subject not to be identical to %@ (%p)", + [KWFormatter formatObject:self.otherSubject], + self.otherSubject]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"be identical to %@", self.otherSubject]; +} + +#pragma mark - Configuring Matchers + +- (void)beIdenticalTo:(id)anObject { + self.otherSubject = anObject; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h new file mode 100644 index 0000000..7e76fb2 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBeKindOfClassMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)beKindOfClass:(Class)aClass; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.m new file mode 100644 index 0000000..90afc4f --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.m @@ -0,0 +1,48 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeKindOfClassMatcher.h" +#import "KWFormatter.h" + +@interface KWBeKindOfClassMatcher() + +@property (nonatomic, assign) Class targetClass; + +@end + +@implementation KWBeKindOfClassMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beKindOfClass:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + return [self.subject isKindOfClass:self.targetClass]; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to be kind of %@, got %@", + NSStringFromClass(self.targetClass), + NSStringFromClass([self.subject class])]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"be kind of %@", NSStringFromClass(self.targetClass)]; +} + +#pragma mark - Configuring Matchers + +- (void)beKindOfClass:(Class)aClass { + self.targetClass = aClass; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h new file mode 100644 index 0000000..fc2fc8d --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBeMemberOfClassMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)beMemberOfClass:(Class)aClass; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.m new file mode 100644 index 0000000..20f41e9 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.m @@ -0,0 +1,49 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeMemberOfClassMatcher.h" +#import "KWFormatter.h" + +@interface KWBeMemberOfClassMatcher() + +@property (nonatomic, assign) Class targetClass; + +@end + +@implementation KWBeMemberOfClassMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beMemberOfClass:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + return [self.subject isMemberOfClass:self.targetClass]; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to be member of %@, got %@", + NSStringFromClass(self.targetClass), + NSStringFromClass([self.subject class])]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"be member of %@", + NSStringFromClass(self.targetClass)]; +} + +#pragma mark - Configuring Matchers + +- (void)beMemberOfClass:(Class)aClass { + self.targetClass = aClass; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h new file mode 100644 index 0000000..fcb4fec --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBeSubclassOfClassMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)beSubclassOfClass:(Class)aClass; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.m new file mode 100644 index 0000000..90740de --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.m @@ -0,0 +1,51 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeSubclassOfClassMatcher.h" +#import "KWFormatter.h" + +@interface KWBeSubclassOfClassMatcher() + +#pragma mark - Properties + +@property (nonatomic, assign) Class targetClass; + +@end + +@implementation KWBeSubclassOfClassMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beSubclassOfClass:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + return [self.subject isSubclassOfClass:self.targetClass]; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to be subclass of %@, got %@", + NSStringFromClass(self.targetClass), + NSStringFromClass([self.subject class])]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"be subclass of %@", + NSStringFromClass(self.targetClass)]; +} + +#pragma mark - Configuring Matchers + +- (void)beSubclassOfClass:(Class)aClass { + self.targetClass = aClass; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.h new file mode 100644 index 0000000..755a80d --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.h @@ -0,0 +1,19 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBeTrueMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)beTrue; +- (void)beFalse; +- (void)beYes; +- (void)beNo; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.m new file mode 100644 index 0000000..4a9b01a --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.m @@ -0,0 +1,64 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeTrueMatcher.h" + +@interface KWBeTrueMatcher() + +@property (nonatomic, readwrite) BOOL expectedValue; + +@end + +@implementation KWBeTrueMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beTrue", @"beFalse", @"beYes", @"beNo"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + if (![self.subject respondsToSelector:@selector(boolValue)]) + [NSException raise:@"KWMatcherException" format:@"subject does not respond to -boolValue"]; + + return [self.subject boolValue] == self.expectedValue; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to be %@", + self.expectedValue ? @"true" : @"false"]; +} + +- (NSString *)description { + if (self.expectedValue == YES) { + return @"be true"; + } + return @"be false"; +} + +#pragma mark - Configuring Matchers + +- (void)beTrue { + self.expectedValue = YES; +} + +- (void)beFalse { + self.expectedValue = NO; +} + +- (void)beYes { + self.expectedValue = YES; +} + +- (void)beNo { + self.expectedValue = NO; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.h new file mode 100644 index 0000000..fb455e7 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.h @@ -0,0 +1,17 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBeWithinMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)beWithin:(id)aDistance of:(id)aValue; +- (void)equal:(double)aValue withDelta:(double)aDelta; + +@end diff --git a/Pods/Kiwi/Kiwi/KWBeWithinMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.m old mode 100755 new mode 100644 similarity index 77% rename from Pods/Kiwi/Kiwi/KWBeWithinMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.m index 629e0d1..f05d060 --- a/Pods/Kiwi/Kiwi/KWBeWithinMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.m @@ -11,40 +11,20 @@ @interface KWBeWithinMatcher() -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, retain) id distance; -@property (nonatomic, readwrite, retain) id otherValue; +@property (nonatomic, readwrite, strong) id distance; +@property (nonatomic, readwrite, strong) id otherValue; @end @implementation KWBeWithinMatcher -#pragma mark - -#pragma mark Initializing - -- (void)dealloc { - [distance release]; - [otherValue release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize distance; -@synthesize otherValue; - -#pragma mark - -#pragma mark Getting Matcher Strings +#pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"beWithin:of:", @"equal:withDelta:", nil]; + return @[@"beWithin:of:", @"equal:withDelta:"]; } -#pragma mark - -#pragma mark Matching +#pragma mark - Matching // Evaluation is done by getting the underlying values as the widest data // types available. @@ -84,8 +64,7 @@ - (BOOL)evaluate { return [self evaluateForSignedIntegral]; } -#pragma mark - -#pragma mark Getting Failure Messages +#pragma mark - Getting Failure Messages - (NSString *)failureMessageForShould { return [NSString stringWithFormat:@"expected subject to be within %@ of %@, got %@", @@ -94,13 +73,11 @@ - (NSString *)failureMessageForShould { [KWFormatter formatObject:self.subject]]; } -- (NSString *)description -{ - return [NSString stringWithFormat:@"be within %@ of %@", self.distance, self.otherValue]; +- (NSString *)description { + return [NSString stringWithFormat:@"be within %@ of %@", self.distance, self.otherValue]; } -#pragma mark - -#pragma mark Configuring Matchers +#pragma mark - Configuring Matchers - (void)beWithin:(id)aDistance of:(id)aValue { self.distance = aDistance; diff --git a/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.h new file mode 100644 index 0000000..bdb4dac --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBeZeroMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)beZero; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.m new file mode 100644 index 0000000..8a9d025 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.m @@ -0,0 +1,44 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeZeroMatcher.h" +#import "KWFormatter.h" +#import "KWValue.h" + +@implementation KWBeZeroMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beZero"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + if (![self.subject respondsToSelector:@selector(boolValue)]) + [NSException raise:@"KWMatcherException" format:@"subject does not respond to -numberValue"]; + + return [[self.subject numberValue] isEqualToNumber:@0]; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to be zero, got %@", + [KWFormatter formatObject:self.subject]]; +} + +- (NSString *)failureMessageForShouldNot { + return [NSString stringWithFormat:@"expected subject not to be zero"]; +} + +#pragma mark - Configuring Matchers + +- (void)beZero { +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h b/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h new file mode 100644 index 0000000..064d40a --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h @@ -0,0 +1,19 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWBlockRaiseMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)raise; +- (void)raiseWithName:(NSString *)aName; +- (void)raiseWithReason:(NSString *)aReason; +- (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.m b/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.m new file mode 100644 index 0000000..f4bd79e --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.m @@ -0,0 +1,103 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBlockRaiseMatcher.h" +#import "KWBlock.h" + +@interface KWBlockRaiseMatcher() + +@property (nonatomic, readwrite, strong) NSException *exception; +@property (nonatomic, readwrite, strong) NSException *actualException; + +@end + +@implementation KWBlockRaiseMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"raise", + @"raiseWithName:", + @"raiseWithReason:", + @"raiseWithName:reason:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + if (![self.subject isKindOfClass:[KWBlock class]]) + [NSException raise:@"KWMatcherException" format:@"subject must be a KWBlock"]; + + @try { + [self.subject call]; + } @catch (NSException *anException) { + self.actualException = anException; + + if ([self.exception name] != nil && ![[self.exception name] isEqualToString:[anException name]]) + return NO; + + if ([self.exception reason] != nil && ![[self.exception reason] isEqualToString:[anException reason]]) + return NO; + + return YES; + } + + return NO; +} + +#pragma mark - Getting Failure Messages + ++ (NSString *)exceptionPhraseWithException:(NSException *)anException { + if (anException == nil) + return @"nothing"; + + NSString *namePhrase = nil; + + if ([anException name] == nil) + namePhrase = @"exception"; + else + namePhrase = [anException name]; + + if ([anException reason] == nil) + return namePhrase; + + return [NSString stringWithFormat:@"%@ \"%@\"", namePhrase, [anException reason]]; +} + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected %@, but %@ raised", + [[self class] exceptionPhraseWithException:self.exception], + [[self class] exceptionPhraseWithException:self.actualException]]; +} + +- (NSString *)failureMessageForShouldNot { + return [NSString stringWithFormat:@"expected %@ not to be raised", + [[self class] exceptionPhraseWithException:self.actualException]]; +} + +#pragma mark - Configuring Matchers + +- (void)raise { + [self raiseWithName:nil reason:nil]; +} + +- (void)raiseWithName:(NSString *)aName { + [self raiseWithName:aName reason:nil]; +} + +- (void)raiseWithReason:(NSString *)aReason { + [self raiseWithName:nil reason:aReason]; +} + +- (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason { + self.exception = [NSException exceptionWithName:aName reason:aReason userInfo:nil]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"raise %@", [[self class] exceptionPhraseWithException:self.exception]]; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.h b/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.h new file mode 100644 index 0000000..89d37d6 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.h @@ -0,0 +1,21 @@ +// +// KWChangeMatcher.h +// Kiwi +// +// Copyright (c) 2013 Eloy Durán . +// All rights reserved. +// + +#import "KWMatcher.h" + +typedef NSInteger (^KWChangeMatcherCountBlock)(); + +@interface KWChangeMatcher : KWMatcher + +// Expect _any_ change. +- (void)change:(KWChangeMatcherCountBlock)countBlock; + +// Expect changes by a specific amount. +- (void)change:(KWChangeMatcherCountBlock)countBlock by:(NSInteger)expectedDifference; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.m b/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.m new file mode 100644 index 0000000..fb7a376 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.m @@ -0,0 +1,73 @@ +// +// KWChangeMatcher.m +// Kiwi +// +// Copyright (c) 2013 Eloy Durán . +// All rights reserved. +// + +#import "KWChangeMatcher.h" +#import "KWBlock.h" + +@interface KWChangeMatcher () +@property (nonatomic, copy) KWChangeMatcherCountBlock countBlock; +@property (nonatomic, assign) BOOL anyChange; +@property (nonatomic, assign) NSInteger expectedDifference, expectedTotal, actualTotal; +@end + +@implementation KWChangeMatcher + ++ (NSArray *)matcherStrings { + return @[@"change:by:", @"change:"]; +} + +- (NSString *)failureMessageForShould { + if (self.anyChange) { + return @"expected subject to change the count"; + } else { + return [NSString stringWithFormat:@"expected subject to change the count to %d, got %d", (int)self.expectedTotal, (int)self.actualTotal]; + } +} + +- (NSString *)failureMessageForShouldNot { + if (self.anyChange) { + return @"expected subject to not change the count"; + } else { + return [NSString stringWithFormat:@"expected subject not to change the count to %d", (int)self.actualTotal]; + } +} + +- (NSString *)description { + if (self.anyChange) { + return @"change count"; + } else { + return [NSString stringWithFormat:@"change count by %d", (int)self.expectedDifference]; + } +} + +- (BOOL)evaluate { + NSInteger before = self.countBlock(); + // Perform actual work, which is expected to change the result of countBlock. + [self.subject call]; + self.actualTotal = self.countBlock(); + + if (self.anyChange) { + return before != self.actualTotal; + } else { + self.expectedTotal = before + self.expectedDifference; + return self.expectedTotal == self.actualTotal; + } +} + +- (void)change:(KWChangeMatcherCountBlock)countBlock by:(NSInteger)expectedDifference { + self.anyChange = NO; + self.expectedDifference = expectedDifference; + self.countBlock = countBlock; +} + +- (void)change:(KWChangeMatcherCountBlock)countBlock { + self.anyChange = YES; + self.countBlock = countBlock; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h b/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h new file mode 100644 index 0000000..d25ba80 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWConformToProtocolMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)conformToProtocol:(Protocol *)aProtocol; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.m b/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.m new file mode 100644 index 0000000..deb8e2a --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.m @@ -0,0 +1,47 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWConformToProtocolMatcher.h" +#import "KWFormatter.h" + +@interface KWConformToProtocolMatcher() + +@property (nonatomic, assign) Protocol *protocol; + +@end + +@implementation KWConformToProtocolMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"conformToProtocol:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + return [self.subject conformsToProtocol:self.protocol]; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to conform to %@ protocol", + NSStringFromProtocol(self.protocol)]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"conform to %@ protocol", NSStringFromProtocol(self.protocol)]; +} + +#pragma mark - Configuring Matchers + +- (void)conformToProtocol:(Protocol *)aProtocol { + self.protocol = aProtocol; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWContainMatcher.h b/Pods/Kiwi/Classes/Matchers/KWContainMatcher.h new file mode 100644 index 0000000..6a750da --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWContainMatcher.h @@ -0,0 +1,26 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" +#import "KWMatchVerifier.h" + +@interface KWContainMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)contain:(id)anObject; +- (void)containObjectsInArray:(NSArray *)anArray; + +@end + +@interface KWMatchVerifier(KWContainMatcherAdditions) + +#pragma mark - Verifying + +- (void)containObjects:(id)firstObject, ... NS_REQUIRES_NIL_TERMINATION; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWContainMatcher.m b/Pods/Kiwi/Classes/Matchers/KWContainMatcher.m new file mode 100644 index 0000000..499e367 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWContainMatcher.m @@ -0,0 +1,88 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWContainMatcher.h" +#import "KWFormatter.h" +#import "KWGenericMatchingAdditions.h" + +@interface KWContainMatcher() + +@property (nonatomic, readwrite, strong) id objects; + +@end + +@implementation KWContainMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"contain:", @"containObjectsInArray:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + if (![self.subject respondsToSelector:@selector(containsObjectEqualToOrMatching:)]) + [NSException raise:@"KWMatcherException" format:@"subject does not respond to -containsObjectEqualToOrMatching:"]; + + for (id object in self.objects) { + if (![self.subject containsObjectEqualToOrMatching:object]) + return NO; + } + + return YES; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)objectsPhrase { + if ([self.objects count] == 1) + return [KWFormatter formatObject:(self.objects)[0]]; + + return [NSString stringWithFormat:@"all of %@", [KWFormatter formatObject:self.objects]]; +} + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to contain %@", [self objectsPhrase]]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"contain %@", [self objectsPhrase]]; +} + +#pragma mark - Configuring Matchers + +- (void)contain:(id)anObject { + self.objects = @[anObject]; +} + +- (void)containObjectsInArray:(NSArray *)anArray { + self.objects = anArray; +} + +@end + +@implementation KWMatchVerifier(KWContainMatcherAdditions) + +#pragma mark - Verifying + +- (void)containObjects:(id)firstObject, ... { + NSMutableArray *objects = [NSMutableArray array]; + + va_list argumentList; + va_start(argumentList, firstObject); + id object = firstObject; + + while (object != nil) { + [objects addObject:object]; + object = va_arg(argumentList, id); + } + + va_end(argumentList); + [(id)self containObjectsInArray:objects]; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.h b/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.h new file mode 100644 index 0000000..be850d1 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.h @@ -0,0 +1,39 @@ +// +// KWContainStringMatcher.h +// Kiwi +// +// Created by Kristopher Johnson on 4/28/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +// Kiwi matcher for determining whether a string contains an expected substring +// +// Examples: +// +// [[@"Hello, world!" should] containString:@"world"]; +// [[@"Hello, world!" shouldNot] containString:@"xyzzy"]; +// +// [[@"Hello, world!" should] containString:@"WORLD" +// options:NSCaseInsensitiveSearch]; +// +// [[@"Hello, world!" should] startWithString:@"Hello,"]; +// [[@"Hello, world!" should] endWithString:@"world!"]; + +@interface KWContainStringMatcher : KWMatcher + +// Match if subject contains specified substring +- (void)containString:(NSString *)string; + +// Match if subject contains specified substring, using specified comparison options +- (void)containString:(NSString *)string options:(NSStringCompareOptions)options; + +// Match if subject starts with the specified prefix +- (void)startWithString:(NSString *)prefix; + +// Match if subject ends with the specified prefix +- (void)endWithString:(NSString *)suffix; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.m b/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.m new file mode 100644 index 0000000..19209d1 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.m @@ -0,0 +1,85 @@ +// +// KWContainStringMatcher.m +// Kiwi +// +// Created by Kristopher Johnson on 4/28/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import "KWContainStringMatcher.h" +#import "KWFormatter.h" + +@interface KWContainStringMatcher () + +@property (nonatomic, copy) NSString *substring; +@property (nonatomic) NSStringCompareOptions options; + +@end + + +@implementation KWContainStringMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"containString:", + @"containString:options:", + @"startWithString:", + @"endWithString:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + NSString *subjectString = (NSString *)self.subject; + if (![subjectString isKindOfClass:[NSString class]]) { + [NSException raise:@"KWMatcherException" format:@"subject is not a string"]; + return NO; + } + + NSRange range = [subjectString rangeOfString:self.substring options:self.options]; + return (range.location != NSNotFound); +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"%@ did not contain string \"%@\"", + [KWFormatter formatObject:self.subject], + self.substring]; +} + +- (NSString *)failureMessageForShouldNot { + return [NSString stringWithFormat:@"expected subject not to contain string \"%@\"", + self.substring]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"contain substring \"%@\"", self.substring]; +} + +#pragma mark - Configuring matchers + +- (void)containString:(NSString *)substring { + self.substring = substring; + self.options = 0; +} + +- (void)containString:(NSString *)substring options:(NSStringCompareOptions)options { + self.substring = substring; + self.options = options; +} + +- (void)startWithString:(NSString *)prefix { + self.substring = prefix; + self.options = NSAnchoredSearch; +} + +- (void)endWithString:(NSString *)suffix { + self.substring = suffix; + self.options = NSAnchoredSearch | NSBackwardsSearch; +} + +@end + + diff --git a/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.h b/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.h new file mode 100644 index 0000000..b1ae523 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWEqualMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)equal:(id)anObject; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.m b/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.m new file mode 100644 index 0000000..51f3012 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.m @@ -0,0 +1,68 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWEqualMatcher.h" +#import "KWFormatter.h" +#import "KWValue.h" + +@interface KWEqualMatcher() + +#pragma mark - Properties + +@property (nonatomic, readwrite, strong) id otherSubject; + +@end + +@implementation KWEqualMatcher + +#pragma mark - Initializing + + +#pragma mark - Properties + +@synthesize otherSubject; + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"equal:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + /** handle this as a special case; KWValue supports NSNumber equality but not vice-versa **/ + if ([self.subject isKindOfClass:[NSNumber class]] && [self.otherSubject isKindOfClass:[KWValue class]]) { + return [self.otherSubject isEqual:self.subject]; + } + return [self.subject isEqual:self.otherSubject]; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to equal %@, got %@", + [KWFormatter formatObjectIncludingClass:self.otherSubject], + [KWFormatter formatObjectIncludingClass:self.subject]]; +} + +- (NSString *)failureMessageForShouldNot { + return [NSString stringWithFormat:@"expected subject not to equal %@", + [KWFormatter formatObjectIncludingClass:self.otherSubject]]; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"equal %@", [KWFormatter formatObjectIncludingClass:self.otherSubject]]; +} + +#pragma mark - Configuring Matchers + +- (void)equal:(id)anObject { + self.otherSubject = anObject; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h b/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h new file mode 100644 index 0000000..c906ab1 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h @@ -0,0 +1,17 @@ +// +// KWGenericMatcher.h +// Kiwi +// +// Created by Allen Ding on 1/31/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import + +@interface KWGenericMatchEvaluator : NSObject + ++ (BOOL)isGenericMatcher:(id)object; + ++ (BOOL)genericMatcher:(id)matcher matches:(id)object; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.m b/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.m new file mode 100644 index 0000000..138a03d --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.m @@ -0,0 +1,65 @@ +// +// KWGenericMatcher.m +// Kiwi +// +// Created by Allen Ding on 1/31/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import "KWGenericMatchEvaluator.h" +#import "KWStringUtilities.h" +#import "KWObjCUtilities.h" +#import +#import "KWGenericMatcher.h" + +@implementation KWGenericMatchEvaluator + +// Returns true only if the object has a method with the signature "- (BOOL)matches:(id)object" ++ (BOOL)isGenericMatcher:(id)object { + Class theClass = object_getClass(object); + + if (theClass == NULL) { + return NO; + } + Method method = class_getInstanceMethod(theClass, @selector(matches:)); + + if (method == NULL) { + return NO; + } + + const char *cEncoding = method_getTypeEncoding(method); + + if (cEncoding == NULL) { + return NO; + } + + NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:cEncoding]; + + if (!KWObjCTypeEqualToObjCType(@encode(BOOL), [signature methodReturnType])) { + return NO; + } + + if ([signature numberOfArguments] != 3) { + return NO; + } + + if (!KWObjCTypeEqualToObjCType(@encode(id), [signature getArgumentTypeAtIndex:2])) { + return NO; + } + + return YES; +} + ++ (BOOL)genericMatcher:(id)matcher matches:(id)object { + NSString *targetEncoding = KWEncodingWithObjCTypes(@encode(BOOL), @encode(id), @encode(SEL), @encode(id), nil); + NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:[targetEncoding UTF8String]]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setSelector:@selector(matches:)]; + [invocation setArgument:&object atIndex:2]; + [invocation invokeWithTarget:matcher]; + BOOL result = NO; + [invocation getReturnValue:&result]; + return result; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.h b/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.h new file mode 100644 index 0000000..be3c7f6 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.h @@ -0,0 +1,24 @@ +// +// KWGenericMatcher.h +// Kiwi +// +// Created by Luke Redpath on 24/01/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import +#import "KWMatcher.h" + +@protocol KWGenericMatching + +- (BOOL)matches:(id)object; + +@end + +@interface KWGenericMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)match:(id)aMatcher; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.m b/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.m new file mode 100644 index 0000000..81cc888 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.m @@ -0,0 +1,48 @@ +// +// KWGenericMatcher.m +// Kiwi +// +// Created by Luke Redpath on 24/01/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import "KWGenericMatcher.h" +#import "KWGenericMatchEvaluator.h" + +@interface KWGenericMatcher () + +@property (nonatomic, strong) id matcher; + +@end + +@implementation KWGenericMatcher + +#pragma mark - Matching + +- (BOOL)evaluate { + return [KWGenericMatchEvaluator genericMatcher:self.matcher matches:self.subject]; +} + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to match %@", self.matcher]; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"match %@", [self.matcher description]]; +} + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"match:"]; +} + +#pragma mark - Configuring Matchers + +- (void)match:(id)aMatcher; +{ + self.matcher = aMatcher; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h b/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h new file mode 100644 index 0000000..257f2e9 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h @@ -0,0 +1,34 @@ +// +// NSObject+KiwiAdditions.h +// Kiwi +// +// Created by Luke Redpath on 24/01/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import + +@interface NSObject (KiwiGenericMatchingAdditions) + +- (BOOL)isEqualOrMatches:(id)object; + +@end + +@interface NSArray (KiwiGenericMatchingAdditions) + +- (BOOL)containsObjectEqualToOrMatching:(id)object; +- (BOOL)containsObjectMatching:(id)matcher; + +@end + +@interface NSSet (KiwiGenericMatchingAdditions) + +- (BOOL)containsObjectEqualToOrMatching:(id)object; + +@end + +@interface NSOrderedSet (KiwiGenericMatchingAdditions) + +- (BOOL)containsObjectEqualToOrMatching:(id)object; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.m b/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.m new file mode 100644 index 0000000..37da7dd --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.m @@ -0,0 +1,67 @@ +// +// NSObject+KiwiAdditions.m +// Kiwi +// +// Created by Luke Redpath on 24/01/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import "KWGenericMatchingAdditions.h" +#import "KWGenericMatcher.h" +#import "KWGenericMatchEvaluator.h" + +@implementation NSObject (KiwiGenericMatchingAdditions) + +- (BOOL)isEqualOrMatches:(id)object { + if ([KWGenericMatchEvaluator isGenericMatcher:self]) { + return [KWGenericMatchEvaluator genericMatcher:self matches:object]; + } + return [self isEqual:object]; +} + +@end + +@implementation NSArray (KiwiGenericMatchingAdditions) + +- (BOOL)containsObjectEqualToOrMatching:(id)object { + if ([KWGenericMatchEvaluator isGenericMatcher:object]) { + return [self containsObjectMatching:object]; + } + return [self containsObject:object]; +} + +- (BOOL)containsObjectMatching:(id)matcher { + NSIndexSet *indexSet = [self indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { + BOOL matches = [KWGenericMatchEvaluator genericMatcher:matcher matches:obj]; + if (matches) { + *stop = YES; + } + return matches; + }]; + + return (indexSet.count > 0); +} + +@end + +@implementation NSSet (KiwiGenericMatchingAdditions) + +- (BOOL)containsObjectEqualToOrMatching:(id)object { + if ([KWGenericMatchEvaluator isGenericMatcher:object]) { + return [[self allObjects] containsObjectMatching:object]; + } + return [self containsObject:object]; +} + +@end + +@implementation NSOrderedSet (KiwiGenericMatchingAdditions) + +- (BOOL)containsObjectEqualToOrMatching:(id)object { + if ([KWGenericMatchEvaluator isGenericMatcher:object]) { + return [[self array] containsObjectMatching:object]; + } + return [self containsObject:object]; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.h b/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.h new file mode 100644 index 0000000..ae4637d --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.h @@ -0,0 +1,48 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWCountType.h" +#import "KWMatcher.h" +#import "KWMatchVerifier.h" + +@interface KWHaveMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)haveCountOf:(NSUInteger)aCount; +- (void)haveCountOfAtLeast:(NSUInteger)aCount; +- (void)haveCountOfAtMost:(NSUInteger)aCount; +- (void)haveLengthOf:(NSUInteger)aCount; +- (void)haveLengthOfAtLeast:(NSUInteger)aCount; +- (void)haveLengthOfAtMost:(NSUInteger)aCount; +- (void)have:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; +- (void)haveAtLeast:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; +- (void)haveAtMost:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; + +@end + +@protocol KWContainmentCountMatcherTerminals + +#pragma mark - Terminals + +- (id)objects; +- (id)items; +- (id)elements; + +@end + +#pragma mark - Verifying + +@interface KWMatchVerifier(KWHaveMatcherAdditions) + +#pragma mark - Invocation Capturing Methods + +- (id)have:(NSUInteger)aCount; +- (id)haveAtLeast:(NSUInteger)aCount; +- (id)haveAtMost:(NSUInteger)aCount; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.m b/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.m new file mode 100644 index 0000000..58fbec9 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.m @@ -0,0 +1,254 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWHaveMatcher.h" +#import "KWFormatter.h" +#import "KWInvocationCapturer.h" +#import "KWObjCUtilities.h" +#import "KWStringUtilities.h" + +static NSString * const MatchVerifierKey = @"MatchVerifierKey"; +static NSString * const CountTypeKey = @"CountTypeKey"; +static NSString * const CountKey = @"CountKey"; + +@interface KWHaveMatcher() + +#pragma mark - Properties + +@property (nonatomic, assign) KWCountType countType; +@property (nonatomic, assign) NSUInteger count; +@property (nonatomic, strong) NSInvocation *invocation; +@property (nonatomic, assign) NSUInteger actualCount; + +@end + +@implementation KWHaveMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[ + @"haveCountOf:", + @"haveCountOfAtLeast:", + @"haveCountOfAtMost:", + @"haveLengthOf:", + @"haveLengthOfAtLeast:", + @"haveLengthOfAtMost:", + @"have:itemsForInvocation:", + @"haveAtLeast:itemsForInvocation:", + @"haveAtMost:itemsForInvocation:", + ]; +} + +#pragma mark - Matching + +- (id)targetObject { + if (self.invocation == nil) + return self.subject; + + SEL selector = [self.invocation selector]; + + if ([self.subject respondsToSelector:selector]) { + NSMethodSignature *signature = [self.subject methodSignatureForSelector:selector]; + + if (!KWObjCTypeIsObject([signature methodReturnType])) + [NSException raise:@"KWMatcherEception" format:@"a valid collection was not specified"]; + + __unsafe_unretained id object = nil; + [self.invocation invokeWithTarget:self.subject]; + [self.invocation getReturnValue:&object]; + return object; + } else if (KWSelectorParameterCount(selector) == 0) { + return self.subject; + } else { + return nil; + } +} + +- (BOOL)evaluate { + id targetObject = [self targetObject]; + + if ([targetObject respondsToSelector:@selector(count)]) + self.actualCount = [targetObject count]; + else if ([targetObject respondsToSelector:@selector(length)]) + self.actualCount = [targetObject length]; + else + self.actualCount = 0; + + switch (self.countType) { + case KWCountTypeExact: + return self.actualCount == self.count; + case KWCountTypeAtLeast: + return self.actualCount >= self.count; + case KWCountTypeAtMost: + return self.actualCount <= self.count; + } + + assert(0 && "should never reach here"); + return NO; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)verbPhrase { + switch (self.countType) { + case KWCountTypeExact: + return @"have"; + case KWCountTypeAtLeast: + return @"have at least"; + case KWCountTypeAtMost: + return @"have at most"; + } + + assert(0 && "should never reach here"); + return nil; +} + +- (NSString *)itemPhrase { + if (self.invocation == nil) + return @"items"; + else + return NSStringFromSelector([self.invocation selector]); +} + +- (NSString *)actualCountPhrase { + if (self.actualCount == 1) + return @"1 item"; + else + return [NSString stringWithFormat:@"%u items", (unsigned)self.actualCount]; +} + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to %@ %u %@, got %@", + [self verbPhrase], + (unsigned)self.count, + [self itemPhrase], + [self actualCountPhrase]]; +} + +- (NSString *)failureMessageForShouldNot { + return [NSString stringWithFormat:@"expected subject not to %@ %u %@", + [self verbPhrase], + (unsigned)self.count, + [self itemPhrase]]; +} + +#pragma mark - Description + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %u %@", [self verbPhrase], (unsigned)self.count, [self itemPhrase]]; +} + +#pragma mark - Configuring Matchers + +- (void)haveCountOf:(NSUInteger)aCount { + self.count = aCount; + self.countType = KWCountTypeExact; +} + +- (void)haveLengthOf:(NSUInteger)aCount { + [self haveCountOf:aCount]; +} + +- (void)haveCountOfAtLeast:(NSUInteger)aCount { + self.count = aCount; + self.countType = KWCountTypeAtLeast; +} + +- (void)haveLengthOfAtLeast:(NSUInteger)aCount { + [self haveCountOfAtLeast:aCount]; +} + +- (void)haveCountOfAtMost:(NSUInteger)aCount { + self.count = aCount; + self.countType = KWCountTypeAtMost; +} + +- (void)haveLengthOfAtMost:(NSUInteger)aCount { + [self haveCountOfAtMost:aCount]; +} + +- (void)have:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation { + self.count = aCount; + self.countType = KWCountTypeExact; + self.invocation = anInvocation; +} + +- (void)haveAtLeast:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation { + self.count = aCount; + self.countType = KWCountTypeAtLeast; + self.invocation = anInvocation; +} + +- (void)haveAtMost:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation { + self.count = aCount; + self.countType = KWCountTypeAtMost; + self.invocation = anInvocation; +} + +#pragma mark - Capturing Invocations + ++ (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector { + KWMatchVerifier *verifier = (anInvocationCapturer.userInfo)[MatchVerifierKey]; + + if ([verifier.subject respondsToSelector:aSelector]) + return [verifier.subject methodSignatureForSelector:aSelector]; + + // Arbitrary selectors are allowed as expectation expression terminals when + // the subject itself is a collection, so return a dummy method signature. + NSString *encoding = KWEncodingForDefaultMethod(); + return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; +} + ++ (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation { + NSDictionary *userInfo = anInvocationCapturer.userInfo; + id verifier = userInfo[MatchVerifierKey]; + KWCountType countType = [userInfo[CountTypeKey] unsignedIntegerValue]; + NSUInteger count = [userInfo[CountKey] unsignedIntegerValue]; + + switch (countType) { + case KWCountTypeExact: + [verifier have:count itemsForInvocation:anInvocation]; + break; + case KWCountTypeAtLeast: + [verifier haveAtLeast:count itemsForInvocation:anInvocation]; + break; + case KWCountTypeAtMost: + [verifier haveAtMost:count itemsForInvocation:anInvocation]; + break; + } +} + +@end + +#pragma mark - Verifying + +@implementation KWMatchVerifier(KWHaveMatcherAdditions) + +#pragma mark - Invocation Capturing Methods + +- (NSDictionary *)userInfoForHaveMatcherWithCountType:(KWCountType)aCountType count:(NSUInteger)aCount { + return @{MatchVerifierKey: self, + CountTypeKey: @(aCountType), + CountKey: @(aCount)}; +} + +- (id)have:(NSUInteger)aCount { + NSDictionary *userInfo = [self userInfoForHaveMatcherWithCountType:KWCountTypeExact count:aCount]; + return [KWInvocationCapturer invocationCapturerWithDelegate:[KWHaveMatcher class] userInfo:userInfo]; +} + +- (id)haveAtLeast:(NSUInteger)aCount { + NSDictionary *userInfo = [self userInfoForHaveMatcherWithCountType:KWCountTypeAtLeast count:aCount]; + return [KWInvocationCapturer invocationCapturerWithDelegate:[KWHaveMatcher class] userInfo:userInfo]; +} + +- (id)haveAtMost:(NSUInteger)aCount { + NSDictionary *userInfo = [self userInfoForHaveMatcherWithCountType:KWCountTypeAtMost count:aCount]; + return [KWInvocationCapturer invocationCapturerWithDelegate:[KWHaveMatcher class] userInfo:userInfo]; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.h b/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.h new file mode 100644 index 0000000..73bfccb --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.h @@ -0,0 +1,21 @@ +// +// KWHaveValueMatcher.h +// Kiwi +// +// Created by Luke Redpath on 24/01/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import +#import "KWMatcher.h" + +@interface KWHaveValueMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)haveValue:(id)value forKey:(NSString *)key; +- (void)haveValue:(id)value forKeyPath:(NSString *)keyPath; +- (void)haveValueForKey:(NSString *)key; +- (void)haveValueForKeyPath:(NSString *)keyPath; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.m b/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.m new file mode 100644 index 0000000..9c6f8a6 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.m @@ -0,0 +1,128 @@ +// +// KWHaveValueMatcher.m +// Kiwi +// +// Created by Luke Redpath on 24/01/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import "KWHaveValueMatcher.h" +#import "KWGenericMatchingAdditions.h" +#import "KWGenericMatcher.h" +#import "KWFormatter.h" + +@interface KWHaveValueMatcher() + +@property (nonatomic, strong) NSString *expectedKey; +@property (nonatomic, strong) NSString *expectedKeyPath; +@property (nonatomic, strong) id expectedValue; + +@end + +@implementation KWHaveValueMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"haveValue:forKey:", + @"haveValueForKey:", + @"haveValue:forKeyPath:", + @"haveValueForKeyPath:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + BOOL matched = NO; + + @try { + id value = [self subjectValue]; + + if (value) { + matched = YES; + + if (self.expectedValue) { + matched = [self.expectedValue isEqualOrMatches:value]; + } + } + } + @catch (NSException * e) {} // catch KVO non-existent key errors + + return matched; +} + +- (NSString *)failureMessageForShould { + if (self.expectedValue == nil) { + return [NSString stringWithFormat:@"expected subject to have a value for key %@", + [KWFormatter formatObject:self.expectedKey]]; + } + id subjectValue = [self subjectValue]; + if (subjectValue) { + return [NSString stringWithFormat:@"expected subject to have value %@ for key %@, but it had value %@ instead", + [KWFormatter formatObject:self.expectedValue], + [KWFormatter formatObject:self.expectedKey], + [KWFormatter formatObject:subjectValue]]; + } else { + return [NSString stringWithFormat:@"expected subject to have value %@ for key %@, but the key was not present", + [KWFormatter formatObject:self.expectedValue], + [KWFormatter formatObject:self.expectedKey]]; + } +} + +- (id)subjectValue { + id value = nil; + + if (self.expectedKey) { + value = [self.subject valueForKey:self.expectedKey]; + } else + if (self.expectedKeyPath) { + value = [self.subject valueForKeyPath:self.expectedKeyPath]; + } + return value; +} + +- (NSString *)description { + NSString *keyDescription = nil; + + if (self.expectedKey) { + keyDescription = [NSString stringWithFormat:@"key %@", [KWFormatter formatObject:self.expectedKey]]; + } + else { + keyDescription = [NSString stringWithFormat:@"keypath %@", [KWFormatter formatObject:self.expectedKeyPath]]; + } + + NSString *valueDescription = nil; + + if (self.expectedValue) { + valueDescription = [NSString stringWithFormat:@"value %@", [KWFormatter formatObject:self.expectedValue]]; + } + else { + valueDescription = @"value"; + } + + return [NSString stringWithFormat:@"have %@ for %@", valueDescription, keyDescription]; +} + +#pragma mark - Configuring Matchers + +- (void)haveValue:(id)value forKey:(NSString *)key { + self.expectedKey = key; + self.expectedValue = value; +} + +- (void)haveValue:(id)value forKeyPath:(NSString *)key { + self.expectedKeyPath = key; + self.expectedValue = value; +} + +- (void)haveValueForKey:(NSString *)key { + self.expectedKey = key; + self.expectedValue = nil; +} + +- (void)haveValueForKeyPath:(NSString *)keyPath { + self.expectedKeyPath = keyPath; + self.expectedValue = nil; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.h b/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.h new file mode 100644 index 0000000..003ba4b --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.h @@ -0,0 +1,19 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWInequalityMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)beLessThan:(id)aValue; +- (void)beLessThanOrEqualTo:(id)aValue; +- (void)beGreaterThan:(id)aValue; +- (void)beGreaterThanOrEqualTo:(id)aValue; + +@end diff --git a/Pods/Kiwi/Kiwi/KWInequalityMatcher.m b/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.m old mode 100755 new mode 100644 similarity index 79% rename from Pods/Kiwi/Kiwi/KWInequalityMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.m index 8afbd20..573e370 --- a/Pods/Kiwi/Kiwi/KWInequalityMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.m @@ -7,44 +7,34 @@ #import "KWInequalityMatcher.h" #import "KWFormatter.h" +typedef NS_ENUM(NSUInteger, KWInequalityType) { + KWInequalityTypeLessThan, + KWInequalityTypeLessThanOrEqualTo, + KWInequalityTypeGreaterThan, + KWInequalityTypeGreaterThanOrEqualTo +}; + @interface KWInequalityMatcher() -#pragma mark - -#pragma mark Properties +#pragma mark - Properties -@property (nonatomic, readwrite) KWInequalityType inequalityType; -@property (nonatomic, readwrite, retain) id otherValue; +@property (nonatomic, assign) KWInequalityType inequalityType; +@property (nonatomic, strong) id otherValue; @end @implementation KWInequalityMatcher -#pragma mark - -#pragma mark Initializing - -- (void)dealloc { - [otherValue release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize inequalityType; -@synthesize otherValue; - -#pragma mark - -#pragma mark Getting Matcher Strings +#pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"beLessThan:", + return @[@"beLessThan:", @"beLessThanOrEqualTo:", @"beGreaterThan:", - @"beGreaterThanOrEqualTo:", nil]; + @"beGreaterThanOrEqualTo:"]; } -#pragma mark - -#pragma mark Matching +#pragma mark - Matching - (BOOL)evaluate { if (![self.subject respondsToSelector:@selector(compare:)]) @@ -65,8 +55,7 @@ - (BOOL)evaluate { return NO; } -#pragma mark - -#pragma mark Getting Failure Messages +#pragma mark - Getting Failure Messages - (NSString *)comparisonPhrase { switch (self.inequalityType) { @@ -91,13 +80,11 @@ - (NSString *)failureMessageForShould { [KWFormatter formatObject:self.subject]]; } -- (NSString *)description -{ +- (NSString *)description { return [NSString stringWithFormat:@"be %@ %@", [self comparisonPhrase], [KWFormatter formatObject:self.otherValue]]; } -#pragma mark - -#pragma mark Configuring Matchers +#pragma mark - Configuring Matchers - (void)beLessThan:(id)aValue { self.inequalityType = KWInequalityTypeLessThan; diff --git a/Pods/Kiwi/Classes/Matchers/KWNilMatcher.h b/Pods/Kiwi/Classes/Matchers/KWNilMatcher.h new file mode 100644 index 0000000..51f6057 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWNilMatcher.h @@ -0,0 +1,23 @@ +// +// KWBeNilMatcher.h +// iOSFalconCore +// +// Created by Luke Redpath on 14/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import +#import "KWMatcher.h" + +@interface KWNilMatcher : KWMatcher + +- (void)beNil; +- (void)beNonNil; + +- (void)beNil:(BOOL)workaroundArgument; +- (void)beNonNil:(BOOL)workaroundArgument; + ++ (BOOL)verifyNilSubject; ++ (BOOL)verifyNonNilSubject; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWNilMatcher.m b/Pods/Kiwi/Classes/Matchers/KWNilMatcher.m new file mode 100644 index 0000000..70c9c31 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWNilMatcher.m @@ -0,0 +1,112 @@ +// +// KWBeNilMatcher.m +// iOSFalconCore +// +// Created by Luke Redpath on 14/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import "KWNilMatcher.h" +#import "KWExample.h" +#import "KWExampleSuiteBuilder.h" +#import "KWFormatter.h" +#import "KWMatchVerifier.h" +#import "KWVerifying.h" + +@interface KWNilMatcher () + +@property (nonatomic, assign) BOOL expectsNil; + +@end + +@implementation KWNilMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"beNil", @"beNil:", @"beNonNil", @"beNonNil:"]; +} + +#pragma mark - Matching + +- (BOOL)isNilMatcher { + return YES; +} + +- (BOOL)evaluate { + if (self.expectsNil) { + return (self.subject == nil); + } else { + return (self.subject != nil); + } +} + +// These two methods gets invoked by be(Non)Nil macro in case the subject is nil +// (and therefore cannot have a verifier attached). + ++ (BOOL)verifyNilSubject { + return [self verifySubjectExpectingNil:YES]; +} + ++ (BOOL)verifyNonNilSubject { + return [self verifySubjectExpectingNil:NO]; +} + +#pragma mark Getting Failure Messages + +- (NSString *)failureMessageForShould { + if (self.expectsNil) { + return [NSString stringWithFormat:@"expected subject to be nil, got %@", + [KWFormatter formatObject:self.subject]]; + } else { + return [NSString stringWithFormat:@"expected subject not to be nil"]; + } +} + +- (NSString *)failureMessageForShouldNot { + if (self.expectsNil) { + return [NSString stringWithFormat:@"expected subject not to be nil"]; + } else { + return [NSString stringWithFormat:@"expected subject to be nil, got %@", + [KWFormatter formatObject:self.subject]]; + } +} + +- (NSString *)description { + return [NSString stringWithFormat:@"be %@nil", self.expectsNil ? @"" : @"non "]; +} + +- (void)beNil { + self.expectsNil = YES; +} +- (void)beNil:(BOOL)workaroundArgument { + self.expectsNil = YES; +} + +- (void)beNonNil { + self.expectsNil = NO; +} +- (void)beNonNil:(BOOL)workaroundArgument { + self.expectsNil = NO; +} + +#pragma mark - Internal Methods + ++ (BOOL)verifySubjectExpectingNil:(BOOL)expectNil { + KWExample *currentExample = [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] currentExample]; + id verifier = currentExample.unresolvedVerifier; + + if (verifier && ![verifier subject] && [verifier isKindOfClass:[KWMatchVerifier class]]) { + KWMatchVerifier *matchVerifier = (KWMatchVerifier *)verifier; + if (expectNil) { + [matchVerifier performSelector:@selector(beNil)]; + } else { + [matchVerifier performSelector:@selector(beNonNil)]; + } + currentExample.unresolvedVerifier = nil; + return NO; + } + return YES; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.h b/Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.h new file mode 100644 index 0000000..8b163fe --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.h @@ -0,0 +1,19 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWRaiseMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)raiseWhenSent:(SEL)aSelector; +- (void)raiseWithName:(NSString *)aName whenSent:(SEL)aSelector; +- (void)raiseWithReason:(NSString *)aReason whenSent:(SEL)aSelector; +- (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason whenSent:(SEL)aSelector; + +@end diff --git a/Pods/Kiwi/Kiwi/KWRaiseMatcher.m b/Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.m old mode 100755 new mode 100644 similarity index 77% rename from Pods/Kiwi/Kiwi/KWRaiseMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.m index eb17759..3cb9878 --- a/Pods/Kiwi/Kiwi/KWRaiseMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.m @@ -9,49 +9,34 @@ @interface KWRaiseMatcher() -#pragma mark - -#pragma mark Properties +#pragma mark - Properties -@property (nonatomic, readwrite) SEL selector; -@property (nonatomic, readwrite, retain) NSException *exception; -@property (nonatomic, readwrite, retain) NSException *actualException; +@property (nonatomic, assign) SEL selector; +@property (nonatomic, strong) NSException *exception; +@property (nonatomic, strong) NSException *actualException; @end @implementation KWRaiseMatcher -#pragma mark - -#pragma mark Initializing -- (void)dealloc { - [exception release]; - [actualException release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize selector; -@synthesize exception; -@synthesize actualException; - -#pragma mark - -#pragma mark Getting Matcher Strings +#pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"raiseWhenSent:", + return @[@"raiseWhenSent:", @"raiseWithName:whenSent:", @"raiseWithReason:whenSent:", - @"raiseWithName:reason:whenSent:", nil]; + @"raiseWithName:reason:whenSent:"]; } -#pragma mark - -#pragma mark Matching +#pragma mark - Matching - (BOOL)evaluate { @try { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self.subject performSelector:self.selector]; +#pragma clang diagnostic pop } @catch (NSException *anException) { self.actualException = anException; @@ -67,8 +52,7 @@ - (BOOL)evaluate { return NO; } -#pragma mark - -#pragma mark Getting Failure Messages +#pragma mark - Getting Failure Messages + (NSString *)exceptionPhraseWithException:(NSException *)anException { if (anException == nil) @@ -98,13 +82,11 @@ - (NSString *)failureMessageForShouldNot { [[self class] exceptionPhraseWithException:self.actualException]]; } -- (NSString *)description -{ +- (NSString *)description { return [NSString stringWithFormat:@"raise %@ when sent %@", [[self class] exceptionPhraseWithException:self.exception], NSStringFromSelector(self.selector)]; } -#pragma mark - -#pragma mark Configuring Matchers +#pragma mark - Configuring Matchers - (void)raiseWhenSent:(SEL)aSelector { [self raiseWithName:nil reason:nil whenSent:aSelector]; diff --git a/Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.h b/Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.h new file mode 100644 index 0000000..fa9cb39 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.h @@ -0,0 +1,58 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWCountType.h" +#import "KWMatcher.h" +#import "KWMatchVerifier.h" + +@class KWMessagePattern; +@class KWMessageTracker; + +@interface KWReceiveMatcher : KWMatcher + +@property (nonatomic, assign) BOOL willEvaluateMultipleTimes; + +#pragma mark - Configuring Matchers + +- (void)receive:(SEL)aSelector; +- (void)receive:(SEL)aSelector withCount:(NSUInteger)aCount; +- (void)receive:(SEL)aSelector withCountAtLeast:(NSUInteger)aCount; +- (void)receive:(SEL)aSelector withCountAtMost:(NSUInteger)aCount; +- (void)receive:(SEL)aSelector andReturn:(id)aValue; +- (void)receive:(SEL)aSelector andReturn:(id)aValue withCount:(NSUInteger)aCount; +- (void)receive:(SEL)aSelector andReturn:(id)aValue withCountAtLeast:(NSUInteger)aCount; +- (void)receive:(SEL)aSelector andReturn:(id)aValue withCountAtMost:(NSUInteger)aCount; +- (void)receiveMessagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; +- (void)receiveMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue countType:(KWCountType)aCountType count:(NSUInteger)aCount; + +@end + +@interface KWMatchVerifier(KWReceiveMatcherAdditions) + +#pragma mark - Verifying + +- (void)receive:(SEL)aSelector withArguments:(id)firstArgument, ...; +- (void)receive:(SEL)aSelector withCount:(NSUInteger)aCount arguments:(id)firstArgument, ...; +- (void)receive:(SEL)aSelector withCountAtLeast:(NSUInteger)aCount arguments:(id)firstArgument, ...; +- (void)receive:(SEL)aSelector withCountAtMost:(NSUInteger)aCount arguments:(id)firstArgument, ...; +- (void)receive:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ...; +- (void)receive:(SEL)aSelector andReturn:(id)aValue withCount:(NSUInteger)aCount arguments:(id)firstArgument, ...; +- (void)receive:(SEL)aSelector andReturn:(id)aValue withCountAtLeast:(NSUInteger)aCount arguments:(id)firstArgument, ...; +- (void)receive:(SEL)aSelector andReturn:(id)aValue withCountAtMost:(NSUInteger)aCount arguments:(id)firstArgument, ...; + +#pragma mark Invocation Capturing Methods + +- (id)receive; +- (id)receiveWithCount:(NSUInteger)aCount; +- (id)receiveWithCountAtLeast:(NSUInteger)aCount; +- (id)receiveWithCountAtMost:(NSUInteger)aCount; +- (id)receiveAndReturn:(id)aValue; +- (id)receiveAndReturn:(id)aValue withCount:(NSUInteger)aCount; +- (id)receiveAndReturn:(id)aValue withCountAtLeast:(NSUInteger)aCount; +- (id)receiveAndReturn:(id)aValue withCountAtMost:(NSUInteger)aCount; + +@end diff --git a/Pods/Kiwi/Kiwi/KWReceiveMatcher.m b/Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.m old mode 100755 new mode 100644 similarity index 86% rename from Pods/Kiwi/Kiwi/KWReceiveMatcher.m rename to Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.m index d947698..f81e033 --- a/Pods/Kiwi/Kiwi/KWReceiveMatcher.m +++ b/Pods/Kiwi/Classes/Matchers/KWReceiveMatcher.m @@ -21,42 +21,29 @@ @interface KWReceiveMatcher() -#pragma mark - -#pragma mark Properties +#pragma mark - Properties -@property (nonatomic, readwrite, retain) KWMessageTracker *messageTracker; +@property (nonatomic, readwrite, strong) KWMessageTracker *messageTracker; @end @implementation KWReceiveMatcher -#pragma mark - -#pragma mark Initializing +#pragma mark - Initializing - (id)initWithSubject:(id)anObject { - if ((self = [super initWithSubject:anObject])) { - self.willEvaluateMultipleTimes = NO; - } - - return self; -} - -- (void)dealloc { - [messageTracker release]; - [super dealloc]; + self = [super initWithSubject:anObject]; + if (self) { + _willEvaluateMultipleTimes = NO; + } + + return self; } -#pragma mark - -#pragma mark Properties - -@synthesize messageTracker; -@synthesize willEvaluateMultipleTimes; - -#pragma mark - -#pragma mark Getting Matcher Strings +#pragma mark - Getting Matcher Strings + (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"receive:", + return @[@"receive:", @"receive:withCount:", @"receive:withCountAtLeast:", @"receive:withCountAtMost:", @@ -65,11 +52,10 @@ + (NSArray *)matcherStrings { @"receive:andReturn:withCountAtLeast:", @"receive:andReturn:withCountAtMost:", @"receiveMessagePattern:countType:count:", - @"receiveMessagePattern:andReturn:countType:count:", nil]; + @"receiveMessagePattern:andReturn:countType:count:"]; } -#pragma mark - -#pragma mark Matching +#pragma mark - Matching - (BOOL)shouldBeEvaluatedAtEndOfExample { return YES; @@ -84,8 +70,7 @@ - (BOOL)evaluate { return succeeded; } -#pragma mark - -#pragma mark Getting Failure Messages +#pragma mark - Getting Failure Messages - (NSString *)failureMessageForShould { return [NSString stringWithFormat:@"expected subject to receive -%@ %@, but received it %@", @@ -100,8 +85,7 @@ - (NSString *)failureMessageForShouldNot { [self.messageTracker receivedCountPhrase]]; } -#pragma mark - -#pragma mark Configuring Matchers +#pragma mark - Configuring Matchers - (void)receive:(SEL)aSelector { KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; @@ -148,6 +132,7 @@ - (void)receiveMessagePattern:(KWMessagePattern *)aMessagePattern countType:(KWC @try { #endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + [self.subject stubMessagePattern:aMessagePattern andReturn:nil overrideExisting:NO]; self.messageTracker = [KWMessageTracker messageTrackerWithSubject:self.subject messagePattern:aMessagePattern countType:aCountType count:aCount]; #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG @@ -172,25 +157,24 @@ - (void)receiveMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id) #endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG } -#pragma mark - -#pragma mark Capturing Invocations +#pragma mark - Capturing Invocations + (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector { - KWMatchVerifier *verifier = [anInvocationCapturer.userInfo objectForKey:MatchVerifierKey]; + KWMatchVerifier *verifier = (anInvocationCapturer.userInfo)[MatchVerifierKey]; if ([verifier.subject respondsToSelector:aSelector]) return [verifier.subject methodSignatureForSelector:aSelector]; - NSString *encoding = KWEncodingForVoidMethod(); + NSString *encoding = KWEncodingForDefaultMethod(); return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; } + (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation { NSDictionary *userInfo = anInvocationCapturer.userInfo; - id verifier = [userInfo objectForKey:MatchVerifierKey]; - KWCountType countType = [[userInfo objectForKey:CountTypeKey] unsignedIntValue]; - NSUInteger count = [[userInfo objectForKey:CountKey] unsignedIntValue]; - NSValue *stubValue = [userInfo objectForKey:StubValueKey]; + id verifier = userInfo[MatchVerifierKey]; + KWCountType countType = [userInfo[CountTypeKey] unsignedIntegerValue]; + NSUInteger count = [userInfo[CountKey] unsignedIntegerValue]; + NSValue *stubValue = userInfo[StubValueKey]; KWMessagePattern *messagePattern = [KWMessagePattern messagePatternFromInvocation:anInvocation]; if (stubValue != nil) @@ -203,8 +187,7 @@ + (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptu @implementation KWMatchVerifier(KWReceiveMatcherAdditions) -#pragma mark - -#pragma mark Verifying +#pragma mark - Verifying - (void)receive:(SEL)aSelector withArguments:(id)firstArgument, ... { va_list argumentList; @@ -265,16 +248,16 @@ - (void)receive:(SEL)aSelector andReturn:(id)aValue withCountAtMost:(NSUInteger) #pragma mark Invocation Capturing Methods - (NSDictionary *)userInfoForReceiveMatcherWithCountType:(KWCountType)aCountType count:(NSUInteger)aCount { - return [NSDictionary dictionaryWithObjectsAndKeys:self, MatchVerifierKey, - [NSNumber numberWithUnsignedInt:aCountType], CountTypeKey, - [NSNumber numberWithUnsignedInt:aCount], CountKey, nil]; + return @{MatchVerifierKey: self, + CountTypeKey: @(aCountType), + CountKey: @(aCount)}; } - (NSDictionary *)userInfoForReceiveMatcherWithCountType:(KWCountType)aCountType count:(NSUInteger)aCount value:(id)aValue { - return [NSDictionary dictionaryWithObjectsAndKeys:self, MatchVerifierKey, - [NSNumber numberWithUnsignedInt:aCountType], CountTypeKey, - [NSNumber numberWithUnsignedInt:aCount], CountKey, - [NSValue valueWithNonretainedObject:aValue], StubValueKey, nil]; + return @{MatchVerifierKey: self, + CountTypeKey: @(aCountType), + CountKey: @(aCount), + StubValueKey: [NSValue valueWithNonretainedObject:aValue]}; } - (id)receive { diff --git a/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h b/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h new file mode 100644 index 0000000..923aa03 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h @@ -0,0 +1,18 @@ +// +// KWRegularExpressionPatternMatcher.h +// Kiwi +// +// Created by Kristopher Johnson on 4/11/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWRegularExpressionPatternMatcher : KWMatcher + +- (void)matchPattern:(NSString *)pattern; + +- (void)matchPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.m b/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.m new file mode 100644 index 0000000..c5c38e3 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.m @@ -0,0 +1,82 @@ +// +// KWRegularExpressionPatternMatcher.m +// Kiwi +// +// Created by Kristopher Johnson on 4/11/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import "KWRegularExpressionPatternMatcher.h" +#import "KWFormatter.h" + + +@interface KWRegularExpressionPatternMatcher () + +@property (nonatomic, copy) NSString *pattern; +@property (nonatomic) NSRegularExpressionOptions options; + +@end + + +@implementation KWRegularExpressionPatternMatcher + + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"matchPattern:", @"matchPattern:options:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + if (![self.subject isKindOfClass:[NSString class]]) { + return NO; + } + NSString *subjectString = (NSString *)self.subject; + NSRange subjectStringRange = NSMakeRange(0, subjectString.length); + + NSError *error = nil; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:self.pattern + options:self.options + error:&error]; + if (!regex) { + NSLog(@"%s: Unable to create regular expression for pattern \"%@\": %@", + __PRETTY_FUNCTION__, self.pattern, [error localizedDescription]); + return NO; + } + + NSUInteger numberOfMatches = [regex numberOfMatchesInString:subjectString + options:0 + range:subjectStringRange]; + return (numberOfMatches == 1); +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"%@ did not match pattern \"%@\"", + [KWFormatter formatObject:self.subject], + self.pattern]; +} + +- (NSString *)failureMessageForShouldNot { + return [NSString stringWithFormat:@"expected subject not to match pattern \"%@\"", + self.pattern]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"match pattern \"%@\"", self.pattern]; +} + +- (void)matchPattern:(NSString *)pattern { + self.pattern = pattern; + self.options = 0; +} + +- (void)matchPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options { + self.pattern = pattern; + self.options = options; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h b/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h new file mode 100644 index 0000000..f91d47a --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h @@ -0,0 +1,16 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWMatcher.h" + +@interface KWRespondToSelectorMatcher : KWMatcher + +#pragma mark - Configuring Matchers + +- (void)respondToSelector:(SEL)aSelector; + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.m b/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.m new file mode 100644 index 0000000..3920dd8 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.m @@ -0,0 +1,49 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWRespondToSelectorMatcher.h" +#import "KWFormatter.h" + +@interface KWRespondToSelectorMatcher() + +#pragma mark - Properties + +@property (nonatomic, assign) SEL selector; + +@end + +@implementation KWRespondToSelectorMatcher + +#pragma mark - Getting Matcher Strings + ++ (NSArray *)matcherStrings { + return @[@"respondToSelector:"]; +} + +#pragma mark - Matching + +- (BOOL)evaluate { + return [self.subject respondsToSelector:self.selector]; +} + +#pragma mark - Getting Failure Messages + +- (NSString *)failureMessageForShould { + return [NSString stringWithFormat:@"expected subject to respond to -%@", + NSStringFromSelector(self.selector)]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"respond to -%@", NSStringFromSelector(self.selector)]; +} + +#pragma mark - Configuring Matchers + +- (void)respondToSelector:(SEL)aSelector { + self.selector = aSelector; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.h b/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.h new file mode 100644 index 0000000..c972629 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.h @@ -0,0 +1,20 @@ +// +// KWStringContainsMatcher.h +// Kiwi +// +// Created by Stewart Gleadow on 7/06/12. +// Copyright (c) 2012 Allen Ding. All rights reserved. +// + +#import +#import "KWGenericMatcher.h" + +@interface KWStringContainsMatcher : NSObject + ++ (id)matcherWithSubstring:(NSString *)aSubstring; +- (id)initWithSubstring:(NSString *)aSubstring; +- (BOOL)matches:(id)object; + +@end + +#define hasSubstring(substring) [KWStringContainsMatcher matcherWithSubstring:substring] diff --git a/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.m b/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.m new file mode 100644 index 0000000..6230e81 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.m @@ -0,0 +1,42 @@ +// +// StringContainsMatcher.m +// Kiwi +// +// Created by Stewart Gleadow on 7/06/12. +// Copyright (c) 2012 Allen Ding. All rights reserved. +// + +#import "KWStringContainsMatcher.h" + +@interface KWStringContainsMatcher(){} +@property (nonatomic, copy) NSString *substring; +@end + +@implementation KWStringContainsMatcher + ++ (id)matcherWithSubstring:(NSString *)aSubstring { + return [[self alloc] initWithSubstring:aSubstring]; +} + +- (id)initWithSubstring:(NSString *)aSubstring { + self = [super init]; + if (self) { + _substring = [aSubstring copy]; + } + return self; +} + + +- (BOOL)matches:(id)item { + if (![item respondsToSelector:@selector(rangeOfString:)]) { + return NO; + } + + return [item rangeOfString:self.substring].location != NSNotFound; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"a string with substring '%@'", self.substring]; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.h b/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.h new file mode 100644 index 0000000..7c312cc --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.h @@ -0,0 +1,18 @@ +// +// StringPrefixMatcher.h +// Kiwi +// +// Created by Luke Redpath on 17/01/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import + +@interface KWStringPrefixMatcher : NSObject + ++ (id)matcherWithPrefix:(NSString *)aPrefix; +- (id)initWithPrefix:(NSString *)aPrefix; + +@end + +#define hasPrefix(prefix) [KWStringPrefixMatcher matcherWithPrefix:prefix] diff --git a/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.m b/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.m new file mode 100644 index 0000000..81c1f89 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.m @@ -0,0 +1,41 @@ +// +// StringPrefixMatcher.m +// Kiwi +// +// Created by Luke Redpath on 17/01/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import "KWStringPrefixMatcher.h" + +@interface KWStringPrefixMatcher(){} +@property (nonatomic, copy) NSString *prefix; +@end + +@implementation KWStringPrefixMatcher + ++ (id)matcherWithPrefix:(NSString *)aPrefix { + return [[self alloc] initWithPrefix:aPrefix]; +} + +- (id)initWithPrefix:(NSString *)aPrefix { + self = [super init]; + if (self) { + _prefix = [aPrefix copy]; + } + return self; +} + + +- (BOOL)matches:(id)item { + if (![item respondsToSelector:@selector(hasPrefix:)]) + return NO; + + return [item hasPrefix:self.prefix]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"a string with prefix '%@'", self.prefix]; +} + +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.h b/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.h new file mode 100644 index 0000000..d1d50c7 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.h @@ -0,0 +1,53 @@ +// +// KWUserDefinedMatcher.h +// Kiwi +// +// Created by Luke Redpath on 16/06/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import +#import "KWMatcher.h" + +typedef BOOL (^KWUserDefinedMatcherBlock)(); + +@interface KWUserDefinedMatcher : KWMatcher + +@property (nonatomic, assign) SEL selector; +@property (nonatomic, copy) NSString *failureMessageForShould; +@property (nonatomic, copy) NSString *failureMessageForShouldNot; +@property (nonatomic, copy) KWUserDefinedMatcherBlock matcherBlock; +@property (nonatomic, copy) NSString *description; + ++ (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; +- (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; +@end + +#pragma mark - + +typedef NSString * (^KWUserDefinedMatcherMessageBlock)(id); + +@interface KWUserDefinedMatcherBuilder : NSObject +{ + KWUserDefinedMatcher *matcher; + KWUserDefinedMatcherMessageBlock failureMessageForShouldBlock; + KWUserDefinedMatcherMessageBlock failureMessageForShouldNotBlock; + NSString *description; +} +@property (nonatomic, copy, readonly) NSString *key; + ++ (id)builder; ++ (id)builderForSelector:(SEL)aSelector; +- (id)initWithSelector:(SEL)aSelector; + +#pragma mark - Configuring The Matcher + +- (void)match:(KWUserDefinedMatcherBlock)block; +- (void)failureMessageForShould:(KWUserDefinedMatcherMessageBlock)block; +- (void)failureMessageForShouldNot:(KWUserDefinedMatcherMessageBlock)block; +- (void)description:(NSString *)description; + +#pragma mark - Buiding The Matcher + +- (KWUserDefinedMatcher *)buildMatcherWithSubject:(id)subject; +@end diff --git a/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.m b/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.m new file mode 100644 index 0000000..bdb4294 --- /dev/null +++ b/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.m @@ -0,0 +1,150 @@ +// +// KWUserDefinedMatcher.m +// Kiwi +// +// Created by Luke Redpath on 16/06/2011. +// Copyright 2011 Allen Ding. All rights reserved. +// + +#import "KWUserDefinedMatcher.h" + +@interface KWUserDefinedMatcher(){} +@property (nonatomic, copy) NSInvocation *invocation; +@end + +@implementation KWUserDefinedMatcher + +@synthesize selector; +@synthesize failureMessageForShould; +@synthesize failureMessageForShouldNot; +@synthesize matcherBlock; +@synthesize description; + ++ (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock { + return [[self alloc] initWithSubject:aSubject block:aBlock]; +} + +- (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock { + self = [super initWithSubject:aSubject]; + if (self) { + matcherBlock = [aBlock copy]; + self.description = @"match user defined matcher"; + } + return self; +} + + +- (BOOL)evaluate { + BOOL result; + + if (self.invocation.methodSignature.numberOfArguments == 3) { + id argument; + [self.invocation getArgument:&argument atIndex:2]; + result = matcherBlock(self.subject, argument); + } else { + result = matcherBlock(self.subject); + } + return result; +} + +#pragma mark - Message forwarding + +- (BOOL)respondsToSelector:(SEL)aSelector { + if (aSelector == self.selector) { + return YES; + } + return [super respondsToSelector:aSelector]; +} + +- (void)forwardInvocation:(NSInvocation *)anInvocation { + _invocation = anInvocation; +} + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { + if (aSelector == self.selector) { + NSString *selectorString = NSStringFromSelector(self.selector); + + /** + * TODO: find a way of doing this that: + * - doesn't require dummy methods (create the method signatures manually) + * - supports an unlimited number of arguments + */ + if ([selectorString hasSuffix:@":"]) { + return [self methodSignatureForSelector:@selector(matcherMethodWithArgument:)]; + } else { + return [self methodSignatureForSelector:@selector(matcherMethodWithoutArguments)]; + } + } + return [super methodSignatureForSelector:aSelector]; +} + +- (void)matcherMethodWithoutArguments {} +- (void)matcherMethodWithArgument:(id)argument {} + +@end + +#pragma mark - + +@implementation KWUserDefinedMatcherBuilder + ++ (id)builder { + return [self builderForSelector:nil]; +} + ++ (id)builderForSelector:(SEL)aSelector { + return [[self alloc] initWithSelector:aSelector]; +} + +- (id)initWithSelector:(SEL)aSelector { + self = [super init]; + if (self) { + matcher = [[KWUserDefinedMatcher alloc] init]; + matcher.selector = aSelector; + } + return self; +} + + +- (NSString *)key { + return NSStringFromSelector(matcher.selector); +} + +#pragma mark - Configuring The Matcher + +- (void)match:(KWUserDefinedMatcherBlock)block { + matcher.matcherBlock = block; +} + +- (void)failureMessageForShould:(KWUserDefinedMatcherMessageBlock)block { + failureMessageForShouldBlock = [block copy]; +} + +- (void)failureMessageForShouldNot:(KWUserDefinedMatcherMessageBlock)block { + failureMessageForShouldNotBlock = [block copy]; +} + +- (void)description:(NSString *)aDescription { + description = [aDescription copy]; +} + +#pragma mark - Buiding The Matcher + +- (KWUserDefinedMatcher *)buildMatcherWithSubject:(id)subject { + [matcher setSubject:subject]; + + if (failureMessageForShouldBlock) { + [matcher setFailureMessageForShould:failureMessageForShouldBlock(subject)]; + } + + if (failureMessageForShouldNotBlock) { + [matcher setFailureMessageForShouldNot:failureMessageForShouldNotBlock(subject)]; + } + + if (description) { + [matcher setDescription:description]; + } + + return matcher; +} + +@end diff --git a/Pods/Kiwi/Classes/Mocking/KWMock.h b/Pods/Kiwi/Classes/Mocking/KWMock.h new file mode 100644 index 0000000..8163941 --- /dev/null +++ b/Pods/Kiwi/Classes/Mocking/KWMock.h @@ -0,0 +1,87 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWInvocationCapturer.h" + +@class KWMessagePattern; +@class KWCaptureSpy; + +@protocol KWMessageSpying; +@protocol KWVerifying; + +@interface KWMock : NSObject + +#pragma mark - Initializing + +- (id)initForClass:(Class)aClass; +- (id)initForProtocol:(Protocol *)aProtocol; +- (id)initWithName:(NSString *)aName forClass:(Class)aClass; +- (id)initWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol; + +- (id)initAsNullMockForClass:(Class)aClass; +- (id)initAsNullMockForProtocol:(Protocol *)aProtocol; +- (id)initAsNullMockWithName:(NSString *)aName forClass:(Class)aClass; +- (id)initAsNullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol; + +- (id)initAsPartialMockForObject:(id)object; +- (id)initAsPartialMockWithName:(NSString *)aName forObject:(id)object; + ++ (id)mockForClass:(Class)aClass; ++ (id)mockForProtocol:(Protocol *)aProtocol; ++ (id)mockWithName:(NSString *)aName forClass:(Class)aClass; ++ (id)mockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol; + ++ (id)nullMockForClass:(Class)aClass; ++ (id)nullMockForProtocol:(Protocol *)aProtocol; ++ (id)nullMockWithName:(NSString *)aName forClass:(Class)aClass ; ++ (id)nullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol; + ++ (id)partialMockForObject:(id)object; ++ (id)partialMockWithName:(NSString *)aName forObject:(id)object; + +#pragma mark - Properties + +@property (nonatomic, assign, readonly) BOOL isNullMock; +@property (nonatomic, assign, readonly) BOOL isPartialMock; +@property (nonatomic, copy, readonly) NSString *mockName; +@property (nonatomic, assign, readonly) Class mockedClass; +@property (nonatomic, strong, readonly) id mockedObject; +@property (nonatomic, assign, readonly) Protocol *mockedProtocol; + +#pragma mark - Stubbing Methods + +- (void)stub:(SEL)aSelector; +- (void)stub:(SEL)aSelector withBlock:(id (^)(NSArray *params))block; +- (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ...; +- (void)stub:(SEL)aSelector andReturn:(id)aValue; +- (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ...; + +- (id)stub; +- (id)stubAndReturn:(id)aValue; +- (id)stubAndReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue; +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; + +- (void)clearStubs; + +#pragma mark - Spying on Messages + +- (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; +- (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; + + +#pragma mark - Expecting Messages + +- (void)expect:(SEL)aSelector; +- (void)expect:(SEL)aSelector withArguments:(id)firstArgument, ...; + +- (id)expect; + +- (void)expectMessagePattern:(KWMessagePattern *)aMessagePattern; + +@end diff --git a/Pods/Kiwi/Classes/Mocking/KWMock.m b/Pods/Kiwi/Classes/Mocking/KWMock.m new file mode 100644 index 0000000..90db7b5 --- /dev/null +++ b/Pods/Kiwi/Classes/Mocking/KWMock.m @@ -0,0 +1,628 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWMock.h" +#import +#import "KWFormatter.h" +#import "KWMessagePattern.h" +#import "KWMessageSpying.h" +#import "KWStringUtilities.h" +#import "KWStub.h" +#import "KWWorkarounds.h" +#import "NSInvocation+KiwiAdditions.h" +#import "KWCaptureSpy.h" + +static NSString * const ExpectOrStubTagKey = @"ExpectOrStubTagKey"; +static NSString * const StubTag = @"StubTag"; +static NSString * const ExpectTag = @"ExpectTag"; +static NSString * const StubValueKey = @"StubValueKey"; +static NSString * const StubSecondValueKey = @"StubSecondValueKey"; +static NSString * const ChangeStubValueAfterTimesKey = @"ChangeStubValueAfterTimesKey"; + +@interface KWMock() + +@property (nonatomic, readonly) NSMutableArray *stubs; +@property (nonatomic, readonly) NSMutableArray *expectedMessagePatterns; +@property (nonatomic, readonly) NSMutableDictionary *messageSpies; + +@end + +@implementation KWMock + +#pragma mark - Initializing + +- (id)init { + // May already have been initialized since stubbing -init is allowed! + if (self.stubs != nil) { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; + [self expectMessagePattern:messagePattern]; + NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; + + if ([self processReceivedInvocation:invocation]) { + __unsafe_unretained id result = nil; + [invocation getReturnValue:&result]; + return result; + } else { + return self; + } + } + + return [self initAsNullMock:NO withName:nil forClass:nil protocol:nil]; +} + +- (id)initForClass:(Class)aClass { + return [self initAsNullMock:NO withName:nil forClass:aClass protocol:nil]; +} + +- (id)initForProtocol:(Protocol *)aProtocol { + return [self initAsNullMock:NO withName:nil forClass:nil protocol:aProtocol]; +} + +- (id)initWithName:(NSString *)aName forClass:(Class)aClass { + return [self initAsNullMock:NO withName:aName forClass:aClass protocol:nil]; +} + +- (id)initWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { + return [self initAsNullMock:NO withName:aName forClass:nil protocol:aProtocol]; +} + +- (id)initAsNullMockForClass:(Class)aClass { + return [self initAsNullMock:YES withName:nil forClass:aClass protocol:nil]; +} + +- (id)initAsNullMockForProtocol:(Protocol *)aProtocol { + return [self initAsNullMock:YES withName:nil forClass:nil protocol:aProtocol]; +} + +- (id)initAsNullMockWithName:(NSString *)aName forClass:(Class)aClass { + return [self initAsNullMock:YES withName:aName forClass:aClass protocol:nil]; +} + +- (id)initAsNullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { + return [self initAsNullMock:YES withName:aName forClass:nil protocol:aProtocol]; +} + +- (id)initAsNullMock:(BOOL)nullMockFlag withName:(NSString *)aName forClass:(Class)aClass protocol:(Protocol *)aProtocol { + self = [super init]; + if (self) { + _isNullMock = nullMockFlag; + _mockName = [aName copy]; + _mockedClass = aClass; + _mockedProtocol = aProtocol; + _stubs = [[NSMutableArray alloc] init]; + _expectedMessagePatterns = [[NSMutableArray alloc] init]; + _messageSpies = [[NSMutableDictionary alloc] init]; + } + + return self; +} + +- (id)initAsPartialMockForObject:(id)object { + return [self initAsPartialMockWithName:nil forObject:object]; +} + +- (id)initAsPartialMockWithName:(NSString *)aName forObject:(id)object { + self = [self initAsNullMock:YES withName:aName forClass:[object class] protocol:nil]; + if (self) { + _isPartialMock = YES; + _mockedObject = object; + } + return self; +} + ++ (id)mockForClass:(Class)aClass { + return [[self alloc] initForClass:aClass]; +} + ++ (id)mockForProtocol:(Protocol *)aProtocol { + return [[self alloc] initForProtocol:aProtocol]; +} + ++ (id)mockWithName:(NSString *)aName forClass:(Class)aClass { + return [[self alloc] initWithName:aName forClass:aClass]; +} + ++ (id)mockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { + return [[self alloc] initWithName:aName forProtocol:aProtocol]; +} + ++ (id)nullMockForClass:(Class)aClass { + return [[self alloc] initAsNullMockForClass:aClass]; +} + ++ (id)nullMockForProtocol:(Protocol *)aProtocol { + return [[self alloc] initAsNullMockForProtocol:aProtocol]; +} + ++ (id)nullMockWithName:(NSString *)aName forClass:(Class)aClass { + return [[self alloc] initAsNullMockWithName:aName forClass:aClass]; +} + ++ (id)nullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { + return [[self alloc] initAsNullMockWithName:aName forProtocol:aProtocol]; +} + ++ (id)partialMockWithName:(NSString *)aName forObject:(id)object { + return [[self alloc] initAsPartialMockWithName:aName forObject:object]; +} + ++ (id)partialMockForObject:(id)object { + return [[self alloc] initAsPartialMockForObject:object]; +} + +#pragma mark - Getting Transitive Closure For Mocked Protocols + +- (NSSet *)mockedProtocolTransitiveClosureSet { + if (self.mockedProtocol == nil) + return nil; + + NSMutableSet *protocolSet = [NSMutableSet set]; + NSMutableArray *protocolQueue = [NSMutableArray array]; + [protocolQueue addObject:self.mockedProtocol]; + + do { + Protocol *protocol = [protocolQueue lastObject]; + [protocolSet addObject:protocol]; + [protocolQueue removeLastObject]; + + unsigned int count = 0; + Protocol *__unsafe_unretained*protocols = protocol_copyProtocolList(protocol, &count); + + if (count == 0) + continue; + + for (unsigned int i = 0; i < count; ++i) + [protocolQueue addObject:protocols[i]]; + + free(protocols); + } while ([protocolQueue count] != 0); + + return protocolSet; +} + +#pragma mark - Stubbing Methods + +- (void)removeStubWithMessagePattern:(KWMessagePattern *)messagePattern { + KWStub *stub = [self currentStubWithMessagePattern:messagePattern]; + if (stub) { + [self.stubs removeObject:stub]; + } +} + +- (KWStub *)currentStubWithMessagePattern:(KWMessagePattern *)messagePattern { + NSUInteger stubCount = [self.stubs count]; + + for (NSUInteger i = 0; i < stubCount; ++i) { + KWStub *stub = (self.stubs)[i]; + + if ([stub.messagePattern isEqualToMessagePattern:messagePattern]) { + return stub; + } + } + return nil; +} + +- (void)stub:(SEL)aSelector { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self stubMessagePattern:messagePattern andReturn:nil]; +} + +- (void)stub:(SEL)aSelector withBlock:(id (^)(NSArray *params))block { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self stubMessagePattern:messagePattern withBlock:block]; +} + +- (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ... { + va_list argumentList; + va_start(argumentList, firstArgument); + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; + [self stubMessagePattern:messagePattern andReturn:nil]; +} + +- (void)stub:(SEL)aSelector andReturn:(id)aValue { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self stubMessagePattern:messagePattern andReturn:aValue]; +} + +- (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ... { + va_list argumentList; + va_start(argumentList, firstArgument); + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; + [self stubMessagePattern:messagePattern andReturn:aValue]; +} + +- (id)stub { + NSDictionary *userInfo = @{ExpectOrStubTagKey: StubTag}; + return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; +} + +- (id)stubAndReturn:(id)aValue { + NSDictionary *userInfo = @{ExpectOrStubTagKey: StubTag, + StubValueKey: aValue}; + return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; +} + +- (id)stubAndReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue { + NSDictionary *userInfo = @{ExpectOrStubTagKey: StubTag, StubValueKey: aValue, ChangeStubValueAfterTimesKey: times, StubSecondValueKey: aSecondValue}; + return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; +} + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue { + [self stubMessagePattern:aMessagePattern andReturn:aValue overrideExisting:YES]; +} + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue overrideExisting:(BOOL)overrideExisting { + [self expectMessagePattern:aMessagePattern]; + KWStub *existingStub = [self currentStubWithMessagePattern:aMessagePattern]; + if (existingStub) { + if (overrideExisting) { + [self.stubs removeObject:existingStub]; + } else { + return; + } + } + KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern value:aValue]; + [self.stubs addObject:stub]; +} + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern withBlock:(id (^)(NSArray *params))block { + [self expectMessagePattern:aMessagePattern]; + [self removeStubWithMessagePattern:aMessagePattern]; + KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern block:block]; + [self.stubs addObject:stub]; +} + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue { + [self expectMessagePattern:aMessagePattern]; + [self removeStubWithMessagePattern:aMessagePattern]; + KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern value:aValue times:times afterThatReturn:aSecondValue]; + [self.stubs addObject:stub]; +} + +- (void)clearStubs { + [self.stubs removeAllObjects]; +} + +#pragma mark - Spying on Messages + +- (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { + [self expectMessagePattern:aMessagePattern]; + NSMutableArray *messagePatternSpies = (self.messageSpies)[aMessagePattern]; + + if (messagePatternSpies == nil) { + messagePatternSpies = [[NSMutableArray alloc] init]; + (self.messageSpies)[aMessagePattern] = messagePatternSpies; + } + NSValue *spyWrapper = [NSValue valueWithNonretainedObject:aSpy]; + + if (![messagePatternSpies containsObject:spyWrapper]) + [messagePatternSpies addObject:spyWrapper]; +} + +- (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { + NSValue *spyWrapper = [NSValue valueWithNonretainedObject:aSpy]; + NSMutableArray *messagePatternSpies = (self.messageSpies)[aMessagePattern]; + [messagePatternSpies removeObject:spyWrapper]; +} + +#pragma mark - Expecting Message Patterns + +- (void)expect:(SEL)aSelector { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self expectMessagePattern:messagePattern]; +} + +- (void)expect:(SEL)aSelector withArguments:(id)firstArgument, ... { + va_list argumentList; + va_start(argumentList, firstArgument); + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; + [self expectMessagePattern:messagePattern]; +} + +- (id)expect { + NSDictionary *userInfo = @{ExpectOrStubTagKey: ExpectTag}; + return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; +} + +- (void)expectMessagePattern:(KWMessagePattern *)aMessagePattern { + if (![self.expectedMessagePatterns containsObject:aMessagePattern]) + [self.expectedMessagePatterns addObject:aMessagePattern]; +} + +#pragma mark - Capturing Invocations + +- (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector { + return [self methodSignatureForSelector:aSelector]; +} + +- (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternFromInvocation:anInvocation]; + NSString *tag = (anInvocationCapturer.userInfo)[ExpectOrStubTagKey]; + if ([tag isEqualToString:StubTag]) { + id value = (anInvocationCapturer.userInfo)[StubValueKey]; + if (!(anInvocationCapturer.userInfo)[StubSecondValueKey]) { + [self stubMessagePattern:messagePattern andReturn:value]; + } else { + id times = (anInvocationCapturer.userInfo)[ChangeStubValueAfterTimesKey]; + id secondValue = (anInvocationCapturer.userInfo)[StubSecondValueKey]; + [self stubMessagePattern:messagePattern andReturn:value times:times afterThatReturn:secondValue]; + } + } else { + [self expectMessagePattern:messagePattern]; + } +} + +#pragma mark - Handling Invocations + +- (NSString *)namePhrase { + if (self.mockName == nil) + return @"mock"; + else + return [NSString stringWithFormat:@"mock \"%@\"", self.mockName]; +} + +- (BOOL)processReceivedInvocation:(NSInvocation *)invocation { + for (KWMessagePattern *messagePattern in self.messageSpies) { + if ([messagePattern matchesInvocation:invocation]) { + NSArray *spies = (self.messageSpies)[messagePattern]; + + for (NSValue *spyWrapper in spies) { + id spy = [spyWrapper nonretainedObjectValue]; + [spy object:self didReceiveInvocation:invocation]; + } + } + } + + for (KWStub *stub in self.stubs) { + if ([stub processInvocation:invocation]) + return YES; + } + + return NO; +} + +- (NSMethodSignature *)mockedProtocolMethodSignatureForSelector:(SEL)aSelector { + NSSet *protocols = [self mockedProtocolTransitiveClosureSet]; + + for (Protocol *protocol in protocols) { + struct objc_method_description description = protocol_getMethodDescription(protocol, aSelector, NO, YES); + + if (description.types == nil) + description = protocol_getMethodDescription(protocol, aSelector, YES, YES); + + if (description.types != nil) + return [NSMethodSignature signatureWithObjCTypes:description.types]; + } + + return nil; +} + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { + NSMethodSignature *methodSignature = [self.mockedClass instanceMethodSignatureForSelector:aSelector]; + + if (methodSignature != nil) + return methodSignature; + + methodSignature = [self mockedProtocolMethodSignatureForSelector:aSelector]; + + if (methodSignature != nil) + return methodSignature; + + NSString *encoding = KWEncodingForDefaultMethod(); + return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; +} + +- (void)forwardInvocation:(NSInvocation *)anInvocation { +#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + @try { +#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + + if ([self processReceivedInvocation:anInvocation]) + return; + + if (self.isPartialMock) + [anInvocation invokeWithTarget:self.mockedObject]; + + if (self.isNullMock) + return; + + for (KWMessagePattern *expectedMessagePattern in self.expectedMessagePatterns) { + if ([expectedMessagePattern matchesInvocation:anInvocation]) + return; + } + + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternFromInvocation:anInvocation]; + [NSException raise:@"KWMockException" format:@"%@ received unexpected message -%@", + [self namePhrase], + [messagePattern stringValue]]; + +#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + } @catch (NSException *exception) { + KWSetExceptionFromAcrossInvocationBoundary(exception); + } +#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG +} + +#pragma mark - Testing Objects + +- (BOOL)mockedClassHasAncestorClass:(Class)aClass { + Class currentClass = self.mockedClass; + + while (currentClass != nil) { + if (currentClass == aClass) + return YES; + + currentClass = [currentClass superclass]; + } + + return NO; +} + +- (BOOL)mockedClassRespondsToSelector:(SEL)aSelector { + return [self.mockedClass instancesRespondToSelector:aSelector]; +} + +- (BOOL)mockedClassConformsToProtocol:(Protocol *)aProtocol { + return [self.mockedClass conformsToProtocol:aProtocol]; +} + +- (BOOL)mockedProtocolRespondsToSelector:(SEL)aSelector { + NSSet *protocols = [self mockedProtocolTransitiveClosureSet]; + + for (Protocol *protocol in protocols) { + struct objc_method_description description = protocol_getMethodDescription(protocol, aSelector, NO, YES); + + if (description.types == nil) + description = protocol_getMethodDescription(protocol, aSelector, YES, YES); + + if (description.types != nil) + return YES; + } + + return NO; +} + +- (BOOL)mockedProtocolConformsToProtocol:(Protocol *)aProtocol { + if (self.mockedProtocol == nil) + return NO; + + return protocol_isEqual(self.mockedProtocol, aProtocol) || protocol_conformsToProtocol(self.mockedProtocol, aProtocol); +} + +- (BOOL)isKindOfClass:(Class)aClass { + return [self mockedClassHasAncestorClass:aClass] || [super isKindOfClass:aClass]; +} + +- (BOOL)isMemberOfClass:(Class)aClass { + return self.mockedClass == aClass || [super isMemberOfClass:aClass]; +} + +- (BOOL)respondsToSelector:(SEL)aSelector { + return [self mockedClassRespondsToSelector:aSelector] || + [self mockedProtocolRespondsToSelector:aSelector] || + [super respondsToSelector:aSelector]; +} + +- (BOOL)conformsToProtocol:(Protocol *)aProtocol { + return [self mockedClassConformsToProtocol:aProtocol] || + [self mockedProtocolConformsToProtocol:aProtocol] || + [super conformsToProtocol:aProtocol]; +} + +#pragma mark - Whitelisted NSObject Methods + +- (BOOL)isEqual:(id)anObject { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; + [self expectMessagePattern:messagePattern]; + NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd messageArguments:&anObject]; + + if ([self processReceivedInvocation:invocation]) { + BOOL result = NO; + [invocation getReturnValue:&result]; + return result; + } else { + return [super isEqual:anObject]; + } +} + +- (NSUInteger)hash { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; + [self expectMessagePattern:messagePattern]; + NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; + + if ([self processReceivedInvocation:invocation]) { + NSUInteger result = 0; + [invocation getReturnValue:&result]; + return result; + } else { + return [super hash]; + } +} + +- (NSString *)description { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; + [self expectMessagePattern:messagePattern]; + NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; + + if ([self processReceivedInvocation:invocation]) { + __unsafe_unretained NSString *result = nil; + [invocation getReturnValue:&result]; + return result; + } else { + return [super description]; + } +} + +- (id)copy { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; + [self expectMessagePattern:messagePattern]; + NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; + + if ([self processReceivedInvocation:invocation]) { + __unsafe_unretained id result = nil; + [invocation getReturnValue:&result]; + return result; + } else { + return [super copy]; + } +} + +- (id)mutableCopy { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; + [self expectMessagePattern:messagePattern]; + NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; + + if ([self processReceivedInvocation:invocation]) { + __unsafe_unretained id result = nil; + [invocation getReturnValue:&result]; + return result; + } else { + return [super mutableCopy]; + } +} + +#pragma mark - +#pragma mark Key-Value Coding Support + +static id valueForKeyImplementation(id self, SEL _cmd, id key) { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; + [self expectMessagePattern:messagePattern]; + NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd messageArguments:&key]; + + if ([self processReceivedInvocation:invocation]) { + __unsafe_unretained id result = nil; + [invocation getReturnValue:&result]; + return result; + } else { + return nil; + } +} + +- (id)valueForKey:(NSString *)key { + return valueForKeyImplementation(self, _cmd, key); +} + +- (id)valueForKeyPath:(NSString *)keyPath { + return valueForKeyImplementation(self, _cmd, keyPath); +} + +static void setValueForKeyImplementation(id self, SEL _cmd, id a, id b) { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; + [self expectMessagePattern:messagePattern]; + NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd messageArguments:&a, &b]; + + [self processReceivedInvocation:invocation]; +} + +- (void)setValue:(id)value forKey:(NSString *)key { + setValueForKeyImplementation(self, _cmd, value, key); +} + +- (void)setValue:(id)value forKeyPath:(NSString *)keyPath { + setValueForKeyImplementation(self, _cmd, value, keyPath); +} + +@end diff --git a/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h b/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h new file mode 100644 index 0000000..9ecea92 --- /dev/null +++ b/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h @@ -0,0 +1,19 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface NSObject(KiwiMockAdditions) + +#pragma mark - Creating Mocks + ++ (id)mock; ++ (id)mockWithName:(NSString *)aName; + ++ (id)nullMock; ++ (id)nullMockWithName:(NSString *)aName; + +@end diff --git a/Pods/Kiwi/Kiwi/NSObject+KiwiMockAdditions.m b/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.m old mode 100755 new mode 100644 similarity index 92% rename from Pods/Kiwi/Kiwi/NSObject+KiwiMockAdditions.m rename to Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.m index a9e8637..7e7a0cf --- a/Pods/Kiwi/Kiwi/NSObject+KiwiMockAdditions.m +++ b/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.m @@ -9,8 +9,7 @@ @implementation NSObject(KiwiMockAdditions) -#pragma mark - -#pragma mark Creating Mocks +#pragma mark - Creating Mocks + (id)mock { return [KWMock mockForClass:[self class]]; diff --git a/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.h b/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.h new file mode 100644 index 0000000..421ea5a --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.h @@ -0,0 +1,17 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWBlockNode.h" +#import "KWExampleNode.h" + +@interface KWAfterAllNode : KWBlockNode + +#pragma mark - Initializing + ++ (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.m b/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.m new file mode 100644 index 0000000..efb0a03 --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.m @@ -0,0 +1,24 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWAfterAllNode.h" +#import "KWExampleNodeVisitor.h" + +@implementation KWAfterAllNode + +#pragma mark - Initializing + ++ (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; +} + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor { + [aVisitor visitAfterAllNode:self]; +} + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.h b/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.h new file mode 100644 index 0000000..4e68279 --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.h @@ -0,0 +1,17 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWBlockNode.h" +#import "KWExampleNode.h" + +@interface KWAfterEachNode : KWBlockNode + +#pragma mark - Initializing + ++ (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.m b/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.m new file mode 100644 index 0000000..e6edd3e --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.m @@ -0,0 +1,24 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWAfterEachNode.h" +#import "KWExampleNodeVisitor.h" + +@implementation KWAfterEachNode + +#pragma mark - Initializing + ++ (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; +} + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor { + [aVisitor visitAfterEachNode:self]; +} + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.h b/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.h new file mode 100644 index 0000000..f5cd2e1 --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.h @@ -0,0 +1,17 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWBlockNode.h" +#import "KWExampleNode.h" + +@interface KWBeforeAllNode : KWBlockNode + +#pragma mark - Initializing + ++ (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.m b/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.m new file mode 100644 index 0000000..41b2e08 --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.m @@ -0,0 +1,24 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeforeAllNode.h" +#import "KWExampleNodeVisitor.h" + +@implementation KWBeforeAllNode + +#pragma mark - Initializing + ++ (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; +} + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor { + [aVisitor visitBeforeAllNode:self]; +} + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.h b/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.h new file mode 100644 index 0000000..21c5229 --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.h @@ -0,0 +1,17 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWBlockNode.h" +#import "KWExampleNode.h" + +@interface KWBeforeEachNode : KWBlockNode + +#pragma mark - Initializing + ++ (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.m b/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.m new file mode 100644 index 0000000..8c143e5 --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.m @@ -0,0 +1,24 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBeforeEachNode.h" +#import "KWExampleNodeVisitor.h" + +@implementation KWBeforeEachNode + +#pragma mark - Initializing + ++ (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { + return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; +} + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor { + [aVisitor visitBeforeEachNode:self]; +} + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWBlockNode.h b/Pods/Kiwi/Classes/Nodes/KWBlockNode.h new file mode 100644 index 0000000..050ba5c --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWBlockNode.h @@ -0,0 +1,34 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWBlock.h" + +@class KWCallSite; + +@interface KWBlockNode : NSObject + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block; + +#pragma mark - Getting Call Sites + +@property (nonatomic, strong, readonly) KWCallSite *callSite; + +#pragma mark - Getting Descriptions + +@property (nonatomic, copy) NSString *description; + +#pragma mark - Getting Blocks + +@property (nonatomic, copy, readonly) void (^block)(void); + +#pragma mark - Performing blocks + +- (void)performBlock; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWBlockNode.m b/Pods/Kiwi/Classes/Nodes/KWBlockNode.m new file mode 100644 index 0000000..69ffd1f --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWBlockNode.m @@ -0,0 +1,28 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWBlockNode.h" + +@implementation KWBlockNode + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block { + self = [super init]; + if (self) { + _callSite = aCallSite; + _description = aDescription; + _block = [block copy]; + } + + return self; +} + +- (void)performBlock { + if (self.block != nil) { self.block(); } +} + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWContextNode.h b/Pods/Kiwi/Classes/Nodes/KWContextNode.h new file mode 100644 index 0000000..23ddf33 --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWContextNode.h @@ -0,0 +1,59 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWExampleNode.h" + +@class KWAfterAllNode; +@class KWAfterEachNode; +@class KWBeforeAllNode; +@class KWBeforeEachNode; +@class KWCallSite; +@class KWItNode; +@class KWPendingNode; +@class KWRegisterMatchersNode; +@class KWExample; + +@interface KWContextNode : NSObject + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite parentContext:(KWContextNode *)node description:(NSString *)aDescription; + ++ (id)contextNodeWithCallSite:(KWCallSite *)aCallSite parentContext:(KWContextNode *)contextNode description:(NSString *)aDescription; + +#pragma mark - Getting Call Sites + +@property (nonatomic, weak, readonly) KWCallSite *callSite; + +#pragma mark - Getting Descriptions + +@property (nonatomic, readonly) NSString *description; + +#pragma mark - Managing Nodes + +@property (nonatomic, strong) KWRegisterMatchersNode *registerMatchersNode; +@property (nonatomic, strong) KWBeforeAllNode *beforeAllNode; +@property (nonatomic, strong) KWAfterAllNode *afterAllNode; +@property (nonatomic, strong) KWBeforeEachNode *beforeEachNode; +@property (nonatomic, strong) KWAfterEachNode *afterEachNode; +@property (nonatomic, readonly) NSArray *nodes; + +@property (nonatomic, readonly) KWContextNode *parentContext; + +@property (nonatomic, assign) BOOL isFocused; + +- (void)addContextNode:(KWContextNode *)aNode; +- (void)addItNode:(KWItNode *)aNode; +- (void)addPendingNode:(KWPendingNode *)aNode; + +- (void)performExample:(KWExample *)example withBlock:(void (^)(void))exampleBlock; + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWContextNode.m b/Pods/Kiwi/Classes/Nodes/KWContextNode.m new file mode 100644 index 0000000..0b2c17a --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWContextNode.m @@ -0,0 +1,122 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWAfterAllNode.h" +#import "KWAfterEachNode.h" +#import "KWBeforeAllNode.h" +#import "KWBeforeEachNode.h" +#import "KWCallSite.h" +#import "KWContextNode.h" +#import "KWExampleNodeVisitor.h" +#import "KWExample.h" +#import "KWFailure.h" +#import "KWRegisterMatchersNode.h" +#import "KWSymbolicator.h" + +@interface KWContextNode() + +@property (nonatomic, assign) NSUInteger performedExampleCount; + +@end + +@implementation KWContextNode + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite parentContext:(KWContextNode *)node description:(NSString *)aDescription { + self = [super init]; + if (self) { + _parentContext = node; + _callSite = aCallSite; + _description = [aDescription copy]; + _nodes = [[NSMutableArray alloc] init]; + _performedExampleCount = 0; + } + + return self; +} + ++ (id)contextNodeWithCallSite:(KWCallSite *)aCallSite parentContext:(KWContextNode *)contextNode description:(NSString *)aDescription { + return [[self alloc] initWithCallSite:aCallSite parentContext:contextNode description:aDescription]; +} + +- (void)addContextNode:(KWContextNode *)aNode { + [(NSMutableArray *)self.nodes addObject:aNode]; +} + +- (void)setRegisterMatchersNode:(KWRegisterMatchersNode *)aNode { + if (self.registerMatchersNode != nil) + [NSException raise:@"KWContextNodeException" format:@"a register matchers node already exists"]; + + _registerMatchersNode = aNode; +} + +- (void)setBeforeEachNode:(KWBeforeEachNode *)aNode { + if (self.beforeEachNode != nil) + [NSException raise:@"KWContextNodeException" format:@"a before each node already exists"]; + + _beforeEachNode = aNode; +} + +- (void)setAfterEachNode:(KWAfterEachNode *)aNode { + if (self.afterEachNode != nil) + [NSException raise:@"KWContextNodeException" format:@"an after each node already exists"]; + + _afterEachNode = aNode; +} + +- (void)addItNode:(KWItNode *)aNode { + [(NSMutableArray *)self.nodes addObject:aNode]; +} + +- (void)addPendingNode:(KWPendingNode *)aNode { + [(NSMutableArray *)self.nodes addObject:aNode]; +} + +- (void)performExample:(KWExample *)example withBlock:(void (^)(void))exampleBlock +{ + void (^innerExampleBlock)(void) = [exampleBlock copy]; + + void (^outerExampleBlock)(void) = ^{ + @try { + [self.registerMatchersNode acceptExampleNodeVisitor:example]; + + if (self.performedExampleCount == 0) { + [self.beforeAllNode acceptExampleNodeVisitor:example]; + } + + [self.beforeEachNode acceptExampleNodeVisitor:example]; + + innerExampleBlock(); + + [self.afterEachNode acceptExampleNodeVisitor:example]; + + if ([example isLastInContext:self]) { + [self.afterAllNode acceptExampleNodeVisitor:example]; + } + + } @catch (NSException *exception) { + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite format:@"%@ \"%@\" raised", [exception name], [exception reason]]; + [example reportFailure:failure]; + } + + self.performedExampleCount++; + }; + if (self.parentContext == nil) { + outerExampleBlock(); + } + else { + [self.parentContext performExample:example withBlock:outerExampleBlock]; + } +} + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor { + [aVisitor visitContextNode:self]; +} + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWExampleNode.h b/Pods/Kiwi/Classes/Nodes/KWExampleNode.h new file mode 100644 index 0000000..b3fc4dc --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWExampleNode.h @@ -0,0 +1,22 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@class KWContextNode; +@protocol KWExampleNodeVisitor; + +@protocol KWExampleNode + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor; + +@optional + +- (NSArray *)contextStack; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWItNode.h b/Pods/Kiwi/Classes/Nodes/KWItNode.h new file mode 100644 index 0000000..11bcec0 --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWItNode.h @@ -0,0 +1,27 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWBlockNode.h" +#import "KWExampleNode.h" + +@class KWPendingNode; +@class KWExample; +@class KWContextNode; + +@interface KWItNode : KWBlockNode + +@property (nonatomic, strong) KWExample *example; +@property (nonatomic, weak, readonly) KWContextNode *context; + +#pragma mark - Initializing + ++ (id)itNodeWithCallSite:(KWCallSite *)aCallSite + description:(NSString *)aDescription + context:(KWContextNode *)context + block:(void (^)(void))block; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWItNode.m b/Pods/Kiwi/Classes/Nodes/KWItNode.m new file mode 100644 index 0000000..5e3339d --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWItNode.m @@ -0,0 +1,62 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWItNode.h" +#import "KWExampleNodeVisitor.h" +#import "KWExample.h" +#import "KWVerifying.h" +#import "KWContextNode.h" + +@interface KWItNode () + +@property (nonatomic, weak) KWContextNode *context; + +@end + +@implementation KWItNode + +#pragma mark - Initializing + ++ (id)itNodeWithCallSite:(KWCallSite *)aCallSite + description:(NSString *)aDescription + context:(KWContextNode *)context + block:(void (^)(void))block { + KWItNode *itNode = [[self alloc] initWithCallSite:aCallSite description:aDescription block:block]; + itNode.context = context; + return itNode; +} + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor { + [aVisitor visitItNode:self]; +} + +#pragma mark - Runtime Description support + +- (NSString *)description { + NSString *description = [super description]; + if (description == nil) { + description = [self.example generateDescriptionForAnonymousItNode]; + } + return description; +} + +#pragma mark - Accessing the context stack + +- (NSArray *)contextStack { + NSMutableArray *contextStack = [NSMutableArray array]; + + KWContextNode *currentContext = _context; + + while (currentContext) { + [contextStack addObject:currentContext]; + currentContext = currentContext.parentContext; + } + return contextStack; +} + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWPendingNode.h b/Pods/Kiwi/Classes/Nodes/KWPendingNode.h new file mode 100644 index 0000000..f67876e --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWPendingNode.h @@ -0,0 +1,31 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWExampleNode.h" + +@class KWContextNode; +@class KWCallSite; + +@interface KWPendingNode : NSObject + +@property (nonatomic, readonly, strong) KWContextNode *context; + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription; + ++ (id)pendingNodeWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription; + +#pragma mark - Getting Call Sites + +@property (nonatomic, readonly) KWCallSite *callSite; + +#pragma mark - Getting Descriptions + +@property (nonatomic, readonly) NSString *description; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWPendingNode.m b/Pods/Kiwi/Classes/Nodes/KWPendingNode.m new file mode 100644 index 0000000..097faf7 --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWPendingNode.m @@ -0,0 +1,53 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWPendingNode.h" + +#import "KWCallSite.h" +#import "KWContextNode.h" +#import "KWExampleNodeVisitor.h" + +@implementation KWPendingNode + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription { + self = [super init]; + if (self) { + _callSite = aCallSite; + _description = [aDescription copy]; + _context = context; + } + + return self; +} + ++ (id)pendingNodeWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription { + return [[self alloc] initWithCallSite:aCallSite context:context description:aDescription]; +} + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor { + [aVisitor visitPendingNode:self]; +} + +#pragma mark - Accessing the context stack + +- (NSArray *)contextStack +{ + NSMutableArray *contextStack = [NSMutableArray array]; + + KWContextNode *currentContext = _context; + + while (currentContext) { + [contextStack addObject:currentContext]; + currentContext = currentContext.parentContext; + } + return contextStack; +} + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.h b/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.h new file mode 100644 index 0000000..f0ef83a --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.h @@ -0,0 +1,28 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWExampleNode.h" + +@class KWCallSite; + +@interface KWRegisterMatchersNode : NSObject + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; + ++ (id)registerMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; + +#pragma mark - Getting Call Sites + +@property (nonatomic, readonly) KWCallSite *callSite; + +#pragma mark - Getting Namespace Prefixes + +@property (nonatomic, readonly) NSString *namespacePrefix; + +@end diff --git a/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.m b/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.m new file mode 100644 index 0000000..8e6b1cc --- /dev/null +++ b/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.m @@ -0,0 +1,36 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWRegisterMatchersNode.h" + +#import "KWCallSite.h" +#import "KWExampleNodeVisitor.h" + +@implementation KWRegisterMatchersNode + +#pragma mark - Initializing + +- (id)initWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { + self = [super init]; + if (self) { + _callSite = aCallSite; + _namespacePrefix = [aNamespacePrefix copy]; + } + + return self; +} + ++ (id)registerMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { + return [[self alloc] initWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; +} + +#pragma mark - Accepting Visitors + +- (void)acceptExampleNodeVisitor:(id)aVisitor { + [aVisitor visitRegisterMatchersNode:self]; +} + +@end diff --git a/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h b/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h new file mode 100644 index 0000000..8d7306b --- /dev/null +++ b/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h @@ -0,0 +1,55 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@class KWCaptureSpy; +@class KWMessagePattern; + +@protocol KWMessageSpying; + +@interface NSObject(KiwiStubAdditions) + +#pragma mark - Stubbing Methods + +- (void)stub:(SEL)aSelector; +- (void)stub:(SEL)aSelector withBlock:(id (^)(NSArray *params))block; +- (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ...; +- (void)stub:(SEL)aSelector andReturn:(id)aValue; +- (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ...; + ++ (void)stub:(SEL)aSelector; ++ (void)stub:(SEL)aSelector withBlock:(id (^)(NSArray *params))block; ++ (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ...; ++ (void)stub:(SEL)aSelector andReturn:(id)aValue; ++ (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ...; + +- (id)stub; +- (id)stubAndReturn:(id)aValue; +- (id)stubAndReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue; +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue overrideExisting:(BOOL)overrideExisting; +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern withBlock:(id (^)(NSArray *params))block; + ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue; ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern withBlock:(id (^)(NSArray *params))block; + +- (void)clearStubs; + +#pragma mark - Spying on Messages + +- (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; +- (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; +- (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; + ++ (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; ++ (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; ++ (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; + +@end diff --git a/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.m b/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.m new file mode 100644 index 0000000..0edf73a --- /dev/null +++ b/Pods/Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.m @@ -0,0 +1,256 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "NSObject+KiwiStubAdditions.h" +#import "KWCaptureSpy.h" +#import "KWIntercept.h" +#import "KWInvocationCapturer.h" +#import "KWMessagePattern.h" +#import "KWObjCUtilities.h" +#import "KWStringUtilities.h" +#import "KWStub.h" + +static NSString * const StubValueKey = @"StubValueKey"; +static NSString * const StubSecondValueKey = @"StubSecondValueKey"; +static NSString * const ChangeStubValueAfterTimesKey = @"ChangeStubValueAfterTimesKey"; + +@implementation NSObject(KiwiStubAdditions) + +#pragma mark - Capturing Invocations + +- (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector { + NSMethodSignature *signature = [self methodSignatureForSelector:aSelector]; + + if (signature != nil) + return signature; + + NSString *encoding = KWEncodingForDefaultMethod(); + return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; +} + +- (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternFromInvocation:anInvocation]; + id value = (anInvocationCapturer.userInfo)[StubValueKey]; + if (!(anInvocationCapturer.userInfo)[StubSecondValueKey]) { + [self stubMessagePattern:messagePattern andReturn:value]; + } else { + id times = (anInvocationCapturer.userInfo)[ChangeStubValueAfterTimesKey]; + id secondValue = (anInvocationCapturer.userInfo)[StubSecondValueKey]; + [self stubMessagePattern:messagePattern andReturn:value times:times afterThatReturn:secondValue]; + } +} + +#pragma mark - Stubbing Methods + +- (void)stub:(SEL)aSelector { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self stubMessagePattern:messagePattern andReturn:nil]; +} + +- (void)stub:(SEL)aSelector withBlock:(id (^)(NSArray *))block { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self stubMessagePattern:messagePattern withBlock:block]; +} + +- (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ... { + va_list argumentList; + va_start(argumentList, firstArgument); + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; + [self stubMessagePattern:messagePattern andReturn:nil]; +} + +- (void)stub:(SEL)aSelector andReturn:(id)aValue { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self stubMessagePattern:messagePattern andReturn:aValue]; +} + +- (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ... { + va_list argumentList; + va_start(argumentList, firstArgument); + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; + [self stubMessagePattern:messagePattern andReturn:aValue]; +} + ++ (void)stub:(SEL)aSelector { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self stubMessagePattern:messagePattern andReturn:nil]; +} + ++ (void)stub:(SEL)aSelector withBlock:(id (^)(NSArray *))block { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self stubMessagePattern:messagePattern withBlock:block]; +} + ++ (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ... { + va_list argumentList; + va_start(argumentList, firstArgument); + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; + [self stubMessagePattern:messagePattern andReturn:nil]; +} + ++ (void)stub:(SEL)aSelector andReturn:(id)aValue { + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; + [self stubMessagePattern:messagePattern andReturn:aValue]; +} + ++ (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ... { + va_list argumentList; + va_start(argumentList, firstArgument); + KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; + [self stubMessagePattern:messagePattern andReturn:aValue]; +} + +- (id)stub { + return [KWInvocationCapturer invocationCapturerWithDelegate:self]; +} + +- (id)stubAndReturn:(id)aValue { + NSDictionary *userInfo = @{StubValueKey: aValue}; + return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; +} + +- (id)stubAndReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue { + NSDictionary *userInfo = @{StubValueKey: aValue, ChangeStubValueAfterTimesKey: times, StubSecondValueKey: aSecondValue}; + return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; +} + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue { + [self stubMessagePattern:aMessagePattern andReturn:aValue overrideExisting:YES]; +} + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue overrideExisting:(BOOL)overrideExisting { + if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { + [NSException raise:@"KWStubException" format:@"cannot stub -%@ because no such method exists", + NSStringFromSelector(aMessagePattern.selector)]; + } + + Class interceptClass = KWSetupObjectInterceptSupport(self); + KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); + KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern value:aValue]; + KWAssociateObjectStub(self, stub, overrideExisting); +} + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue { + if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { + [NSException raise:@"KWStubException" format:@"cannot stub -%@ because no such method exists", + NSStringFromSelector(aMessagePattern.selector)]; + } + + Class interceptClass = KWSetupObjectInterceptSupport(self); + KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); + KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern value:aValue times:times afterThatReturn:aSecondValue]; + KWAssociateObjectStub(self, stub, YES); +} + +- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern withBlock:(id (^)(NSArray *params))block { + if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { + [NSException raise:@"KWStubException" format:@"cannot stub -%@ because no such method exists", + NSStringFromSelector(aMessagePattern.selector)]; + } + + Class interceptClass = KWSetupObjectInterceptSupport(self); + KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); + KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern block:block]; + KWAssociateObjectStub(self, stub, YES); +} + ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue { + [self stubMessagePattern:aMessagePattern andReturn:aValue overrideExisting:YES]; +} + ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue overrideExisting:(BOOL)override { + if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { + [NSException raise:@"KWStubException" format:@"cannot stub -%@ because no such method exists", + NSStringFromSelector(aMessagePattern.selector)]; + } + + Class interceptClass = KWSetupObjectInterceptSupport(self); + KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); + KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern value:aValue]; + KWAssociateObjectStub(self, stub, override); +} + ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue { + [self stubMessagePattern:aMessagePattern andReturn:aValue times:times afterThatReturn:aSecondValue overrideExisting:YES]; +} + ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue overrideExisting:(BOOL)override { + if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { + [NSException raise:@"KWStubException" format:@"cannot stub -%@ because no such method exists", + NSStringFromSelector(aMessagePattern.selector)]; + } + + Class interceptClass = KWSetupObjectInterceptSupport(self); + KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); + KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern value:aValue times:times afterThatReturn:aSecondValue]; + KWAssociateObjectStub(self, stub, override); +} + ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern withBlock:(id (^)(NSArray *params))block { + [self stubMessagePattern:aMessagePattern withBlock:block overrideExisting:YES]; +} + ++ (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern withBlock:(id (^)(NSArray *params))block overrideExisting:(BOOL)override { + if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { + [NSException raise:@"KWStubException" format:@"cannot stub -%@ because no such method exists", + NSStringFromSelector(aMessagePattern.selector)]; + } + + Class interceptClass = KWSetupObjectInterceptSupport(self); + KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); + KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern block:block]; + KWAssociateObjectStub(self, stub, override); +} + +- (void)clearStubs { + KWClearObjectStubs(self); +} + +#pragma mark - Spying on Messages + +- (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { + if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { + [NSException raise:@"KWSpyException" format:@"cannot add spy for -%@ because no such method exists", + NSStringFromSelector(aMessagePattern.selector)]; + } + + Class interceptClass = KWSetupObjectInterceptSupport(self); + KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); + KWAssociateMessageSpy(self, aSpy, aMessagePattern); +} + +- (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { + KWClearObjectSpy(self, aSpy, aMessagePattern); +} + +- (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { + KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; + [self addMessageSpy:spy forMessagePattern:[KWMessagePattern messagePatternWithSelector:selector]]; + return spy; +} + ++ (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { + if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { + [NSException raise:@"KWSpyException" format:@"cannot add spy for -%@ because no such method exists", + NSStringFromSelector(aMessagePattern.selector)]; + } + + Class interceptClass = KWSetupObjectInterceptSupport(self); + KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); + KWAssociateMessageSpy(self, aSpy, aMessagePattern); +} + ++ (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { + KWClearObjectSpy(self, aSpy, aMessagePattern); +} + ++ (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { + KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; + [self addMessageSpy:spy forMessagePattern:[KWMessagePattern messagePatternWithSelector:selector]]; + return spy; +} + +@end diff --git a/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.h b/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.h new file mode 100644 index 0000000..dd407c3 --- /dev/null +++ b/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.h @@ -0,0 +1,36 @@ +// +// KWAsyncVerifier.h +// iOSFalconCore +// +// Created by Luke Redpath on 13/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import +#import "KWMatchVerifier.h" +#import "KWProbe.h" + +#define kKW_DEFAULT_PROBE_TIMEOUT 1.0 + +@class KWAsyncMatcherProbe; + + +@interface KWAsyncVerifier : KWMatchVerifier + +@property (nonatomic, assign) NSTimeInterval timeout; +@property (nonatomic, assign) BOOL shouldWait; + ++ (id)asyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter probeTimeout:(NSTimeInterval)probeTimeout shouldWait:(BOOL)shouldWait; +- (void)verifyWithProbe:(KWAsyncMatcherProbe *)aProbe; + +@end + + +@interface KWAsyncMatcherProbe : NSObject + +@property (nonatomic, assign) BOOL matchResult; +@property (nonatomic, readonly) id matcher; + +- (id)initWithMatcher:(id)aMatcher; + +@end diff --git a/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.m b/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.m new file mode 100644 index 0000000..80aaf07 --- /dev/null +++ b/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.m @@ -0,0 +1,90 @@ +// +// KWAsyncVerifier.m +// iOSFalconCore +// +// Created by Luke Redpath on 13/01/2011. +// Copyright 2011 LJR Software Limited. All rights reserved. +// + +#import "KWAsyncVerifier.h" +#import "KWFailure.h" +#import "KWMatching.h" +#import "KWReporting.h" +#import "KWProbePoller.h" + +@implementation KWAsyncVerifier + ++ (id)asyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter probeTimeout:(NSTimeInterval)probeTimeout shouldWait:(BOOL)shouldWait { + KWAsyncVerifier *verifier = [[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; + verifier.timeout = probeTimeout; + verifier.shouldWait = shouldWait; + return verifier; +} + +- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { + self = [super initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; + if (self) { + self.timeout = kKW_DEFAULT_PROBE_TIMEOUT; + } + return self; +} + +- (void)verifyWithProbe:(KWAsyncMatcherProbe *)aProbe { + @try { + KWProbePoller *poller = [[KWProbePoller alloc] initWithTimeout:self.timeout delay:kKW_DEFAULT_PROBE_DELAY shouldWait: self.shouldWait]; + + if (![poller check:aProbe]) { + if (self.expectationType == KWExpectationTypeShould) { + NSString *message = [aProbe.matcher failureMessageForShould]; + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; + [self.reporter reportFailure:failure]; + } + } else { + // poller returned YES -- fail if expectation is NOT + if (self.expectationType == KWExpectationTypeShouldNot) { + NSString *message = [aProbe.matcher failureMessageForShouldNot]; + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; + [self.reporter reportFailure:failure]; + } + } + + + } @catch (NSException *exception) { + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:[exception description]]; + [self.reporter reportFailure:failure]; + } +} + +- (void)verifyWithMatcher:(id)aMatcher { + KWAsyncMatcherProbe *probe = [[KWAsyncMatcherProbe alloc] initWithMatcher:aMatcher]; + [self verifyWithProbe:probe]; +} + +@end + +@implementation KWAsyncMatcherProbe + +- (id)initWithMatcher:(id)aMatcher { + self = [super init]; + if (self) { + _matcher = aMatcher; + + // make sure the matcher knows we are going to evaluate it multiple times + if ([aMatcher respondsToSelector:@selector(willEvaluateMultipleTimes)]) { + [aMatcher setWillEvaluateMultipleTimes:YES]; + } + } + return self; +} + + +- (BOOL)isSatisfied { + return self.matchResult; +} + +- (void)sample { + self.matchResult = [self.matcher evaluate]; +} + +@end + diff --git a/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.h b/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.h new file mode 100644 index 0000000..91c0c18 --- /dev/null +++ b/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.h @@ -0,0 +1,27 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWExpectationType.h" +#import "KWVerifying.h" + +@class KWCallSite; + +@protocol KWReporting; + +@interface KWExistVerifier : NSObject + +#pragma mark - Initializing + +- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter; + ++ (id)existVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter; + +#pragma mark - Properties + +@property (nonatomic, strong) id subject; + +@end diff --git a/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.m b/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.m new file mode 100644 index 0000000..9485a07 --- /dev/null +++ b/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.m @@ -0,0 +1,63 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWExistVerifier.h" + +#import "KWCallSite.h" +#import "KWFailure.h" +#import "KWFormatter.h" +#import "KWReporting.h" + +@interface KWExistVerifier() + +@property (nonatomic, readonly) KWExpectationType expectationType; +@property (nonatomic, readonly) id reporter; + +@property (nonatomic, strong) KWCallSite *callSite; + +@end + +@implementation KWExistVerifier + +#pragma mark - Initializing + +- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter { + self = [super init]; + if (self) { + _expectationType = anExpectationType; + _callSite = aCallSite; + _reporter = aReporter; + } + + return self; +} + ++ (id)existVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter { + return [[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite reporter:aReporter]; +} + + +- (NSString *)descriptionForAnonymousItNode { + if (self.expectationType == KWExpectationTypeShould) { + return @"should exist"; + } + return @"should not exist"; +} + +#pragma mark - Ending Examples + +- (void)exampleWillEnd { + if (self.expectationType == KWExpectationTypeShould && self.subject == nil) { + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:@"expected subject not to be nil"]; + [self.reporter reportFailure:failure]; + } else if (self.expectationType == KWExpectationTypeShouldNot && self.subject != nil) { + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite format:@"expected subject to be nil, got %@", + [KWFormatter formatObject:self.subject]]; + [self.reporter reportFailure:failure]; + } +} + +@end diff --git a/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.h b/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.h new file mode 100644 index 0000000..0fa981a --- /dev/null +++ b/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.h @@ -0,0 +1,39 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import "KWExpectationType.h" +#import "KWVerifying.h" + +@class KWCallSite; +@class KWMatcherFactory; + +@protocol KWMatching; +@protocol KWReporting; + +@interface KWMatchVerifier : NSObject + +#pragma mark - Properties + +@property (nonatomic, readonly) KWExpectationType expectationType; + +@property (nonatomic, readonly) KWMatcherFactory *matcherFactory; +@property (nonatomic, readonly) id reporter; + +@property (nonatomic, strong) id subject; + + +#pragma mark - Initializing + +- (id)initForShouldWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; +- (id)initForShouldNotWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; +- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; + ++ (id)matchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; + +- (void)verifyWithMatcher:(id)aMatcher; + +@end diff --git a/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.m b/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.m new file mode 100644 index 0000000..95513b7 --- /dev/null +++ b/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.m @@ -0,0 +1,176 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWMatchVerifier.h" + +#import "KWCallSite.h" +#import "KWExample.h" +#import "KWFailure.h" +#import "KWFormatter.h" +#import "KWInvocationCapturer.h" +#import "KWMatcherFactory.h" +#import "KWReporting.h" +#import "KWStringUtilities.h" +#import "KWWorkarounds.h" +#import "NSInvocation+KiwiAdditions.h" +#import "NSMethodSignature+KiwiAdditions.h" + +@interface KWMatchVerifier() + +#pragma mark - Properties + +@property (nonatomic, readwrite, strong) id endOfExampleMatcher; +@property (nonatomic, readwrite, strong) id matcher; +@property (nonatomic, readwrite, strong) KWExample *example; + +@property (nonatomic, strong) KWCallSite *callSite; + +@end + +@implementation KWMatchVerifier + +#pragma mark - Initializing + +- (id)initForShouldWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { + return [self initWithExpectationType:KWExpectationTypeShould callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; +} + +- (id)initForShouldNotWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { + return [self initWithExpectationType:KWExpectationTypeShouldNot callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; +} + +- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { + self = [super init]; + if (self) { + _expectationType = anExpectationType; + _callSite = aCallSite; + _matcherFactory = aMatcherFactory; + _reporter = aReporter; + _example = (KWExample *)aReporter; + } + + return self; +} + ++ (id)matchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { + return [[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; +} + + +- (NSString *)descriptionForAnonymousItNode { + NSString *typeString = @""; + + switch (self.expectationType) { + case KWExpectationTypeShould: + typeString = @"should"; + break; + case KWExpectationTypeShouldNot: + typeString = @"should not"; + } + id actualMatcher = (self.endOfExampleMatcher == nil) ? self.matcher : self.endOfExampleMatcher; + return [NSString stringWithFormat:@"%@ %@", typeString, actualMatcher]; +} + +#pragma mark - Verifying + +- (void)verifyWithMatcher:(id)aMatcher { + BOOL specFailed = NO; + NSString *failureMessage = nil; + + @try { + BOOL matchResult = [aMatcher evaluate]; + + if (self.expectationType == KWExpectationTypeShould && !matchResult) { + failureMessage = [aMatcher failureMessageForShould]; + specFailed = YES; + + } else if (self.expectationType == KWExpectationTypeShouldNot && matchResult) { + failureMessage = [aMatcher failureMessageForShouldNot]; + specFailed = YES; + } + } @catch (NSException *exception) { + failureMessage = [exception description]; + specFailed = YES; + } + @finally { + if (specFailed) { + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:failureMessage]; + [self.reporter reportFailure:failure]; + } + } +} + +#pragma mark - Ending Examples + +- (void)exampleWillEnd { + if (self.endOfExampleMatcher) { + [self verifyWithMatcher:self.endOfExampleMatcher]; + } +} + +#pragma mark - Handling Invocations + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { + NSMethodSignature *signature = [super methodSignatureForSelector:aSelector]; + + if (signature != nil) + return signature; + + signature = [self.matcherFactory methodSignatureForMatcherSelector:aSelector]; + + if (signature != nil) + return signature; + + // Return a dummy method signature so that problems can be handled in + // -forwardInvocation:. + NSString *encoding = KWEncodingForDefaultMethod(); + return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; +} + +- (void)forwardInvocation:(NSInvocation *)anInvocation { +#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + @try { +#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + + self.matcher = (id)[self.matcherFactory matcherFromInvocation:anInvocation subject:self.subject]; + + if (self.matcher == nil) { + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite format:@"could not create matcher for -%@", + NSStringFromSelector(anInvocation.selector)]; + [self.reporter reportFailure:failure]; + } + + if (self.example.unresolvedVerifier == self) { + self.example.unresolvedVerifier = nil; + } + + [anInvocation invokeWithTarget:self.matcher]; + +#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + // A matcher might have set an exception within the -invokeWithTarget, so + // raise if one was set. + NSException *exception = KWGetAndClearExceptionFromAcrossInvocationBoundary(); + [exception raise]; +#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + + if ([self.matcher respondsToSelector:@selector(shouldBeEvaluatedAtEndOfExample)] && [self.matcher shouldBeEvaluatedAtEndOfExample]) { + self.endOfExampleMatcher = self.matcher; + self.matcher = nil; + } + else { + [self verifyWithMatcher:self.matcher]; + } + +#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG + } @catch (NSException *exception) { + KWFailure *failure = [KWFailure failureWithCallSite:self.callSite format:[exception reason]]; + [self.reporter reportFailure:failure]; + return; + } +#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG +} + +@end diff --git a/Pods/Kiwi/Classes/Verifiers/KWVerifying.h b/Pods/Kiwi/Classes/Verifiers/KWVerifying.h new file mode 100644 index 0000000..d26d3bc --- /dev/null +++ b/Pods/Kiwi/Classes/Verifiers/KWVerifying.h @@ -0,0 +1,25 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@class KWCallSite; + +@protocol KWVerifying + +@property (nonatomic, readonly) KWCallSite *callSite; + +- (NSString *)descriptionForAnonymousItNode; + +#pragma mark - Subjects + +@property (nonatomic, strong) id subject; + +#pragma mark - Ending Examples + +- (void)exampleWillEnd; + +@end diff --git a/Pods/Kiwi/Contributors.txt b/Pods/Kiwi/Contributors.txt deleted file mode 100755 index 98533c9..0000000 --- a/Pods/Kiwi/Contributors.txt +++ /dev/null @@ -1,6 +0,0 @@ -The following people have made significant contributions to Kiwi. -Feel free to submit updates to your contact info. - -Jonathan Penn -Luke Redpath -Matt di Pasquale diff --git a/Pods/Kiwi/Kiwi/KWAfterAllNode.h b/Pods/Kiwi/Kiwi/KWAfterAllNode.h deleted file mode 100755 index c7af7ca..0000000 --- a/Pods/Kiwi/Kiwi/KWAfterAllNode.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWBlockNode.h" -#import "KWExampleNode.h" - -@interface KWAfterAllNode : KWBlockNode - -#pragma mark - -#pragma mark Initializing - -+ (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; - -@end diff --git a/Pods/Kiwi/Kiwi/KWAfterAllNode.m b/Pods/Kiwi/Kiwi/KWAfterAllNode.m deleted file mode 100755 index 099de2e..0000000 --- a/Pods/Kiwi/Kiwi/KWAfterAllNode.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWAfterAllNode.h" -#import "KWExampleNodeVisitor.h" - -@implementation KWAfterAllNode - -#pragma mark - -#pragma mark Initializing - -+ (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - return [[[self alloc] initWithCallSite:aCallSite description:nil block:aBlock] autorelease]; -} - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor { - [aVisitor visitAfterAllNode:self]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWAfterEachNode.h b/Pods/Kiwi/Kiwi/KWAfterEachNode.h deleted file mode 100755 index 4cc9ada..0000000 --- a/Pods/Kiwi/Kiwi/KWAfterEachNode.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWBlockNode.h" -#import "KWExampleNode.h" - -@interface KWAfterEachNode : KWBlockNode - -#pragma mark - -#pragma mark Initializing - -+ (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; - -@end diff --git a/Pods/Kiwi/Kiwi/KWAfterEachNode.m b/Pods/Kiwi/Kiwi/KWAfterEachNode.m deleted file mode 100755 index 76d30fa..0000000 --- a/Pods/Kiwi/Kiwi/KWAfterEachNode.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWAfterEachNode.h" -#import "KWExampleNodeVisitor.h" - -@implementation KWAfterEachNode - -#pragma mark - -#pragma mark Initializing - -+ (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - return [[[self alloc] initWithCallSite:aCallSite description:nil block:aBlock] autorelease]; -} - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor { - [aVisitor visitAfterEachNode:self]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWAsyncVerifier.h b/Pods/Kiwi/Kiwi/KWAsyncVerifier.h deleted file mode 100755 index 8ec60e3..0000000 --- a/Pods/Kiwi/Kiwi/KWAsyncVerifier.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// KWAsyncVerifier.h -// iOSFalconCore -// -// Created by Luke Redpath on 13/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import -#import "KWMatchVerifier.h" -#import "KWProbe.h" - -#define kKW_DEFAULT_PROBE_TIMEOUT 1.0 - -@class KWAsyncMatcherProbe; - -@interface KWAsyncVerifier : KWMatchVerifier -{ - NSInteger timeout; -} -@property (nonatomic, assign) NSInteger timeout; - -+ (id)asyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter probeTimeout:(NSInteger)probeTimeout; -- (void)verifyWithProbe:(KWAsyncMatcherProbe *)aProbe; -@end - -@interface KWAsyncMatcherProbe : NSObject -{ - id matcher; - BOOL matchResult; -} -@property (nonatomic, readonly) id matcher; - -- (id)initWithMatcher:(id)aMatcher; -@end diff --git a/Pods/Kiwi/Kiwi/KWAsyncVerifier.m b/Pods/Kiwi/Kiwi/KWAsyncVerifier.m deleted file mode 100755 index 4db55f3..0000000 --- a/Pods/Kiwi/Kiwi/KWAsyncVerifier.m +++ /dev/null @@ -1,99 +0,0 @@ -// -// KWAsyncVerifier.m -// iOSFalconCore -// -// Created by Luke Redpath on 13/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import "KWAsyncVerifier.h" -#import "KWFailure.h" -#import "KWMatching.h" -#import "KWReporting.h" -#import "KWProbePoller.h" - -@implementation KWAsyncVerifier - -@synthesize timeout; - -+ (id)asyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter probeTimeout:(NSInteger)probeTimeout; -{ - KWAsyncVerifier *verifier = [[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; - verifier.timeout = probeTimeout; - return [verifier autorelease]; -} - -- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { - if ((self = [super initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter])) { - self.timeout = kKW_DEFAULT_PROBE_TIMEOUT; - } - return self; -} - -- (void)verifyWithProbe:(KWAsyncMatcherProbe *)aProbe { - @try { - KWProbePoller *poller = [[KWProbePoller alloc] initWithTimeout:self.timeout delay:kKW_DEFAULT_PROBE_DELAY]; - - if (![poller check:aProbe]) { - if (self.expectationType == KWExpectationTypeShould) { - NSString *message = [aProbe.matcher failureMessageForShould]; - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; - [self.reporter reportFailure:failure]; - } else if (self.expectationType == KWExpectationTypeShouldNot) { - NSString *message = [aProbe.matcher failureMessageForShouldNot]; - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; - [self.reporter reportFailure:failure]; - } else if (self.expectationType == KWExpectationTypeMaybe) { - // don't do anything - } - } - [poller release]; - - } @catch (NSException *exception) { - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:[exception description]]; - [self.reporter reportFailure:failure]; - } -} - -- (void)verifyWithMatcher:(id)aMatcher { - KWAsyncMatcherProbe *probe = [[[KWAsyncMatcherProbe alloc] initWithMatcher:aMatcher] autorelease]; - [self verifyWithProbe:probe]; -} - -@end - -@implementation KWAsyncMatcherProbe - -@synthesize matcher; - -- (id)initWithMatcher:(id)aMatcher; -{ - if ((self = [super init])) { - matcher = [aMatcher retain]; - - // make sure the matcher knows we are going to evaluate it multiple times - if ([aMatcher respondsToSelector:@selector(willEvaluateMultipleTimes)]) { - [aMatcher setWillEvaluateMultipleTimes:YES]; - } - } - return self; -} - -- (void)dealloc -{ - [matcher release]; - [super dealloc]; -} - -- (BOOL)isSatisfied; -{ - return matchResult; -} - -- (void)sample; -{ - matchResult = [matcher evaluate]; -} - -@end - diff --git a/Pods/Kiwi/Kiwi/KWBeBetweenMatcher.h b/Pods/Kiwi/Kiwi/KWBeBetweenMatcher.h deleted file mode 100755 index c3bdc7c..0000000 --- a/Pods/Kiwi/Kiwi/KWBeBetweenMatcher.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWBeBetweenMatcher : KWMatcher { -@private - id lowerEndpoint; - id upperEndpoint; -} - -#pragma mark - -#pragma mark Configuring Matchers - -// TODO: 'and' below is a reserved word in C++ -- (void)beBetween:(id)aLowerEndpoint and:(id)anUpperEndpoint; -- (void)beInTheIntervalFrom:(id)aLowerEndpoint to:(id)anUpperEndpoint; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeBetweenMatcher.m b/Pods/Kiwi/Kiwi/KWBeBetweenMatcher.m deleted file mode 100755 index eeff382..0000000 --- a/Pods/Kiwi/Kiwi/KWBeBetweenMatcher.m +++ /dev/null @@ -1,84 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBeBetweenMatcher.h" -#import "KWFormatter.h" - -@interface KWBeBetweenMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, retain) id lowerEndpoint; -@property (nonatomic, readwrite, retain) id upperEndpoint; - -@end - -@implementation KWBeBetweenMatcher - -#pragma mark - -#pragma mark Initializing - -- (void)dealloc { - [lowerEndpoint release]; - [upperEndpoint release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize lowerEndpoint; -@synthesize upperEndpoint; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"beBetween:and:", @"beInTheIntervalFrom:to:", nil]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - if (![self.subject respondsToSelector:@selector(compare:)]) - [NSException raise:@"KWMatcherException" format:@"subject does not respond to -compare:"]; - - NSComparisonResult lowerResult = [self.subject compare:self.lowerEndpoint]; - NSComparisonResult upperResult = [self.subject compare:self.upperEndpoint]; - return (lowerResult == NSOrderedDescending || lowerResult == NSOrderedSame) && - (upperResult == NSOrderedAscending || upperResult == NSOrderedSame); -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be in the interval [%@, %@], got %@", - [KWFormatter formatObject:self.lowerEndpoint], - [KWFormatter formatObject:self.upperEndpoint], - [KWFormatter formatObject:self.subject]]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"be between %@ and %@", self.lowerEndpoint, self.upperEndpoint]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beBetween:(id)aLowerEndpoint and:(id)anUpperEndpoint { - [self beInTheIntervalFrom:aLowerEndpoint to:anUpperEndpoint]; -} - -- (void)beInTheIntervalFrom:(id)aLowerEndpoint to:(id)anUpperEndpoint { - self.lowerEndpoint = aLowerEndpoint; - self.upperEndpoint = anUpperEndpoint; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeEmptyMatcher.h b/Pods/Kiwi/Kiwi/KWBeEmptyMatcher.h deleted file mode 100755 index ee3537b..0000000 --- a/Pods/Kiwi/Kiwi/KWBeEmptyMatcher.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWBeEmptyMatcher : KWMatcher { -@private - NSUInteger count; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beEmpty; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeEmptyMatcher.m b/Pods/Kiwi/Kiwi/KWBeEmptyMatcher.m deleted file mode 100755 index 080a1e0..0000000 --- a/Pods/Kiwi/Kiwi/KWBeEmptyMatcher.m +++ /dev/null @@ -1,79 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBeEmptyMatcher.h" -#import "KWFormatter.h" - -@interface KWBeEmptyMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite) NSUInteger count; - -@end - -@implementation KWBeEmptyMatcher - -#pragma mark - -#pragma mark Properties - -@synthesize count; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObject:@"beEmpty"]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - if ([self.subject respondsToSelector:@selector(count)]) { - self.count = [self.subject count]; - return self.count == 0; - } - else if ([self.subject respondsToSelector:@selector(length)]) { - self.count = [self.subject length]; - return self.count == 0; - } - - [NSException raise:@"KWMatcherException" format:@"subject does not respond to -count or -length"]; - return NO; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)countPhrase { - if (self.count == 1) - return @"1 item"; - else - return [NSString stringWithFormat:@"%u items", self.count]; -} - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be empty, got %@", [self countPhrase]]; -} - -- (NSString *)failureMessageForShouldNot { - return @"expected subject not to be empty"; -} - -- (NSString *)description -{ - return @"be empty"; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beEmpty { -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeIdenticalToMatcher.h b/Pods/Kiwi/Kiwi/KWBeIdenticalToMatcher.h deleted file mode 100755 index b2c1705..0000000 --- a/Pods/Kiwi/Kiwi/KWBeIdenticalToMatcher.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWBeIdenticalToMatcher : KWMatcher { -@private - id otherSubject; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beIdenticalTo:(id)anObject; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeIdenticalToMatcher.m b/Pods/Kiwi/Kiwi/KWBeIdenticalToMatcher.m deleted file mode 100755 index 80a682b..0000000 --- a/Pods/Kiwi/Kiwi/KWBeIdenticalToMatcher.m +++ /dev/null @@ -1,77 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBeIdenticalToMatcher.h" -#import "KWFormatter.h" - -@interface KWBeIdenticalToMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, retain) id otherSubject; - -@end - -@implementation KWBeIdenticalToMatcher - -#pragma mark - -#pragma mark Initializing - -- (void)dealloc { - [otherSubject release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize otherSubject; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObject:@"beIdenticalTo:"]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return self.subject == self.otherSubject; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be identical to %@ (%p), got %@ (%p)", - [KWFormatter formatObject:self.otherSubject], - self.otherSubject, - [KWFormatter formatObject:self.subject], - self.subject]; -} - -- (NSString *)failureMessageForShouldNot { - return [NSString stringWithFormat:@"expected subject not to be identical to %@ (%p)", - [KWFormatter formatObject:self.otherSubject], - self.otherSubject]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"be identical to %@", self.otherSubject]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beIdenticalTo:(id)anObject { - self.otherSubject = anObject; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeKindOfClassMatcher.h b/Pods/Kiwi/Kiwi/KWBeKindOfClassMatcher.h deleted file mode 100755 index c5000e6..0000000 --- a/Pods/Kiwi/Kiwi/KWBeKindOfClassMatcher.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWBeKindOfClassMatcher : KWMatcher { -@private - Class targetClass; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beKindOfClass:(Class)aClass; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeKindOfClassMatcher.m b/Pods/Kiwi/Kiwi/KWBeKindOfClassMatcher.m deleted file mode 100755 index 194dc16..0000000 --- a/Pods/Kiwi/Kiwi/KWBeKindOfClassMatcher.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBeKindOfClassMatcher.h" -#import "KWFormatter.h" - -@interface KWBeKindOfClassMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, assign) Class targetClass; - -@end - -@implementation KWBeKindOfClassMatcher - -#pragma mark - -#pragma mark Properties - -@synthesize targetClass; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObject:@"beKindOfClass:"]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return [self.subject isKindOfClass:self.targetClass]; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be kind of %@", - NSStringFromClass(self.targetClass)]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"be kind of %@", NSStringFromClass(self.targetClass)]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beKindOfClass:(Class)aClass { - self.targetClass = aClass; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeMemberOfClassMatcher.h b/Pods/Kiwi/Kiwi/KWBeMemberOfClassMatcher.h deleted file mode 100755 index de8958a..0000000 --- a/Pods/Kiwi/Kiwi/KWBeMemberOfClassMatcher.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWBeMemberOfClassMatcher : KWMatcher { -@private - Class targetClass; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beMemberOfClass:(Class)aClass; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeMemberOfClassMatcher.m b/Pods/Kiwi/Kiwi/KWBeMemberOfClassMatcher.m deleted file mode 100755 index f7028a7..0000000 --- a/Pods/Kiwi/Kiwi/KWBeMemberOfClassMatcher.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBeMemberOfClassMatcher.h" -#import "KWFormatter.h" - -@interface KWBeMemberOfClassMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, assign) Class targetClass; - -@end - -@implementation KWBeMemberOfClassMatcher - -#pragma mark - -#pragma mark Properties - -@synthesize targetClass; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObject:@"beMemberOfClass:"]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return [self.subject isMemberOfClass:self.targetClass]; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be member of %@", - NSStringFromClass(self.targetClass)]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"be member of %@", self.targetClass]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beMemberOfClass:(Class)aClass { - self.targetClass = aClass; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeNilMatcher.h b/Pods/Kiwi/Kiwi/KWBeNilMatcher.h deleted file mode 100755 index 74114b8..0000000 --- a/Pods/Kiwi/Kiwi/KWBeNilMatcher.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// KWBeNilMatcher.h -// iOSFalconCore -// -// Created by Luke Redpath on 14/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import -#import "KWMatcher.h" - -@interface KWBeNilMatcher : KWMatcher { - -} -- (void)beNil; -@end diff --git a/Pods/Kiwi/Kiwi/KWBeNilMatcher.m b/Pods/Kiwi/Kiwi/KWBeNilMatcher.m deleted file mode 100755 index 1e1c64c..0000000 --- a/Pods/Kiwi/Kiwi/KWBeNilMatcher.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// KWBeNilMatcher.m -// iOSFalconCore -// -// Created by Luke Redpath on 14/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import "KWBeNilMatcher.h" -#import "KWFormatter.h" - -@implementation KWBeNilMatcher - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"beNil", nil]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return (BOOL)(self.subject == nil); -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be nil, got %@", - [KWFormatter formatObject:self.subject]]; -} - -- (NSString *)failureMessageForShouldNot { - return [NSString stringWithFormat:@"expected %@ not to be nil", - [KWFormatter formatObject:self.subject]]; -} - -- (void)beNil {} - -- (NSString *)description -{ - return @"be nil"; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeNonNilMatcher.h b/Pods/Kiwi/Kiwi/KWBeNonNilMatcher.h deleted file mode 100755 index 83a7ba0..0000000 --- a/Pods/Kiwi/Kiwi/KWBeNonNilMatcher.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// KWBeNotNilMatcher.h -// Kiwi -// -// Created by Luke Redpath on 17/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import -#import "KWMatcher.h" - -@interface KWBeNonNilMatcher : KWMatcher { - -} -- (void)beNonNil; -@end diff --git a/Pods/Kiwi/Kiwi/KWBeNonNilMatcher.m b/Pods/Kiwi/Kiwi/KWBeNonNilMatcher.m deleted file mode 100755 index 9c24846..0000000 --- a/Pods/Kiwi/Kiwi/KWBeNonNilMatcher.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// KWBeNotNilMatcher.m -// Kiwi -// -// Created by Luke Redpath on 17/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import "KWBeNonNilMatcher.h" -#import "KWFormatter.h" - -@implementation KWBeNonNilMatcher - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"beNonNil", nil]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return (BOOL)(self.subject != nil); -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be non-nil, got %@", - [KWFormatter formatObject:self.subject]]; -} - -- (NSString *)failureMessageForShouldNot { - return [NSString stringWithFormat:@"expected %@ not to be non-nil", - [KWFormatter formatObject:self.subject]]; -} - -- (NSString *)description -{ - return @"be non-nil"; -} - -- (void)beNonNil {} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeTrueMatcher.h b/Pods/Kiwi/Kiwi/KWBeTrueMatcher.h deleted file mode 100755 index aa589d5..0000000 --- a/Pods/Kiwi/Kiwi/KWBeTrueMatcher.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWBeTrueMatcher : KWMatcher { -@private - BOOL expectedValue; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beTrue; -- (void)beFalse; -- (void)beYes; -- (void)beNo; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeTrueMatcher.m b/Pods/Kiwi/Kiwi/KWBeTrueMatcher.m deleted file mode 100755 index d31d94e..0000000 --- a/Pods/Kiwi/Kiwi/KWBeTrueMatcher.m +++ /dev/null @@ -1,77 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBeTrueMatcher.h" - -@interface KWBeTrueMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite) BOOL expectedValue; - -@end - -@implementation KWBeTrueMatcher - -#pragma mark - -#pragma mark Properties - -@synthesize expectedValue; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"beTrue", @"beFalse", @"beYes", @"beNo", nil]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - if (![self.subject respondsToSelector:@selector(boolValue)]) - [NSException raise:@"KWMatcherException" format:@"subject does not respond to -boolValue"]; - - return [self.subject boolValue] == self.expectedValue; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be %@", - expectedValue ? @"true" : @"false"]; -} - -- (NSString *)description -{ - if (self.expectedValue == YES) { - return @"be true"; - } - return @"be false"; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beTrue { - self.expectedValue = YES; -} - -- (void)beFalse { - self.expectedValue = NO; -} - -- (void)beYes { - self.expectedValue = YES; -} - -- (void)beNo { - self.expectedValue = NO; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeWithinMatcher.h b/Pods/Kiwi/Kiwi/KWBeWithinMatcher.h deleted file mode 100755 index 7493c42..0000000 --- a/Pods/Kiwi/Kiwi/KWBeWithinMatcher.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWBeWithinMatcher : KWMatcher { -@private - id distance; - id otherValue; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beWithin:(id)aDistance of:(id)aValue; -- (void)equal:(double)aValue withDelta:(double)aDelta; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeZeroMatcher.h b/Pods/Kiwi/Kiwi/KWBeZeroMatcher.h deleted file mode 100755 index a2bae5e..0000000 --- a/Pods/Kiwi/Kiwi/KWBeZeroMatcher.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWBeZeroMatcher : KWMatcher - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beZero; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeZeroMatcher.m b/Pods/Kiwi/Kiwi/KWBeZeroMatcher.m deleted file mode 100755 index 7bbbd67..0000000 --- a/Pods/Kiwi/Kiwi/KWBeZeroMatcher.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBeZeroMatcher.h" -#import "KWFormatter.h" -#import "KWValue.h" - -@implementation KWBeZeroMatcher - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObject:@"beZero"]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - if (![self.subject respondsToSelector:@selector(boolValue)]) - [NSException raise:@"KWMatcherException" format:@"subject does not respond to -numberValue"]; - - return [[self.subject numberValue] isEqualToNumber:[NSNumber numberWithInt:0]]; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to be zero, got %@", - [KWFormatter formatObject:self.subject]]; -} - -- (NSString *)failureMessageForShouldNot { - return [NSString stringWithFormat:@"expected subject not to be zero"]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beZero { -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeforeAllNode.h b/Pods/Kiwi/Kiwi/KWBeforeAllNode.h deleted file mode 100755 index e1063fd..0000000 --- a/Pods/Kiwi/Kiwi/KWBeforeAllNode.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWBlockNode.h" -#import "KWExampleNode.h" - -@interface KWBeforeAllNode : KWBlockNode - -#pragma mark - -#pragma mark Initializing - -+ (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeforeAllNode.m b/Pods/Kiwi/Kiwi/KWBeforeAllNode.m deleted file mode 100755 index a09c333..0000000 --- a/Pods/Kiwi/Kiwi/KWBeforeAllNode.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBeforeAllNode.h" -#import "KWExampleNodeVisitor.h" - -@implementation KWBeforeAllNode - -#pragma mark - -#pragma mark Initializing - -+ (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - return [[[self alloc] initWithCallSite:aCallSite description:nil block:aBlock] autorelease]; -} - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor { - [aVisitor visitBeforeAllNode:self]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeforeEachNode.h b/Pods/Kiwi/Kiwi/KWBeforeEachNode.h deleted file mode 100755 index aaae98d..0000000 --- a/Pods/Kiwi/Kiwi/KWBeforeEachNode.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWBlockNode.h" -#import "KWExampleNode.h" - -@interface KWBeforeEachNode : KWBlockNode - -#pragma mark - -#pragma mark Initializing - -+ (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBeforeEachNode.m b/Pods/Kiwi/Kiwi/KWBeforeEachNode.m deleted file mode 100755 index c779255..0000000 --- a/Pods/Kiwi/Kiwi/KWBeforeEachNode.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBeforeEachNode.h" -#import "KWExampleNodeVisitor.h" - -@implementation KWBeforeEachNode - -#pragma mark - -#pragma mark Initializing - -+ (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - return [[[self alloc] initWithCallSite:aCallSite description:nil block:aBlock] autorelease]; -} - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor { - [aVisitor visitBeforeEachNode:self]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWBlock.h b/Pods/Kiwi/Kiwi/KWBlock.h deleted file mode 100755 index cf259ba..0000000 --- a/Pods/Kiwi/Kiwi/KWBlock.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -typedef void (^KWVoidBlock)(void); - -@interface KWBlock : NSObject { -@private - KWVoidBlock block; -} - -#pragma mark - -#pragma mark Initializing -- (id)initWithBlock:(KWVoidBlock)aBlock; - -+ (id)blockWithBlock:(KWVoidBlock)aBlock; - -#pragma mark - -#pragma mark Calling Blocks - -- (void)call; - -@end - -#pragma mark - -#pragma mark Creating Blocks - -KWBlock *theBlock(KWVoidBlock aBlock); -KWBlock *lambda(KWVoidBlock aBlock); diff --git a/Pods/Kiwi/Kiwi/KWBlock.m b/Pods/Kiwi/Kiwi/KWBlock.m deleted file mode 100755 index 82f91a7..0000000 --- a/Pods/Kiwi/Kiwi/KWBlock.m +++ /dev/null @@ -1,63 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBlock.h" - -@interface KWBlock() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly, assign) KWVoidBlock block; - -@end - -@implementation KWBlock - -#pragma mark - -#pragma mark Initializing - -- (id)initWithBlock:(KWVoidBlock)aBlock { - if ((self = [super init])) { - block = Block_copy(aBlock); - } - - return self; -} - -+ (id)blockWithBlock:(KWVoidBlock)aBlock { - return [[[self alloc] initWithBlock:aBlock] autorelease]; -} - -- (void)dealloc { - Block_release(block); - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize block; - -#pragma mark - -#pragma mark Calling Blocks - -- (void)call { - block(); -} - -@end - -#pragma mark - -#pragma mark Creating Blocks - -KWBlock *theBlock(KWVoidBlock aBlock) { - return lambda(aBlock); -} - -KWBlock *lambda(KWVoidBlock aBlock) { - return [KWBlock blockWithBlock:aBlock]; -} diff --git a/Pods/Kiwi/Kiwi/KWBlockNode.h b/Pods/Kiwi/Kiwi/KWBlockNode.h deleted file mode 100755 index 5dfaec9..0000000 --- a/Pods/Kiwi/Kiwi/KWBlockNode.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWBlock.h" - -@class KWCallSite; - -@interface KWBlockNode : NSObject { -@private - KWCallSite *callSite; - NSString *description; - KWVoidBlock block; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock; - -#pragma mark - -#pragma mark Getting Call Sites - -@property (nonatomic, readonly) KWCallSite *callSite; - -#pragma mark - -#pragma mark Getting Descriptions - -@property (nonatomic, copy) NSString *description; - -#pragma mark - -#pragma mark Getting Blocks - -@property (nonatomic, readonly) KWVoidBlock block; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBlockNode.m b/Pods/Kiwi/Kiwi/KWBlockNode.m deleted file mode 100755 index 3c7e8b7..0000000 --- a/Pods/Kiwi/Kiwi/KWBlockNode.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBlockNode.h" - -@implementation KWBlockNode - -@synthesize description = _description; - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock{ - if ((self = [super init])) { - callSite = [aCallSite retain]; - _description = [aDescription copy]; - - if (aBlock != nil) - block = Block_copy(aBlock); - } - - return self; -} - -- (void)dealloc { - [callSite release]; - [description release]; - - if (block != nil) - Block_release(block); - - [super dealloc]; -} - -#pragma mark - -#pragma mark Getting Call Sites - -@synthesize callSite; - -#pragma mark - -#pragma mark Accepting Visitors - -@synthesize block; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBlockRaiseMatcher.h b/Pods/Kiwi/Kiwi/KWBlockRaiseMatcher.h deleted file mode 100755 index 3750137..0000000 --- a/Pods/Kiwi/Kiwi/KWBlockRaiseMatcher.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWBlockRaiseMatcher : KWMatcher { -@private - NSException *exception; - NSException *actualException; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)raise; -- (void)raiseWithName:(NSString *)aName; -- (void)raiseWithReason:(NSString *)aReason; -- (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason; - -@end diff --git a/Pods/Kiwi/Kiwi/KWBlockRaiseMatcher.m b/Pods/Kiwi/Kiwi/KWBlockRaiseMatcher.m deleted file mode 100755 index 831cfe6..0000000 --- a/Pods/Kiwi/Kiwi/KWBlockRaiseMatcher.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWBlockRaiseMatcher.h" -#import "KWBlock.h" - -@interface KWBlockRaiseMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, retain) NSException *exception; -@property (nonatomic, readwrite, retain) NSException *actualException; - -@end - -@implementation KWBlockRaiseMatcher - -#pragma mark - -#pragma mark Initializing - -- (void)dealloc { - [exception release]; - [actualException release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize exception; -@synthesize actualException; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"raise", - @"raiseWithName:", - @"raiseWithReason:", - @"raiseWithName:reason:", nil]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - if (![self.subject isKindOfClass:[KWBlock class]]) - [NSException raise:@"KWMatcherException" format:@"subject must be a KWBlock"]; - - @try { - [self.subject call]; - } @catch (NSException *anException) { - self.actualException = anException; - - if ([self.exception name] != nil && ![[self.exception name] isEqualToString:[anException name]]) - return NO; - - if ([self.exception reason] != nil && ![[self.exception reason] isEqualToString:[anException reason]]) - return NO; - - return YES; - } - - return NO; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -+ (NSString *)exceptionPhraseWithException:(NSException *)anException { - if (anException == nil) - return @"nothing"; - - NSString *namePhrase = nil; - - if ([anException name] == nil) - namePhrase = @"exception"; - else - namePhrase = [anException name]; - - if ([anException reason] == nil) - return namePhrase; - - return [NSString stringWithFormat:@"%@ \"%@\"", namePhrase, [anException reason]]; -} - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected %@, but %@ raised", - [[self class] exceptionPhraseWithException:self.exception], - [[self class] exceptionPhraseWithException:self.actualException]]; -} - -- (NSString *)failureMessageForShouldNot { - return [NSString stringWithFormat:@"expected %@ not to be raised", - [[self class] exceptionPhraseWithException:self.actualException]]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)raise { - [self raiseWithName:nil reason:nil]; -} - -- (void)raiseWithName:(NSString *)aName { - [self raiseWithName:aName reason:nil]; -} - -- (void)raiseWithReason:(NSString *)aReason { - [self raiseWithName:nil reason:aReason]; -} - -- (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason { - self.exception = [NSException exceptionWithName:aName reason:aReason userInfo:nil]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"raise %@", [[self class] exceptionPhraseWithException:self.exception]]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWCallSite.h b/Pods/Kiwi/Kiwi/KWCallSite.h deleted file mode 100755 index 899eef2..0000000 --- a/Pods/Kiwi/Kiwi/KWCallSite.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface KWCallSite : NSObject { -@private - NSString *filename; - NSUInteger lineNumber; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber; - -+ (id)callSiteWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly, copy) NSString *filename; -@property (nonatomic, readonly) NSUInteger lineNumber; - -#pragma mark - -#pragma mark Identifying and Comparing - -- (BOOL)isEqualToCallSite:(KWCallSite *)aCallSite; - -@end diff --git a/Pods/Kiwi/Kiwi/KWCallSite.m b/Pods/Kiwi/Kiwi/KWCallSite.m deleted file mode 100755 index 7945826..0000000 --- a/Pods/Kiwi/Kiwi/KWCallSite.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWCallSite.h" - -@implementation KWCallSite - -#pragma mark - -#pragma mark Initializing - -- (id)initWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { - if ((self = [super init])) { - filename = [aFilename copy]; - lineNumber = aLineNumber; - } - - return self; -} - -+ (id)callSiteWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { - return [[[self alloc] initWithFilename:aFilename lineNumber:aLineNumber] autorelease]; -} - -- (void)dealloc { - [filename release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Accessing Call Site Properties - -@synthesize filename; -@synthesize lineNumber; - -#pragma mark - -#pragma mark Identifying and Comparing - -- (NSUInteger)hash { - return [[NSString stringWithFormat:@"%@%u", self.filename, self.lineNumber] hash]; -} - -- (BOOL)isEqual:(id)anObject { - if (![anObject isKindOfClass:[KWCallSite class]]) - return NO; - - return [self isEqualToCallSite:anObject]; -} - -- (BOOL)isEqualToCallSite:(KWCallSite *)aCallSite { - return [self.filename isEqualToString:aCallSite.filename] && (self.lineNumber == aCallSite.lineNumber); -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWConformToProtocolMatcher.h b/Pods/Kiwi/Kiwi/KWConformToProtocolMatcher.h deleted file mode 100755 index 66a8e19..0000000 --- a/Pods/Kiwi/Kiwi/KWConformToProtocolMatcher.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWConformToProtocolMatcher : KWMatcher { -@private - Protocol *protocol; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)conformToProtocol:(Protocol *)aProtocol; - -@end diff --git a/Pods/Kiwi/Kiwi/KWConformToProtocolMatcher.m b/Pods/Kiwi/Kiwi/KWConformToProtocolMatcher.m deleted file mode 100755 index c008c77..0000000 --- a/Pods/Kiwi/Kiwi/KWConformToProtocolMatcher.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWConformToProtocolMatcher.h" -#import "KWFormatter.h" - -@interface KWConformToProtocolMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, assign) Protocol *protocol; - -@end - -@implementation KWConformToProtocolMatcher - -#pragma mark - -#pragma mark Properties - -@synthesize protocol; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObject:@"conformToProtocol:"]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return [self.subject conformsToProtocol:self.protocol]; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to conform to %@ protocol", - NSStringFromProtocol(self.protocol)]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"conform to %@ protocol", NSStringFromProtocol(self.protocol)]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)conformToProtocol:(Protocol *)aProtocol { - self.protocol = aProtocol; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWContainMatcher.h b/Pods/Kiwi/Kiwi/KWContainMatcher.h deleted file mode 100755 index 90e8364..0000000 --- a/Pods/Kiwi/Kiwi/KWContainMatcher.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" -#import "KWMatchVerifier.h" - -@interface KWContainMatcher : KWMatcher { -@private - NSArray *objects; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)contain:(id)anObject; -- (void)containObjectsInArray:(NSArray *)anArray; - -@end - -@interface KWMatchVerifier(KWContainMatcherAdditions) - -#pragma mark - -#pragma mark Verifying - -- (void)containObjects:(id)firstObject, ... NS_REQUIRES_NIL_TERMINATION; - -@end diff --git a/Pods/Kiwi/Kiwi/KWContainMatcher.m b/Pods/Kiwi/Kiwi/KWContainMatcher.m deleted file mode 100755 index 2e63c88..0000000 --- a/Pods/Kiwi/Kiwi/KWContainMatcher.m +++ /dev/null @@ -1,110 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWContainMatcher.h" -#import "KWFormatter.h" -#import "KWHamrestMatchingAdditions.h" - -@interface KWContainMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, retain) id objects; - -@end - -@implementation KWContainMatcher - -#pragma mark - -#pragma mark Initializing - -- (void)dealloc { - [objects release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize objects; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"contain:", @"containObjectsInArray:", nil]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - if (![self.subject respondsToSelector:@selector(containsObjectEqualToOrMatching:)]) - [NSException raise:@"KWMatcherException" format:@"subject does not respond to -containsObjectEqualToOrMatching:"]; - - for (id object in self.objects) { - if (![self.subject containsObjectEqualToOrMatching:object]) - return NO; - } - - return YES; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)objectsPhrase { - if ([self.objects count] == 1) - return [KWFormatter formatObject:[self.objects objectAtIndex:0]]; - - return [NSString stringWithFormat:@"all of %@", [KWFormatter formatObject:self.objects]]; -} - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to contain %@", [self objectsPhrase]]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"contain %@", [self objectsPhrase]]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)contain:(id)anObject { - self.objects = [NSArray arrayWithObject:anObject]; -} - -- (void)containObjectsInArray:(NSArray *)anArray { - self.objects = anArray; -} - -@end - -@implementation KWMatchVerifier(KWContainMatcherAdditions) - -#pragma mark - -#pragma mark Verifying - -- (void)containObjects:(id)firstObject, ... { - NSMutableArray *objects = [NSMutableArray array]; - - va_list argumentList; - va_start(argumentList, firstObject); - id object = firstObject; - - while (object != nil) { - [objects addObject:object]; - object = va_arg(argumentList, id); - } - - va_end(argumentList); - [(id)self containObjectsInArray:objects]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWContextNode.h b/Pods/Kiwi/Kiwi/KWContextNode.h deleted file mode 100755 index 77a8087..0000000 --- a/Pods/Kiwi/Kiwi/KWContextNode.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWExampleNode.h" - -@class KWAfterAllNode; -@class KWAfterEachNode; -@class KWBeforeAllNode; -@class KWBeforeEachNode; -@class KWCallSite; -@class KWItNode; -@class KWPendingNode; -@class KWRegisterMatchersNode; - -@interface KWContextNode : NSObject { -@private - KWCallSite *callSite; - NSString *description; - KWRegisterMatchersNode *registerMatchersNode; - KWBeforeAllNode *beforeAllNode; - KWAfterAllNode *afterAllNode; - KWBeforeEachNode *beforeEachNode; - KWAfterEachNode *afterEachNode; - NSMutableArray *nodes; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; - -+ (id)contextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; - -#pragma mark - -#pragma mark Getting Call Sites - -@property (nonatomic, readonly) KWCallSite *callSite; - -#pragma mark - -#pragma mark Getting Descriptions - -@property (nonatomic, readonly) NSString *description; - -#pragma mark - -#pragma mark Managing Nodes - -@property (nonatomic, readwrite, retain) KWRegisterMatchersNode *registerMatchersNode; -@property (nonatomic, readwrite, retain) KWBeforeAllNode *beforeAllNode; -@property (nonatomic, readwrite, retain) KWAfterAllNode *afterAllNode; -@property (nonatomic, readwrite, retain) KWBeforeEachNode *beforeEachNode; -@property (nonatomic, readwrite, retain) KWAfterEachNode *afterEachNode; -@property (nonatomic, readonly) NSArray *nodes; - -- (void)addContextNode:(KWContextNode *)aNode; -- (void)addItNode:(KWItNode *)aNode; -- (void)addPendingNode:(KWPendingNode *)aNode; - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor; - -@end diff --git a/Pods/Kiwi/Kiwi/KWContextNode.m b/Pods/Kiwi/Kiwi/KWContextNode.m deleted file mode 100755 index 9ee03a3..0000000 --- a/Pods/Kiwi/Kiwi/KWContextNode.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWContextNode.h" -#import "KWExampleNodeVisitor.h" - -@implementation KWContextNode - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { - if ((self = [super init])) { - callSite = [aCallSite retain]; - description = [aDescription copy]; - nodes = [[NSMutableArray alloc] init]; - } - - return self; -} - -+ (id)contextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { - return [[[self alloc] initWithCallSite:aCallSite description:aDescription] autorelease]; -} - -- (void)dealloc { - [callSite release]; - [description release]; - [registerMatchersNode release]; - [beforeAllNode release]; - [afterAllNode release]; - [beforeEachNode release]; - [afterEachNode release]; - [nodes release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Getting Call Sites - -@synthesize callSite; - -#pragma mark - -#pragma mark Getting Descriptions - -@synthesize description; - -#pragma mark - -#pragma mark Managing Nodes - -@synthesize registerMatchersNode; -@synthesize beforeAllNode; -@synthesize afterAllNode; -@synthesize beforeEachNode; -@synthesize afterEachNode; -@synthesize nodes; - -- (void)addContextNode:(KWContextNode *)aNode { - [(NSMutableArray *)self.nodes addObject:aNode]; -} - -- (void)setRegisterMatchersNode:(KWRegisterMatchersNode *)aNode { - if (self.registerMatchersNode != nil) - [NSException raise:@"KWContextNodeException" format:@"a register matchers node already exists"]; - - registerMatchersNode = [aNode retain]; -} - -- (void)setBeforeEachNode:(KWBeforeEachNode *)aNode { - if (self.beforeEachNode != nil) - [NSException raise:@"KWContextNodeException" format:@"a before each node already exists"]; - - beforeEachNode = [aNode retain]; -} - -- (void)setAfterEachNode:(KWAfterEachNode *)aNode { - if (self.afterEachNode != nil) - [NSException raise:@"KWContextNodeException" format:@"an after each node already exists"]; - - afterEachNode = [aNode retain]; -} - -- (void)addItNode:(KWItNode *)aNode { - [(NSMutableArray *)self.nodes addObject:aNode]; -} - -- (void)addPendingNode:(KWPendingNode *)aNode { - [(NSMutableArray *)self.nodes addObject:aNode]; -} - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor { - [aVisitor visitContextNode:self]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWDeviceInfo.h b/Pods/Kiwi/Kiwi/KWDeviceInfo.h deleted file mode 100755 index e3a4a6a..0000000 --- a/Pods/Kiwi/Kiwi/KWDeviceInfo.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface KWDeviceInfo : NSObject - -#pragma mark - -#pragma mark Getting the Device Type - -+ (BOOL)isSimulator; -+ (BOOL)isPhysical; - -@end diff --git a/Pods/Kiwi/Kiwi/KWDeviceInfo.m b/Pods/Kiwi/Kiwi/KWDeviceInfo.m deleted file mode 100755 index d69f862..0000000 --- a/Pods/Kiwi/Kiwi/KWDeviceInfo.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWDeviceInfo.h" - -#if TARGET_IPHONE_SIMULATOR - -#import - -#endif // #if TARGET_IPHONE_SIMULATOR - -@implementation KWDeviceInfo - -#pragma mark - -#pragma mark Getting the Device Type - -+ (BOOL)isSimulator { -#if TARGET_IPHONE_SIMULATOR - NSString *model = [[UIDevice currentDevice] model]; - return [model hasSuffix:@" Simulator"]; -#else - return NO; -#endif // #if TARGET_IPHONE_SIMULATOR -} - -+ (BOOL)isPhysical { - return ![self isSimulator]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWEqualMatcher.h b/Pods/Kiwi/Kiwi/KWEqualMatcher.h deleted file mode 100755 index 30f28e9..0000000 --- a/Pods/Kiwi/Kiwi/KWEqualMatcher.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWEqualMatcher : KWMatcher { -@private - id otherSubject; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)equal:(id)anObject; - -@end diff --git a/Pods/Kiwi/Kiwi/KWEqualMatcher.m b/Pods/Kiwi/Kiwi/KWEqualMatcher.m deleted file mode 100755 index 8ed0f32..0000000 --- a/Pods/Kiwi/Kiwi/KWEqualMatcher.m +++ /dev/null @@ -1,79 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWEqualMatcher.h" -#import "KWFormatter.h" -#import "KWValue.h" - -@interface KWEqualMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, retain) id otherSubject; - -@end - -@implementation KWEqualMatcher - -#pragma mark - -#pragma mark Initializing - -- (void)dealloc { - [otherSubject release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize otherSubject; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"equal:", nil]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - /** handle this as a special case; KWValue supports NSNumber equality but not vice-versa **/ - if ([self.subject isKindOfClass:[NSNumber class]] && [self.otherSubject isKindOfClass:[KWValue class]]) { - return [self.otherSubject isEqual:self.subject]; - } - return [self.subject isEqual:self.otherSubject]; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to equal %@, got %@", - [KWFormatter formatObject:self.otherSubject], - [KWFormatter formatObject:self.subject]]; -} - -- (NSString *)failureMessageForShouldNot { - return [NSString stringWithFormat:@"expected subject not to equal %@", - [KWFormatter formatObject:self.otherSubject]]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"equal %@", [KWFormatter formatObject:self.otherSubject]]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)equal:(id)anObject { - self.otherSubject = anObject; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWExampleGroup.h b/Pods/Kiwi/Kiwi/KWExampleGroup.h deleted file mode 100755 index d5b4751..0000000 --- a/Pods/Kiwi/Kiwi/KWExampleGroup.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWBlock.h" -#import "KWVerifying.h" -#import "KWExpectationType.h" -#import "KWExampleNode.h" -#import "KWExampleNodeVisitor.h" -#import "KWReporting.h" -#import "KWExampleGroupDelegate.h" - -@class KWCallSite; -@class KWContextNode; -@class KWSpec; -@class KWMatcherFactory; - -@interface KWExampleGroup : NSObject - -- (id)initWithExampleNode:(id)node contextNodeStack:(NSArray *)stack; - -#pragma mark - Adding Verifiers - -- (id)addVerifier:(id)aVerifier; -- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; -- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; -- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout; - -#pragma mark - Running - -- (void)runWithDelegate:(id)delegate; - -#pragma mark - -#pragma mark Anonymous It Node Descriptions - -- (NSString *)generateDescriptionForAnonymousItNode; - -@end - -#pragma mark - -#pragma mark Building Example Groups - -void describe(NSString *aDescription, KWVoidBlock aBlock); -void context(NSString *aDescription, KWVoidBlock aBlock); -void registerMatchers(NSString *aNamespacePrefix); -void beforeAll(KWVoidBlock aBlock); -void afterAll(KWVoidBlock aBlock); -void beforeEach(KWVoidBlock aBlock); -void afterEach(KWVoidBlock aBlock); -void it(NSString *aDescription, KWVoidBlock aBlock); -void specify(KWVoidBlock aBlock); -void pending(NSString *aDescription, KWVoidBlock ignoredBlock); - -void describeWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock); -void contextWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock); -void registerMatchersWithCallSite(KWCallSite *aCallSite, NSString *aNamespacePrefix); -void beforeAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock); -void afterAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock); -void beforeEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock); -void afterEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock); -void itWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock); -void pendingWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock ignoredBlock); - -#define xit(...) pending(__VA_ARGS__) diff --git a/Pods/Kiwi/Kiwi/KWExampleGroup.m b/Pods/Kiwi/Kiwi/KWExampleGroup.m deleted file mode 100755 index a54bc59..0000000 --- a/Pods/Kiwi/Kiwi/KWExampleGroup.m +++ /dev/null @@ -1,360 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWExampleGroup.h" -#import "KWExampleGroupBuilder.h" -#import "KWContextNode.h" -#import "KWMatcherFactory.h" -#import "KWExistVerifier.h" -#import "KWMatchVerifier.h" -#import "KWAsyncVerifier.h" -#import "KWFailure.h" -#import "KWContextNode.h" -#import "KWBeforeEachNode.h" -#import "KWBeforeAllNode.h" -#import "KWItNode.h" -#import "KWAfterEachNode.h" -#import "KWAfterAllNode.h" -#import "KWPendingNode.h" -#import "KWRegisterMatchersNode.h" -#import "KWWorkarounds.h" -#import "KWIntercept.h" -#import "KWExampleNode.h" - - -@interface KWExampleGroup () - -@property (nonatomic, readonly) NSMutableArray *verifiers; -@property (nonatomic, readonly) KWMatcherFactory *matcherFactory; -@property (nonatomic, readonly) NSMutableArray *exampleNodeStack; -@property (nonatomic, assign) id delegate; - -@end - -@implementation KWExampleGroup { - NSArray *contextNodeStack; - id exampleNode; - BOOL passed; -} - -@synthesize matcherFactory; -@synthesize verifiers; -@synthesize exampleNodeStack; -@synthesize delegate = _delegate; - -- (id)initWithExampleNode:(id)node contextNodeStack:(NSArray *)stack; -{ - if ((self = [super init])) { - contextNodeStack = [stack copy]; - exampleNode = [node retain]; - matcherFactory = [[KWMatcherFactory alloc] init]; - verifiers = [[NSMutableArray alloc] init]; - exampleNodeStack = [[NSMutableArray alloc] init]; - passed = YES; - } - return self; -} - -- (void)dealloc -{ - [contextNodeStack release]; - [exampleNode release]; - [exampleNodeStack release]; - [matcherFactory release]; - [verifiers release]; - [super dealloc]; -} - -#pragma mark - Adding Verifiers - -- (id)addVerifier:(id)aVerifier { - if (![self.verifiers containsObject:aVerifier]) - [self.verifiers addObject:aVerifier]; - - return aVerifier; -} - -- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { - id verifier = [KWExistVerifier existVerifierWithExpectationType:anExpectationType callSite:aCallSite reporter:self]; - [self addVerifier:verifier]; - return verifier; -} - -- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { - id verifier = [KWMatchVerifier matchVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self]; - [self addVerifier:verifier]; - return verifier; -} - -- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout { - id verifier = [KWAsyncVerifier asyncVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self probeTimeout:timeout]; - [self addVerifier:verifier]; - return verifier; -} - -#pragma mark - Running examples - -- (void)runWithDelegate:(id)delegate; -{ - self.delegate = delegate; - [self.matcherFactory registerMatcherClassesWithNamespacePrefix:@"KW"]; - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setCurrentExampleGroup:self]; - [[contextNodeStack objectAtIndex:0] acceptExampleNodeVisitor:self]; -} - -#pragma mark - Reporting failure - -- (NSString *)descriptionForExampleContext { - NSMutableString *description = [NSMutableString string]; - - for (id node in self.exampleNodeStack) { - NSString *nodeDescription = [node description]; - - if (nodeDescription != nil) - [description appendFormat:@"%@ ", nodeDescription]; - } - - // Remove trailing space - if ([description length] > 0) - [description deleteCharactersInRange:NSMakeRange([description length] - 1, 1)]; - - return description; -} - -- (KWFailure *)outputReadyFailureWithFailure:(KWFailure *)aFailure { - NSString *annotatedFailureMessage = [NSString stringWithFormat:@"'%@' [FAILED], %@", - [self descriptionForExampleContext], - aFailure.message]; - -#if TARGET_IPHONE_SIMULATOR - // \uff1a is the unicode for a fill width colon, as opposed to a regular - // colon character (':'). This escape is performed so that Xcode doesn't - // truncate the error output in the build results window, which is running - // build time specs. - annotatedFailureMessage = [annotatedFailureMessage stringByReplacingOccurrencesOfString:@":" withString:@"\uff1a"]; -#endif // #if TARGET_IPHONE_SIMULATOR - - return [KWFailure failureWithCallSite:aFailure.callSite message:annotatedFailureMessage]; -} - -- (void)reportFailure:(KWFailure *)failure -{ - passed = NO; - [self.delegate exampleGroup:self didFailWithFailure:[self outputReadyFailureWithFailure:failure]]; -} - -#pragma mark - Visiting Nodes - -- (void)visitContextNode:(KWContextNode *)aNode { - [self.exampleNodeStack addObject:aNode]; - - @try { - [aNode.registerMatchersNode acceptExampleNodeVisitor:self]; - [aNode.beforeAllNode acceptExampleNodeVisitor:self]; - - for (id node in aNode.nodes) - [node acceptExampleNodeVisitor:self]; - - [aNode.afterAllNode acceptExampleNodeVisitor:self]; - } @catch (NSException *exception) { - KWFailure *failure = [KWFailure failureWithCallSite:aNode.callSite format:@"%@ \"%@\" raised", - [exception name], - [exception reason]]; - - [self reportFailure:failure]; - } - - [self.exampleNodeStack removeLastObject]; -} - -- (void)visitRegisterMatchersNode:(KWRegisterMatchersNode *)aNode { - [self.matcherFactory registerMatcherClassesWithNamespacePrefix:aNode.namespacePrefix]; -} - -- (void)visitBeforeAllNode:(KWBeforeAllNode *)aNode { - if (aNode.block == nil) - return; - - aNode.block(); -} - -- (void)visitAfterAllNode:(KWAfterAllNode *)aNode { - if (aNode.block == nil) - return; - - aNode.block(); -} - -- (void)visitBeforeEachNode:(KWBeforeEachNode *)aNode { - if (aNode.block == nil) - return; - - aNode.block(); -} - -- (void)visitAfterEachNode:(KWAfterEachNode *)aNode { - if (aNode.block == nil) - return; - - aNode.block(); -} - -- (void)visitItNode:(KWItNode *)aNode { - if (aNode.block == nil || aNode != exampleNode) - return; - - aNode.exampleGroup = self; - - @try { - for (KWContextNode *contextNode in self.exampleNodeStack) { - if (contextNode.beforeEachNode.block != nil) - contextNode.beforeEachNode.block(); - } - - // Add it node to the stack - [self.exampleNodeStack addObject:aNode]; - - @try { - aNode.block(); - -#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - NSException *invocationException = KWGetAndClearExceptionFromAcrossInvocationBoundary(); - [invocationException raise]; -#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - - // Finish verifying and clear - for (id verifier in self.verifiers) { - [verifier exampleWillEnd]; - } - - } @catch (NSException *exception) { - KWFailure *failure = [KWFailure failureWithCallSite:aNode.callSite format:@"%@ \"%@\" raised", - [exception name], - [exception reason]]; - [self reportFailure:failure]; - } - - // Remove it node from the stack - [self.exampleNodeStack removeLastObject]; - - for (KWContextNode *contextNode in self.exampleNodeStack) { - if (contextNode.afterEachNode.block != nil) - contextNode.afterEachNode.block(); - } - } @catch (NSException *exception) { - KWFailure *failure = [KWFailure failureWithCallSite:aNode.callSite format:@"%@ \"%@\" raised", - [exception name], - [exception reason]]; - [self reportFailure:failure]; - } - - if (passed) { - NSLog(@"+ '%@ %@' [PASSED]", [self descriptionForExampleContext], [exampleNode description]); - } - - // Always clear stubs and spies at the end of it blocks - KWClearAllMessageSpies(); - KWClearAllObjectStubs(); -} - -- (void)visitPendingNode:(KWPendingNode *)aNode { - if (aNode != exampleNode) - return; - - [self.exampleNodeStack addObject:aNode]; - NSLog(@"+ '%@' [PENDING]", [self descriptionForExampleContext]); - [self.exampleNodeStack removeLastObject]; -} - -- (NSString *)generateDescriptionForAnonymousItNode -{ - // anonymous specify blocks should only have one verifier, but use the first in any case - return [[self.verifiers objectAtIndex:0] descriptionForAnonymousItNode]; -} - -@end - -#pragma mark - -#pragma mark Building Example Groups - -void describe(NSString *aDescription, KWVoidBlock aBlock) { - describeWithCallSite(nil, aDescription, aBlock); -} - -void context(NSString *aDescription, KWVoidBlock aBlock) { - contextWithCallSite(nil, aDescription, aBlock); -} - -void registerMatchers(NSString *aNamespacePrefix) { - registerMatchersWithCallSite(nil, aNamespacePrefix); -} - -void beforeAll(KWVoidBlock aBlock) { - beforeAllWithCallSite(nil, aBlock); -} - -void afterAll(KWVoidBlock aBlock) { - afterAllWithCallSite(nil, aBlock); -} - -void beforeEach(KWVoidBlock aBlock) { - beforeEachWithCallSite(nil, aBlock); -} - -void afterEach(KWVoidBlock aBlock) { - afterEachWithCallSite(nil, aBlock); -} - -void it(NSString *aDescription, KWVoidBlock aBlock) { - itWithCallSite(nil, aDescription, aBlock); -} - -void specify(KWVoidBlock aBlock) -{ - itWithCallSite(nil, nil, aBlock); -} - -void pending(NSString *aDescription, KWVoidBlock ignoredBlock) { - pendingWithCallSite(nil, aDescription, ignoredBlock); -} - -void describeWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock) { - contextWithCallSite(aCallSite, aDescription, aBlock); -} - -void contextWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] pushContextNodeWithCallSite:aCallSite description:aDescription]; - aBlock(); - [[KWExampleGroupBuilder sharedExampleGroupBuilder] popContextNode]; -} - -void registerMatchersWithCallSite(KWCallSite *aCallSite, NSString *aNamespacePrefix) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setRegisterMatchersNodeWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; -} - -void beforeAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setBeforeAllNodeWithCallSite:aCallSite block:aBlock]; -} - -void afterAllWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setAfterAllNodeWithCallSite:aCallSite block:aBlock]; -} - -void beforeEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setBeforeEachNodeWithCallSite:aCallSite block:aBlock]; -} - -void afterEachWithCallSite(KWCallSite *aCallSite, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] setAfterEachNodeWithCallSite:aCallSite block:aBlock]; -} - -void itWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock aBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] addItNodeWithCallSite:aCallSite description:aDescription block:aBlock]; -} - -void pendingWithCallSite(KWCallSite *aCallSite, NSString *aDescription, KWVoidBlock ignoredBlock) { - [[KWExampleGroupBuilder sharedExampleGroupBuilder] addPendingNodeWithCallSite:aCallSite description:aDescription]; -} diff --git a/Pods/Kiwi/Kiwi/KWExampleGroupBuilder.h b/Pods/Kiwi/Kiwi/KWExampleGroupBuilder.h deleted file mode 100755 index 431d43e..0000000 --- a/Pods/Kiwi/Kiwi/KWExampleGroupBuilder.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWBlock.h" - -@class KWCallSite; -@class KWExampleGroup; - -@interface KWExampleGroupBuilder : NSObject { -@private - NSMutableArray *contextNodeStack; -} - -#pragma mark - -#pragma mark Initializing - -+ (id)sharedExampleGroupBuilder; - -#pragma mark - -#pragma mark Building Example Groups - -@property (nonatomic, readonly) BOOL isBuildingExampleGroup; -@property (nonatomic, retain, readonly) NSMutableArray *exampleGroups; -@property (nonatomic, retain) KWExampleGroup *currentExampleGroup; - -- (NSArray *)buildExampleGroups:(void (^)(void))buildingBlock; -- (KWExampleGroup *)currentExampleGroup; - -- (void)pushContextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; -- (void)popContextNode; -- (void)setRegisterMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; -- (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; -- (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; -- (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; -- (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock; -- (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock; -- (void)addPendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; - -@end diff --git a/Pods/Kiwi/Kiwi/KWExampleGroupBuilder.m b/Pods/Kiwi/Kiwi/KWExampleGroupBuilder.m deleted file mode 100755 index c6a01f1..0000000 --- a/Pods/Kiwi/Kiwi/KWExampleGroupBuilder.m +++ /dev/null @@ -1,194 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWExampleGroupBuilder.h" -#import "KWExampleGroup.h" -#import "KWAfterAllNode.h" -#import "KWAfterEachNode.h" -#import "KWBeforeAllNode.h" -#import "KWBeforeEachNode.h" -#import "KWContextNode.h" -#import "KWItNode.h" -#import "KWPendingNode.h" -#import "KWRegisterMatchersNode.h" - -@interface KWExampleGroupBuilder() - -#pragma mark - -#pragma mark Building Example Groups - -@property (nonatomic, retain, readwrite) NSMutableArray *exampleGroups; -@property (nonatomic, readonly) NSMutableArray *contextNodeStack; - -@end - -@implementation KWExampleGroupBuilder - -@synthesize exampleGroups; -@synthesize currentExampleGroup; - -#pragma mark - -#pragma mark Initializing - -static KWExampleGroupBuilder *sharedExampleGroupBuilder = nil; - -- (id)init { - if ((self = [super init])) { - contextNodeStack = [[NSMutableArray alloc] init]; - } - - return self; -} - -- (void)dealloc { - [exampleGroups release]; - [contextNodeStack release]; - [super dealloc]; -} - -+ (id)sharedExampleGroupBuilder { - if (sharedExampleGroupBuilder == nil) { - sharedExampleGroupBuilder = [[super allocWithZone:nil] init]; - } - - return sharedExampleGroupBuilder; -} - -+ (id)allocWithZone:(NSZone *)zone { - return [[self sharedExampleGroupBuilder] retain]; -} - -- (id)copyWithZone:(NSZone *)zone { - return self; -} - -- (id)retain { - return self; -} - -- (NSUInteger)retainCount { - return NSUIntegerMax; -} - -- (oneway void)release { -} - -- (id)autorelease { - return self; -} - -#pragma mark - -#pragma mark Building Example Groups - -@synthesize contextNodeStack; - -- (BOOL)isBuildingExampleGroup { - return [self.contextNodeStack count] > 0; -} - -- (NSArray *)buildExampleGroups:(void (^)(void))buildingBlock -{ - self.exampleGroups = [NSMutableArray array]; - - KWContextNode *rootNode = [KWContextNode contextNodeWithCallSite:nil description:nil]; - - [self.contextNodeStack addObject:rootNode]; - buildingBlock(); - [self.contextNodeStack removeAllObjects]; - - NSArray *_exampleGroups = [self.exampleGroups copy]; - - self.exampleGroups = nil; - - return [_exampleGroups autorelease]; -} - -- (void)pushContextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { - KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWContextNode *node = [KWContextNode contextNodeWithCallSite:aCallSite description:aDescription]; - [contextNode addContextNode:node]; - [self.contextNodeStack addObject:node]; -} - -- (void)popContextNode { - if ([self.contextNodeStack count] == 1) - [NSException raise:@"KWExampleGroupBuilderException" format:@"there is no open context to pop"]; - - [self.contextNodeStack removeLastObject]; -} - -- (void)setRegisterMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { - if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; - - KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWRegisterMatchersNode *registerMatchersNode = [KWRegisterMatchersNode registerMatchersNodeWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; - [contextNode setRegisterMatchersNode:registerMatchersNode]; -} - -- (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; - - KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWBeforeAllNode *beforeAllNode = [KWBeforeAllNode beforeAllNodeWithCallSite:aCallSite block:aBlock]; - [contextNode setBeforeAllNode:beforeAllNode]; -} - -- (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; - - KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWAfterAllNode *afterAllNode = [KWAfterAllNode afterAllNodeWithCallSite:aCallSite block:aBlock]; - [contextNode setAfterAllNode:afterAllNode]; -} - -- (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; - - KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWBeforeEachNode *beforeEachNode = [KWBeforeEachNode beforeEachNodeWithCallSite:aCallSite block:aBlock]; - [contextNode setBeforeEachNode:beforeEachNode]; -} - -- (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(KWVoidBlock)aBlock { - if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; - - KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWAfterEachNode *afterEachNode = [KWAfterEachNode afterEachNodeWithCallSite:aCallSite block:aBlock]; - [contextNode setAfterEachNode:afterEachNode]; -} - -- (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock { - if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; - - KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWItNode* itNode = [KWItNode itNodeWithCallSite:aCallSite description:aDescription block:aBlock]; - [contextNode addItNode:itNode]; - - KWExampleGroup *exampleGroup = [[KWExampleGroup alloc] initWithExampleNode:itNode contextNodeStack:self.contextNodeStack]; - [self.exampleGroups addObject:exampleGroup]; - [exampleGroup release]; -} - -- (void)addPendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { - if ([self.contextNodeStack count] == 0) - [NSException raise:@"KWExampleGroupBuilderException" format:@"an example group has not been started"]; - - KWContextNode *contextNode = [self.contextNodeStack lastObject]; - KWPendingNode *pendingNode = [KWPendingNode pendingNodeWithCallSite:aCallSite description:aDescription]; - [contextNode addPendingNode:pendingNode]; - - KWExampleGroup *exampleGroup = [[KWExampleGroup alloc] initWithExampleNode:pendingNode contextNodeStack:self.contextNodeStack]; - [self.exampleGroups addObject:exampleGroup]; - [exampleGroup release]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWExampleGroupDelegate.h b/Pods/Kiwi/Kiwi/KWExampleGroupDelegate.h deleted file mode 100755 index 40cf928..0000000 --- a/Pods/Kiwi/Kiwi/KWExampleGroupDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// KWExampleGroupDelegate.h -// Kiwi -// -// Created by Luke Redpath on 08/09/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import - -@class KWExampleGroup; -@class KWFailure; - -@protocol KWExampleGroupDelegate - -- (void)exampleGroup:(KWExampleGroup *)exampleGroup didFailWithFailure:(KWFailure *)failure; - -@end diff --git a/Pods/Kiwi/Kiwi/KWExampleNode.h b/Pods/Kiwi/Kiwi/KWExampleNode.h deleted file mode 100755 index ae470b0..0000000 --- a/Pods/Kiwi/Kiwi/KWExampleNode.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@protocol KWExampleNodeVisitor; - -@protocol KWExampleNode - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor; - -@end diff --git a/Pods/Kiwi/Kiwi/KWExampleNodeVisitor.h b/Pods/Kiwi/Kiwi/KWExampleNodeVisitor.h deleted file mode 100755 index 6cb2a0a..0000000 --- a/Pods/Kiwi/Kiwi/KWExampleNodeVisitor.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@class KWAfterAllNode; -@class KWAfterEachNode; -@class KWBeforeAllNode; -@class KWBeforeEachNode; -@class KWContextNode; -@class KWItNode; -@class KWPendingNode; -@class KWRegisterMatchersNode; - -@protocol KWExampleNodeVisitor - -#pragma mark - -#pragma mark Visiting Nodes - -- (void)visitContextNode:(KWContextNode *)aNode; -- (void)visitRegisterMatchersNode:(KWRegisterMatchersNode *)aNode; -- (void)visitBeforeAllNode:(KWBeforeAllNode *)aNode; -- (void)visitAfterAllNode:(KWAfterAllNode *)aNode; -- (void)visitBeforeEachNode:(KWBeforeEachNode *)aNode; -- (void)visitAfterEachNode:(KWAfterEachNode *)aNode; -- (void)visitItNode:(KWItNode *)aNode; -- (void)visitPendingNode:(KWPendingNode *)aNode; - -@end diff --git a/Pods/Kiwi/Kiwi/KWExistVerifier.h b/Pods/Kiwi/Kiwi/KWExistVerifier.h deleted file mode 100755 index 3233138..0000000 --- a/Pods/Kiwi/Kiwi/KWExistVerifier.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWExpectationType.h" -#import "KWVerifying.h" - -@class KWCallSite; - -@protocol KWReporting; - -@interface KWExistVerifier : NSObject { -@private - KWExpectationType expectationType; - KWCallSite *callSite; - id reporter; - id subject; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter; - -+ (id)existVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, retain) id subject; - -@end diff --git a/Pods/Kiwi/Kiwi/KWExistVerifier.m b/Pods/Kiwi/Kiwi/KWExistVerifier.m deleted file mode 100755 index f767ed5..0000000 --- a/Pods/Kiwi/Kiwi/KWExistVerifier.m +++ /dev/null @@ -1,78 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWExistVerifier.h" -#import "KWFailure.h" -#import "KWFormatter.h" -#import "KWReporting.h" - -@interface KWExistVerifier() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) KWExpectationType expectationType; -@property (nonatomic, readonly) KWCallSite *callSite; -@property (nonatomic, readonly) id reporter; - -@end - -@implementation KWExistVerifier - -#pragma mark - -#pragma mark Initializing - -- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter { - if ((self = [super init])) { - expectationType = anExpectationType; - callSite = [aCallSite retain]; - reporter = aReporter; - } - - return self; -} - -+ (id)existVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter { - return [[[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite reporter:aReporter] autorelease]; -} - -- (void)dealloc { - [callSite release]; - [subject release]; - [super dealloc]; -} - -- (NSString *)descriptionForAnonymousItNode -{ - if (self.expectationType == KWExpectationTypeShould) { - return @"should exist"; - } - return @"should not exist"; -} - -#pragma mark - -#pragma mark Properties - -@synthesize expectationType; -@synthesize callSite; -@synthesize reporter; -@synthesize subject; - -#pragma mark - -#pragma mark Ending Examples - -- (void)exampleWillEnd { - if (self.expectationType == KWExpectationTypeShould && self.subject == nil) { - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:@"expected subject not to be nil"]; - [self.reporter reportFailure:failure]; - } else if (self.expectationType == KWExpectationTypeShouldNot && self.subject != nil) { - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite format:@"expected subject to be nil, got %@", - [KWFormatter formatObject:self.subject]]; - [self.reporter reportFailure:failure]; - } -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWFailure.h b/Pods/Kiwi/Kiwi/KWFailure.h deleted file mode 100755 index c5db155..0000000 --- a/Pods/Kiwi/Kiwi/KWFailure.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@class KWCallSite; - -@interface KWFailure : NSObject { -@private - KWCallSite *callSite; - NSString *message; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage; -- (id)initWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ...; - -+ (id)failureWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage; -+ (id)failureWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ...; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) NSString *message; -@property (nonatomic, readonly) KWCallSite *callSite; - -#pragma mark - -#pragma mark Getting Exception Representations - -- (NSException *)exceptionValue; - -@end diff --git a/Pods/Kiwi/Kiwi/KWFailure.m b/Pods/Kiwi/Kiwi/KWFailure.m deleted file mode 100755 index b0c9ebb..0000000 --- a/Pods/Kiwi/Kiwi/KWFailure.m +++ /dev/null @@ -1,65 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWFailure.h" -#import -#import "KWCallSite.h" - -@implementation KWFailure - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { - if ((self = [super init])) { - callSite = [aCallSite retain]; - message = [aMessage copy]; - } - - return self; -} - -- (id)initWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { - va_list argumentList; - va_start(argumentList, format); - NSString *aMessage = [[[NSString alloc] initWithFormat:format arguments:argumentList] autorelease]; - return [self initWithCallSite:aCallSite message:aMessage]; -} - -+ (id)failureWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { - return [[[self alloc] initWithCallSite:aCallSite message:aMessage] autorelease]; -} - -+ (id)failureWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { - va_list argumentList; - va_start(argumentList, format); - NSString *message = [[[NSString alloc] initWithFormat:format arguments:argumentList] autorelease]; - return [self failureWithCallSite:aCallSite message:message]; -} - -- (void)dealloc { - [callSite release]; - [message release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize message; -@synthesize callSite; - -#pragma mark - -#pragma mark Getting Exception Representations - -- (NSException *)exceptionValue { - NSNumber *lineNumber = [NSNumber numberWithUnsignedInt:self.callSite.lineNumber]; - NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:self.callSite.filename, SenTestFilenameKey, - lineNumber, SenTestLineNumberKey, nil]; - return [NSException exceptionWithName:@"KWFailureException" reason:message userInfo:userInfo]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWFormatter.h b/Pods/Kiwi/Kiwi/KWFormatter.h deleted file mode 100755 index a2e4ac6..0000000 --- a/Pods/Kiwi/Kiwi/KWFormatter.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface KWFormatter : NSObject - -#pragma mark - -#pragma mark Getting Descriptions - -+ (NSString *)formatObject:(id)anObject; - -@end diff --git a/Pods/Kiwi/Kiwi/KWFormatter.m b/Pods/Kiwi/Kiwi/KWFormatter.m deleted file mode 100755 index 5b4111f..0000000 --- a/Pods/Kiwi/Kiwi/KWFormatter.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWFormatter.h" - -@implementation KWFormatter - -#pragma mark - -#pragma mark Getting Descriptions - -+ (NSString *)formatObject:(id)anObject { - if ([anObject isKindOfClass:[NSString class]]) - return [NSString stringWithFormat:@"\"%@\"", anObject]; - - if ([anObject conformsToProtocol:@protocol(NSFastEnumeration)]) { - NSMutableString *description = [[[NSMutableString alloc] initWithString:@"("] autorelease]; - NSUInteger index = 0; - - for (id object in anObject) { - if (index == 0) - [description appendFormat:@"%@", [self formatObject:object]]; - else - [description appendFormat:@", %@", [self formatObject:object]]; - - ++index; - } - - [description appendString:@")"]; - return description; - } - - return [anObject description]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWFutureObject.h b/Pods/Kiwi/Kiwi/KWFutureObject.h deleted file mode 100755 index a209991..0000000 --- a/Pods/Kiwi/Kiwi/KWFutureObject.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// KWFutureObject.h -// iOSFalconCore -// -// Created by Luke Redpath on 13/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import - -typedef id (^KWFutureObjectBlock)(void); - -@interface KWFutureObject : NSObject { - KWFutureObjectBlock block; -} -+ (id)objectWithObjectPointer:(id *)pointer; -+ (id)futureObjectWithBlock:(KWFutureObjectBlock)block; -- (id)initWithBlock:(KWFutureObjectBlock)aBlock; -- (id)object; -@end diff --git a/Pods/Kiwi/Kiwi/KWFutureObject.m b/Pods/Kiwi/Kiwi/KWFutureObject.m deleted file mode 100755 index 712cc36..0000000 --- a/Pods/Kiwi/Kiwi/KWFutureObject.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// KWFutureObject.m -// iOSFalconCore -// -// Created by Luke Redpath on 13/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import "KWFutureObject.h" - - -@implementation KWFutureObject - -+ (id)objectWithObjectPointer:(id *)pointer; -{ - return [self futureObjectWithBlock:^{ return *pointer; }]; -} - -+ (id)futureObjectWithBlock:(KWFutureObjectBlock)block; -{ - return [[[self alloc] initWithBlock:block] autorelease]; -} - -- (id)initWithBlock:(KWFutureObjectBlock)aBlock; -{ - if ((self = [super init])) { - block = [aBlock copy]; - } - return self; -} - -- (id)object; -{ - return block(); -} - -- (void)dealloc -{ - [block release]; - [super dealloc]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWHCMatcher.h b/Pods/Kiwi/Kiwi/KWHCMatcher.h deleted file mode 100755 index 1912611..0000000 --- a/Pods/Kiwi/Kiwi/KWHCMatcher.h +++ /dev/null @@ -1,12 +0,0 @@ -/** - * This is a minimal version of HCMatcher from the Hamcrest library, purely - * to support Hamcrest integration with Kiwi. - * - * The Hamcrest project can be found here: http://code.google.com/p/hamcrest/ - */ - -#import - -@protocol HCMatcher -- (BOOL)matches:(id)item; -@end diff --git a/Pods/Kiwi/Kiwi/KWHamcrestMatcher.h b/Pods/Kiwi/Kiwi/KWHamcrestMatcher.h deleted file mode 100755 index 6cff308..0000000 --- a/Pods/Kiwi/Kiwi/KWHamcrestMatcher.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// KWHamcrestMatcher.h -// Kiwi -// -// Created by Luke Redpath on 24/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import -#import "KWMatcher.h" - -@protocol HCMatcher; - -@interface KWHamcrestMatcher : KWMatcher { - id hamcrestMatcher; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)match:(id)aMatcher; - -@end diff --git a/Pods/Kiwi/Kiwi/KWHamcrestMatcher.m b/Pods/Kiwi/Kiwi/KWHamcrestMatcher.m deleted file mode 100755 index 138380b..0000000 --- a/Pods/Kiwi/Kiwi/KWHamcrestMatcher.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// KWHamcrestMatcher.m -// Kiwi -// -// Created by Luke Redpath on 24/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import "KWHamcrestMatcher.h" -#import "KWHCMatcher.h" - -@interface KWHamcrestMatcher () - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, retain) id matcher; - -@end - -@implementation KWHamcrestMatcher - -@synthesize matcher; - -- (void)dealloc -{ - [matcher release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return [self.matcher matches:self.subject]; -} - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to match %@", self.matcher]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"match %@", [self.matcher description]]; -} - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"match:", nil]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)match:(id)aMatcher; -{ - self.matcher = aMatcher; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWHamrestMatchingAdditions.h b/Pods/Kiwi/Kiwi/KWHamrestMatchingAdditions.h deleted file mode 100755 index c78ba58..0000000 --- a/Pods/Kiwi/Kiwi/KWHamrestMatchingAdditions.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// NSObject+KiwiAdditions.h -// Kiwi -// -// Created by Luke Redpath on 24/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import - -@interface NSObject (KiwiHamcrestAdditions) - -- (BOOL)isEqualOrMatches:(id)object; - -@end - -@protocol HCMatcher; - -@interface NSArray (KiwiHamcrestAdditions) - -- (BOOL)containsObjectEqualToOrMatching:(id)object; -- (BOOL)containsObjectMatching:(id)matcher; - -@end - diff --git a/Pods/Kiwi/Kiwi/KWHamrestMatchingAdditions.m b/Pods/Kiwi/Kiwi/KWHamrestMatchingAdditions.m deleted file mode 100755 index 340d4fd..0000000 --- a/Pods/Kiwi/Kiwi/KWHamrestMatchingAdditions.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// NSObject+KiwiAdditions.m -// Kiwi -// -// Created by Luke Redpath on 24/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import "KWHamrestMatchingAdditions.h" -#import "KWHCMatcher.h" - -@implementation NSObject (KiwiHamcrestAdditions) - -- (BOOL)isEqualOrMatches:(id)object -{ - if ([self conformsToProtocol:@protocol(HCMatcher)]) { - return [(id)self matches:object]; - } - return [self isEqual:object]; -} - -@end - -@implementation NSArray (KiwiHamcrestAdditions) - -- (BOOL)containsObjectEqualToOrMatching:(id)object -{ - if ([object conformsToProtocol:@protocol(HCMatcher)]) { - return [self containsObjectMatching:object]; - } - return [self containsObject:object]; -} - -- (BOOL)containsObjectMatching:(id)matcher -{ - NSIndexSet *indexSet = [self indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { - BOOL matches = [matcher matches:obj]; - if (matches) { - *stop = YES; - } - return matches; - }]; - - return (indexSet.count > 0); -} - -@end - - diff --git a/Pods/Kiwi/Kiwi/KWHaveMatcher.h b/Pods/Kiwi/Kiwi/KWHaveMatcher.h deleted file mode 100755 index ba3a9a5..0000000 --- a/Pods/Kiwi/Kiwi/KWHaveMatcher.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWCountType.h" -#import "KWMatcher.h" -#import "KWMatchVerifier.h" - -@interface KWHaveMatcher : KWMatcher { -@private - KWCountType countType; - NSUInteger count; - NSInvocation *invocation; - NSUInteger actualCount; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)haveCountOf:(NSUInteger)aCount; -- (void)haveCountOfAtLeast:(NSUInteger)aCount; -- (void)haveCountOfAtMost:(NSUInteger)aCount; -- (void)have:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; -- (void)haveAtLeast:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; -- (void)haveAtMost:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; - -@end - -@protocol KWContainmentCountMatcherTerminals - -#pragma mark - -#pragma mark Terminals - -- (id)objects; -- (id)items; -- (id)elements; - -@end - -@interface KWMatchVerifier(KWHaveMatcherAdditions) - -#pragma mark - -#pragma mark Verifying - -#pragma mark Invocation Capturing Methods - -- (id)have:(NSUInteger)aCount; -- (id)haveAtLeast:(NSUInteger)aCount; -- (id)haveAtMost:(NSUInteger)aCount; - -@end diff --git a/Pods/Kiwi/Kiwi/KWHaveMatcher.m b/Pods/Kiwi/Kiwi/KWHaveMatcher.m deleted file mode 100755 index 31bafaf..0000000 --- a/Pods/Kiwi/Kiwi/KWHaveMatcher.m +++ /dev/null @@ -1,262 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWHaveMatcher.h" -#import "KWFormatter.h" -#import "KWInvocationCapturer.h" -#import "KWObjCUtilities.h" -#import "KWStringUtilities.h" - -static NSString * const MatchVerifierKey = @"MatchVerifierKey"; -static NSString * const CountTypeKey = @"CountTypeKey"; -static NSString * const CountKey = @"CountKey"; - -@interface KWHaveMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite) KWCountType countType; -@property (nonatomic, readwrite) NSUInteger count; -@property (nonatomic, readwrite, retain) NSInvocation *invocation; -@property (nonatomic, readwrite) NSUInteger actualCount; - -@end - -@implementation KWHaveMatcher - -#pragma mark - -#pragma mark Initializing - -- (void)dealloc { - [invocation release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize countType; -@synthesize count; -@synthesize invocation; -@synthesize actualCount; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"haveCountOf:", - @"haveCountOfAtLeast:", - @"haveCountOfAtMost:", - @"have:itemsForInvocation:", - @"haveAtLeast:itemsForInvocation:", - @"haveAtMost:itemsForInvocation:", nil]; -} - -#pragma mark - -#pragma mark Matching - -- (id)targetObject { - if (self.invocation == nil) - return self.subject; - - SEL selector = [self.invocation selector]; - - if ([self.subject respondsToSelector:selector]) { - NSMethodSignature *signature = [self.subject methodSignatureForSelector:selector]; - - if (!KWObjCTypeIsObject([signature methodReturnType])) - [NSException raise:@"KWMatcherEception" format:@"a valid collection was not specified"]; - - id object = nil; - [self.invocation invokeWithTarget:self.subject]; - [self.invocation getReturnValue:&object]; - return object; - } else if (KWSelectorParameterCount(selector) == 0) { - return self.subject; - } else { - return nil; - } -} - -- (BOOL)evaluate { - id targetObject = [self targetObject]; - - if ([targetObject respondsToSelector:@selector(count)]) - self.actualCount = [targetObject count]; - else if ([targetObject respondsToSelector:@selector(length)]) - self.actualCount = [targetObject length]; - else - self.actualCount = 0; - - switch (self.countType) { - case KWCountTypeExact: - return self.actualCount == self.count; - case KWCountTypeAtLeast: - return self.actualCount >= self.count; - case KWCountTypeAtMost: - return self.actualCount <= self.count; - } - - assert(0 && "should never reach here"); - return NO; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)verbPhrase { - switch (self.countType) { - case KWCountTypeExact: - return @"have"; - case KWCountTypeAtLeast: - return @"have at least"; - case KWCountTypeAtMost: - return @"have at most"; - } - - assert(0 && "should never reach here"); - return nil; -} - -- (NSString *)itemPhrase { - if (self.invocation == nil) - return @"items"; - else - return NSStringFromSelector([self.invocation selector]); -} - -- (NSString *)actualCountPhrase { - if (self.actualCount == 1) - return @"1 item"; - else - return [NSString stringWithFormat:@"%u items", self.actualCount]; -} - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to %@ %u %@, got %@", - [self verbPhrase], - self.count, - [self itemPhrase], - [self actualCountPhrase]]; -} - -- (NSString *)failureMessageForShouldNot { - return [NSString stringWithFormat:@"expected subject not to %@ %u %@", - [self verbPhrase], - self.count, - [self itemPhrase]]; -} - -#pragma mark - -#pragma mark Description - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %u %@", [self verbPhrase], self.count, [self itemPhrase]]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)haveCountOf:(NSUInteger)aCount { - self.count = aCount; - self.countType = KWCountTypeExact; -} - -- (void)haveCountOfAtLeast:(NSUInteger)aCount { - self.count = aCount; - self.countType = KWCountTypeAtLeast; -} - -- (void)haveCountOfAtMost:(NSUInteger)aCount { - self.count = aCount; - self.countType = KWCountTypeAtMost; -} - -- (void)have:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation { - self.count = aCount; - self.countType = KWCountTypeExact; - self.invocation = anInvocation; -} - -- (void)haveAtLeast:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation { - self.count = aCount; - self.countType = KWCountTypeAtLeast; - self.invocation = anInvocation; -} - -- (void)haveAtMost:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation { - self.count = aCount; - self.countType = KWCountTypeAtMost; - self.invocation = anInvocation; -} - -#pragma mark - -#pragma mark Capturing Invocations - -+ (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector { - KWMatchVerifier *verifier = [anInvocationCapturer.userInfo objectForKey:MatchVerifierKey]; - - if ([verifier.subject respondsToSelector:aSelector]) - return [verifier.subject methodSignatureForSelector:aSelector]; - - // Arbitrary selectors are allowed as expectation expression terminals when - // the subject itself is a collection, so return a dummy method signature. - NSString *encoding = KWEncodingForVoidMethod(); - return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; -} - -+ (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation { - NSDictionary *userInfo = anInvocationCapturer.userInfo; - id verifier = [userInfo objectForKey:MatchVerifierKey]; - KWCountType countType = [[userInfo objectForKey:CountTypeKey] unsignedIntValue]; - KWCountType count = [[userInfo objectForKey:CountKey] unsignedIntValue]; - - switch (countType) { - case KWCountTypeExact: - [verifier have:count itemsForInvocation:anInvocation]; - break; - case KWCountTypeAtLeast: - [verifier haveAtLeast:count itemsForInvocation:anInvocation]; - break; - case KWCountTypeAtMost: - [verifier haveAtMost:count itemsForInvocation:anInvocation]; - break; - } -} - -@end - -@implementation KWMatchVerifier(KWHaveMatcherAdditions) - -#pragma mark - -#pragma mark Verifying - -#pragma mark Invocation Capturing Methods - -- (NSDictionary *)userInfoForHaveMatcherWithCountType:(KWCountType)aCountType count:(NSUInteger)aCount { - return [NSDictionary dictionaryWithObjectsAndKeys:self, MatchVerifierKey, - [NSNumber numberWithUnsignedInt:aCountType], CountTypeKey, - [NSNumber numberWithUnsignedInt:aCount], CountKey, nil]; -} - -- (id)have:(NSUInteger)aCount { - NSDictionary *userInfo = [self userInfoForHaveMatcherWithCountType:KWCountTypeExact count:aCount]; - return [KWInvocationCapturer invocationCapturerWithDelegate:[KWHaveMatcher class] userInfo:userInfo]; -} - -- (id)haveAtLeast:(NSUInteger)aCount { - NSDictionary *userInfo = [self userInfoForHaveMatcherWithCountType:KWCountTypeAtLeast count:aCount]; - return [KWInvocationCapturer invocationCapturerWithDelegate:[KWHaveMatcher class] userInfo:userInfo]; -} - -- (id)haveAtMost:(NSUInteger)aCount { - NSDictionary *userInfo = [self userInfoForHaveMatcherWithCountType:KWCountTypeAtMost count:aCount]; - return [KWInvocationCapturer invocationCapturerWithDelegate:[KWHaveMatcher class] userInfo:userInfo]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWHaveValueMatcher.h b/Pods/Kiwi/Kiwi/KWHaveValueMatcher.h deleted file mode 100755 index a6d5a43..0000000 --- a/Pods/Kiwi/Kiwi/KWHaveValueMatcher.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// KWHaveValueMatcher.h -// Kiwi -// -// Created by Luke Redpath on 24/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import -#import "KWMatcher.h" - -@interface KWHaveValueMatcher : KWMatcher { -@private - - NSString *expectedKey; - NSString *expectedKeyPath; - id expectedValue; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)haveValue:(id)value forKey:(NSString *)key; -- (void)haveValue:(id)value forKeyPath:(NSString *)keyPath; -- (void)haveValueForKey:(NSString *)key; -- (void)haveValueForKeyPath:(NSString *)keyPath; - -@end diff --git a/Pods/Kiwi/Kiwi/KWHaveValueMatcher.m b/Pods/Kiwi/Kiwi/KWHaveValueMatcher.m deleted file mode 100755 index 046af75..0000000 --- a/Pods/Kiwi/Kiwi/KWHaveValueMatcher.m +++ /dev/null @@ -1,141 +0,0 @@ -// -// KWHaveValueMatcher.m -// Kiwi -// -// Created by Luke Redpath on 24/01/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import "KWHaveValueMatcher.h" -#import "KWHamrestMatchingAdditions.h" -#import "KWHCMatcher.h" -#import "KWFormatter.h" - -@interface KWHaveValueMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, retain) NSString *expectedKey; -@property (nonatomic, retain) NSString *expectedKeyPath; -@property (nonatomic, retain) id expectedValue; - -- (id)subjectValue; - -@end - -@implementation KWHaveValueMatcher - -@synthesize expectedKey, expectedKeyPath, expectedValue; - -- (void)dealloc -{ - [expectedKeyPath release]; - [expectedKey release]; - [expectedValue release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObjects:@"haveValue:forKey:", - @"haveValueForKey:", - @"haveValue:forKeyPath:", - @"haveValueForKeyPath:", nil]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - BOOL matched = NO; - - @try { - id value = [self subjectValue]; - - if (value) { - matched = YES; - - if (self.expectedValue) { - matched = [self.expectedValue isEqualOrMatches:value]; - } - } - } - @catch (NSException * e) {} // catch KVO non-existent key errors - - return matched; -} - -- (NSString *)failureMessageForShould { - if (self.expectedValue == nil) { - return [NSString stringWithFormat:@"expected subject to have a value for key %@", self.expectedKey]; - } - return [NSString stringWithFormat:@"expected subject to have value %@ for key %@", self.expectedValue, self.expectedKey]; -} - -- (id)subjectValue; -{ - id value = nil; - - if (self.expectedKey) { - value = [self.subject valueForKey:self.expectedKey]; - } else - if (self.expectedKeyPath) { - value = [self.subject valueForKeyPath:self.expectedKeyPath]; - } - return value; -} - -- (NSString *)description -{ - NSString *keyDescription = nil; - - if (self.expectedKey) { - keyDescription = [NSString stringWithFormat:@"key %@", [KWFormatter formatObject:self.expectedKey]]; - } - else { - keyDescription = [NSString stringWithFormat:@"keypath %@", [KWFormatter formatObject:self.expectedKeyPath]]; - } - - NSString *valueDescription = nil; - - if (self.expectedValue) { - valueDescription = [NSString stringWithFormat:@"value %@", [KWFormatter formatObject:self.expectedValue]]; - } - else { - valueDescription = @"value"; - } - - return [NSString stringWithFormat:@"have %@ for %@", valueDescription, keyDescription]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)haveValue:(id)value forKey:(NSString *)key; -{ - self.expectedKey = key; - self.expectedValue = value; -} - -- (void)haveValue:(id)value forKeyPath:(NSString *)key; -{ - self.expectedKeyPath = key; - self.expectedValue = value; -} - -- (void)haveValueForKey:(NSString *)key; -{ - self.expectedKey = key; - self.expectedValue = nil; -} - -- (void)haveValueForKeyPath:(NSString *)keyPath; -{ - self.expectedKeyPath = keyPath; - self.expectedValue = nil; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWInequalityMatcher.h b/Pods/Kiwi/Kiwi/KWInequalityMatcher.h deleted file mode 100755 index 7c03d89..0000000 --- a/Pods/Kiwi/Kiwi/KWInequalityMatcher.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -enum { - KWInequalityTypeLessThan, - KWInequalityTypeLessThanOrEqualTo, - KWInequalityTypeGreaterThan, - KWInequalityTypeGreaterThanOrEqualTo -}; - -typedef NSUInteger KWInequalityType; - -@interface KWInequalityMatcher : KWMatcher { -@private - KWInequalityType inequalityType; - id otherValue; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)beLessThan:(id)aValue; -- (void)beLessThanOrEqualTo:(id)aValue; -- (void)beGreaterThan:(id)aValue; -- (void)beGreaterThanOrEqualTo:(id)aValue; - -@end diff --git a/Pods/Kiwi/Kiwi/KWIntercept.h b/Pods/Kiwi/Kiwi/KWIntercept.h deleted file mode 100755 index e43be5b..0000000 --- a/Pods/Kiwi/Kiwi/KWIntercept.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import - -@class KWMessagePattern; -@class KWStub; - -#pragma mark - -#pragma mark Getting Forwarding Implementations - -IMP KWRegularForwardingImplementation(void); -IMP KWStretForwardingImplementation(void); -IMP KWForwardingImplementationForMethodEncoding(const char* encoding); - -#pragma mark - -#pragma mark Getting Intercept Class Information - -BOOL KWObjectIsClass(id anObject); -BOOL KWClassIsInterceptClass(Class aClass); -NSString *KWInterceptClassNameForClass(Class aClass); -Class KWInterceptClassForCanonicalClass(Class canonicalClass); -Class KWRealClassForClass(Class aClass); - -#pragma mark - -#pragma mark Enabling Intercepting - -Class KWSetupObjectInterceptSupport(id anObject); -void KWSetupMethodInterceptSupport(Class interceptClass, SEL aSelector); - -#pragma mark - -#pragma mark Managing Objects Stubs - -void KWAssociateObjectStub(id anObject, KWStub *aStub); -void KWClearObjectStubs(id anObject); -void KWClearAllObjectStubs(void); - -#pragma mark - -#pragma mark Managing Message Spies - -void KWAssociateMessageSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern); -void KWClearObjectSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern); -void KWClearAllMessageSpies(void); diff --git a/Pods/Kiwi/Kiwi/KWIntercept.m b/Pods/Kiwi/Kiwi/KWIntercept.m deleted file mode 100755 index a587247..0000000 --- a/Pods/Kiwi/Kiwi/KWIntercept.m +++ /dev/null @@ -1,289 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWIntercept.h" -#import "KWMessagePattern.h" -#import "KWMessageSpying.h" -#import "KWStub.h" - -static const char * const KWInterceptClassSuffix = "_KWIntercept"; -static NSMutableDictionary *KWObjectStubs = nil; -static NSMutableDictionary *KWMessageSpies = nil; - -#pragma mark - -#pragma mark Intercept Enabled Method Implementations - -void KWInterceptedForwardInvocation(id anObject, SEL aSelector, NSInvocation* anInvocation); -void KWInterceptedDealloc(id anObject, SEL aSelector); -Class KWInterceptedClass(id anObject, SEL aSelector); -Class KWInterceptedSuperclass(id anObject, SEL aSelector); - -#pragma mark - -#pragma mark Getting Forwarding Implementations - -IMP KWRegularForwardingImplementation(void) { - return class_getMethodImplementation([NSObject class], @selector(KWNonExistantSelector)); -} - -IMP KWStretForwardingImplementation(void) { - return class_getMethodImplementation_stret([NSObject class], @selector(KWNonExistantSelector)); -} - -IMP KWForwardingImplementationForMethodEncoding(const char* encoding) { -#if TARGET_CPU_ARM - const NSUInteger stretLengthThreshold = 4; -#elif TARGET_CPU_X86 - const NSUInteger stretLengthThreshold = 8; -#else - // TODO: This just makes an assumption right now. Expand to support all - // official architectures correctly. - const NSUInteger stretLengthThreshold = 8; -#endif // #if TARGET_CPU_ARM - - NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:encoding]; - - if (*[signature methodReturnType] == '{' && [signature methodReturnLength] > stretLengthThreshold) { - NSLog(@"Warning: The Objective-C runtime appears to have bugs when forwarding messages with certain struct layouts as return types, so if a crash occurs this could be the culprit"); - return KWStretForwardingImplementation(); - } else { - return KWRegularForwardingImplementation(); - } -} - -#pragma mark - -#pragma mark Getting Intercept Class Information - -BOOL KWObjectIsClass(id anObject) { - return class_isMetaClass(object_getClass(anObject)); -} - -BOOL KWClassIsInterceptClass(Class aClass) { - const char *name = class_getName(aClass); - char *result = strstr(name, KWInterceptClassSuffix); - return result != nil; -} - -NSString *KWInterceptClassNameForClass(Class aClass) { - const char *className = class_getName(aClass); - return [NSString stringWithFormat:@"%s%s", className, KWInterceptClassSuffix]; -} - -Class KWInterceptClassForCanonicalClass(Class canonicalClass) { - NSString *interceptClassName = KWInterceptClassNameForClass(canonicalClass); - Class interceptClass = NSClassFromString(interceptClassName); - - if (interceptClass != nil) - return interceptClass; - - interceptClass = objc_allocateClassPair(canonicalClass, [interceptClassName UTF8String], 0); - objc_registerClassPair(interceptClass); - - class_addMethod(interceptClass, @selector(forwardInvocation:), (IMP)KWInterceptedForwardInvocation, "v@:@"); - class_addMethod(interceptClass, @selector(dealloc), (IMP)KWInterceptedDealloc, "v@:"); - class_addMethod(interceptClass, @selector(class), (IMP)KWInterceptedClass, "#@:"); - class_addMethod(interceptClass, @selector(superclass), (IMP)KWInterceptedSuperclass, "#@:"); - - Class interceptMetaClass = object_getClass(interceptClass); - class_addMethod(interceptMetaClass, @selector(forwardInvocation:), (IMP)KWInterceptedForwardInvocation, "v@:@"); - - return interceptClass; -} - -Class KWRealClassForClass(Class aClass) { - if (KWClassIsInterceptClass(aClass)) - return [aClass superclass]; - - return aClass; -} - -#pragma mark - -#pragma mark Enabling Intercepting - -static BOOL IsTollFreeBridged(Class class, id obj) -{ - // this is a naive check, but good enough for the purposes of failing fast - return [NSStringFromClass(class) hasPrefix:@"NSCF"]; -} - -// Canonical class is the non-intercept, non-metaclass, class for an object. -// -// (e.g. [Animal class] would be canonical, not -// object_getClass([Animal class]), if the Animal class has not been touched -// by the intercept mechanism. - -Class KWSetupObjectInterceptSupport(id anObject) { - Class objectClass = object_getClass(anObject); - - if (IsTollFreeBridged(objectClass, anObject)) { - [NSException raise:@"KWTollFreeBridgingInterceptException" format:@"Attempted to stub object of class %@. Kiwi does not support setting expectation or stubbing methods on toll-free bridged objects.", NSStringFromClass(objectClass)]; - } - - if (KWClassIsInterceptClass(objectClass)) - return objectClass; - - BOOL objectIsClass = KWObjectIsClass(anObject); - Class canonicalClass = objectIsClass ? anObject : objectClass; - Class canonicalInterceptClass = KWInterceptClassForCanonicalClass(canonicalClass); - Class interceptClass = objectIsClass ? object_getClass(canonicalInterceptClass) : canonicalInterceptClass; - - object_setClass(anObject, interceptClass); - - return interceptClass; -} - -void KWSetupMethodInterceptSupport(Class interceptClass, SEL aSelector) { - BOOL isMetaClass = class_isMetaClass(interceptClass); - Method method = isMetaClass ? class_getClassMethod(interceptClass, aSelector) - : class_getInstanceMethod(interceptClass, aSelector); - - if (method == nil) { - [NSException raise:NSInvalidArgumentException format:@"cannot setup intercept support for -%@ because there is no such method exists", - NSStringFromSelector(aSelector)]; - } - - const char *encoding = method_getTypeEncoding(method); - IMP forwardingImplementation = KWForwardingImplementationForMethodEncoding(encoding); - class_addMethod(interceptClass, aSelector, forwardingImplementation, encoding); -} - -#pragma mark - -#pragma mark Intercept Enabled Method Implementations - -void KWInterceptedForwardInvocation(id anObject, SEL aSelector, NSInvocation* anInvocation) { - NSValue *key = [NSValue valueWithNonretainedObject:anObject]; - NSMutableDictionary *spyArrayDictionary = [KWMessageSpies objectForKey:key]; - - for (KWMessagePattern *messagePattern in spyArrayDictionary) { - if ([messagePattern matchesInvocation:anInvocation]) { - NSArray *spies = [spyArrayDictionary objectForKey:messagePattern]; - - for (NSValue *spyWrapper in spies) { - id spy = [spyWrapper nonretainedObjectValue]; - [spy object:anObject didReceiveInvocation:anInvocation]; - } - } - } - - NSMutableArray *stubs = [KWObjectStubs objectForKey:key]; - - for (KWStub *stub in stubs) { - if ([stub processInvocation:anInvocation]) - return; - } - - Class interceptClass = object_getClass(anObject); - Class originalClass = class_getSuperclass(interceptClass); - anObject->isa = originalClass; - [anInvocation invoke]; - anObject->isa = interceptClass; -} - -void KWInterceptedDealloc(id anObject, SEL aSelector) { - NSValue *key = [NSValue valueWithNonretainedObject:anObject]; - [KWMessageSpies removeObjectForKey:key]; - [KWObjectStubs removeObjectForKey:key]; - - Class interceptClass = object_getClass(anObject); - Class originalClass = class_getSuperclass(interceptClass); - anObject->isa = originalClass; - [anObject dealloc]; -} - -Class KWInterceptedClass(id anObject, SEL aSelector) { - Class interceptClass = object_getClass(anObject); - Class originalClass = class_getSuperclass(interceptClass); - return originalClass; -} - -Class KWInterceptedSuperclass(id anObject, SEL aSelector) { - Class interceptClass = object_getClass(anObject); - Class originalClass = class_getSuperclass(interceptClass); - Class originalSuperclass = class_getSuperclass(originalClass); - return originalSuperclass; -} - -#pragma mark - -#pragma mark Managing Objects Stubs - -void KWAssociateObjectStub(id anObject, KWStub *aStub) { - if (KWObjectStubs == nil) - KWObjectStubs = [[NSMutableDictionary alloc] init]; - - NSValue *key = [NSValue valueWithNonretainedObject:anObject]; - NSMutableArray *stubs = [KWObjectStubs objectForKey:key]; - - if (stubs == nil) { - stubs = [[NSMutableArray alloc] init]; - [KWObjectStubs setObject:stubs forKey:key]; - [stubs release]; - } - - NSUInteger stubCount = [stubs count]; - - for (int i = 0; i < stubCount; ++i) { - KWStub *existingStub = [stubs objectAtIndex:i]; - - if ([aStub.messagePattern isEqualToMessagePattern:existingStub.messagePattern]) { - [stubs removeObjectAtIndex:i]; - break; - } - } - - [stubs addObject:aStub]; -} - -void KWClearObjectStubs(id anObject) { - NSValue *key = [NSValue valueWithNonretainedObject:anObject]; - [KWObjectStubs removeObjectForKey:key]; -} - -void KWClearAllObjectStubs(void) { - [KWObjectStubs removeAllObjects]; -} - -#pragma mark - -#pragma mark Managing Message Spies - -void KWAssociateMessageSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern) { - if (KWMessageSpies == nil) - KWMessageSpies = [[NSMutableDictionary alloc] init]; - - NSValue *key = [NSValue valueWithNonretainedObject:anObject]; - NSMutableDictionary *spies = [KWMessageSpies objectForKey:key]; - - if (spies == nil) { - spies = [[NSMutableDictionary alloc] init]; - [KWMessageSpies setObject:spies forKey:key]; - [spies release]; - } - - NSMutableArray *messagePatternSpies = [spies objectForKey:aMessagePattern]; - - if (messagePatternSpies == nil) { - messagePatternSpies = [[NSMutableArray alloc] init]; - [spies setObject:messagePatternSpies forKey:aMessagePattern]; - [messagePatternSpies release]; - } - - NSValue *spyWrapper = [NSValue valueWithNonretainedObject:aSpy]; - - if ([messagePatternSpies containsObject:spyWrapper]) - return; - - [messagePatternSpies addObject:spyWrapper]; -} - -void KWClearObjectSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern) { - NSValue *key = [NSValue valueWithNonretainedObject:anObject]; - NSMutableDictionary *spyArrayDictionary = [KWMessageSpies objectForKey:key]; - NSMutableArray *spies = [spyArrayDictionary objectForKey:aMessagePattern]; - NSValue *spyWrapper = [NSValue valueWithNonretainedObject:aSpy]; - [spies removeObject:spyWrapper]; -} - -void KWClearAllMessageSpies(void) { - [KWMessageSpies removeAllObjects]; -} diff --git a/Pods/Kiwi/Kiwi/KWInvocationCapturer.h b/Pods/Kiwi/Kiwi/KWInvocationCapturer.h deleted file mode 100755 index 79c1a5e..0000000 --- a/Pods/Kiwi/Kiwi/KWInvocationCapturer.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@protocol KWInvocationCapturerDelegate; - -@interface KWInvocationCapturer : NSProxy { -@private - id delegate; - NSDictionary *userInfo; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithDelegate:(id)aDelegate; -- (id)initWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo; - -+ (id)invocationCapturerWithDelegate:(id)aDelegate; -+ (id)invocationCapturerWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) id delegate; -@property (nonatomic, readonly) NSDictionary *userInfo; - -@end - -@protocol KWInvocationCapturerDelegate - -#pragma mark - -#pragma mark Capturing Invocations - -- (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector; -- (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation; - -@end diff --git a/Pods/Kiwi/Kiwi/KWItNode.h b/Pods/Kiwi/Kiwi/KWItNode.h deleted file mode 100755 index 08fe20b..0000000 --- a/Pods/Kiwi/Kiwi/KWItNode.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWBlockNode.h" -#import "KWExampleNode.h" - -@class KWPendingNode; -@class KWExampleGroup; - -@interface KWItNode : KWBlockNode - -@property (nonatomic, assign) KWExampleGroup *exampleGroup; - -#pragma mark - -#pragma mark Initializing - -+ (id)itNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock; - -@end diff --git a/Pods/Kiwi/Kiwi/KWItNode.m b/Pods/Kiwi/Kiwi/KWItNode.m deleted file mode 100755 index 01b2363..0000000 --- a/Pods/Kiwi/Kiwi/KWItNode.m +++ /dev/null @@ -1,42 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWItNode.h" -#import "KWExampleNodeVisitor.h" -#import "KWExampleGroup.h" -#import "KWVerifying.h" - -@implementation KWItNode - -@synthesize exampleGroup; - -#pragma mark - -#pragma mark Initializing - -+ (id)itNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(KWVoidBlock)aBlock { - return [[[self alloc] initWithCallSite:aCallSite description:aDescription block:aBlock] autorelease]; -} - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor { - [aVisitor visitItNode:self]; -} - -#pragma mark - -#pragma mark Runtime Description support - -- (NSString *)description -{ - NSString *description = [super description]; - if (description == nil) { - description = [self.exampleGroup generateDescriptionForAnonymousItNode]; - } - return description; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWMatchVerifier.h b/Pods/Kiwi/Kiwi/KWMatchVerifier.h deleted file mode 100755 index 7d4c64c..0000000 --- a/Pods/Kiwi/Kiwi/KWMatchVerifier.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWExpectationType.h" -#import "KWVerifying.h" - -@class KWCallSite; -@class KWMatcherFactory; - -@protocol KWMatching; -@protocol KWReporting; - -@interface KWMatchVerifier : NSObject { -@private - KWExpectationType expectationType; - KWCallSite *callSite; - KWMatcherFactory *matcherFactory; - id reporter; - id subject; - id endOfExampleMatcher; -} - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) KWExpectationType expectationType; -@property (nonatomic, readonly) KWCallSite *callSite; -@property (nonatomic, readonly) KWMatcherFactory *matcherFactory; -@property (nonatomic, readonly) id reporter; -@property (nonatomic, readwrite, retain) id subject; - -#pragma mark - -#pragma mark Initializing - -- (id)initForShouldWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; -- (id)initForShouldNotWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; -- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; - -+ (id)matchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; - -@end diff --git a/Pods/Kiwi/Kiwi/KWMatchVerifier.m b/Pods/Kiwi/Kiwi/KWMatchVerifier.m deleted file mode 100755 index 1015ea6..0000000 --- a/Pods/Kiwi/Kiwi/KWMatchVerifier.m +++ /dev/null @@ -1,181 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWMatchVerifier.h" -#import "KWFailure.h" -#import "KWFormatter.h" -#import "KWInvocationCapturer.h" -#import "KWMatcherFactory.h" -#import "KWReporting.h" -#import "KWStringUtilities.h" -#import "KWWorkarounds.h" -#import "NSInvocation+KiwiAdditions.h" -#import "NSMethodSignature+KiwiAdditions.h" - -@interface KWMatchVerifier() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite, retain) id endOfExampleMatcher; -@property (nonatomic, readwrite, retain) id matcher; - -@end - -@implementation KWMatchVerifier - -@synthesize matcher; - -#pragma mark - -#pragma mark Initializing - -- (id)initForShouldWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { - return [self initWithExpectationType:KWExpectationTypeShould callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; -} - -- (id)initForShouldNotWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { - return [self initWithExpectationType:KWExpectationTypeShouldNot callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter]; -} - -- (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { - if ((self = [super init])) { - expectationType = anExpectationType; - callSite = [aCallSite retain]; - matcherFactory = aMatcherFactory; - reporter = aReporter; - } - - return self; -} - -+ (id)matchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter { - return [[[self alloc] initWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:aMatcherFactory reporter:aReporter] autorelease]; -} - -- (void)dealloc { - [subject release]; - [callSite release]; - [matcher release]; - [endOfExampleMatcher release]; - [super dealloc]; -} - -- (NSString *)descriptionForAnonymousItNode -{ - NSString *typeString = @""; - - switch (self.expectationType) { - case KWExpectationTypeShould: - typeString = @"should"; - break; - case KWExpectationTypeShouldNot: - typeString = @"should not"; - } - id actualMatcher = (self.endOfExampleMatcher == nil) ? self.matcher : self.endOfExampleMatcher; - return [NSString stringWithFormat:@"%@ %@", typeString, actualMatcher]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize expectationType; -@synthesize callSite; -@synthesize matcherFactory; -@synthesize reporter; -@synthesize subject; -@synthesize endOfExampleMatcher; - -#pragma mark - -#pragma mark Verifying - -- (void)verifyWithMatcher:(id)aMatcher { - @try { - BOOL matchResult = [aMatcher evaluate]; - - if (self.expectationType == KWExpectationTypeShould && !matchResult) { - NSString *message = [aMatcher failureMessageForShould]; - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; - [self.reporter reportFailure:failure]; - } else if (self.expectationType == KWExpectationTypeShouldNot && matchResult) { - NSString *message = [aMatcher failureMessageForShouldNot]; - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:message]; - [self.reporter reportFailure:failure]; - } - } @catch (NSException *exception) { - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite message:[exception description]]; - [self.reporter reportFailure:failure]; - } -} - -#pragma mark - -#pragma mark Ending Examples - -- (void)exampleWillEnd { - if (self.endOfExampleMatcher == nil) - return; - - [self verifyWithMatcher:self.endOfExampleMatcher]; -} - -#pragma mark - -#pragma mark Handling Invocations - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { - NSMethodSignature *signature = [super methodSignatureForSelector:aSelector]; - - if (signature != nil) - return signature; - - signature = [self.matcherFactory methodSignatureForMatcherSelector:aSelector]; - - if (signature != nil) - return signature; - - // Return a dummy method signature so that problems can be handled in - // -forwardInvocation:. - NSString *encoding = KWEncodingForVoidMethod(); - return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; -} - -- (void)forwardInvocation:(NSInvocation *)anInvocation { -#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - @try { -#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - - self.matcher = (id)[self.matcherFactory matcherFromInvocation:anInvocation subject:self.subject]; - - if (self.matcher == nil) { - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite format:@"could not create matcher for -%@", - NSStringFromSelector(anInvocation.selector)]; - [self.reporter reportFailure:failure]; - } - [anInvocation invokeWithTarget:self.matcher]; - -#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - // A matcher might have set an exception within the -invokeWithTarget, so - // raise if one was set. - NSException *exception = KWGetAndClearExceptionFromAcrossInvocationBoundary(); - [exception raise]; -#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - - if ([self.matcher respondsToSelector:@selector(shouldBeEvaluatedAtEndOfExample)] && [self.matcher shouldBeEvaluatedAtEndOfExample]) { - self.endOfExampleMatcher = self.matcher; - self.matcher = nil; - } - else { - [self verifyWithMatcher:self.matcher]; - } - -#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - } @catch (NSException *exception) { - KWFailure *failure = [KWFailure failureWithCallSite:self.callSite format:[exception reason]]; - [self.reporter reportFailure:failure]; - return; - } -#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWMatcher.h b/Pods/Kiwi/Kiwi/KWMatcher.h deleted file mode 100755 index e459e88..0000000 --- a/Pods/Kiwi/Kiwi/KWMatcher.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatching.h" - -@interface KWMatcher : NSObject { -@protected - id subject; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithSubject:(id)anObject; - -+ (id)matcherWithSubject:(id)anObject; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) id subject; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings; - -#pragma mark - -#pragma mark Getting Matcher Compatability - -+ (BOOL)canMatchSubject:(id)anObject; - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate; - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould; -- (NSString *)failureMessageForShouldNot; - -@end diff --git a/Pods/Kiwi/Kiwi/KWMatcher.m b/Pods/Kiwi/Kiwi/KWMatcher.m deleted file mode 100755 index 1c4d6d7..0000000 --- a/Pods/Kiwi/Kiwi/KWMatcher.m +++ /dev/null @@ -1,91 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWMatcher.h" -#import "KWFormatter.h" -#import "KWFutureObject.h" - -@implementation KWMatcher - -#pragma mark - -#pragma mark Initializing - -- (id)initWithSubject:(id)anObject { - if ((self = [super init])) { - subject = [anObject retain]; - } - - return self; -} - -+ (id)matcherWithSubject:(id)anObject { - return [[[self alloc] initWithSubject:anObject] autorelease]; -} - -- (void)dealloc { - [subject release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize subject; - -- (id)subject -{ - if ([subject isKindOfClass:[KWFutureObject class]]) { - return [(KWFutureObject *)subject object]; - } - return subject; -} - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return nil; -} - -#pragma mark - -#pragma mark Getting Matcher Compatability - -+ (BOOL)canMatchSubject:(id)anObject { - return YES; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - [NSException raise:NSInternalInconsistencyException format:@"%@ must override -evaluate", - [KWFormatter formatObject:[self class]]]; - return NO; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return @"subject did not meet expectation"; -} - -- (NSString *)failureMessageForShouldNot { - NSString *failureMessageForShould = [self failureMessageForShould]; - NSRange markerRange = [failureMessageForShould rangeOfString:@" to "]; - - if (markerRange.location == NSNotFound) - return @"subject did not meet expectation"; - - NSRange replacementRange = NSMakeRange(0, markerRange.location + markerRange.length); - NSString *message = [failureMessageForShould stringByReplacingOccurrencesOfString:@" to " - withString:@" not to " - options:0 - range:replacementRange]; - return message; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWMatcherFactory.h b/Pods/Kiwi/Kiwi/KWMatcherFactory.h deleted file mode 100755 index 7048ce8..0000000 --- a/Pods/Kiwi/Kiwi/KWMatcherFactory.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatching.h" - -@class KWFailure; -@class KWMatcher; -@class KWUserDefinedMatcherBuilder; - -@interface KWMatcherFactory : NSObject { -@private - NSMutableArray *registeredMatcherClasses; - NSMutableDictionary *matcherClassChains; -} - -#pragma mark - -#pragma mark Initializing - -- (id)init; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) NSArray *registeredMatcherClasses; - -#pragma mark - -#pragma mark Registering Matcher Classes - -- (void)registerMatcherClass:(Class)aClass; -- (void)registerMatcherClassesWithNamespacePrefix:(NSString *)aNamespacePrefix; - -#pragma mark - -#pragma mark Registering User Defined Matchers - -//- (void)registerUserDefinedMatcherWithBuilder:(KWUserDefinedMatcherBuilder *)aBuilder; - -#pragma mark - -#pragma mark Getting Method Signatures - -- (NSMethodSignature *)methodSignatureForMatcherSelector:(SEL)aSelector; - -#pragma mark - -#pragma mark Getting Matchers - -- (KWMatcher *)matcherFromInvocation:(NSInvocation *)anInvocation subject:(id)subject; - -@end diff --git a/Pods/Kiwi/Kiwi/KWMatcherFactory.m b/Pods/Kiwi/Kiwi/KWMatcherFactory.m deleted file mode 100755 index f714e40..0000000 --- a/Pods/Kiwi/Kiwi/KWMatcherFactory.m +++ /dev/null @@ -1,153 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWMatcherFactory.h" -#import -#import "KWMatching.h" -#import "KWStringUtilities.h" -#import "KWUserDefinedMatcher.h" -#import "KWMatchers.h" - -@interface KWMatcherFactory() -- (Class)matcherClassForSelector:(SEL)aSelector subject:(id)anObject; -@end - -@implementation KWMatcherFactory - -#pragma mark - -#pragma mark Initializing - -- (id)init { - if ((self = [super init])) { - matcherClassChains = [[NSMutableDictionary alloc] init]; - registeredMatcherClasses = [[NSMutableArray alloc] init]; - } - - return self; -} - -- (void)dealloc { - [registeredMatcherClasses release]; - [matcherClassChains release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize registeredMatcherClasses; - -#pragma mark - -#pragma mark Registering Matcher Classes - -- (void)registerMatcherClass:(Class)aClass { - if ([self.registeredMatcherClasses containsObject:aClass]) - return; - - [registeredMatcherClasses addObject:aClass]; - - for (NSString *verificationSelectorString in [aClass matcherStrings]) { - NSMutableArray *matcherClassChain = [matcherClassChains objectForKey:verificationSelectorString]; - - if (matcherClassChain == nil) { - matcherClassChain = [[NSMutableArray alloc] init]; - [matcherClassChains setObject:matcherClassChain forKey:verificationSelectorString]; - [matcherClassChain release]; - } - - [matcherClassChain removeObject:aClass]; - [matcherClassChain insertObject:aClass atIndex:0]; - } -} - -- (void)registerMatcherClassesWithNamespacePrefix:(NSString *)aNamespacePrefix { - static NSMutableArray *matcherClasses = nil; - - // Cache all classes that conform to KWMatching. - if (matcherClasses == nil) { - matcherClasses = [[NSMutableArray alloc] init]; - int numberOfClasses = objc_getClassList(NULL, 0); - Class *classes = malloc(sizeof(Class) * numberOfClasses); - numberOfClasses = objc_getClassList(classes, numberOfClasses); - - if (numberOfClasses == 0) - return; - - for (int i = 0; i < numberOfClasses; ++i) { - Class candidateClass = classes[i]; - - if (!class_respondsToSelector(candidateClass, @selector(conformsToProtocol:))) - continue; - - if (![candidateClass conformsToProtocol:@protocol(KWMatching)]) - continue; - - [matcherClasses addObject:candidateClass]; - } - - free(classes); - } - - for (Class matcherClass in matcherClasses) { - NSString *className = NSStringFromClass(matcherClass); - - if (KWStringHasStrictWordPrefix(className, aNamespacePrefix)) - [self registerMatcherClass:matcherClass]; - } -} - -#pragma mark - -#pragma mark Registering User Defined Matchers - -//- (void)registerUserDefinedMatcherWithBuilder:(KWUserDefinedMatcherBuilder *)aBuilder -//{ -// -//} - -#pragma mark - -#pragma mark Getting Method Signatures - -- (NSMethodSignature *)methodSignatureForMatcherSelector:(SEL)aSelector { - NSMutableArray *matcherClassChain = [matcherClassChains objectForKey:NSStringFromSelector(aSelector)]; - - if ([matcherClassChain count] == 0) - return nil; - - Class matcherClass = [matcherClassChain objectAtIndex:0]; - return [matcherClass instanceMethodSignatureForSelector:aSelector]; -} - -#pragma mark - -#pragma mark Getting Matchers - -- (KWMatcher *)matcherFromInvocation:(NSInvocation *)anInvocation subject:(id)subject { - SEL selector = [anInvocation selector]; - - // try and match a built-in or registered matcher class - Class matcherClass = [self matcherClassForSelector:selector subject:subject]; - - if (matcherClass == nil) { - // see if we can match with a user-defined matcher instead - return [[KWMatchers matchers] matcherForSelector:selector subject:subject]; - } - return [[[matcherClass alloc] initWithSubject:subject] autorelease]; -} - -#pragma mark - -#pragma mark Private methods - -- (Class)matcherClassForSelector:(SEL)aSelector subject:(id)anObject { - NSArray *matcherClassChain = [matcherClassChains objectForKey:NSStringFromSelector(aSelector)]; - - for (Class matcherClass in matcherClassChain) { - if ([matcherClass canMatchSubject:anObject]) - return matcherClass; - } - - return nil; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWMatchers.h b/Pods/Kiwi/Kiwi/KWMatchers.h deleted file mode 100755 index 48488a1..0000000 --- a/Pods/Kiwi/Kiwi/KWMatchers.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// KWMatchers.h -// Kiwi -// -// Created by Luke Redpath on 17/06/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import - -@class KWUserDefinedMatcherBuilder; - -typedef void (^KWMatchersBuildingBlock)(KWUserDefinedMatcherBuilder *); - -@class KWUserDefinedMatcher; - -@interface KWMatchers : NSObject { - NSMutableDictionary *userDefinedMatchers; -} -+ (id)matchers; - -#pragma mark - -#pragma mark Defining Matchers - -+ (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block; -- (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block; -- (void)addUserDefinedMatcherBuilder:(KWUserDefinedMatcherBuilder *)builder; - -#pragma mark - -#pragma mark Building Matchers - -- (KWUserDefinedMatcher *)matcherForSelector:(SEL)selector subject:(id)subject; -@end - -void KWDefineMatchers(NSString *selectorString, KWMatchersBuildingBlock block); \ No newline at end of file diff --git a/Pods/Kiwi/Kiwi/KWMatchers.m b/Pods/Kiwi/Kiwi/KWMatchers.m deleted file mode 100755 index ca524bd..0000000 --- a/Pods/Kiwi/Kiwi/KWMatchers.m +++ /dev/null @@ -1,72 +0,0 @@ -// -// KWMatchers.m -// Kiwi -// -// Created by Luke Redpath on 17/06/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import "KWMatchers.h" -#import "KWUserDefinedMatcher.h" - -@implementation KWMatchers - -#pragma mark - -#pragma mark Singleton implementation - -static id sharedMatchers = nil; - -+ (void)initialize { - if (self == [KWMatchers class]) { - sharedMatchers = [[self alloc] init]; - } -} - -+ (id)matchers { - return sharedMatchers; -} - -- (id)init { - if ((self = [super init])) { - userDefinedMatchers = [[NSMutableDictionary alloc] init]; - } - return self; -} - -#pragma mark - -#pragma mark Defining Matchers - -+ (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block { - [[self matchers] defineMatcher:selectorString as:block]; -} - -- (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block { - KWUserDefinedMatcherBuilder *builder = [KWUserDefinedMatcherBuilder builderForSelector:NSSelectorFromString(selectorString)]; - block(builder); - [userDefinedMatchers setObject:builder forKey:builder.key]; -} - -- (void)addUserDefinedMatcherBuilder:(KWUserDefinedMatcherBuilder *)builder { - [userDefinedMatchers setObject:builder forKey:builder.key]; -} - -#pragma mark - -#pragma mark Building Matchers - -- (KWUserDefinedMatcher *)matcherForSelector:(SEL)selector subject:(id)subject { - KWUserDefinedMatcherBuilder *builder = [userDefinedMatchers objectForKey:NSStringFromSelector(selector)]; - - if (builder == nil) - return nil; - - return [builder buildMatcherWithSubject:subject]; -} - - -@end - -void KWDefineMatchers(NSString *selectorString, KWMatchersBuildingBlock block) -{ - [KWMatchers defineMatcher:selectorString as:block]; -} - diff --git a/Pods/Kiwi/Kiwi/KWMatching.h b/Pods/Kiwi/Kiwi/KWMatching.h deleted file mode 100755 index 60a1f30..0000000 --- a/Pods/Kiwi/Kiwi/KWMatching.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@protocol KWMatching - -#pragma mark - -#pragma mark Initializing - -- (id)initWithSubject:(id)anObject; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings; - -#pragma mark - -#pragma mark Getting Matcher Compatability - -+ (BOOL)canMatchSubject:(id)anObject; - -#pragma mark - -#pragma mark Matching - -@optional - -- (BOOL)shouldBeEvaluatedAtEndOfExample; -- (BOOL)willEvaluateMultipleTimes; -- (void)setWillEvaluateMultipleTimes:(BOOL)shouldEvaluateMultipleTimes; - -@required - -- (BOOL)evaluate; - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould; -- (NSString *)failureMessageForShouldNot; - -@end diff --git a/Pods/Kiwi/Kiwi/KWMessagePattern.h b/Pods/Kiwi/Kiwi/KWMessagePattern.h deleted file mode 100755 index 213cb8d..0000000 --- a/Pods/Kiwi/Kiwi/KWMessagePattern.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface KWMessagePattern : NSObject { -@private - SEL selector; - NSArray *argumentFilters; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithSelector:(SEL)aSelector; -- (id)initWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray; -- (id)initWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList; - -+ (id)messagePatternWithSelector:(SEL)aSelector; -+ (id)messagePatternWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray; -+ (id)messagePatternWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList; - -+ (id)messagePatternFromInvocation:(NSInvocation *)anInvocation; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) SEL selector; -@property (nonatomic, readonly) NSArray *argumentFilters; - -#pragma mark - -#pragma mark Matching Invocations - -- (BOOL)matchesInvocation:(NSInvocation *)anInvocation; - -#pragma mark - -#pragma mark Comparing Message Patterns - -- (BOOL)isEqualToMessagePattern:(KWMessagePattern *)aMessagePattern; - -#pragma mark - -#pragma mark Retrieving String Representations - -- (NSString *)stringValue; - -@end diff --git a/Pods/Kiwi/Kiwi/KWMessagePattern.m b/Pods/Kiwi/Kiwi/KWMessagePattern.m deleted file mode 100755 index df756dc..0000000 --- a/Pods/Kiwi/Kiwi/KWMessagePattern.m +++ /dev/null @@ -1,226 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWMessagePattern.h" -#import "KWFormatter.h" -#import "KWNull.h" -#import "KWObjCUtilities.h" -#import "KWValue.h" -#import "NSInvocation+KiwiAdditions.h" -#import "NSMethodSignature+KiwiAdditions.h" -#import "KWHCMatcher.h" - -@implementation KWMessagePattern - -#pragma mark - -#pragma mark Initializing - -- (id)initWithSelector:(SEL)aSelector { - return [self initWithSelector:aSelector argumentFilters:nil]; -} - -- (id)initWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray { - if ((self = [super init])) { - selector = aSelector; - - if ([anArray count] > 0) - argumentFilters = [anArray copy]; - } - - return self; -} - -- (id)initWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList { - NSUInteger count = KWSelectorParameterCount(aSelector); - NSMutableArray *array = [NSMutableArray arrayWithCapacity:count]; - [array addObject:(firstArgumentFilter != nil) ? firstArgumentFilter : [KWNull null]]; - - for (NSUInteger i = 1; i < count; ++i) - { - id object = va_arg(argumentList, id); - [array addObject:(object != nil) ? object : [KWNull null]]; - } - - va_end(argumentList); - return [self initWithSelector:aSelector argumentFilters:array]; -} - -+ (id)messagePatternWithSelector:(SEL)aSelector { - return [self messagePatternWithSelector:aSelector argumentFilters:nil]; -} - -+ (id)messagePatternWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray { - return [[[self alloc] initWithSelector:aSelector argumentFilters:anArray] autorelease]; -} - -+ (id)messagePatternWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList { - return [[[self alloc] initWithSelector:aSelector firstArgumentFilter:firstArgumentFilter argumentList:argumentList] autorelease]; -} - -+ (id)messagePatternFromInvocation:(NSInvocation *)anInvocation { - NSMethodSignature *signature = [anInvocation methodSignature]; - NSUInteger numberOfMessageArguments = [signature numberOfMessageArguments]; - NSMutableArray *argumentFilters = nil; - - if (numberOfMessageArguments > 0) { - argumentFilters = [[NSMutableArray alloc] initWithCapacity:numberOfMessageArguments]; - - for (NSUInteger i = 0; i < numberOfMessageArguments; ++i) { - const char *type = [signature messageArgumentTypeAtIndex:i]; - id object = nil; - - if (KWObjCTypeIsObject(type)) { - [anInvocation getMessageArgument:&object atIndex:i]; - } else { - NSData *data = [anInvocation messageArgumentDataAtIndex:i]; - object = [KWValue valueWithBytes:[data bytes] objCType:type]; - } - - [argumentFilters addObject:(object != nil) ? object : [KWNull null]]; - } - } - - return [self messagePatternWithSelector:[anInvocation selector] argumentFilters:[argumentFilters autorelease]]; -} - -- (void)dealloc { - [argumentFilters release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Copying - -- (id)copyWithZone:(NSZone *)zone { - return [self retain]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize selector; -@synthesize argumentFilters; - -#pragma mark - -#pragma mark Matching Invocations - -- (BOOL)argumentFiltersMatchInvocationArguments:(NSInvocation *)anInvocation { - if (self.argumentFilters == nil) - return YES; - - NSMethodSignature *signature = [anInvocation methodSignature]; - NSUInteger numberOfArgumentFilters = [self.argumentFilters count]; - NSUInteger numberOfMessageArguments = [signature numberOfMessageArguments]; - - for (NSUInteger i = 0; i < numberOfMessageArguments && i < numberOfArgumentFilters; ++i) { - const char *objCType = [signature messageArgumentTypeAtIndex:i]; - id object = nil; - - // Extract message argument into object (wrapping values if neccesary) - if (KWObjCTypeIsObject(objCType)) { - [anInvocation getMessageArgument:&object atIndex:i]; - } else { - NSData *data = [anInvocation messageArgumentDataAtIndex:i]; - object = [KWValue valueWithBytes:[data bytes] objCType:objCType]; - } - - // Match argument filter to object - id argumentFilter = [self.argumentFilters objectAtIndex:i]; - - if (KWObjCTypeIsObject(objCType)) { - if ([argumentFilter isEqual:[KWNull null]]) { - if (object != nil) - return NO; - } else if ([argumentFilter respondsToSelector:@selector(matches:)]) { - return [(id)argumentFilter matches:object]; - } else if (![argumentFilter isEqual:object]) { - return NO; - } - } else { - if ([argumentFilter isEqual:[KWNull null]]) { - if (!KWObjCTypeIsPointerLike(objCType)) - [NSException raise:@"KWMessagePatternException" format:@"nil was specified as an argument filter, but argument is not a pointer"]; - - void *p = nil; - [anInvocation getMessageArgument:&p atIndex:i]; - - if (p != nil) - return NO; - } else if (![argumentFilter isEqual:object]) { - return NO; - } - } - } - - return YES; -} - -- (BOOL)matchesInvocation:(NSInvocation *)anInvocation { - return self.selector == [anInvocation selector] && [self argumentFiltersMatchInvocationArguments:anInvocation]; -} - -#pragma mark - -#pragma mark Comparing Message Patterns - -- (NSUInteger)hash { - return [NSStringFromSelector(self.selector) hash]; -} - -- (BOOL)isEqual:(id)object { - if (![object isKindOfClass:[KWMessagePattern class]]) - return NO; - - return [self isEqualToMessagePattern:object]; -} - -- (BOOL)isEqualToMessagePattern:(KWMessagePattern *)aMessagePattern { - if (self.selector != aMessagePattern.selector) - return NO; - - if (self.argumentFilters == nil && aMessagePattern.argumentFilters == nil) - return YES; - - return [self.argumentFilters isEqualToArray:aMessagePattern.argumentFilters]; -} - -#pragma mark - -#pragma mark Retrieving String Representations - -- (NSString *)selectorString { - return NSStringFromSelector(self.selector); -} - -- (NSString *)selectorAndArgumentFiltersString { - NSMutableString *description = [[[NSMutableString alloc] init] autorelease]; - NSArray *components = [NSStringFromSelector(self.selector) componentsSeparatedByString:@":"]; - NSUInteger count = [components count] - 1; - - for (NSUInteger i = 0; i < count; ++i) { - NSString *selectorComponent = [components objectAtIndex:i]; - NSString *argumentFilterString = [KWFormatter formatObject:[self.argumentFilters objectAtIndex:i]]; - [description appendFormat:@"%@:%@ ", selectorComponent, argumentFilterString]; - } - - return description; -} - -- (NSString *)stringValue { - if (self.argumentFilters == nil) - return [self selectorString]; - else - return [self selectorAndArgumentFiltersString]; -} - -#pragma mark - -#pragma mark Debugging - -- (NSString *)description { - return [NSString stringWithFormat:@"selector: %@\nargumentFilters: %@", - NSStringFromSelector(self.selector), - self.argumentFilters]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWMessageSpying.h b/Pods/Kiwi/Kiwi/KWMessageSpying.h deleted file mode 100755 index 7b7d46c..0000000 --- a/Pods/Kiwi/Kiwi/KWMessageSpying.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@protocol KWMessageSpying - -#pragma mark - -#pragma mark Spying on Messages - -- (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation; - -@end diff --git a/Pods/Kiwi/Kiwi/KWMessageTracker.h b/Pods/Kiwi/Kiwi/KWMessageTracker.h deleted file mode 100755 index 188e563..0000000 --- a/Pods/Kiwi/Kiwi/KWMessageTracker.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWCountType.h" -#import "KWMessageSpying.h" - -@class KWMessagePattern; - -@interface KWMessageTracker : NSObject { -@private - id subject; - KWMessagePattern *messagePattern; - KWCountType countType; - NSUInteger count; - NSUInteger receivedCount; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; - -+ (id)messageTrackerWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) id subject; -@property (nonatomic, readonly) KWMessagePattern *messagePattern; -@property (nonatomic, readonly) KWCountType countType; -@property (nonatomic, readonly) NSUInteger count; - -#pragma mark - -#pragma mark Stopping Tracking - -- (void)stopTracking; - -#pragma mark - -#pragma mark Getting Message Tracker Status - -- (BOOL)succeeded; - -#pragma mark - -#pragma mark Getting Phrases - -- (NSString *)expectedCountPhrase; -- (NSString *)receivedCountPhrase; - -@end diff --git a/Pods/Kiwi/Kiwi/KWMessageTracker.m b/Pods/Kiwi/Kiwi/KWMessageTracker.m deleted file mode 100755 index 467606e..0000000 --- a/Pods/Kiwi/Kiwi/KWMessageTracker.m +++ /dev/null @@ -1,151 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWMessageTracker.h" -#import "KWMessagePattern.h" -#import "NSObject+KiwiStubAdditions.h" - -@interface KWMessageTracker() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite) NSUInteger receivedCount; - -@end - -@implementation KWMessageTracker - -#pragma mark - -#pragma mark Initializing - -- (id)initWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount { - if ((self = [super init])) { - subject = [anObject retain]; - messagePattern = [aMessagePattern retain]; - countType = aCountType; - count = aCount; - [anObject addMessageSpy:self forMessagePattern:messagePattern]; - } - - return self; -} - -+ (id)messageTrackerWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount { - return [[[self alloc] initWithSubject:anObject messagePattern:aMessagePattern countType:aCountType count:aCount] autorelease]; -} - -- (void)dealloc { - [subject release]; - [messagePattern release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize subject; -@synthesize messagePattern; -@synthesize countType; -@synthesize count; -@synthesize receivedCount; - -#pragma mark - -#pragma mark Spying on Messages - -- (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation { - if (![self.messagePattern matchesInvocation:anInvocation]) - return; - - ++self.receivedCount; -} - -#pragma mark - -#pragma mark Stopping Tracking - -- (void)stopTracking { - [self.subject removeMessageSpy:self forMessagePattern:self.messagePattern]; -} - -#pragma mark - -#pragma mark Getting Message Tracker Status - -- (BOOL)succeeded { - switch (self.countType) { - case KWCountTypeExact: - return self.receivedCount == self.count; - case KWCountTypeAtLeast: - return self.receivedCount >= self.count; - case KWCountTypeAtMost: - return self.receivedCount <= self.count; - default: - break; - } - - assert(0 && "should never reach here"); - return NO; -} - -#pragma mark - -#pragma mark Getting Phrases - -- (NSString *)phraseForCount:(NSUInteger)aCount { - if (aCount == 1) - return @"1 time"; - - return [NSString stringWithFormat:@"%d times", aCount]; -} - -- (NSString *)expectedCountPhrase { - NSString *countPhrase = [self phraseForCount:self.count]; - - switch (self.countType) { - case KWCountTypeExact: - return [NSString stringWithFormat:@"exactly %@", countPhrase]; - case KWCountTypeAtLeast: - return [NSString stringWithFormat:@"at least %@", countPhrase]; - case KWCountTypeAtMost: - return [NSString stringWithFormat:@"at most %@", countPhrase]; - default: - break; - } - - assert(0 && "should never reach here"); - return nil; -} - -- (NSString *)receivedCountPhrase { - return [self phraseForCount:self.receivedCount]; -} - -#pragma mark - -#pragma mark Debugging - -- (NSString *)modeString { - switch (self.countType) { - case KWCountTypeExact: - return @"KWCountTypeExact"; - case KWCountTypeAtLeast: - return @"KWCountTypeAtLeast"; - case KWCountTypeAtMost: - return @"KWCountTypeAtMost"; - default: - break; - } - - assert(0 && "should never reach here"); - return nil; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"messagePattern: %@\nmode: %@\ncount: %d\nreceiveCount: %d", - self.messagePattern, - self.modeString, - self.count, - self.receivedCount]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWMock.h b/Pods/Kiwi/Kiwi/KWMock.h deleted file mode 100755 index 8402a9c..0000000 --- a/Pods/Kiwi/Kiwi/KWMock.h +++ /dev/null @@ -1,88 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWInvocationCapturer.h" - -@class KWMessagePattern; - -@protocol KWMessageSpying; -@protocol KWVerifying; - -@interface KWMock : NSObject { -@private - BOOL isNullMock; - NSString *name; - Class mockedClass; - Protocol *mockedProtocol; - NSMutableArray *stubs; - NSMutableArray *expectedMessagePatterns; - NSMutableDictionary *messageSpies; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initForClass:(Class)aClass; -- (id)initForProtocol:(Protocol *)aProtocol; -- (id)initWithName:(NSString *)aName forClass:(Class)aClass; -- (id)initWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol; - -- (id)initAsNullMockForClass:(Class)aClass; -- (id)initAsNullMockForProtocol:(Protocol *)aProtocol; -- (id)initAsNullMockWithName:(NSString *)aName forClass:(Class)aClass; -- (id)initAsNullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol; - -+ (id)mockForClass:(Class)aClass; -+ (id)mockForProtocol:(Protocol *)aProtocol; -+ (id)mockWithName:(NSString *)aName forClass:(Class)aClass; -+ (id)mockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol; - -+ (id)nullMockForClass:(Class)aClass; -+ (id)nullMockForProtocol:(Protocol *)aProtocol; -+ (id)nullMockWithName:(NSString *)aName forClass:(Class)aClass ; -+ (id)nullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) BOOL isNullMock; -@property (nonatomic, readonly) NSString *name; -@property (nonatomic, readonly) Class mockedClass; -@property (nonatomic, readonly) Protocol *mockedProtocol; - -#pragma mark - -#pragma mark Stubbing Methods - -- (void)stub:(SEL)aSelector; -- (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ...; -- (void)stub:(SEL)aSelector andReturn:(id)aValue; -- (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ...; - -- (id)stub; -- (id)stubAndReturn:(id)aValue; - -- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue; - -- (void)clearStubs; - -#pragma mark - -#pragma mark Spying on Messages - -- (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; -- (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; - -#pragma mark - -#pragma mark Expecting Messages - -- (void)expect:(SEL)aSelector; -- (void)expect:(SEL)aSelector withArguments:(id)firstArgument, ...; - -- (id)expect; - -- (void)expectMessagePattern:(KWMessagePattern *)aMessagePattern; - -@end diff --git a/Pods/Kiwi/Kiwi/KWMock.m b/Pods/Kiwi/Kiwi/KWMock.m deleted file mode 100755 index 10cd449..0000000 --- a/Pods/Kiwi/Kiwi/KWMock.m +++ /dev/null @@ -1,555 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWMock.h" -#import -#import "KWFormatter.h" -#import "KWMessagePattern.h" -#import "KWMessageSpying.h" -#import "KWStringUtilities.h" -#import "KWStub.h" -#import "KWWorkarounds.h" -#import "NSInvocation+KiwiAdditions.h" - -static NSString * const ExpectOrStubTagKey = @"ExpectOrStubTagKey"; -static NSString * const StubTag = @"StubTag"; -static NSString * const ExpectTag = @"ExpectTag"; -static NSString * const StubValueKey = @"StubValueKey"; - -@interface KWMock() - -#pragma mark - -#pragma mark Initializing - -- (id)initAsNullMock:(BOOL)nullMockFlag withName:(NSString *)aName forClass:(Class)aClass protocol:(Protocol *)aProtocol; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) NSMutableArray *stubs; -@property (nonatomic, readonly) NSMutableArray *expectedMessagePatterns; -@property (nonatomic, readonly) NSMutableDictionary *messageSpies; - - -#pragma mark - -#pragma mark Handling Invocations - -- (BOOL)processReceivedInvocation:(NSInvocation *)invocation; - -@end - -@implementation KWMock - -#pragma mark - -#pragma mark Initializing - -- (id)init { - // May already have been initialized since stubbing -init is allowed! - if (self.stubs != nil) { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; - [self expectMessagePattern:messagePattern]; - NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; - - if ([self processReceivedInvocation:invocation]) { - id result = nil; - [invocation getReturnValue:&result]; - return result; - } else { - return self; - } - } - - return [self initAsNullMock:NO withName:nil forClass:nil protocol:nil]; -} - -- (id)initForClass:(Class)aClass { - return [self initAsNullMock:NO withName:nil forClass:aClass protocol:nil]; -} - -- (id)initForProtocol:(Protocol *)aProtocol { - return [self initAsNullMock:NO withName:nil forClass:nil protocol:aProtocol]; -} - -- (id)initWithName:(NSString *)aName forClass:(Class)aClass { - return [self initAsNullMock:NO withName:aName forClass:aClass protocol:nil]; -} - -- (id)initWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { - return [self initAsNullMock:NO withName:aName forClass:nil protocol:aProtocol]; -} - -- (id)initAsNullMockForClass:(Class)aClass { - return [self initAsNullMock:YES withName:nil forClass:aClass protocol:nil]; -} - -- (id)initAsNullMockForProtocol:(Protocol *)aProtocol { - return [self initAsNullMock:YES withName:nil forClass:nil protocol:aProtocol]; -} - -- (id)initAsNullMockWithName:(NSString *)aName forClass:(Class)aClass { - return [self initAsNullMock:YES withName:aName forClass:aClass protocol:nil]; -} - -- (id)initAsNullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { - return [self initAsNullMock:YES withName:aName forClass:nil protocol:aProtocol]; -} - -- (id)initAsNullMock:(BOOL)nullMockFlag withName:(NSString *)aName forClass:(Class)aClass protocol:(Protocol *)aProtocol { - if ((self = [super init])) { - isNullMock = nullMockFlag; - name = [aName copy]; - mockedClass = aClass; - mockedProtocol = aProtocol; - stubs = [[NSMutableArray alloc] init]; - expectedMessagePatterns = [[NSMutableArray alloc] init]; - messageSpies = [[NSMutableDictionary alloc] init]; - } - - return self; -} - -+ (id)mockForClass:(Class)aClass { - return [[[self alloc] initForClass:aClass] autorelease]; -} - -+ (id)mockForProtocol:(Protocol *)aProtocol { - return [[[self alloc] initForProtocol:aProtocol] autorelease]; -} - -+ (id)mockWithName:(NSString *)aName forClass:(Class)aClass { - return [[[self alloc] initWithName:aName forClass:aClass] autorelease]; -} - -+ (id)mockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { - return [[[self alloc] initWithName:aName forProtocol:aProtocol] autorelease]; -} - -+ (id)nullMockForClass:(Class)aClass { - return [[[self alloc] initAsNullMockForClass:aClass] autorelease]; -} - -+ (id)nullMockForProtocol:(Protocol *)aProtocol { - return [[[self alloc] initAsNullMockForProtocol:aProtocol] autorelease]; -} - -+ (id)nullMockWithName:(NSString *)aName forClass:(Class)aClass { - return [[[self alloc] initAsNullMockWithName:aName forClass:aClass] autorelease]; -} - -+ (id)nullMockWithName:(NSString *)aName forProtocol:(Protocol *)aProtocol { - return [[[self alloc] initAsNullMockWithName:aName forProtocol:aProtocol] autorelease]; -} - -- (void)dealloc { - [name release]; - [stubs release]; - [expectedMessagePatterns release]; - [messageSpies release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize isNullMock; -@synthesize name; -@synthesize mockedClass; -@synthesize mockedProtocol; -@synthesize stubs; -@synthesize expectedMessagePatterns; -@synthesize messageSpies; - -#pragma mark - -#pragma mark Getting Transitive Closure For Mocked Protocols - -- (NSSet *)mockedProtocolTransitiveClosureSet { - if (self.mockedProtocol == nil) - return nil; - - NSMutableSet *protocolSet = [NSMutableSet set]; - NSMutableArray *protocolQueue = [NSMutableArray array]; - [protocolQueue addObject:self.mockedProtocol]; - - do { - Protocol *protocol = [protocolQueue lastObject]; - [protocolSet addObject:protocol]; - [protocolQueue removeLastObject]; - - unsigned int count = 0; - Protocol **protocols = (Protocol **)protocol_copyProtocolList(protocol, &count); - - if (count == 0) - continue; - - for (unsigned int i = 0; i < count; ++i) - [protocolQueue addObject:protocols[i]]; - - free(protocols); - } while ([protocolQueue count] != 0); - - return protocolSet; -} - -#pragma mark - -#pragma mark Stubbing Methods - -- (void)removeStubWithMessagePattern:(KWMessagePattern *)messagePattern { - NSUInteger stubCount = [self.stubs count]; - - for (int i = 0; i < stubCount; ++i) { - KWStub *stub = [self.stubs objectAtIndex:i]; - - if ([stub.messagePattern isEqualToMessagePattern:messagePattern]) { - [self.stubs removeObjectAtIndex:i]; - return; - } - } -} - -- (void)stub:(SEL)aSelector { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; - [self stubMessagePattern:messagePattern andReturn:nil]; -} - -- (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ... { - va_list argumentList; - va_start(argumentList, firstArgument); - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; - [self stubMessagePattern:messagePattern andReturn:nil]; -} - -- (void)stub:(SEL)aSelector andReturn:(id)aValue { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; - [self stubMessagePattern:messagePattern andReturn:aValue]; -} - -- (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ... { - va_list argumentList; - va_start(argumentList, firstArgument); - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; - [self stubMessagePattern:messagePattern andReturn:aValue]; -} - -- (id)stub { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:StubTag forKey:ExpectOrStubTagKey]; - return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; -} - -- (id)stubAndReturn:(id)aValue { - NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:StubTag, ExpectOrStubTagKey, - aValue, StubValueKey, nil]; - return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; -} - -- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue { - [self expectMessagePattern:aMessagePattern]; - [self removeStubWithMessagePattern:aMessagePattern]; - KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern value:aValue]; - [self.stubs addObject:stub]; -} - -- (void)clearStubs { - [self.stubs removeAllObjects]; -} - -#pragma mark - -#pragma mark Spying on Messages - -- (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { - [self expectMessagePattern:aMessagePattern]; - NSMutableArray *messagePatternSpies = [self.messageSpies objectForKey:aMessagePattern]; - - if (messagePatternSpies == nil) { - messagePatternSpies = [[NSMutableArray alloc] init]; - [self.messageSpies setObject:messagePatternSpies forKey:aMessagePattern]; - [messagePatternSpies release]; - } - NSValue *spyWrapper = [NSValue valueWithNonretainedObject:aSpy]; - - if (![messagePatternSpies containsObject:spyWrapper]) - [messagePatternSpies addObject:spyWrapper]; -} - -- (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { - NSValue *spyWrapper = [NSValue valueWithNonretainedObject:aSpy]; - NSMutableArray *messagePatternSpies = [self.messageSpies objectForKey:aMessagePattern]; - [messagePatternSpies removeObject:spyWrapper]; -} - -#pragma mark - -#pragma mark Expecting Message Patterns - -- (void)expect:(SEL)aSelector { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; - [self expectMessagePattern:messagePattern]; -} - -- (void)expect:(SEL)aSelector withArguments:(id)firstArgument, ... { - va_list argumentList; - va_start(argumentList, firstArgument); - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; - [self expectMessagePattern:messagePattern]; -} - -- (id)expect { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:ExpectTag forKey:ExpectOrStubTagKey]; - return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; -} - -- (void)expectMessagePattern:(KWMessagePattern *)aMessagePattern { - if (![self.expectedMessagePatterns containsObject:aMessagePattern]) - [self.expectedMessagePatterns addObject:aMessagePattern]; -} - -#pragma mark - -#pragma mark Capturing Invocations - -- (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector { - return [self methodSignatureForSelector:aSelector]; -} - -- (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternFromInvocation:anInvocation]; - NSString *tag = [anInvocationCapturer.userInfo objectForKey:ExpectOrStubTagKey]; - - if ([tag isEqualToString:StubTag]) { - id value = [anInvocationCapturer.userInfo objectForKey:StubValueKey]; - [self stubMessagePattern:messagePattern andReturn:value]; - } else { - [self expectMessagePattern:messagePattern]; - } -} - -#pragma mark - -#pragma mark Handling Invocations - -- (NSString *)namePhrase { - if (self.name == nil) - return @"mock"; - else - return [NSString stringWithFormat:@"mock \"%@\"", self.name]; -} - -- (BOOL)processReceivedInvocation:(NSInvocation *)invocation { - for (KWMessagePattern *messagePattern in self.messageSpies) { - if ([messagePattern matchesInvocation:invocation]) { - NSArray *spies = [self.messageSpies objectForKey:messagePattern]; - - for (NSValue *spyWrapper in spies) { - id spy = [spyWrapper nonretainedObjectValue]; - [spy object:self didReceiveInvocation:invocation]; - } - } - } - - for (KWStub *stub in self.stubs) { - if ([stub processInvocation:invocation]) - return YES; - } - - return NO; -} - -- (NSMethodSignature *)mockedProtocolMethodSignatureForSelector:(SEL)aSelector { - NSSet *protocols = [self mockedProtocolTransitiveClosureSet]; - - for (Protocol *protocol in protocols) { - struct objc_method_description description = protocol_getMethodDescription(protocol, aSelector, NO, YES); - - if (description.types == nil) - description = protocol_getMethodDescription(protocol, aSelector, YES, YES); - - if (description.types != nil) - return [NSMethodSignature signatureWithObjCTypes:description.types]; - } - - return nil; -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { - NSMethodSignature *methodSignature = [self.mockedClass instanceMethodSignatureForSelector:aSelector]; - - if (methodSignature != nil) - return methodSignature; - - methodSignature = [self mockedProtocolMethodSignatureForSelector:aSelector]; - - if (methodSignature != nil) - return methodSignature; - - NSString *encoding = KWEncodingForVoidMethod(); - return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; -} - -- (void)forwardInvocation:(NSInvocation *)anInvocation { -#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - @try { -#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - - if ([self processReceivedInvocation:anInvocation]) - return; - - if (self.isNullMock) - return; - - for (KWMessagePattern *expectedMessagePattern in self.expectedMessagePatterns) { - if ([expectedMessagePattern matchesInvocation:anInvocation]) - return; - } - - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternFromInvocation:anInvocation]; - [NSException raise:@"KWMockException" format:@"%@ received unexpected message -%@", - [self namePhrase], - [messagePattern stringValue]]; - -#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - } @catch (NSException *exception) { - KWSetExceptionFromAcrossInvocationBoundary(exception); - } -#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG -} - -#pragma mark - -#pragma mark Testing Objects - -- (BOOL)mockedClassHasAncestorClass:(Class)aClass { - Class currentClass = self.mockedClass; - - while (currentClass != nil) { - if (currentClass == aClass) - return YES; - - currentClass = [currentClass superclass]; - } - - return NO; -} - -- (BOOL)mockedClassRespondsToSelector:(SEL)aSelector { - return [self.mockedClass instancesRespondToSelector:aSelector]; -} - -- (BOOL)mockedClassConformsToProtocol:(Protocol *)aProtocol { - return [self.mockedClass conformsToProtocol:aProtocol]; -} - -- (BOOL)mockedProtocolRespondsToSelector:(SEL)aSelector { - NSSet *protocols = [self mockedProtocolTransitiveClosureSet]; - - for (Protocol *protocol in protocols) { - struct objc_method_description description = protocol_getMethodDescription(protocol, aSelector, NO, YES); - - if (description.types == nil) - description = protocol_getMethodDescription(protocol, aSelector, YES, YES); - - if (description.types != nil) - return YES; - } - - return NO; -} - -- (BOOL)mockedProtocolConformsToProtocol:(Protocol *)aProtocol { - if (self.mockedProtocol == nil) - return NO; - - return protocol_isEqual(self.mockedProtocol, aProtocol) || protocol_conformsToProtocol(self.mockedProtocol, aProtocol); -} - -- (BOOL)isKindOfClass:(Class)aClass { - return [self mockedClassHasAncestorClass:aClass] || [super isKindOfClass:aClass]; -} - -- (BOOL)isMemberOfClass:(Class)aClass { - return self.mockedClass == aClass || [super isMemberOfClass:aClass]; -} - -- (BOOL)respondsToSelector:(SEL)aSelector { - return [self mockedClassRespondsToSelector:aSelector] || - [self mockedProtocolRespondsToSelector:aSelector] || - [super respondsToSelector:aSelector]; -} - -- (BOOL)conformsToProtocol:(Protocol *)aProtocol { - return [self mockedClassConformsToProtocol:aProtocol] || - [self mockedProtocolConformsToProtocol:aProtocol] || - [super conformsToProtocol:aProtocol]; -} - -#pragma mark - -#pragma mark Whitelisted NSObject Methods - -- (BOOL)isEqual:(id)anObject { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; - [self expectMessagePattern:messagePattern]; - NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd messageArguments:&anObject]; - - if ([self processReceivedInvocation:invocation]) { - BOOL result = NO; - [invocation getReturnValue:&result]; - return result; - } else { - return [super isEqual:anObject]; - } -} - -- (NSUInteger)hash { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; - [self expectMessagePattern:messagePattern]; - NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; - - if ([self processReceivedInvocation:invocation]) { - NSUInteger result = 0; - [invocation getReturnValue:&result]; - return result; - } else { - return [super hash]; - } -} - -- (NSString *)description { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; - [self expectMessagePattern:messagePattern]; - NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; - - if ([self processReceivedInvocation:invocation]) { - NSString *result = nil; - [invocation getReturnValue:&result]; - return result; - } else { - return [super description]; - } -} - -- (id)copy { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; - [self expectMessagePattern:messagePattern]; - NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; - - if ([self processReceivedInvocation:invocation]) { - id result = nil; - [invocation getReturnValue:&result]; - return result; - } else { - return [super copy]; - } -} - -- (id)mutableCopy { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:_cmd]; - [self expectMessagePattern:messagePattern]; - NSInvocation *invocation = [NSInvocation invocationWithTarget:self selector:_cmd]; - - if ([self processReceivedInvocation:invocation]) { - id result = nil; - [invocation getReturnValue:&result]; - return result; - } else { - return [super mutableCopy]; - } -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWNull.h b/Pods/Kiwi/Kiwi/KWNull.h deleted file mode 100755 index 4a91900..0000000 --- a/Pods/Kiwi/Kiwi/KWNull.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -// KWNull exists to represent the same thing as NSNull, except that Kiwi needs -// to distinguish between null singletons used internally and those a user -// is using as an object parameter. -@interface KWNull : NSObject - -#pragma mark - -#pragma mark Initializing - -+ (id)null; - -@end diff --git a/Pods/Kiwi/Kiwi/KWNull.m b/Pods/Kiwi/Kiwi/KWNull.m deleted file mode 100755 index 45b9f10..0000000 --- a/Pods/Kiwi/Kiwi/KWNull.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWNull.h" - -@implementation KWNull - -#pragma mark - -#pragma mark Initializing - -static KWNull *sharedNull = nil; - -+ (id)null { - if (sharedNull == nil) { - sharedNull = [[super allocWithZone:nil] init]; - } - - return sharedNull; -} - -+ (id)allocWithZone:(NSZone *)zone { - return [[self null] retain]; -} - -- (id)copyWithZone:(NSZone *)zone { - return self; -} - -- (id)retain { - return self; -} - -- (NSUInteger)retainCount { - return NSUIntegerMax; -} - -- (oneway void)release { -} - -- (id)autorelease { - return self; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWObjCUtilities.h b/Pods/Kiwi/Kiwi/KWObjCUtilities.h deleted file mode 100755 index 9487454..0000000 --- a/Pods/Kiwi/Kiwi/KWObjCUtilities.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -#pragma mark - -#pragma mark Objective-C Type Utilities - -BOOL KWObjCTypeEqualToObjCType(const char *firstObjCType, const char *secondObjCType); -BOOL KWObjCTypeIsNumeric(const char *objCType); -BOOL KWObjCTypeIsFloatingPoint(const char *objCType); -BOOL KWObjCTypeIsIntegral(const char *objCType); -BOOL KWObjCTypeIsSignedIntegral(const char *objCType); -BOOL KWObjCTypeIsUnsignedIntegral(const char *objCType); -BOOL KWObjCTypeIsObject(const char *objCType); -BOOL KWObjCTypeIsCharString(const char *objCType); -BOOL KWObjCTypeIsClass(const char *objCType); -BOOL KWObjCTypeIsSelector(const char *objCType); -BOOL KWObjCTypeIsPointerToType(const char *objCType); -BOOL KWObjCTypeIsPointerLike(const char *objCType); -BOOL KWObjCTypeIsUnknown(const char *objCType); - -NSUInteger KWObjCTypeLength(const char *objCType); - -#pragma mark - -#pragma mark Selector Utlities - -NSUInteger KWSelectorParameterCount(SEL selector); diff --git a/Pods/Kiwi/Kiwi/KWPendingNode.h b/Pods/Kiwi/Kiwi/KWPendingNode.h deleted file mode 100755 index 9e79a6d..0000000 --- a/Pods/Kiwi/Kiwi/KWPendingNode.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWExampleNode.h" - -@class KWCallSite; - -@interface KWPendingNode : NSObject { -@private - KWCallSite *callSite; - NSString *description; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; - -+ (id)pendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; - -#pragma mark - -#pragma mark Getting Call Sites - -@property (nonatomic, readonly) KWCallSite *callSite; - -#pragma mark - -#pragma mark Getting Descriptions - -@property (nonatomic, readonly) NSString *description; - -@end diff --git a/Pods/Kiwi/Kiwi/KWPendingNode.m b/Pods/Kiwi/Kiwi/KWPendingNode.m deleted file mode 100755 index ebc9489..0000000 --- a/Pods/Kiwi/Kiwi/KWPendingNode.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWPendingNode.h" -#import "KWExampleNodeVisitor.h" - -@implementation KWPendingNode - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { - if ((self = [super init])) { - callSite = [aCallSite retain]; - description = [aDescription copy]; - } - - return self; -} - -+ (id)pendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription { - return [[[self alloc] initWithCallSite:aCallSite description:aDescription] autorelease]; -} - -- (void)dealloc { - [callSite release]; - [description release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Getting Call Sites - -@synthesize callSite; - -#pragma mark - -#pragma mark Getting Descriptions - -@synthesize description; - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor { - [aVisitor visitPendingNode:self]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWProbePoller.h b/Pods/Kiwi/Kiwi/KWProbePoller.h deleted file mode 100755 index 6acadbd..0000000 --- a/Pods/Kiwi/Kiwi/KWProbePoller.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// KWProbePoller.h -// iOSFalconCore -// -// Created by Luke Redpath on 13/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import -#import "KWProbe.h" - -#define kKW_DEFAULT_PROBE_DELAY 0.1 - -@interface KWProbePoller : NSObject -{ - NSTimeInterval timeoutInterval; - NSTimeInterval delayInterval; -} -- (id)initWithTimeout:(NSTimeInterval)theTimeout delay:(NSTimeInterval)theDelay; -- (BOOL)check:(id)probe; -@end diff --git a/Pods/Kiwi/Kiwi/KWProbePoller.m b/Pods/Kiwi/Kiwi/KWProbePoller.m deleted file mode 100755 index d065a12..0000000 --- a/Pods/Kiwi/Kiwi/KWProbePoller.m +++ /dev/null @@ -1,72 +0,0 @@ -// -// KWProbePoller.m -// iOSFalconCore -// -// Created by Luke Redpath on 13/01/2011. -// Copyright 2011 LJR Software Limited. All rights reserved. -// - -#import "KWProbePoller.h" - -@interface KWTimeout : NSObject -{ - NSDate *timeoutDate; -} -- (id)initWithTimeout:(NSTimeInterval)timeout; -- (BOOL)hasTimedOut; -@end - -@implementation KWTimeout - -- (id)initWithTimeout:(NSTimeInterval)timeout -{ - if ((self = [super init])) { - timeoutDate = [[NSDate alloc] initWithTimeIntervalSinceNow:timeout]; - } - return self; -} - -- (void)dealloc -{ - [timeoutDate release]; - [super dealloc]; -} - -- (BOOL)hasTimedOut -{ - return [timeoutDate timeIntervalSinceDate:[NSDate date]] < 0; -} - -@end - -#pragma mark - - -@implementation KWProbePoller - -- (id)initWithTimeout:(NSTimeInterval)theTimeout delay:(NSTimeInterval)theDelay; -{ - if ((self = [super init])) { - timeoutInterval = theTimeout; - delayInterval = theDelay; - } - return self; -} - -- (BOOL)check:(id)probe; -{ - KWTimeout *timeout = [[KWTimeout alloc] initWithTimeout:timeoutInterval]; - - while (![probe isSatisfied]) { - if ([timeout hasTimedOut]) { - [timeout release]; - return NO; - } - [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:delayInterval]]; - [probe sample]; - } - [timeout release]; - - return YES; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWRaiseMatcher.h b/Pods/Kiwi/Kiwi/KWRaiseMatcher.h deleted file mode 100755 index 45588b5..0000000 --- a/Pods/Kiwi/Kiwi/KWRaiseMatcher.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWRaiseMatcher : KWMatcher { -@private - SEL selector; - NSException *exception; - NSException *actualException; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)raiseWhenSent:(SEL)aSelector; -- (void)raiseWithName:(NSString *)aName whenSent:(SEL)aSelector; -- (void)raiseWithReason:(NSString *)aReason whenSent:(SEL)aSelector; -- (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason whenSent:(SEL)aSelector; - -@end diff --git a/Pods/Kiwi/Kiwi/KWReceiveMatcher.h b/Pods/Kiwi/Kiwi/KWReceiveMatcher.h deleted file mode 100755 index 932b555..0000000 --- a/Pods/Kiwi/Kiwi/KWReceiveMatcher.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWCountType.h" -#import "KWMatcher.h" -#import "KWMatchVerifier.h" - -@class KWMessagePattern; -@class KWMessageTracker; - -@interface KWReceiveMatcher : KWMatcher { -@private - KWMessageTracker *messageTracker; - BOOL willEvaluateMultipleTimes; -} -@property (nonatomic, assign) BOOL willEvaluateMultipleTimes; - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)receive:(SEL)aSelector; -- (void)receive:(SEL)aSelector withCount:(NSUInteger)aCount; -- (void)receive:(SEL)aSelector withCountAtLeast:(NSUInteger)aCount; -- (void)receive:(SEL)aSelector withCountAtMost:(NSUInteger)aCount; -- (void)receive:(SEL)aSelector andReturn:(id)aValue; -- (void)receive:(SEL)aSelector andReturn:(id)aValue withCount:(NSUInteger)aCount; -- (void)receive:(SEL)aSelector andReturn:(id)aValue withCountAtLeast:(NSUInteger)aCount; -- (void)receive:(SEL)aSelector andReturn:(id)aValue withCountAtMost:(NSUInteger)aCount; -- (void)receiveMessagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; -- (void)receiveMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue countType:(KWCountType)aCountType count:(NSUInteger)aCount; - -@end - -@interface KWMatchVerifier(KWReceiveMatcherAdditions) - -#pragma mark - -#pragma mark Verifying - -- (void)receive:(SEL)aSelector withArguments:(id)firstArgument, ...; -- (void)receive:(SEL)aSelector withCount:(NSUInteger)aCount arguments:(id)firstArgument, ...; -- (void)receive:(SEL)aSelector withCountAtLeast:(NSUInteger)aCount arguments:(id)firstArgument, ...; -- (void)receive:(SEL)aSelector withCountAtMost:(NSUInteger)aCount arguments:(id)firstArgument, ...; -- (void)receive:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ...; -- (void)receive:(SEL)aSelector andReturn:(id)aValue withCount:(NSUInteger)aCount arguments:(id)firstArgument, ...; -- (void)receive:(SEL)aSelector andReturn:(id)aValue withCountAtLeast:(NSUInteger)aCount arguments:(id)firstArgument, ...; -- (void)receive:(SEL)aSelector andReturn:(id)aValue withCountAtMost:(NSUInteger)aCount arguments:(id)firstArgument, ...; - -#pragma mark Invocation Capturing Methods - -- (id)receive; -- (id)receiveWithCount:(NSUInteger)aCount; -- (id)receiveWithCountAtLeast:(NSUInteger)aCount; -- (id)receiveWithCountAtMost:(NSUInteger)aCount; -- (id)receiveAndReturn:(id)aValue; -- (id)receiveAndReturn:(id)aValue withCount:(NSUInteger)aCount; -- (id)receiveAndReturn:(id)aValue withCountAtLeast:(NSUInteger)aCount; -- (id)receiveAndReturn:(id)aValue withCountAtMost:(NSUInteger)aCount; - -@end diff --git a/Pods/Kiwi/Kiwi/KWRegisterMatchersNode.h b/Pods/Kiwi/Kiwi/KWRegisterMatchersNode.h deleted file mode 100755 index d0517fc..0000000 --- a/Pods/Kiwi/Kiwi/KWRegisterMatchersNode.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWExampleNode.h" - -@class KWCallSite; - -@interface KWRegisterMatchersNode : NSObject { -@private - KWCallSite *callSite; - NSString *namespacePrefix; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; - -+ (id)registerMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; - -#pragma mark - -#pragma mark Getting Call Sites - -@property (nonatomic, readonly) KWCallSite *callSite; - -#pragma mark - -#pragma mark Getting Namespace Prefixes - -@property (nonatomic, readonly) NSString *namespacePrefix; - -@end diff --git a/Pods/Kiwi/Kiwi/KWRegisterMatchersNode.m b/Pods/Kiwi/Kiwi/KWRegisterMatchersNode.m deleted file mode 100755 index e1e7cbe..0000000 --- a/Pods/Kiwi/Kiwi/KWRegisterMatchersNode.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWRegisterMatchersNode.h" -#import "KWExampleNodeVisitor.h" - -@implementation KWRegisterMatchersNode - -#pragma mark - -#pragma mark Initializing - -- (id)initWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { - if ((self = [super init])) { - callSite = [aCallSite retain]; - namespacePrefix = [aNamespacePrefix copy]; - } - - return self; -} - -+ (id)registerMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { - return [[[self alloc] initWithCallSite:aCallSite namespacePrefix:aNamespacePrefix] autorelease]; -} - -- (void)dealloc { - [callSite release]; - [namespacePrefix release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Getting Call Sites - -@synthesize callSite; - -#pragma mark - -#pragma mark Getting Namespace Prefixes - -@synthesize namespacePrefix; - -#pragma mark - -#pragma mark Accepting Visitors - -- (void)acceptExampleNodeVisitor:(id)aVisitor { - [aVisitor visitRegisterMatchersNode:self]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWReporting.h b/Pods/Kiwi/Kiwi/KWReporting.h deleted file mode 100755 index 595b2ca..0000000 --- a/Pods/Kiwi/Kiwi/KWReporting.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@class KWFailure; - -@protocol KWReporting - -#pragma mark - -#pragma mark Reporting Failures - -- (void)reportFailure:(KWFailure *)failure; - -@end diff --git a/Pods/Kiwi/Kiwi/KWRespondToSelectorMatcher.h b/Pods/Kiwi/Kiwi/KWRespondToSelectorMatcher.h deleted file mode 100755 index d41c82e..0000000 --- a/Pods/Kiwi/Kiwi/KWRespondToSelectorMatcher.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import "KWMatcher.h" - -@interface KWRespondToSelectorMatcher : KWMatcher { -@private - SEL selector; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)respondToSelector:(SEL)aSelector; - -@end diff --git a/Pods/Kiwi/Kiwi/KWRespondToSelectorMatcher.m b/Pods/Kiwi/Kiwi/KWRespondToSelectorMatcher.m deleted file mode 100755 index ee08aaf..0000000 --- a/Pods/Kiwi/Kiwi/KWRespondToSelectorMatcher.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWRespondToSelectorMatcher.h" -#import "KWFormatter.h" - -@interface KWRespondToSelectorMatcher() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readwrite) SEL selector; - -@end - -@implementation KWRespondToSelectorMatcher - -#pragma mark - -#pragma mark Properties - -@synthesize selector; - -#pragma mark - -#pragma mark Getting Matcher Strings - -+ (NSArray *)matcherStrings { - return [NSArray arrayWithObject:@"respondToSelector:"]; -} - -#pragma mark - -#pragma mark Matching - -- (BOOL)evaluate { - return [self.subject respondsToSelector:self.selector]; -} - -#pragma mark - -#pragma mark Getting Failure Messages - -- (NSString *)failureMessageForShould { - return [NSString stringWithFormat:@"expected subject to respond to -%@", - NSStringFromSelector(self.selector)]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"respond to -%@", NSStringFromSelector(self.selector)]; -} - -#pragma mark - -#pragma mark Configuring Matchers - -- (void)respondToSelector:(SEL)aSelector { - self.selector = aSelector; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWSpec.h b/Pods/Kiwi/Kiwi/KWSpec.h deleted file mode 100755 index 67b2aae..0000000 --- a/Pods/Kiwi/Kiwi/KWSpec.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import -#import "KWExpectationType.h" -#import "KWVerifying.h" -#import "KWExampleGroupDelegate.h" - - -@class KWCallSite; - -@interface KWSpec : SenTestCase - -#pragma mark - -#pragma mark Adding Verifiers - -+ (id)addVerifier:(id)aVerifier; -+ (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; -+ (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; -+ (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout; - -#pragma mark - -#pragma mark Building Example Groups - -+ (void)buildExampleGroups; - -@end diff --git a/Pods/Kiwi/Kiwi/KWSpec.m b/Pods/Kiwi/Kiwi/KWSpec.m deleted file mode 100755 index 033f1bf..0000000 --- a/Pods/Kiwi/Kiwi/KWSpec.m +++ /dev/null @@ -1,131 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWSpec.h" -#import -#import "KWExampleGroup.h" -#import "KWExampleGroupBuilder.h" -#import "KWIntercept.h" -#import "KWObjCUtilities.h" -#import "KWStringUtilities.h" -#import "NSMethodSignature+KiwiAdditions.h" -#import "KWFailure.h" - -#define kKWINVOCATION_EXAMPLE_GROUP_KEY @"__KWExampleGroupKey" - -@interface KWSpec() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, retain) KWExampleGroup *exampleGroup; - -@end - -@implementation KWSpec - -@synthesize exampleGroup; - -- (void)dealloc -{ - objc_setAssociatedObject([self invocation], kKWINVOCATION_EXAMPLE_GROUP_KEY, nil, OBJC_ASSOCIATION_RETAIN); - [exampleGroup release]; - [super dealloc]; -} - -/* This method is only implemented by sub-classes */ - -+ (void)buildExampleGroups {} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"-[%@ example]", NSStringFromClass([self class])]; -} - -#pragma mark - -#pragma mark Getting Invocations - -/* Called by the SenTestingKit test suite to get an array of invocations that - should be run on instances of test cases. */ - -+ (NSArray *)testInvocations -{ - SEL selector = @selector(buildExampleGroups); - - // Only return invocation if the receiver is a concrete spec that has overridden -buildExampleGroups. - if ([self methodForSelector:selector] == [KWSpec methodForSelector:selector]) - return nil; - - NSArray *exampleGroups = [[KWExampleGroupBuilder sharedExampleGroupBuilder] buildExampleGroups:^{ - [self buildExampleGroups]; - }]; - - NSMutableArray *invocations = [NSMutableArray array]; - - for (KWExampleGroup *exampleGroup in exampleGroups) { - // Add a single dummy invocation for each example group - NSMethodSignature *methodSignature = [NSMethodSignature signatureWithObjCTypes:[KWEncodingForVoidMethod() UTF8String]]; - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature]; - - [invocations addObject:invocation]; - - // because SenTest will modify the invocation target, we'll have to store - // another reference to the example group so we can retrieve it later - objc_setAssociatedObject(invocation, kKWINVOCATION_EXAMPLE_GROUP_KEY, exampleGroup, OBJC_ASSOCIATION_RETAIN); - } - - return invocations; -} - -#pragma mark - -#pragma mark Running Specs - -- (void)invokeTest -{ - self.exampleGroup = objc_getAssociatedObject([self invocation], kKWINVOCATION_EXAMPLE_GROUP_KEY); - - NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init]; - - @try { - [self.exampleGroup runWithDelegate:self]; - } @catch (NSException *exception) { - [self failWithException:exception]; - } - - [subPool release]; -} - -#pragma mark - KWExampleGroupDelegate methods - -- (void)exampleGroup:(KWExampleGroup *)exampleGroup didFailWithFailure:(KWFailure *)failure -{ - [self failWithException:[failure exceptionValue]]; -} - -#pragma mark - -#pragma mark Verification proxies - -+ (id)addVerifier:(id)aVerifier -{ - return [[[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExampleGroup] addVerifier:aVerifier]; -} - -+ (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite -{ - return [[[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExampleGroup] addExistVerifierWithExpectationType:anExpectationType callSite:aCallSite]; -} - -+ (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite -{ - return [[[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExampleGroup] addMatchVerifierWithExpectationType:anExpectationType callSite:aCallSite]; -} - -+ (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout -{ - return [[[KWExampleGroupBuilder sharedExampleGroupBuilder] currentExampleGroup] addAsyncVerifierWithExpectationType:anExpectationType callSite:aCallSite timeout:timeout]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWStringUtilities.h b/Pods/Kiwi/Kiwi/KWStringUtilities.h deleted file mode 100755 index e4ab0bd..0000000 --- a/Pods/Kiwi/Kiwi/KWStringUtilities.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -#pragma mark - -#pragma mark Checking for Case Separated Words - -BOOL KWStringHasWordPrefix(NSString *string, NSString *prefix); -BOOL KWStringHasStrictWordPrefix(NSString *string, NSString *prefix); -BOOL KWStringHasWord(NSString *string, NSString *word); - -#pragma mark - -#pragma mark Getting Type Encodings - -NSString *KWEncodingWithObjCTypes(const char *firstType, ...) NS_REQUIRES_NIL_TERMINATION; -NSString *KWEncodingForVoidMethod(void); diff --git a/Pods/Kiwi/Kiwi/KWStub.h b/Pods/Kiwi/Kiwi/KWStub.h deleted file mode 100755 index f83df99..0000000 --- a/Pods/Kiwi/Kiwi/KWStub.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@class KWMessagePattern; - -@interface KWStub : NSObject { -@private - KWMessagePattern *messagePattern; - id value; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern; -- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue; - -+ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern; -+ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) KWMessagePattern *messagePattern; -@property (nonatomic, readonly) id value; - -#pragma mark - -#pragma mark Processing Invocations - -- (BOOL)processInvocation:(NSInvocation *)anInvocation; - -@end diff --git a/Pods/Kiwi/Kiwi/KWStub.m b/Pods/Kiwi/Kiwi/KWStub.m deleted file mode 100755 index 97b3e31..0000000 --- a/Pods/Kiwi/Kiwi/KWStub.m +++ /dev/null @@ -1,135 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWStub.h" -#import "KWMessagePattern.h" -#import "KWObjCUtilities.h" -#import "KWStringUtilities.h" -#import "KWValue.h" - -@implementation KWStub - -#pragma mark - -#pragma mark Initializing - -- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern { - return [self initWithMessagePattern:aMessagePattern value:nil]; -} - -- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue { - if ((self = [super init])) { - messagePattern = [aMessagePattern retain]; - value = [aValue retain]; - } - - return self; -} - -+ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern { - return [self stubWithMessagePattern:aMessagePattern value:nil]; -} - -+ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue { - return [[[self alloc] initWithMessagePattern:aMessagePattern value:aValue] autorelease]; -} - -- (void)dealloc { - [messagePattern release]; - [value release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize messagePattern; -@synthesize value; - -#pragma mark - -#pragma mark Processing Invocations - -- (void)writeZerosToInvocationReturnValue:(NSInvocation *)anInvocation { - NSUInteger returnLength = [[anInvocation methodSignature] methodReturnLength]; - - if (returnLength == 0) - return; - - void *bytes = malloc(returnLength); - memset(bytes, 0, returnLength); - [anInvocation setReturnValue:bytes]; - free(bytes); -} - -- (NSData *)valueDataWithObjCType:(const char *)objCType { - assert(self.value && "self.value must not be nil"); - NSData *data = [self.value dataForObjCType:objCType]; - - if (data == nil) { - [NSException raise:@"KWStubException" format:@"wrapped stub value type (%s) could not be converted to the target type (%s)", - [self.value objCType], - objCType]; - } - - return data; -} - -- (void)writeWrappedValueToInvocationReturnValue:(NSInvocation *)anInvocation { - assert(self.value && "self.value must not be nil"); - const char *returnType = [[anInvocation methodSignature] methodReturnType]; - NSData *data = nil; - - // When the return type is not the same as the type of the wrapped value, - // attempt to convert the wrapped value to the desired type. - - if (KWObjCTypeEqualToObjCType([self.value objCType], returnType)) - data = [self.value dataValue]; - else - data = [self valueDataWithObjCType:returnType]; - - [anInvocation setReturnValue:(void *)[data bytes]]; -} - -- (void)writeObjectValueToInvocationReturnValue:(NSInvocation *)anInvocation { - assert(self.value && "self.value must not be nil"); - [anInvocation setReturnValue:&value]; - -#ifndef __clang_analyzer__ - NSString *selectorString = NSStringFromSelector([anInvocation selector]); - - // To conform to memory management conventions, retain if writing a result - // that begins with alloc, new or contains copy. This shows up as a false - // positive in clang due to the runtime conditional, so ignore it. - if (KWStringHasWordPrefix(selectorString, @"alloc") || - KWStringHasWordPrefix(selectorString, @"new") || - KWStringHasWord(selectorString, @"copy") || - KWStringHasWord(selectorString, @"Copy")) { - [self.value retain]; - } -#endif -} - -- (BOOL)processInvocation:(NSInvocation *)anInvocation { - if (![self.messagePattern matchesInvocation:anInvocation]) - return NO; - - if (self.value == nil) - [self writeZerosToInvocationReturnValue:anInvocation]; - else if ([self.value isKindOfClass:[KWValue class]]) - [self writeWrappedValueToInvocationReturnValue:anInvocation]; - else - [self writeObjectValueToInvocationReturnValue:anInvocation]; - - return YES; -} - -#pragma mark - -#pragma mark Debugging - -- (NSString *)description { - return [NSString stringWithFormat:@"messagePattern: %@\nvalue: %@", self.messagePattern, self.value]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWTestCase.h b/Pods/Kiwi/Kiwi/KWTestCase.h deleted file mode 100755 index d3e5e7d..0000000 --- a/Pods/Kiwi/Kiwi/KWTestCase.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" -#import -#import "KWExpectationType.h" -#import "KWReporting.h" - -@class KWCallSite; -@class KWMatcherFactory; - -@protocol KWVerifying; - -// Deprecated. This is here just in case blocks are not enabled. -@interface KWTestCase : SenTestCase { -@private - KWMatcherFactory *matcherFactory; - NSMutableArray *verifiers; - NSMutableArray *failures; -} - -#pragma mark - -#pragma mark Configuring Example Environments - -- (void)setUpExampleEnvironment; -- (void)tearDownExampleEnvironment; - -#pragma mark - -#pragma mark Marking Pending Examples - -- (void)markPendingWithCallSite:(KWCallSite *)aCallSite; -- (void)markPendingWithCallSite:(KWCallSite *)aCallSite :(NSString *)aDescription; - -#pragma mark - -#pragma mark Adding Verifiers - -- (id)addVerifier:(id)aVerifier; -- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; -- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; -- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout; - -@end diff --git a/Pods/Kiwi/Kiwi/KWTestCase.m b/Pods/Kiwi/Kiwi/KWTestCase.m deleted file mode 100755 index 3f88eea..0000000 --- a/Pods/Kiwi/Kiwi/KWTestCase.m +++ /dev/null @@ -1,192 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KWTestCase.h" -#import -#import "KWDeviceInfo.h" -#import "KWExistVerifier.h" -#import "KWFailure.h" -#import "KWIntercept.h" -#import "KWMatcherFactory.h" -#import "KWMatchVerifier.h" -#import "KWAsyncVerifier.h" -#import "KWObjCUtilities.h" -#import "KWStringUtilities.h" -#import "KWVerifying.h" -#import "NSMethodSignature+KiwiAdditions.h" - -@interface KWTestCase() - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) KWMatcherFactory *matcherFactory; -@property (nonatomic, readonly) NSMutableArray *verifiers; -@property (nonatomic, readonly) NSMutableArray *failures; -@end - -@implementation KWTestCase - -#pragma mark - -#pragma mark Initializing - -// Initializer used by the SenTestingKit test suite to initialize a test case -// for each test invocation returned in +testInvocations. -- (id)initWithInvocation:(NSInvocation *)anInvocation { - if ((self = [super initWithInvocation:anInvocation])) { - matcherFactory = [[KWMatcherFactory alloc] init]; - verifiers = [[NSMutableArray alloc] init]; - failures = [[NSMutableArray alloc] init]; - } - - return self; -} - -- (void)dealloc { - [matcherFactory release]; - [verifiers release]; - [failures release]; - [super dealloc]; -} - -#pragma mark - -#pragma mark Properties - -@synthesize verifiers; -@synthesize matcherFactory; -@synthesize failures; - -#pragma mark - -#pragma mark Configuring Example Environments - -- (void)setUpExampleEnvironment { - [self.matcherFactory registerMatcherClassesWithNamespacePrefix:@"KW"]; -} - -- (void)tearDownExampleEnvironment { - KWClearAllMessageSpies(); - KWClearAllObjectStubs(); -} - -#pragma mark - -#pragma mark Marking Pending Examples - -- (void)markPendingWithCallSite:(KWCallSite *)aCallSite { - KWFailure *failure = [KWFailure failureWithCallSite:aCallSite format:@"PENDING"]; - [self reportFailure:failure]; -} - -- (void)markPendingWithCallSite:(KWCallSite *)aCallSite :(NSString *)aDescription { - KWFailure *failure = [KWFailure failureWithCallSite:aCallSite format:@"PENDING (%@)", aDescription]; - [self reportFailure:failure]; -} - -#pragma mark - -#pragma mark Adding Verifiers - -- (id)addVerifier:(id)aVerifier { - if (![self.verifiers containsObject:aVerifier]) - [self.verifiers addObject:aVerifier]; - - return aVerifier; -} - -- (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { - id verifier = [KWExistVerifier existVerifierWithExpectationType:anExpectationType callSite:aCallSite reporter:self]; - [self.verifiers addObject:verifier]; - return verifier; -} - -- (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite { - id verifier = [KWMatchVerifier matchVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self]; - [self.verifiers addObject:verifier]; - return verifier; -} - -- (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSInteger)timeout { - id verifier = [KWAsyncVerifier asyncVerifierWithExpectationType:anExpectationType callSite:aCallSite matcherFactory:self.matcherFactory reporter:self probeTimeout:timeout]; - [self.verifiers addObject:verifier]; - return verifier; -} - -#pragma mark - -#pragma mark Reporting Failures - -+ (KWFailure *)tidiedFailureWithFailure:(KWFailure *)aFailure { - if ([KWDeviceInfo isSimulator]) { - // \uff1a is the unicode for a fill width colon, as opposed to a - // regular :. This escape is performed so that Xcode doesn't truncate - // the error in the build results window, which is nice for build - // tests. - NSString *escapedMessage = [aFailure.message stringByReplacingOccurrencesOfString:@":" withString:@"\uff1a"]; - return [KWFailure failureWithCallSite:aFailure.callSite message:escapedMessage]; - } else { - return aFailure; - } -} - -- (void)reportFailure:(KWFailure *)aFailure; { - [self.failures addObject:aFailure]; - KWFailure *tidiedFailure = [[self class] tidiedFailureWithFailure:aFailure]; - [self failWithException:[tidiedFailure exceptionValue]]; -} - -#pragma mark - -#pragma mark Getting Invocations - -// Called by the SenTestingKit test suite to get an array of invocations that -// should be run on instances of test cases. -+ (NSArray *)testInvocations { - // Examples are methods returning void with no parameters in the receiver - // that begin with "it" followed by an uppercase word. - NSMutableArray *exampleInvocations = [[[NSMutableArray alloc] init] autorelease]; - unsigned int methodCount = 0; - Method *methods = class_copyMethodList([self class], &methodCount); - - for (unsigned int i = 0; i < methodCount; i++) { - SEL selector = method_getName(methods[i]); - NSString *selectorString = NSStringFromSelector(selector); - - if (KWStringHasStrictWordPrefix(selectorString, @"it")) { - const char *encoding = method_getTypeEncoding(methods[i]); - NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:encoding]; - - if ([signature numberOfMessageArguments] > 0 || - !KWObjCTypeEqualToObjCType([signature methodReturnType], @encode(void))) - continue; - - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; - [invocation setSelector:selector]; - [exampleInvocations addObject:invocation]; - } - } - - free(methods); - return exampleInvocations; -} - -#pragma mark - -#pragma mark Running Test Cases - -// Called by the SenTestingKit test suite when it is time to run the test. -- (void)invokeTest { - NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init]; - [self setUpExampleEnvironment]; - - @try { - [super invokeTest]; - - for (id verifier in self.verifiers) - [verifier exampleWillEnd]; - } @catch (NSException *exception) { - [self failWithException:exception]; - } - - [self tearDownExampleEnvironment]; - [subPool release]; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWUserDefinedMatcher.h b/Pods/Kiwi/Kiwi/KWUserDefinedMatcher.h deleted file mode 100755 index ba4c1fc..0000000 --- a/Pods/Kiwi/Kiwi/KWUserDefinedMatcher.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// KWUserDefinedMatcher.h -// Kiwi -// -// Created by Luke Redpath on 16/06/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import -#import "KWMatcher.h" - -typedef BOOL (^KWUserDefinedMatcherBlock)(); - -@interface KWUserDefinedMatcher : KWMatcher -{ - KWUserDefinedMatcherBlock matcherBlock; - SEL selector; - NSInvocation *invocation; - NSString *failureMessageForShould; - NSString *failureMessageForShouldNot; -} -@property (nonatomic, assign) SEL selector; -@property (nonatomic, copy) NSString *failureMessageForShould; -@property (nonatomic, copy) NSString *failureMessageForShouldNot; -@property (nonatomic, assign) KWUserDefinedMatcherBlock matcherBlock; -@property (nonatomic, copy) NSString *description; - -+ (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; -- (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; -- (void)setSubject:(id)aSubject; -@end - -#pragma mark - - -typedef NSString * (^KWUserDefinedMatcherMessageBlock)(id); - -@interface KWUserDefinedMatcherBuilder : NSObject -{ - KWUserDefinedMatcher *matcher; - KWUserDefinedMatcherMessageBlock failureMessageForShouldBlock; - KWUserDefinedMatcherMessageBlock failureMessageForShouldNotBlock; - NSString *description; -} -@property (nonatomic, readonly) NSString *key; - -+ (id)builder; -+ (id)builderForSelector:(SEL)aSelector; -- (id)initWithSelector:(SEL)aSelector; - -#pragma mark - -#pragma mark Configuring The Matcher - -- (void)match:(KWUserDefinedMatcherBlock)block; -- (void)failureMessageForShould:(KWUserDefinedMatcherMessageBlock)block; -- (void)failureMessageForShouldNot:(KWUserDefinedMatcherMessageBlock)block; -- (void)description:(NSString *)description; - -#pragma mark - -#pragma mark Buiding The Matcher - -- (KWUserDefinedMatcher *)buildMatcherWithSubject:(id)subject; -@end \ No newline at end of file diff --git a/Pods/Kiwi/Kiwi/KWUserDefinedMatcher.m b/Pods/Kiwi/Kiwi/KWUserDefinedMatcher.m deleted file mode 100755 index c83d669..0000000 --- a/Pods/Kiwi/Kiwi/KWUserDefinedMatcher.m +++ /dev/null @@ -1,178 +0,0 @@ -// -// KWUserDefinedMatcher.m -// Kiwi -// -// Created by Luke Redpath on 16/06/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import "KWUserDefinedMatcher.h" - -@implementation KWUserDefinedMatcher - -@synthesize selector; -@synthesize failureMessageForShould; -@synthesize failureMessageForShouldNot; -@synthesize matcherBlock; -@synthesize description; - -+ (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock -{ - return [[[self alloc] initWithSubject:aSubject block:aBlock] autorelease]; -} - -- (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock -{ - if ((self = [super initWithSubject:aSubject])) { - matcherBlock = [aBlock copy]; - self.description = @"match user defined matcher"; - } - return self; -} - -- (void)dealloc -{ - [invocation release]; - [matcherBlock release]; - [super dealloc]; -} - -- (BOOL)evaluate -{ - BOOL result; - - if (invocation.methodSignature.numberOfArguments == 3) { - id argument; - [invocation getArgument:&argument atIndex:2]; - result = matcherBlock(self.subject, argument); - } else { - result = matcherBlock(self.subject); - } - return result; -} - -- (void)setSubject:(id)aSubject { - if (aSubject != subject) { - [subject release]; - subject = [aSubject retain]; - } -} - -#pragma mark - -#pragma mark Message forwarding - -- (BOOL)respondsToSelector:(SEL)aSelector -{ - if (aSelector == self.selector) { - return YES; - } - return [super respondsToSelector:aSelector]; -} - -- (void)forwardInvocation:(NSInvocation *)anInvocation -{ - [invocation autorelease]; - invocation = [anInvocation retain]; -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector -{ - if (aSelector == self.selector) { - NSString *selectorString = NSStringFromSelector(self.selector); - - /** - * TODO: find a way of doing this that: - * - doesn't require dummy methods (create the method signatures manually) - * - supports an unlimited number of arguments - */ - if ([selectorString hasSuffix:@":"]) { - return [self methodSignatureForSelector:@selector(matcherMethodWithArgument:)]; - } else { - return [self methodSignatureForSelector:@selector(matcherMethodWithoutArguments)]; - } - } - return [super methodSignatureForSelector:aSelector]; -} - -- (void)matcherMethodWithoutArguments {} -- (void)matcherMethodWithArgument:(id)argument {} - -@end - -#pragma mark - - -@implementation KWUserDefinedMatcherBuilder - -+ (id)builder -{ - return [self builderForSelector:nil]; -} - -+ (id)builderForSelector:(SEL)aSelector { - return [[[self alloc] initWithSelector:aSelector] autorelease]; -} - -- (id)initWithSelector:(SEL)aSelector { - if ((self = [super init])) { - matcher = [[KWUserDefinedMatcher alloc] init]; - matcher.selector = aSelector; - } - return self; -} - -- (void)dealloc -{ - [matcher release]; - [failureMessageForShouldBlock release]; - [super dealloc]; -} - -- (NSString *)key { - return NSStringFromSelector(matcher.selector); -} - -#pragma mark - -#pragma mark Configuring The Matcher - -- (void)match:(KWUserDefinedMatcherBlock)block { - matcher.matcherBlock = block; -} - -- (void)failureMessageForShould:(KWUserDefinedMatcherMessageBlock)block { - [failureMessageForShouldBlock release]; - failureMessageForShouldBlock = [block copy]; -} - -- (void)failureMessageForShouldNot:(KWUserDefinedMatcherMessageBlock)block { - [failureMessageForShouldNotBlock release]; - failureMessageForShouldNotBlock = [block copy]; -} - -- (void)description:(NSString *)aDescription -{ - [description release]; - description = [aDescription copy]; -} - -#pragma mark - -#pragma mark Buiding The Matcher - -- (KWUserDefinedMatcher *)buildMatcherWithSubject:(id)subject { - [matcher setSubject:subject]; - - if (failureMessageForShouldBlock) { - [matcher setFailureMessageForShould:failureMessageForShouldBlock(subject)]; - } - - if (failureMessageForShouldNotBlock) { - [matcher setFailureMessageForShouldNot:failureMessageForShouldNotBlock(subject)]; - } - - if (description) { - [matcher setDescription:description]; - } - - return matcher; -} - -@end diff --git a/Pods/Kiwi/Kiwi/KWValue.h b/Pods/Kiwi/Kiwi/KWValue.h deleted file mode 100755 index 8205426..0000000 --- a/Pods/Kiwi/Kiwi/KWValue.h +++ /dev/null @@ -1,97 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface KWValue : NSObject { -@private - const char *objCType; - id value; -} - -#pragma mark - -#pragma mark Initializing - -- (id)initWithBytes:(const void *)bytes objCType:(const char *)anObjCType; - -+ (id)valueWithBytes:(const void *)bytes objCType:(const char *)anObjCType; -+ (id)valueWithBool:(BOOL)aValue; -+ (id)valueWithChar:(char)aValue; -+ (id)valueWithDouble:(double)aValue; -+ (id)valueWithFloat:(float)aValue; -+ (id)valueWithInt:(int)aValue; -+ (id)valueWithInteger:(NSInteger)aValue; -+ (id)valueWithLong:(long)aValue; -+ (id)valueWithLongLong:(long long)value; -+ (id)valueWithShort:(short)aValue; -+ (id)valueWithUnsignedChar:(unsigned char)aValue; -+ (id)valueWithUnsignedInt:(unsigned int)aValue; -+ (id)valueWithUnsignedInteger:(NSUInteger)aValue; -+ (id)valueWithUnsignedLong:(unsigned long)aValue; -+ (id)valueWithUnsignedLongLong:(unsigned long long)aValue; -+ (id)valueWithUnsignedShort:(unsigned short)aValue; - -#pragma mark - -#pragma mark Properties - -@property (nonatomic, readonly) const char *objCType; -@property (nonatomic, readonly) BOOL isNumeric; - -#pragma mark - -#pragma mark Accessing Numeric Values - -- (NSNumber *)numberValue; -- (BOOL)boolValue; -- (char)charValue; -- (double)doubleValue; -- (float)floatValue; -- (int)intValue; -- (NSInteger)integerValue; -- (long)longValue; -- (long long)longLongValue; -- (short)shortValue; -- (unsigned char)unsignedCharValue; -- (unsigned int)unsignedIntValue; -- (NSUInteger)unsignedIntegerValue; -- (unsigned long)unsignedLongValue; -- (unsigned long long)unsignedLongLongValue; -- (unsigned short)unsignedShortValue; - -#pragma mark - -#pragma mark Accessing Data - -- (NSData *)dataValue; -- (void)getValue:(void *)buffer; - -#pragma mark - -#pragma mark Accessing Numeric Data - -- (NSData *)dataForObjCType:(const char *)anObjCType; -- (NSData *)boolData; -- (NSData *)charData; -- (NSData *)doubleData; -- (NSData *)floatData; -- (NSData *)intData; -- (NSData *)integerData; -- (NSData *)longData; -- (NSData *)longLongData; -- (NSData *)shortData; -- (NSData *)unsignedCharData; -- (NSData *)unsignedIntData; -- (NSData *)unsignedIntegerData; -- (NSData *)unsignedLongData; -- (NSData *)unsignedLongLongData; -- (NSData *)unsignedShortData; - -#pragma mark - -#pragma mark Comparing Values - -- (NSComparisonResult)compare:(KWValue *)aValue; - -- (BOOL)isEqualToKWValue:(KWValue *)aValue; -- (BOOL)isEqualToNumber:(NSNumber *)aValue; - -@end diff --git a/Pods/Kiwi/Kiwi/KWVerifying.h b/Pods/Kiwi/Kiwi/KWVerifying.h deleted file mode 100755 index 4fe730d..0000000 --- a/Pods/Kiwi/Kiwi/KWVerifying.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@protocol KWVerifying - -- (NSString *)descriptionForAnonymousItNode; - -#pragma mark - -#pragma mark Setting Subjects - -- (void)setSubject:(id)anObject; - -#pragma mark - -#pragma mark Ending Examples - -- (void)exampleWillEnd; - -@end diff --git a/Pods/Kiwi/Kiwi/KWWorkarounds.h b/Pods/Kiwi/Kiwi/KWWorkarounds.h deleted file mode 100755 index 91926e3..0000000 --- a/Pods/Kiwi/Kiwi/KWWorkarounds.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -#if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG - -#pragma mark - -#pragma mark Invocation Exception Bug Workaround - -// See KiwiConfiguration.h for notes. -void KWSetExceptionFromAcrossInvocationBoundary(NSException *anException); -NSException *KWGetAndClearExceptionFromAcrossInvocationBoundary(void); - -#endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG diff --git a/Pods/Kiwi/Kiwi/Kiwi.h b/Pods/Kiwi/Kiwi/Kiwi.h deleted file mode 100755 index 7598848..0000000 --- a/Pods/Kiwi/Kiwi/Kiwi.h +++ /dev/null @@ -1,92 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -// This needs to come first. -#import "KiwiConfiguration.h" -#import - -#if defined(__cplusplus) -extern "C" { -#endif - -#import "KWAfterAllNode.h" -#import "KWAfterEachNode.h" -#import "KWAsyncVerifier.h" -#import "KWBeBetweenMatcher.h" -#import "KWBeEmptyMatcher.h" -#import "KWBeIdenticalToMatcher.h" -#import "KWBeKindOfClassMatcher.h" -#import "KWBeMemberOfClassMatcher.h" -#import "KWBeTrueMatcher.h" -#import "KWBeNilMatcher.h" -#import "KWBeNonNilMatcher.h" -#import "KWBeWithinMatcher.h" -#import "KWBeZeroMatcher.h" -#import "KWBeforeAllNode.h" -#import "KWBeforeEachNode.h" -#import "KWBlock.h" -#import "KWBlockNode.h" -#import "KWBlockRaiseMatcher.h" -#import "KWCallSite.h" -#import "KWConformToProtocolMatcher.h" -#import "KWContainMatcher.h" -#import "KWContextNode.h" -#import "KWDeviceInfo.h" -#import "KWEqualMatcher.h" -#import "KWExampleGroup.h" -#import "KWExampleGroupBuilder.h" -#import "KWExampleNode.h" -#import "KWExampleNodeVisitor.h" -#import "KWExistVerifier.h" -#import "KWExpectationType.h" -#import "KWFailure.h" -#import "KWFormatter.h" -#import "KWFutureObject.h" -#import "KWHamcrestMatcher.h" -#import "KWHaveMatcher.h" -#import "KWHaveValueMatcher.h" -#import "KWInequalityMatcher.h" -#import "KWInvocationCapturer.h" -#import "KWItNode.h" -#import "KWMatchVerifier.h" -#import "KWMatcher.h" -#import "KWMatchers.h" -#import "KWMatcherFactory.h" -#import "KWMatching.h" -#import "KWMessagePattern.h" -#import "KWMessageSpying.h" -#import "KWMock.h" -#import "KWNull.h" -#import "KWObjCUtilities.h" -#import "KWPendingNode.h" -#import "KWRaiseMatcher.h" -#import "KWReceiveMatcher.h" -#import "KWRegisterMatchersNode.h" -#import "KWRespondToSelectorMatcher.h" -#import "KWSpec.h" -#import "KWStringUtilities.h" -#import "KWStub.h" -#import "KWTestCase.h" -#import "KWUserDefinedMatcher.h" -#import "KWValue.h" -#import "KWVerifying.h" - -// Public Foundation Categories -#import "NSObject+KiwiMockAdditions.h" -#import "NSObject+KiwiStubAdditions.h" -#import "NSObject+KiwiVerifierAdditions.h" - -#import "KiwiMacros.h" - -// Some Foundation headers use Kiwi keywords (e.g. 'should') as identifiers for -// parameter names. Including this last allows the use of Kiwi keywords without -// conflicting with these headers (hopefully!). -#import "KiwiBlockMacros.h" - -#if defined(__cplusplus) -} -#endif - diff --git a/Pods/Kiwi/Kiwi/KiwiConfiguration.h b/Pods/Kiwi/Kiwi/KiwiConfiguration.h deleted file mode 100755 index 9dc59ba..0000000 --- a/Pods/Kiwi/Kiwi/KiwiConfiguration.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import - -#define KW_VERSION 0.9001 - -// Blocks being unavailable cripples the usability of Kiwi, but is supported -// because they are not available on anything less than a device running 3.2. -#if !defined(__BLOCKS__) -#error "Kiwi requires blocks support." -#endif - -// As of iPhone SDK 4 GM, exceptions thrown across an NSInvocation -invoke or -// forwardInvocation: boundary in the simulator will terminate the app instead -// of being caught in @catch blocks from the caller side of the -invoke. Kiwi -// tries to handle this by storing the first exception that it would have -// otherwise thrown in a nasty global that callers can look for and handle. -// (Buggy termination is less desirable than global variables). -// -// Obviously, this can only handles cases where Kiwi itself would have raised -// an exception. -#if TARGET_IPHONE_SIMULATOR - #define KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 1 -#endif diff --git a/Pods/Kiwi/Kiwi/KiwiMacros.h b/Pods/Kiwi/Kiwi/KiwiMacros.h deleted file mode 100755 index afbbc9a..0000000 --- a/Pods/Kiwi/Kiwi/KiwiMacros.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -#pragma mark - -#pragma mark Support Macros - -#define KW_THIS_CALLSITE [KWCallSite callSiteWithFilename:@__FILE__ lineNumber:__LINE__] -#define KW_ADD_EXIST_VERIFIER(expectationType) [self addExistVerifierWithExpectationType:expectationType callSite:KW_THIS_CALLSITE] -#define KW_ADD_MATCH_VERIFIER(expectationType) [self addMatchVerifierWithExpectationType:expectationType callSite:KW_THIS_CALLSITE] -#define KW_ADD_ASYNC_VERIFIER(expectationType, timeOut) [self addAsyncVerifierWithExpectationType:expectationType callSite:KW_THIS_CALLSITE timeout:timeOut] - -#pragma mark - -#pragma mark Keywords - -// Kiwi macros used in specs for verifying expectations. -#define should attachToVerifier:KW_ADD_MATCH_VERIFIER(KWExpectationTypeShould) verifier:KW_ADD_EXIST_VERIFIER(KWExpectationTypeShould) -#define shouldNot attachToVerifier:KW_ADD_MATCH_VERIFIER(KWExpectationTypeShouldNot) verifier:KW_ADD_EXIST_VERIFIER(KWExpectationTypeShould) -#define shouldBeNil attachToVerifier:KW_ADD_EXIST_VERIFIER(KWExpectationTypeShouldNot) -#define shouldNotBeNil attachToVerifier:KW_ADD_EXIST_VERIFIER(KWExpectationTypeShould) -#define shouldEventually attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShould, kKW_DEFAULT_PROBE_TIMEOUT) -#define shouldEventuallyBeforeTimingOutAfter(timeout) attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeShould, timeout) - -// wait for is like a shouldEventually but will not fail if it's never satisfied -#define waitFor attachToVerifier:KW_ADD_ASYNC_VERIFIER(KWExpectationTypeMaybe, kKW_DEFAULT_PROBE_TIMEOUT) - -// used to wrap a pointer to an object that will change in the future (used with shouldEventually) -#define theObject(objectPtr) [KWFutureObject objectWithObjectPointer:objectPtr] // DEPRECATED -#define theReturnValueOfBlock(block) [KWFutureObject futureObjectWithBlock:block] // DEPRECATED -#define expectFutureValue(futureValue) [KWFutureObject futureObjectWithBlock:^{ return futureValue; }] - -// If a gcc compatible compiler is available, use the statement and -// declarations in expression extension to provide a convenient catch-all macro -// to create KWValues. -#if defined(__GNUC__) - #define theValue(expr) \ - ({ \ - __typeof__(expr) kiwiReservedPrefix_lVar = expr; \ - [KWValue valueWithBytes:&kiwiReservedPrefix_lVar objCType:@encode(__typeof__(expr))]; \ - }) -#endif // #if defined(__GNUC__) - -// Example group declarations. -#define SPEC_BEGIN(name) \ - \ - @interface name : KWSpec \ - \ - @end \ - \ - @implementation name \ - \ - + (void)buildExampleGroups { \ - -#define SPEC_END \ - } \ - \ - @end diff --git a/Pods/Kiwi/Kiwi/KiwiNewMacros.h b/Pods/Kiwi/Kiwi/KiwiNewMacros.h deleted file mode 100755 index c4afe41..0000000 --- a/Pods/Kiwi/Kiwi/KiwiNewMacros.h +++ /dev/null @@ -1,10 +0,0 @@ -// -// KiwiNewMacros.h -// Kiwi -// -// Created by Luke Redpath on 11/07/2011. -// Copyright 2011 Allen Ding. All rights reserved. -// - -#import - diff --git a/Pods/Kiwi/Kiwi/NSInvocation+KiwiAdditions.h b/Pods/Kiwi/Kiwi/NSInvocation+KiwiAdditions.h deleted file mode 100755 index 573dfd6..0000000 --- a/Pods/Kiwi/Kiwi/NSInvocation+KiwiAdditions.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface NSInvocation(KiwiAdditions) - -#pragma mark - -#pragma mark Creating NSInvocation Objects - -+ (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector; -+ (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector messageArguments:(const void *)firstBytes, ...; - -#pragma mark - -#pragma mark Accessing Message Arguments - -// Message arguments are invocation arguments that begin after the target and selector arguments. These methods provide -// convenient ways to access them. - -- (NSData *)messageArgumentDataAtIndex:(NSUInteger)anIndex; -- (void)getMessageArgument:(void *)buffer atIndex:(NSUInteger)anIndex; -- (void)setMessageArgument:(const void *)bytes atIndex:(NSUInteger)anIndex; -- (void)setMessageArguments:(const void *)firstBytes, ...; - -@end diff --git a/Pods/Kiwi/Kiwi/NSMethodSignature+KiwiAdditions.h b/Pods/Kiwi/Kiwi/NSMethodSignature+KiwiAdditions.h deleted file mode 100755 index e854a41..0000000 --- a/Pods/Kiwi/Kiwi/NSMethodSignature+KiwiAdditions.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface NSMethodSignature(KiwiAdditions) - -#pragma mark - -#pragma mark Getting Information on Message Arguments - -- (NSUInteger)numberOfMessageArguments; -- (const char *)messageArgumentTypeAtIndex:(NSUInteger)anIndex; - -@end diff --git a/Pods/Kiwi/Kiwi/NSNumber+KiwiAdditions.h b/Pods/Kiwi/Kiwi/NSNumber+KiwiAdditions.h deleted file mode 100755 index 43ad4db..0000000 --- a/Pods/Kiwi/Kiwi/NSNumber+KiwiAdditions.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface NSNumber(KiwiAdditions) - -#pragma mark - -#pragma mark Creating Numbers - -+ (id)numberWithBytes:(const void *)bytes objCType:(const char *)anObjCType; -+ (id)numberWithBoolBytes:(const void *)bytes; -+ (id)numberWithCharBytes:(const void *)bytes; -+ (id)numberWithDoubleBytes:(const void *)bytes; -+ (id)numberWithFloatBytes:(const void *)bytes; -+ (id)numberWithIntBytes:(const void *)bytes; -+ (id)numberWithIntegerBytes:(const void *)bytes; -+ (id)numberWithLongBytes:(const void *)bytes; -+ (id)numberWithLongLongBytes:(const void *)bytes; -+ (id)numberWithShortBytes:(const void *)bytes; -+ (id)numberWithUnsignedCharBytes:(const void *)bytes; -+ (id)numberWithUnsignedIntBytes:(const void *)bytes; -+ (id)numberWithUnsignedIntegerBytes:(const void *)bytes; -+ (id)numberWithUnsignedLongBytes:(const void *)bytes; -+ (id)numberWithUnsignedLongLongBytes:(const void *)bytes; -+ (id)numberWithUnsignedShortBytes:(const void *)bytes; - -@end diff --git a/Pods/Kiwi/Kiwi/NSObject+KiwiMockAdditions.h b/Pods/Kiwi/Kiwi/NSObject+KiwiMockAdditions.h deleted file mode 100755 index cbe6c5c..0000000 --- a/Pods/Kiwi/Kiwi/NSObject+KiwiMockAdditions.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface NSObject(KiwiMockAdditions) - -#pragma mark - -#pragma mark Creating Mocks - -+ (id)mock; -+ (id)mockWithName:(NSString *)aName; - -+ (id)nullMock; -+ (id)nullMockWithName:(NSString *)aName; - -@end diff --git a/Pods/Kiwi/Kiwi/NSObject+KiwiStubAdditions.h b/Pods/Kiwi/Kiwi/NSObject+KiwiStubAdditions.h deleted file mode 100755 index ed49386..0000000 --- a/Pods/Kiwi/Kiwi/NSObject+KiwiStubAdditions.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@class KWMessagePattern; - -@protocol KWMessageSpying; - -@interface NSObject(KiwiStubAdditions) - -#pragma mark - -#pragma mark Stubbing Methods - -- (void)stub:(SEL)aSelector; -- (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ...; -- (void)stub:(SEL)aSelector andReturn:(id)aValue; -- (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ...; - -- (id)stub; -- (id)stubAndReturn:(id)aValue; - -- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue; - -- (void)clearStubs; - -#pragma mark - -#pragma mark Spying on Messages - -- (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; -- (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern; - -@end diff --git a/Pods/Kiwi/Kiwi/NSObject+KiwiStubAdditions.m b/Pods/Kiwi/Kiwi/NSObject+KiwiStubAdditions.m deleted file mode 100755 index f8603b9..0000000 --- a/Pods/Kiwi/Kiwi/NSObject+KiwiStubAdditions.m +++ /dev/null @@ -1,108 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "NSObject+KiwiStubAdditions.h" -#import "KWIntercept.h" -#import "KWInvocationCapturer.h" -#import "KWMessagePattern.h" -#import "KWObjCUtilities.h" -#import "KWStringUtilities.h" -#import "KWStub.h" - -static NSString * const StubValueKey = @"StubValueKey"; - -@implementation NSObject(KiwiStubAdditions) - -#pragma mark - -#pragma mark Capturing Invocations - -- (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector { - NSMethodSignature *signature = [self methodSignatureForSelector:aSelector]; - - if (signature != nil) - return signature; - - NSString *encoding = KWEncodingForVoidMethod(); - return [NSMethodSignature signatureWithObjCTypes:[encoding UTF8String]]; -} - -- (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternFromInvocation:anInvocation]; - id value = [anInvocationCapturer.userInfo objectForKey:StubValueKey]; - [self stubMessagePattern:messagePattern andReturn:value]; -} - -#pragma mark - -#pragma mark Stubbing Methods - -- (void)stub:(SEL)aSelector { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; - [self stubMessagePattern:messagePattern andReturn:nil]; -} - -- (void)stub:(SEL)aSelector withArguments:(id)firstArgument, ... { - va_list argumentList; - va_start(argumentList, firstArgument); - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; - [self stubMessagePattern:messagePattern andReturn:nil]; -} - -- (void)stub:(SEL)aSelector andReturn:(id)aValue { - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector]; - [self stubMessagePattern:messagePattern andReturn:aValue]; -} - -- (void)stub:(SEL)aSelector andReturn:(id)aValue withArguments:(id)firstArgument, ... { - va_list argumentList; - va_start(argumentList, firstArgument); - KWMessagePattern *messagePattern = [KWMessagePattern messagePatternWithSelector:aSelector firstArgumentFilter:firstArgument argumentList:argumentList]; - [self stubMessagePattern:messagePattern andReturn:aValue]; -} - -- (id)stub { - return [KWInvocationCapturer invocationCapturerWithDelegate:self]; -} - -- (id)stubAndReturn:(id)aValue { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:aValue forKey:StubValueKey]; - return [KWInvocationCapturer invocationCapturerWithDelegate:self userInfo:userInfo]; -} - -- (void)stubMessagePattern:(KWMessagePattern *)aMessagePattern andReturn:(id)aValue { - if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { - [NSException raise:@"KWStubException" format:@"cannot stub -%@ because no such method exists", - NSStringFromSelector(aMessagePattern.selector)]; - } - - Class interceptClass = KWSetupObjectInterceptSupport(self); - KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); - KWStub *stub = [KWStub stubWithMessagePattern:aMessagePattern value:aValue]; - KWAssociateObjectStub(self, stub); -} - -- (void)clearStubs { - KWClearObjectStubs(self); -} - -#pragma mark - -#pragma mark Spying on Messages - -- (void)addMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { - if ([self methodSignatureForSelector:aMessagePattern.selector] == nil) { - [NSException raise:@"KWSpyException" format:@"cannot add spy for -%@ because no such method exists", - NSStringFromSelector(aMessagePattern.selector)]; - } - - Class interceptClass = KWSetupObjectInterceptSupport(self); - KWSetupMethodInterceptSupport(interceptClass, aMessagePattern.selector); - KWAssociateMessageSpy(self, aSpy, aMessagePattern); -} - -- (void)removeMessageSpy:(id)aSpy forMessagePattern:(KWMessagePattern *)aMessagePattern { - KWClearObjectSpy(self, aSpy, aMessagePattern); -} - -@end diff --git a/Pods/Kiwi/Kiwi/NSObject+KiwiVerifierAdditions.h b/Pods/Kiwi/Kiwi/NSObject+KiwiVerifierAdditions.h deleted file mode 100755 index 23d1f29..0000000 --- a/Pods/Kiwi/Kiwi/NSObject+KiwiVerifierAdditions.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@protocol KWVerifying; - -@interface NSObject(KiwiVerifierAdditions) - -#pragma mark - -#pragma mark Attaching to Verifiers - -- (id)attachToVerifier:(id)aVerifier; -- (id)attachToVerifier:(id)firstVerifier verifier:(id)secondVerifier; - -@end diff --git a/Pods/Kiwi/Kiwi/NSObject+KiwiVerifierAdditions.m b/Pods/Kiwi/Kiwi/NSObject+KiwiVerifierAdditions.m deleted file mode 100755 index f839e42..0000000 --- a/Pods/Kiwi/Kiwi/NSObject+KiwiVerifierAdditions.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "NSObject+KiwiVerifierAdditions.h" -#import "KWVerifying.h" - -@implementation NSObject(KiwiVerifierAdditions) - -#pragma mark - -#pragma mark Attaching to Verifiers - -- (id)attachToVerifier:(id)aVerifier { - [aVerifier setSubject:self]; - return aVerifier; -} - -- (id)attachToVerifier:(id)firstVerifier verifier:(id)secondVerifier { - [firstVerifier setSubject:self]; - [secondVerifier setSubject:self]; - return firstVerifier; -} - -@end diff --git a/Pods/Kiwi/Kiwi/NSValue+KiwiAdditions.h b/Pods/Kiwi/Kiwi/NSValue+KiwiAdditions.h deleted file mode 100755 index c231ba9..0000000 --- a/Pods/Kiwi/Kiwi/NSValue+KiwiAdditions.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// Licensed under the terms in License.txt -// -// Copyright 2010 Allen Ding. All rights reserved. -// - -#import "KiwiConfiguration.h" - -@interface NSValue(KiwiAdditions) - -#pragma mark - -#pragma mark Accessing Data - -- (NSData *)dataValue; - -@end diff --git a/Pods/Kiwi/License.txt b/Pods/Kiwi/License.txt old mode 100755 new mode 100644 diff --git a/Pods/Kiwi/NonARC/KWIntercept.h b/Pods/Kiwi/NonARC/KWIntercept.h new file mode 100644 index 0000000..5481c80 --- /dev/null +++ b/Pods/Kiwi/NonARC/KWIntercept.h @@ -0,0 +1,45 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" +#import + +@class KWMessagePattern; +@class KWStub; + +#pragma mark - Getting Forwarding Implementations + +IMP KWRegularForwardingImplementation(void); +IMP KWStretForwardingImplementation(void); +IMP KWForwardingImplementationForMethodEncoding(const char* encoding); + +#pragma mark - Getting Intercept Class Information + +BOOL KWObjectIsClass(id anObject); +BOOL KWClassIsInterceptClass(Class aClass); +NSString *KWInterceptClassNameForClass(Class aClass); +Class KWInterceptClassForCanonicalClass(Class canonicalClass); +Class KWRealClassForClass(Class aClass); + +#pragma mark - Enabling Intercepting + +Class KWSetupObjectInterceptSupport(id anObject); +void KWSetupMethodInterceptSupport(Class interceptClass, SEL aSelector); + +#pragma mark - Managing Stubs & Spies +void KWClearStubsAndSpies(void); + +#pragma mark - Managing Objects Stubs + +void KWAssociateObjectStub(id anObject, KWStub *aStub, BOOL overrideExisting); +void KWClearObjectStubs(id anObject); +void KWClearAllObjectStubs(void); + +#pragma mark - Managing Message Spies + +void KWAssociateMessageSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern); +void KWClearObjectSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern); +void KWClearAllMessageSpies(void); diff --git a/Pods/Kiwi/NonARC/KWIntercept.m b/Pods/Kiwi/NonARC/KWIntercept.m new file mode 100644 index 0000000..5f624ad --- /dev/null +++ b/Pods/Kiwi/NonARC/KWIntercept.m @@ -0,0 +1,329 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWIntercept.h" +#import "KWMessagePattern.h" +#import "KWMessageSpying.h" +#import "KWStub.h" + +static const char * const KWInterceptClassSuffix = "_KWIntercept"; +static NSMutableDictionary *KWObjectStubs = nil; +static NSMutableDictionary *KWMessageSpies = nil; +static NSMutableArray *KWRestoredObjects = nil; + +#pragma mark - Intercept Enabled Method Implementations + +Class KWRestoreOriginalClass(id anObject); +void KWInterceptedForwardInvocation(id anObject, SEL aSelector, NSInvocation* anInvocation); +void KWInterceptedDealloc(id anObject, SEL aSelector); +Class KWInterceptedClass(id anObject, SEL aSelector); +Class KWInterceptedSuperclass(id anObject, SEL aSelector); + +#pragma mark - Getting Forwarding Implementations + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" + +IMP KWRegularForwardingImplementation(void) { + return class_getMethodImplementation([NSObject class], @selector(KWNonExistantSelector)); +} + +IMP KWStretForwardingImplementation(void) { + return class_getMethodImplementation_stret([NSObject class], @selector(KWNonExistantSelector)); +} + +#pragma clang diagnostic pop + +IMP KWForwardingImplementationForMethodEncoding(const char* encoding) { +#if TARGET_CPU_ARM + const NSUInteger stretLengthThreshold = 4; +#elif TARGET_CPU_X86 + const NSUInteger stretLengthThreshold = 8; +#else + // TODO: This just makes an assumption right now. Expand to support all + // official architectures correctly. + const NSUInteger stretLengthThreshold = 8; +#endif // #if TARGET_CPU_ARM + + NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:encoding]; + + if (*[signature methodReturnType] == '{' && [signature methodReturnLength] > stretLengthThreshold) { + NSLog(@"Warning: The Objective-C runtime appears to have bugs when forwarding messages with certain struct layouts as return types, so if a crash occurs this could be the culprit"); + return KWStretForwardingImplementation(); + } else { + return KWRegularForwardingImplementation(); + } +} + +#pragma mark - Getting Intercept Class Information + +BOOL KWObjectIsClass(id anObject) { + return class_isMetaClass(object_getClass(anObject)); +} + +BOOL KWClassIsInterceptClass(Class aClass) { + const char *name = class_getName(aClass); + char *result = strstr(name, KWInterceptClassSuffix); + return result != nil; +} + +int interceptCount = 0; + +NSString *KWInterceptClassNameForClass(Class aClass) { + const char *className = class_getName(aClass); + interceptCount++; + return [NSString stringWithFormat:@"%s%s%d", className, KWInterceptClassSuffix, interceptCount]; +} + +Class KWInterceptClassForCanonicalClass(Class canonicalClass) { + NSString *interceptClassName = KWInterceptClassNameForClass(canonicalClass); + Class interceptClass = NSClassFromString(interceptClassName); + + if (interceptClass != nil) + return interceptClass; + + interceptClass = objc_allocateClassPair(canonicalClass, [interceptClassName UTF8String], 0); + objc_registerClassPair(interceptClass); + + class_addMethod(interceptClass, @selector(forwardInvocation:), (IMP)KWInterceptedForwardInvocation, "v@:@"); + class_addMethod(interceptClass, @selector(dealloc), (IMP)KWInterceptedDealloc, "v@:"); + class_addMethod(interceptClass, @selector(class), (IMP)KWInterceptedClass, "#@:"); + class_addMethod(interceptClass, @selector(superclass), (IMP)KWInterceptedSuperclass, "#@:"); + + Class interceptMetaClass = object_getClass(interceptClass); + class_addMethod(interceptMetaClass, @selector(forwardInvocation:), (IMP)KWInterceptedForwardInvocation, "v@:@"); + + return interceptClass; +} + +Class KWRealClassForClass(Class aClass) { + if (KWClassIsInterceptClass(aClass)) + return [aClass superclass]; + + return aClass; +} + +#pragma mark - Enabling Intercepting + +static BOOL IsTollFreeBridged(Class class, id obj) +{ + // this is a naive check, but good enough for the purposes of failing fast + return [NSStringFromClass(class) hasPrefix:@"NSCF"]; +} + +// Canonical class is the non-intercept, non-metaclass, class for an object. +// +// (e.g. [Animal class] would be canonical, not +// object_getClass([Animal class]), if the Animal class has not been touched +// by the intercept mechanism. + +Class KWSetupObjectInterceptSupport(id anObject) { + Class objectClass = object_getClass(anObject); + + if (IsTollFreeBridged(objectClass, anObject)) { + [NSException raise:@"KWTollFreeBridgingInterceptException" format:@"Attempted to stub object of class %@. Kiwi does not support setting expectation or stubbing methods on toll-free bridged objects.", NSStringFromClass(objectClass)]; + } + + if (KWClassIsInterceptClass(objectClass)) + return objectClass; + + BOOL objectIsClass = KWObjectIsClass(anObject); + Class canonicalClass = objectIsClass ? anObject : objectClass; + Class canonicalInterceptClass = KWInterceptClassForCanonicalClass(canonicalClass); + Class interceptClass = objectIsClass ? object_getClass(canonicalInterceptClass) : canonicalInterceptClass; + + object_setClass(anObject, interceptClass); + + return interceptClass; +} + +void KWSetupMethodInterceptSupport(Class interceptClass, SEL aSelector) { + BOOL isMetaClass = class_isMetaClass(interceptClass); + Method method = isMetaClass ? class_getClassMethod(interceptClass, aSelector) + : class_getInstanceMethod(interceptClass, aSelector); + + if (method == nil) { + [NSException raise:NSInvalidArgumentException format:@"cannot setup intercept support for -%@ because no such method exists", + NSStringFromSelector(aSelector)]; + } + + const char *encoding = method_getTypeEncoding(method); + IMP forwardingImplementation = KWForwardingImplementationForMethodEncoding(encoding); + class_addMethod(interceptClass, aSelector, forwardingImplementation, encoding); +} + +#pragma mark - Intercept Enabled Method Implementations + +Class KWRestoreOriginalClass(id anObject) { + Class interceptClass = object_getClass(anObject); + if (KWClassIsInterceptClass(interceptClass)) + { + Class originalClass = class_getSuperclass(interceptClass); + // anObject->isa = originalClass; + object_setClass(anObject, originalClass); + } + return interceptClass; +} + +void KWInterceptedForwardInvocation(id anObject, SEL aSelector, NSInvocation* anInvocation) { + NSValue *key = [NSValue valueWithNonretainedObject:anObject]; + NSMutableDictionary *spyArrayDictionary = KWMessageSpies[key]; + + for (KWMessagePattern *messagePattern in spyArrayDictionary) { + if ([messagePattern matchesInvocation:anInvocation]) { + NSArray *spies = spyArrayDictionary[messagePattern]; + + for (NSValue *spyWrapper in spies) { + id spy = [spyWrapper nonretainedObjectValue]; + [spy object:anObject didReceiveInvocation:anInvocation]; + } + } + } + + NSMutableArray *stubs = KWObjectStubs[key]; + + for (KWStub *stub in stubs) { + if ([stub processInvocation:anInvocation]) + return; + } + + Class interceptClass = KWRestoreOriginalClass(anObject); + [anInvocation invoke]; + // anObject->isa = interceptClass; + object_setClass(anObject, interceptClass); +} + +void KWInterceptedDealloc(id anObject, SEL aSelector) { + NSValue *key = [NSValue valueWithNonretainedObject:anObject]; + [KWMessageSpies removeObjectForKey:key]; + [KWObjectStubs removeObjectForKey:key]; + + KWRestoreOriginalClass(anObject); + [anObject dealloc]; +} + +Class KWInterceptedClass(id anObject, SEL aSelector) { + Class interceptClass = object_getClass(anObject); + Class originalClass = class_getSuperclass(interceptClass); + return originalClass; +} + +Class KWInterceptedSuperclass(id anObject, SEL aSelector) { + Class interceptClass = object_getClass(anObject); + Class originalClass = class_getSuperclass(interceptClass); + Class originalSuperclass = class_getSuperclass(originalClass); + return originalSuperclass; +} + +#pragma mark - Managing Stubs & Spies + +void KWClearStubsAndSpies(void) { + KWRestoredObjects = [NSMutableArray array]; + KWClearAllMessageSpies(); + KWClearAllObjectStubs(); + KWRestoredObjects = nil; +} + +#pragma mark - Managing Objects Stubs + +void KWAssociateObjectStub(id anObject, KWStub *aStub, BOOL overrideExisting) { + if (KWObjectStubs == nil) + KWObjectStubs = [[NSMutableDictionary alloc] init]; + + NSValue *key = [NSValue valueWithNonretainedObject:anObject]; + NSMutableArray *stubs = KWObjectStubs[key]; + + if (stubs == nil) { + stubs = [[NSMutableArray alloc] init]; + KWObjectStubs[key] = stubs; + [stubs release]; + } + + NSUInteger stubCount = [stubs count]; + + for (NSUInteger i = 0; i < stubCount; ++i) { + KWStub *existingStub = stubs[i]; + + if ([aStub.messagePattern isEqualToMessagePattern:existingStub.messagePattern]) { + if (overrideExisting) { + [stubs removeObjectAtIndex:i]; + break; + } else { + return; + } + } + } + + [stubs addObject:aStub]; +} + +void KWClearObjectStubs(id anObject) { + NSValue *key = [NSValue valueWithNonretainedObject:anObject]; + [KWObjectStubs removeObjectForKey:key]; +} + +void KWClearAllObjectStubs(void) { + for (NSValue *objectKey in KWObjectStubs) { + id stubbedObject = [objectKey nonretainedObjectValue]; + if ([KWRestoredObjects containsObject:stubbedObject]) { + continue; + } + KWRestoreOriginalClass(stubbedObject); + [KWRestoredObjects addObject:stubbedObject]; + } + [KWObjectStubs removeAllObjects]; +} + +#pragma mark - Managing Message Spies + +void KWAssociateMessageSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern) { + if (KWMessageSpies == nil) + KWMessageSpies = [[NSMutableDictionary alloc] init]; + + NSValue *key = [NSValue valueWithNonretainedObject:anObject]; + NSMutableDictionary *spies = KWMessageSpies[key]; + + if (spies == nil) { + spies = [[NSMutableDictionary alloc] init]; + KWMessageSpies[key] = spies; + [spies release]; + } + + NSMutableArray *messagePatternSpies = spies[aMessagePattern]; + + if (messagePatternSpies == nil) { + messagePatternSpies = [[NSMutableArray alloc] init]; + spies[aMessagePattern] = messagePatternSpies; + [messagePatternSpies release]; + } + + NSValue *spyWrapper = [NSValue valueWithNonretainedObject:aSpy]; + + if ([messagePatternSpies containsObject:spyWrapper]) + return; + + [messagePatternSpies addObject:spyWrapper]; +} + +void KWClearObjectSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern) { + NSValue *key = [NSValue valueWithNonretainedObject:anObject]; + NSMutableDictionary *spyArrayDictionary = KWMessageSpies[key]; + NSMutableArray *spies = spyArrayDictionary[aMessagePattern]; + NSValue *spyWrapper = [NSValue valueWithNonretainedObject:aSpy]; + [spies removeObject:spyWrapper]; +} + +void KWClearAllMessageSpies(void) { + for (NSValue *objectKey in KWMessageSpies) { + id spiedObject = [objectKey nonretainedObjectValue]; + if ([KWRestoredObjects containsObject:spiedObject]) { + continue; + } + KWRestoreOriginalClass(spiedObject); + [KWRestoredObjects addObject:spiedObject]; + } + [KWMessageSpies removeAllObjects]; +} diff --git a/Pods/Kiwi/NonARC/KWMessagePattern.h b/Pods/Kiwi/NonARC/KWMessagePattern.h new file mode 100644 index 0000000..a898608 --- /dev/null +++ b/Pods/Kiwi/NonARC/KWMessagePattern.h @@ -0,0 +1,40 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@interface KWMessagePattern : NSObject + +#pragma mark - Initializing + +- (id)initWithSelector:(SEL)aSelector; +- (id)initWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray; +- (id)initWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList; + ++ (id)messagePatternWithSelector:(SEL)aSelector; ++ (id)messagePatternWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray; ++ (id)messagePatternWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList; + ++ (id)messagePatternFromInvocation:(NSInvocation *)anInvocation; + +#pragma mark - Properties + +@property (nonatomic, readonly) SEL selector; +@property (nonatomic, readonly) NSArray *argumentFilters; + +#pragma mark - Matching Invocations + +- (BOOL)matchesInvocation:(NSInvocation *)anInvocation; + +#pragma mark - Comparing Message Patterns + +- (BOOL)isEqualToMessagePattern:(KWMessagePattern *)aMessagePattern; + +#pragma mark - Retrieving String Representations + +- (NSString *)stringValue; + +@end diff --git a/Pods/Kiwi/NonARC/KWMessagePattern.m b/Pods/Kiwi/NonARC/KWMessagePattern.m new file mode 100644 index 0000000..f24b13c --- /dev/null +++ b/Pods/Kiwi/NonARC/KWMessagePattern.m @@ -0,0 +1,230 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWMessagePattern.h" +#import "KWFormatter.h" +#import "KWNull.h" +#import "KWObjCUtilities.h" +#import "KWValue.h" +#import "NSInvocation+KiwiAdditions.h" +#import "NSMethodSignature+KiwiAdditions.h" +#import "KWGenericMatchEvaluator.h" +#import "Kiwi.h" + +@implementation KWMessagePattern + +#pragma mark - Initializing + +- (id)initWithSelector:(SEL)aSelector { + return [self initWithSelector:aSelector argumentFilters:nil]; +} + +- (id)initWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray { + self = [super init]; + if (self) { + selector = aSelector; + + if ([anArray count] > 0) + argumentFilters = [anArray copy]; + } + + return self; +} + +- (id)initWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList { + NSUInteger count = KWSelectorParameterCount(aSelector); + NSMutableArray *array = [NSMutableArray arrayWithCapacity:count]; + [array addObject:(firstArgumentFilter != nil) ? firstArgumentFilter : [KWNull null]]; + + for (NSUInteger i = 1; i < count; ++i) + { + id object = va_arg(argumentList, id); + [array addObject:(object != nil) ? object : [KWNull null]]; + } + + va_end(argumentList); + return [self initWithSelector:aSelector argumentFilters:array]; +} + ++ (id)messagePatternWithSelector:(SEL)aSelector { + return [self messagePatternWithSelector:aSelector argumentFilters:nil]; +} + ++ (id)messagePatternWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray { + return [[[self alloc] initWithSelector:aSelector argumentFilters:anArray] autorelease]; +} + ++ (id)messagePatternWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList { + return [[[self alloc] initWithSelector:aSelector firstArgumentFilter:firstArgumentFilter argumentList:argumentList] autorelease]; +} + ++ (id)messagePatternFromInvocation:(NSInvocation *)anInvocation { + NSMethodSignature *signature = [anInvocation methodSignature]; + NSUInteger numberOfMessageArguments = [signature numberOfMessageArguments]; + NSMutableArray *argumentFilters = nil; + + if (numberOfMessageArguments > 0) { + argumentFilters = [[NSMutableArray alloc] initWithCapacity:numberOfMessageArguments]; + + for (NSUInteger i = 0; i < numberOfMessageArguments; ++i) { + const char *type = [signature messageArgumentTypeAtIndex:i]; + void* argumentDataBuffer = malloc(KWObjCTypeLength(type)); + [anInvocation getMessageArgument:argumentDataBuffer atIndex:i]; + id object = nil; + if(*(id*)argumentDataBuffer != [KWAny any] && !KWObjCTypeIsObject(type)) { + NSData *data = [anInvocation messageArgumentDataAtIndex:i]; + object = [KWValue valueWithBytes:[data bytes] objCType:type]; + } else { + object = *(id*)argumentDataBuffer; + + if (object != [KWAny any] && KWObjCTypeIsBlock(type)) { + object = [[object copy] autorelease]; // Converting NSStackBlock to NSMallocBlock + } + } + + [argumentFilters addObject:(object != nil) ? object : [KWNull null]]; + + free(argumentDataBuffer); + } + } + + return [self messagePatternWithSelector:[anInvocation selector] argumentFilters:[argumentFilters autorelease]]; +} + +- (void)dealloc { + [argumentFilters release]; + [super dealloc]; +} + +#pragma mark - Copying + +- (id)copyWithZone:(NSZone *)zone { + return [self retain]; +} + +#pragma mark - Properties + +@synthesize selector; +@synthesize argumentFilters; + +#pragma mark - Matching Invocations + +- (BOOL)argumentFiltersMatchInvocationArguments:(NSInvocation *)anInvocation { + if (self.argumentFilters == nil) + return YES; + + NSMethodSignature *signature = [anInvocation methodSignature]; + NSUInteger numberOfArgumentFilters = [self.argumentFilters count]; + NSUInteger numberOfMessageArguments = [signature numberOfMessageArguments]; + + for (NSUInteger i = 0; i < numberOfMessageArguments && i < numberOfArgumentFilters; ++i) { + const char *objCType = [signature messageArgumentTypeAtIndex:i]; + id object = nil; + + // Extract message argument into object (wrapping values if neccesary) + if (KWObjCTypeIsObject(objCType)) { + [anInvocation getMessageArgument:&object atIndex:i]; + } else { + NSData *data = [anInvocation messageArgumentDataAtIndex:i]; + object = [KWValue valueWithBytes:[data bytes] objCType:objCType]; + } + + // Match argument filter to object + id argumentFilter = (self.argumentFilters)[i]; + + if ([argumentFilter isEqual:[KWAny any]]) { + continue; + } + + if ([KWGenericMatchEvaluator isGenericMatcher:argumentFilter]) { + id matcher = argumentFilter; + if ([object isKindOfClass:[KWValue class]] && [object isNumeric]) { + NSNumber *number = [object numberValue]; + if (![KWGenericMatchEvaluator genericMatcher:matcher matches:number]) { + return NO; + } + } else if (![KWGenericMatchEvaluator genericMatcher:matcher matches:object]) { + return NO; + } + } else if ([argumentFilter isEqual:[KWNull null]]) { + if (!KWObjCTypeIsPointerLike(objCType)) { + [NSException raise:@"KWMessagePatternException" format:@"nil was specified as an argument filter, but argument(%d) is not a pointer for @selector(%@)", (int)(i + 1), NSStringFromSelector([anInvocation selector])]; + } + void *p = nil; + [anInvocation getMessageArgument:&p atIndex:i]; + if (p != nil) + return NO; + } else if (![argumentFilter isEqual:object]) { + return NO; + } + } + + return YES; +} + +- (BOOL)matchesInvocation:(NSInvocation *)anInvocation { + return self.selector == [anInvocation selector] && [self argumentFiltersMatchInvocationArguments:anInvocation]; +} + +#pragma mark - Comparing Message Patterns + +- (NSUInteger)hash { + return [NSStringFromSelector(self.selector) hash]; +} + +- (BOOL)isEqual:(id)object { + if (![object isKindOfClass:[KWMessagePattern class]]) + return NO; + + return [self isEqualToMessagePattern:object]; +} + +- (BOOL)isEqualToMessagePattern:(KWMessagePattern *)aMessagePattern { + if (self.selector != aMessagePattern.selector) + return NO; + + if (self.argumentFilters == nil && aMessagePattern.argumentFilters == nil) + return YES; + + return [self.argumentFilters isEqualToArray:aMessagePattern.argumentFilters]; +} + +#pragma mark - Retrieving String Representations + +- (NSString *)selectorString { + return NSStringFromSelector(self.selector); +} + +- (NSString *)selectorAndArgumentFiltersString { + NSMutableString *description = [[[NSMutableString alloc] init] autorelease]; + NSArray *components = [NSStringFromSelector(self.selector) componentsSeparatedByString:@":"]; + NSUInteger count = [components count] - 1; + + for (NSUInteger i = 0; i < count; ++i) { + NSString *selectorComponent = components[i]; + NSString *argumentFilterString = [KWFormatter formatObject:(self.argumentFilters)[i]]; + [description appendFormat:@"%@:%@ ", selectorComponent, argumentFilterString]; + } + + return description; +} + +- (NSString *)stringValue { + if (self.argumentFilters == nil) + return [self selectorString]; + else + return [self selectorAndArgumentFiltersString]; +} + +#pragma mark - Debugging + +- (NSString *)description { + return [NSString stringWithFormat:@"selector: %@\nargumentFilters: %@", + NSStringFromSelector(self.selector), + self.argumentFilters]; +} + +@end diff --git a/Pods/Kiwi/NonARC/KWStub.h b/Pods/Kiwi/NonARC/KWStub.h new file mode 100644 index 0000000..b16d70e --- /dev/null +++ b/Pods/Kiwi/NonARC/KWStub.h @@ -0,0 +1,37 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KiwiConfiguration.h" + +@class KWMessagePattern; + +@interface KWStub : NSObject + +#pragma mark - Initializing + +- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern; +- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue; +- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(NSArray *params))aBlock; +- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; + ++ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern; ++ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue; ++ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(NSArray *params))aBlock; ++ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; + +#pragma mark - Properties + +@property (nonatomic, readonly) KWMessagePattern *messagePattern; +@property (nonatomic, readonly) id value; +@property (nonatomic, readonly) id returnValueTimes; +@property (nonatomic, readonly) int returnedValueTimes; +@property (nonatomic, readonly) id secondValue; + +#pragma mark - Processing Invocations + +- (BOOL)processInvocation:(NSInvocation *)anInvocation; + +@end diff --git a/Pods/Kiwi/NonARC/KWStub.m b/Pods/Kiwi/NonARC/KWStub.m new file mode 100644 index 0000000..7a9c5f7 --- /dev/null +++ b/Pods/Kiwi/NonARC/KWStub.m @@ -0,0 +1,224 @@ +// +// Licensed under the terms in License.txt +// +// Copyright 2010 Allen Ding. All rights reserved. +// + +#import "KWStub.h" +#import "KWMessagePattern.h" +#import "KWObjCUtilities.h" +#import "KWStringUtilities.h" +#import "KWValue.h" + +#import "NSInvocation+OCMAdditions.h" + +@interface KWStub(){} +@property (nonatomic, copy) id (^block)(NSArray *params); +@end + +@implementation KWStub + +#pragma mark - Initializing + +- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern { + return [self initWithMessagePattern:aMessagePattern value:nil]; +} + +- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue { + self = [super init]; + if (self) { + messagePattern = [aMessagePattern retain]; + value = [aValue retain]; + } + + return self; +} + +- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(NSArray *params))aBlock { + self = [super init]; + if (self) { + messagePattern = [aMessagePattern retain]; + _block = [aBlock copy]; + } + + return self; +} + +- (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue { + self = [super init]; + if (self) { + messagePattern = [aMessagePattern retain]; + value = [aValue retain]; + returnValueTimes = [times retain]; + secondValue = [aSecondValue retain]; + } + + return self; +} + ++ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern { + return [self stubWithMessagePattern:aMessagePattern value:nil]; +} + ++ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue { + return [[[self alloc] initWithMessagePattern:aMessagePattern value:aValue] autorelease]; +} + ++ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(NSArray *params))aBlock { + return [[[self alloc] initWithMessagePattern:aMessagePattern block:aBlock] autorelease]; +} + ++ (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue { + return [[[self alloc] initWithMessagePattern:aMessagePattern value:aValue times:times afterThatReturn:aSecondValue] autorelease]; +} + +- (void)dealloc { + [messagePattern release]; + [value release]; + [returnValueTimes release]; + [secondValue release]; + [_block release]; + [super dealloc]; +} + +#pragma mark - Properties + +@synthesize messagePattern; +@synthesize value; +@synthesize secondValue; +@synthesize returnValueTimes; +@synthesize returnedValueTimes; + +#pragma mark - Processing Invocations + +- (void)writeZerosToInvocationReturnValue:(NSInvocation *)anInvocation { + NSUInteger returnLength = [[anInvocation methodSignature] methodReturnLength]; + + if (returnLength == 0) + return; + + void *bytes = malloc(returnLength); + memset(bytes, 0, returnLength); + [anInvocation setReturnValue:bytes]; + free(bytes); +} + +- (NSData *)valueDataWithObjCType:(const char *)objCType { + assert(self.value && "self.value must not be nil"); + NSData *data = [self.value dataForObjCType:objCType]; + + if (data == nil) { + [NSException raise:@"KWStubException" format:@"wrapped stub value type (%s) could not be converted to the target type (%s)", + [self.value objCType], + objCType]; + } + + return data; +} + +- (void)writeWrappedValueToInvocationReturnValue:(NSInvocation *)anInvocation { + assert(self.value && "self.value must not be nil"); + const char *returnType = [[anInvocation methodSignature] methodReturnType]; + NSData *data = nil; + + NSData *choosedForData = [self.value dataValue]; + + if (returnValueTimes != nil) { + NSString *returnValueTimesString = returnValueTimes; + int returnValueTimesInt = [returnValueTimesString intValue]; + + if (returnedValueTimes >= returnValueTimesInt) { + choosedForData = [self.secondValue dataValue]; + } + returnedValueTimes++; + } + + + // When the return type is not the same as the type of the wrapped value, + // attempt to convert the wrapped value to the desired type. + + if (KWObjCTypeEqualToObjCType([self.value objCType], returnType)) + data = choosedForData; + else + data = [self valueDataWithObjCType:returnType]; + + [anInvocation setReturnValue:(void *)[data bytes]]; +} + +- (void)writeObjectValueToInvocationReturnValue:(NSInvocation *)anInvocation { + assert(self.value && "self.value must not be nil"); + + void *choosedForData = &value; + + if (returnValueTimes != nil) { + NSString *returnValueTimesString = returnValueTimes; + int returnValueTimesInt = [returnValueTimesString intValue]; + + if (returnedValueTimes >= returnValueTimesInt) { + choosedForData = &secondValue; + } + returnedValueTimes++; + } + + [anInvocation setReturnValue:choosedForData]; + +#ifndef __clang_analyzer__ + NSString *selectorString = NSStringFromSelector([anInvocation selector]); + + // To conform to memory management conventions, retain if writing a result + // that begins with alloc, new or contains copy. This shows up as a false + // positive in clang due to the runtime conditional, so ignore it. + if (KWStringHasWordPrefix(selectorString, @"alloc") || + KWStringHasWordPrefix(selectorString, @"new") || + KWStringHasWord(selectorString, @"copy") || + KWStringHasWord(selectorString, @"Copy")) { + [self.value retain]; + } +#endif +} + +- (BOOL)processInvocation:(NSInvocation *)anInvocation { + if (![self.messagePattern matchesInvocation:anInvocation]) + return NO; + + if (self.block) { + NSUInteger numberOfArguments = [[anInvocation methodSignature] numberOfArguments]; + NSMutableArray *args = [NSMutableArray arrayWithCapacity:(numberOfArguments-2)]; + for (NSUInteger i = 2; i < numberOfArguments; ++i) { + id arg = [anInvocation getArgumentAtIndexAsObject:(int)i]; + + const char *argType = [[anInvocation methodSignature] getArgumentTypeAtIndex:i]; + if (strcmp(argType, "@?") == 0) arg = [[arg copy] autorelease]; + + if (arg == nil) + arg = [NSNull null]; + + [args addObject:arg]; + } + + id newValue = self.block(args); + if (newValue != value) { + [value release]; + value = [newValue retain]; + } + + [args removeAllObjects]; // We don't want these objects to be in autorelease pool + } + + if (self.value == nil) + [self writeZerosToInvocationReturnValue:anInvocation]; + else if ([self.value isKindOfClass:[KWValue class]]) + [self writeWrappedValueToInvocationReturnValue:anInvocation]; + else + [self writeObjectValueToInvocationReturnValue:anInvocation]; + + return YES; +} + +#pragma mark - Debugging + +- (NSString *)description { + return [NSString stringWithFormat:@"messagePattern: %@\nvalue: %@", self.messagePattern, self.value]; +} + +@end diff --git a/Pods/Kiwi/NonARC/KWSymbolicator.h b/Pods/Kiwi/NonARC/KWSymbolicator.h new file mode 100644 index 0000000..452852f --- /dev/null +++ b/Pods/Kiwi/NonARC/KWSymbolicator.h @@ -0,0 +1,17 @@ +// +// KWSymbolicator.h +// Kiwi +// +// Created by Jerry Marino on 4/28/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import + +long kwCallerAddress(void); + +@interface NSString (KWShellCommand) + ++ (NSString *)stringWithShellCommand:(NSString *)command arguments:(NSArray *)arguments; + +@end diff --git a/Pods/Kiwi/NonARC/KWSymbolicator.m b/Pods/Kiwi/NonARC/KWSymbolicator.m new file mode 100644 index 0000000..638a4c9 --- /dev/null +++ b/Pods/Kiwi/NonARC/KWSymbolicator.m @@ -0,0 +1,55 @@ +// +// KWSymbolicator.m +// Kiwi +// +// Created by Jerry Marino on 4/28/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import "KWSymbolicator.h" +#import +#import + +long kwCallerAddress (void){ +#if !__arm__ + unw_cursor_t cursor; unw_context_t uc; + unw_word_t ip; + + unw_getcontext(&uc); + unw_init_local(&cursor, &uc); + + int pos = 2; + while (unw_step(&cursor) && pos--){ + unw_get_reg (&cursor, UNW_REG_IP, &ip); + if(pos == 0) return (NSUInteger)(ip - 4); + } +#endif + return 0; +} + +@implementation NSString (KWShellCommand) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wobjc-method-access" + ++ (NSString *)stringWithShellCommand:(NSString *)command arguments:(NSArray *)arguments { + id task = [[NSClassFromString(@"NSTask") alloc] init]; + [task setEnvironment:[NSDictionary dictionary]]; + [task setLaunchPath:command]; + [task setArguments:arguments]; + + NSPipe *pipe = [NSPipe pipe]; + [task setStandardOutput:pipe]; + [task launch]; + + [task waitUntilExit]; + + NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile]; + NSString *string = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; + [task release]; + return string; +} + +#pragma clang diagnostic pop + +@end diff --git a/Pods/Kiwi/Podspec b/Pods/Kiwi/Podspec deleted file mode 100755 index 6e9599c..0000000 --- a/Pods/Kiwi/Podspec +++ /dev/null @@ -1,7 +0,0 @@ -Pod::Spec.new do - version '1.0.0' - summary 'A Behavior Driven Development library for iPhone and iPad development.' - author ['Allen Ding' => 'allen@allending.com', 'Luke Redpath' => 'luke@lukeredpath.co.uk'] - source :git => 'https://github.com/allending/Kiwi.git', :tag => 'v1.0.0' - source_files 'Kiwi' -end diff --git a/Pods/Kiwi/Readme.md b/Pods/Kiwi/Readme.md old mode 100755 new mode 100644 index 269cf54..9d482f9 --- a/Pods/Kiwi/Readme.md +++ b/Pods/Kiwi/Readme.md @@ -1,16 +1,11 @@ # Simple BDD for iOS # +[![Build Status](https://travis-ci.org/allending/Kiwi.png?branch=master)](https://travis-ci.org/allending/Kiwi) + Kiwi is a Behavior Driven Development library for iOS development. The goal is to provide a BDD library that is exquisitely simple to setup and use. -Ping us at @alding or @lukeredpath and let us know what you are using Kiwi for. - -Requirements: - -* Xcode 4.x -* LLVM compiler recommended - # Why? # -The idea behind Kiwi is to have tests that are more readable that what is possible with the bundled test framework. +The idea behind Kiwi is to have tests that are more readable than what is possible with the bundled test framework. Tests (or rather specs) are written in Objective-C and run within the comfort of Xcode to provide a test environment that is as unobtrusive and seamless as possible in terms of running tests and error reporting. @@ -32,83 +27,10 @@ describe(@"Team", ^{ }); ``` -To some of you, this might seem like an abomination. To the rest, read on... - -# License # -Kiwi is open source software. You may freely distribute it under the terms of -the license agreement found in __License.txt__. - -# Contributing # -Kiwi is maintained by: - - * Allen Ding (@alding) - * Luke Redpath (@lukeredpath) - -Pull requests welcome. Significant contributors are listed in __Contributors.txt__. +# Documentation # +The [Kiwi Wiki](https://github.com/allending/Kiwi/wiki) is the official documentation source. # Getting it # -The best way to get Kiwi is by cloning the git repository: `git clone git://github.com/allending/Kiwi.git` - -# Project file structure # -__Kiwi.xcodeproject__ has two runnable targets: __Kiwi__ and __KiwiExamples__. Both of these targets are set up to be test targets. - -* To run tests in Xcode 4, run __Product->Test__, or use the __Cmd-U__ shortcut. -* Running tests when __Kiwi__ is the current target runs the SenTestKit tests used to test Kiwi itself. The tests are located in the __Tests__ group in the Xcode project navigator. -* Running tests when __KiwiExamples__ is the current target runs the example Kiwi specs meant to serve as sample Kiwi usage. The specs are located in the __Examples__ group in the Xcode project navigator. - - -# Using Kiwi in your project # -The essential point to understand about using Kiwi in your own project is that: - -* You have to have a test target. -* The Kiwi library code has to be added to the test target. -* Tests are run in the same way regular Xcode tests are run: Perform the __Test__ action on the test target. - -It is highly recommended (and probably a future requirement) that you set the compiler for the test target to the latest version of the LLVM compiler. It is also easy to set up Kiwi as a static library or separate project within a workspace. Instructions will come when I have time. - -Example scenarios are provided below for the simplest use cases. - - -## For a new Xcode project ## -1. Create a new iOS project (we will use __Foobar__ as a sample project name) and ensure that __"Include Unit Tests"__ is selected during the new project wizard process. - * This should result in a __Tests__ group in your new project. - * You should also have a test target named something like __FoobarTests__. +The best way to get Kiwi is by using [CocoaPods](https://github.com/cocoapods/cocoapods). +For all the installation details, check out the [Wiki](https://github.com/allending/kiwi/wiki) -2. Remove the sample __FoobarTest.(h|m)__ files Xcode generated. - -3. Add all the Kiwi sources (.h and .m) to your test target. - * The files are located in the __Kiwi/Kiwi__ directory you cloned with git. - * Just to be clear, this is the directory that contains the __Kiwi.h__ file. - * An easy way to do this is to add the entire Kiwi directory with Xcode with the options __"Copy items into destination group's folder"__ and __"Add to target: FoobarTests"__. - -4. Add a new __FoobarSpec.m__ file to the test target, and make sure that it belongs to the __FoobarTests__ test target. You can use the contents of __FoobarSpec.m__ below. - -5. Run the __FoobarTests__ test target (__Product->Test__ or __Cmd-U__). The spec/tests should now run. - * Try changing `should` to `shouldNot` in the spec and rerun the test. You should now see a test failure. - -6. Start adding your own specs. - -## For an existing project with an existing test target ## -1. Start from step (3) in the instructions given in the __"For a new Xcode project"__ section above. - -## For an existing project without a test target ## -1. Add a new __"Cocoa Touch Unit Testing Bundle"__ target to your project (__File->New->New Target...->Other__). - -2. Continue from step (3) in the instructions given in the __"For a new Xcode project"__ section above. - -## FoobarSpec.m ## - -```objective-c -#import "Kiwi.h" - -SPEC_BEGIN(FoobarSpec) - -describe(@"Foobar", ^{ - it(@"a simple test", ^{ - NSString *greeting = [NSString stringWithFormat:@"%@ %@", @"Hello", @"world"]; - [[greeting should] equal:@"Hello world"]; - }); -}); - -SPEC_END -``` diff --git a/Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.h b/Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.h new file mode 100644 index 0000000..095823c --- /dev/null +++ b/Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.h @@ -0,0 +1,14 @@ +// +// SenTestSuite+KiwiAdditions.h +// Kiwi +// +// Created by Jerry Marino on 5/17/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import + +@interface SenTestSuite (KiwiAdditions) + + +@end diff --git a/Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.m b/Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.m new file mode 100644 index 0000000..41b9c91 --- /dev/null +++ b/Pods/Kiwi/SenTestingKit/SenTestSuite+KiwiAdditions.m @@ -0,0 +1,55 @@ +// +// SenTestSuite+KiwiAdditions.m +// Kiwi +// +// Created by Jerry Marino on 5/17/13. +// Copyright (c) 2013 Allen Ding. All rights reserved. +// + +#import "SenTestSuite+KiwiAdditions.h" +#import +#import +#import +#import "KWExampleSuiteBuilder.h" +#import "KWCallSite.h" +#import "KWSpec.h" + +@implementation SenTestSuite (KiwiAdditions) + ++ (void)initialize { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + [self patchTestSuiteForTestCaseClassIMP]; + }); +} + +// Patch this otherwise SenTestKit will start running all suites in test bundle +// even if they are empty ++ (void)patchTestSuiteForTestCaseClassIMP { + Class c = object_getClass([SenTestSuite class]); + SEL origSEL = @selector(testSuiteForTestCaseClass:); + SEL newSEL = sel_registerName("__testSuiteForTestCaseClass:"); + + Method origMethod = class_getClassMethod(c, origSEL); + class_addMethod(c, newSEL, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)) ; + + IMP focusedSuite = imp_implementationWithBlock(^(id _self, Class aClass){ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + return ([[KWExampleSuiteBuilder sharedExampleSuiteBuilder] isFocused] && ![_self testSuiteClassHasFocus:aClass]) ? nil : (__bridge void *)[_self performSelector:newSEL withObject:aClass]; +#pragma clang diagnostic pop + }); + method_setImplementation(origMethod, focusedSuite); +} + ++ (BOOL)testSuiteClassHasFocus:(Class)aClass { + if (![aClass respondsToSelector:@selector(file)]) + return NO; + + KWCallSite *focusedCallSite = [[KWExampleSuiteBuilder sharedExampleSuiteBuilder] focusedCallSite]; + NSString *fullFilePathOfClass = [aClass performSelector:@selector(file)]; + NSRange rangeOfFileName = [fullFilePathOfClass rangeOfString:focusedCallSite.filename]; + return rangeOfFileName.length != 0; +} + +@end diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock new file mode 100644 index 0000000..30b3dc1 --- /dev/null +++ b/Pods/Manifest.lock @@ -0,0 +1,28 @@ +PODS: + - DejalActivityView (1.2) + - EGOTableViewPullRefresh (0.1.0) + - KIF (2.0.0) + - Kiwi (2.2.3): + - Kiwi/SenTestingKit + - Kiwi/ARC (2.2.3) + - Kiwi/NonARC (2.2.3) + - Kiwi/SenTestingKit (2.2.3): + - Kiwi/ARC + - Kiwi/NonARC + - SBJson (4.0.0) + +DEPENDENCIES: + - DejalActivityView (>= 1.0) + - EGOTableViewPullRefresh (>= 0.1) + - KIF (>= 0.0.1) + - Kiwi (>= 1.0.0) + - SBJson (>= 4.0) + +SPEC CHECKSUMS: + DejalActivityView: 3a7f7a2be287c0f25f547762815c40709b02169c + EGOTableViewPullRefresh: 6ba637ce6dd3186b503d2d91e6b3a08a26d650f5 + KIF: ff3b46deb62ce3f8e99c6a2c786729e1eea241ba + Kiwi: 04c51e880831d291748ec702d42c4101f7eb95c9 + SBJson: f3c686806e8e36ab89e020189ac582ba26ec4220 + +COCOAPODS: 0.29.0 diff --git a/Pods/Pods-CoderwallTests-DejalActivityView-Private.xcconfig b/Pods/Pods-CoderwallTests-DejalActivityView-Private.xcconfig new file mode 100644 index 0000000..add8497 --- /dev/null +++ b/Pods/Pods-CoderwallTests-DejalActivityView-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-CoderwallTests-DejalActivityView.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/DejalActivityView" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC ${PODS_CODERWALLTESTS_DEJALACTIVITYVIEW_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-CoderwallTests-DejalActivityView-dummy.m b/Pods/Pods-CoderwallTests-DejalActivityView-dummy.m new file mode 100644 index 0000000..58c796b --- /dev/null +++ b/Pods/Pods-CoderwallTests-DejalActivityView-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_CoderwallTests_DejalActivityView : NSObject +@end +@implementation PodsDummy_Pods_CoderwallTests_DejalActivityView +@end diff --git a/Pods/Pods-CoderwallTests-DejalActivityView-prefix.pch b/Pods/Pods-CoderwallTests-DejalActivityView-prefix.pch new file mode 100644 index 0000000..139c65a --- /dev/null +++ b/Pods/Pods-CoderwallTests-DejalActivityView-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-CoderwallTests-environment.h" diff --git a/Pods/Pods-CoderwallTests-DejalActivityView.xcconfig b/Pods/Pods-CoderwallTests-DejalActivityView.xcconfig new file mode 100644 index 0000000..900dac0 --- /dev/null +++ b/Pods/Pods-CoderwallTests-DejalActivityView.xcconfig @@ -0,0 +1 @@ +PODS_CODERWALLTESTS_DEJALACTIVITYVIEW_OTHER_LDFLAGS = -framework UIKit \ No newline at end of file diff --git a/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh-Private.xcconfig b/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh-Private.xcconfig new file mode 100644 index 0000000..b8c17ce --- /dev/null +++ b/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-CoderwallTests-EGOTableViewPullRefresh.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC ${PODS_CODERWALLTESTS_EGOTABLEVIEWPULLREFRESH_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh-dummy.m b/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh-dummy.m new file mode 100644 index 0000000..ed20dcf --- /dev/null +++ b/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_CoderwallTests_EGOTableViewPullRefresh : NSObject +@end +@implementation PodsDummy_Pods_CoderwallTests_EGOTableViewPullRefresh +@end diff --git a/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh-prefix.pch b/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh-prefix.pch new file mode 100644 index 0000000..139c65a --- /dev/null +++ b/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-CoderwallTests-environment.h" diff --git a/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh.xcconfig b/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh.xcconfig new file mode 100644 index 0000000..3d2c5aa --- /dev/null +++ b/Pods/Pods-CoderwallTests-EGOTableViewPullRefresh.xcconfig @@ -0,0 +1 @@ +PODS_CODERWALLTESTS_EGOTABLEVIEWPULLREFRESH_OTHER_LDFLAGS = -framework QuartzCore \ No newline at end of file diff --git a/Pods/Pods-CoderwallTests-Kiwi-Private.xcconfig b/Pods/Pods-CoderwallTests-Kiwi-Private.xcconfig new file mode 100644 index 0000000..a031f5f --- /dev/null +++ b/Pods/Pods-CoderwallTests-Kiwi-Private.xcconfig @@ -0,0 +1,6 @@ +#include "Pods-CoderwallTests-Kiwi.xcconfig" +FRAMEWORK_SEARCH_PATHS = ${PODS_CODERWALLTESTS_KIWI_FRAMEWORK_SEARCH_PATHS} +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Kiwi" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC ${PODS_CODERWALLTESTS_KIWI_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-CoderwallTests-Kiwi-dummy.m b/Pods/Pods-CoderwallTests-Kiwi-dummy.m new file mode 100644 index 0000000..d6e85b2 --- /dev/null +++ b/Pods/Pods-CoderwallTests-Kiwi-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_CoderwallTests_Kiwi : NSObject +@end +@implementation PodsDummy_Pods_CoderwallTests_Kiwi +@end diff --git a/Pods/Pods-CoderwallTests-Kiwi-prefix.pch b/Pods/Pods-CoderwallTests-Kiwi-prefix.pch new file mode 100644 index 0000000..d18ef96 --- /dev/null +++ b/Pods/Pods-CoderwallTests-Kiwi-prefix.pch @@ -0,0 +1,10 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-CoderwallTests-environment.h" + + + +#import + diff --git a/Pods/Pods-CoderwallTests-Kiwi.xcconfig b/Pods/Pods-CoderwallTests-Kiwi.xcconfig new file mode 100644 index 0000000..8008e50 --- /dev/null +++ b/Pods/Pods-CoderwallTests-Kiwi.xcconfig @@ -0,0 +1,2 @@ +PODS_CODERWALLTESTS_KIWI_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" +PODS_CODERWALLTESTS_KIWI_OTHER_LDFLAGS = -framework SenTestingKit \ No newline at end of file diff --git a/Pods/Pods-CoderwallTests-SBJson-Private.xcconfig b/Pods/Pods-CoderwallTests-SBJson-Private.xcconfig new file mode 100644 index 0000000..8dd6ff0 --- /dev/null +++ b/Pods/Pods-CoderwallTests-SBJson-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-CoderwallTests-SBJson.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/SBJson" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-CoderwallTests-SBJson-dummy.m b/Pods/Pods-CoderwallTests-SBJson-dummy.m new file mode 100644 index 0000000..da6e794 --- /dev/null +++ b/Pods/Pods-CoderwallTests-SBJson-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_CoderwallTests_SBJson : NSObject +@end +@implementation PodsDummy_Pods_CoderwallTests_SBJson +@end diff --git a/Pods/Pods-CoderwallTests-SBJson-prefix.pch b/Pods/Pods-CoderwallTests-SBJson-prefix.pch new file mode 100644 index 0000000..139c65a --- /dev/null +++ b/Pods/Pods-CoderwallTests-SBJson-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-CoderwallTests-environment.h" diff --git a/Pods/Pods-CoderwallTests-SBJson.xcconfig b/Pods/Pods-CoderwallTests-SBJson.xcconfig new file mode 100644 index 0000000..e69de29 diff --git a/Pods/Pods-CoderwallTests-acknowledgements.markdown b/Pods/Pods-CoderwallTests-acknowledgements.markdown new file mode 100644 index 0000000..3b406df --- /dev/null +++ b/Pods/Pods-CoderwallTests-acknowledgements.markdown @@ -0,0 +1,83 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## DejalActivityView + +Please see the "Dejal Open Source License" web page for more information. + +Attribution is required, but a non-attribution license is also available. + + + +----- + +Copyright (c) 2002-2013 Dejal Systems, LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +## Kiwi + +Copyright (c) 2010, Allen Ding +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of Allen Ding nor the names of any contributors may be +used to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +## SBJson + +Copyright (C) 2007-2014 Stig Brautaset. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Generated by CocoaPods - http://cocoapods.org diff --git a/Pods/Pods-CoderwallTests-acknowledgements.plist b/Pods/Pods-CoderwallTests-acknowledgements.plist new file mode 100644 index 0000000..0d9012a --- /dev/null +++ b/Pods/Pods-CoderwallTests-acknowledgements.plist @@ -0,0 +1,121 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Please see the "Dejal Open Source License" web page for more information. + +Attribution is required, but a non-attribution license is also available. + +<http://www.dejal.com/developer/license/> + +----- + +Copyright (c) 2002-2013 Dejal Systems, LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Title + DejalActivityView + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2010, Allen Ding +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of Allen Ding nor the names of any contributors may be +used to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Title + Kiwi + Type + PSGroupSpecifier + + + FooterText + Copyright (C) 2007-2014 Stig Brautaset. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Title + SBJson + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - http://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Pods-CoderwallTests-dummy.m b/Pods/Pods-CoderwallTests-dummy.m new file mode 100644 index 0000000..18f8a00 --- /dev/null +++ b/Pods/Pods-CoderwallTests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_CoderwallTests : NSObject +@end +@implementation PodsDummy_Pods_CoderwallTests +@end diff --git a/Pods/Pods-CoderwallTests-environment.h b/Pods/Pods-CoderwallTests-environment.h new file mode 100644 index 0000000..0e2ea9f --- /dev/null +++ b/Pods/Pods-CoderwallTests-environment.h @@ -0,0 +1,50 @@ + +// To check if a library is compiled with CocoaPods you +// can use the `COCOAPODS` macro definition which is +// defined in the xcconfigs so it is available in +// headers also when they are imported in the client +// project. + + +// DejalActivityView +#define COCOAPODS_POD_AVAILABLE_DejalActivityView +#define COCOAPODS_VERSION_MAJOR_DejalActivityView 1 +#define COCOAPODS_VERSION_MINOR_DejalActivityView 2 +#define COCOAPODS_VERSION_PATCH_DejalActivityView 0 + +// EGOTableViewPullRefresh +#define COCOAPODS_POD_AVAILABLE_EGOTableViewPullRefresh +#define COCOAPODS_VERSION_MAJOR_EGOTableViewPullRefresh 0 +#define COCOAPODS_VERSION_MINOR_EGOTableViewPullRefresh 1 +#define COCOAPODS_VERSION_PATCH_EGOTableViewPullRefresh 0 + +// Kiwi +#define COCOAPODS_POD_AVAILABLE_Kiwi +#define COCOAPODS_VERSION_MAJOR_Kiwi 2 +#define COCOAPODS_VERSION_MINOR_Kiwi 2 +#define COCOAPODS_VERSION_PATCH_Kiwi 3 + +// Kiwi/ARC +#define COCOAPODS_POD_AVAILABLE_Kiwi_ARC +#define COCOAPODS_VERSION_MAJOR_Kiwi_ARC 2 +#define COCOAPODS_VERSION_MINOR_Kiwi_ARC 2 +#define COCOAPODS_VERSION_PATCH_Kiwi_ARC 3 + +// Kiwi/NonARC +#define COCOAPODS_POD_AVAILABLE_Kiwi_NonARC +#define COCOAPODS_VERSION_MAJOR_Kiwi_NonARC 2 +#define COCOAPODS_VERSION_MINOR_Kiwi_NonARC 2 +#define COCOAPODS_VERSION_PATCH_Kiwi_NonARC 3 + +// Kiwi/SenTestingKit +#define COCOAPODS_POD_AVAILABLE_Kiwi_SenTestingKit +#define COCOAPODS_VERSION_MAJOR_Kiwi_SenTestingKit 2 +#define COCOAPODS_VERSION_MINOR_Kiwi_SenTestingKit 2 +#define COCOAPODS_VERSION_PATCH_Kiwi_SenTestingKit 3 + +// SBJson +#define COCOAPODS_POD_AVAILABLE_SBJson +#define COCOAPODS_VERSION_MAJOR_SBJson 4 +#define COCOAPODS_VERSION_MINOR_SBJson 0 +#define COCOAPODS_VERSION_PATCH_SBJson 0 + diff --git a/Pods/Pods-CoderwallTests-resources.sh b/Pods/Pods-CoderwallTests-resources.sh new file mode 100755 index 0000000..a477367 --- /dev/null +++ b/Pods/Pods-CoderwallTests-resources.sh @@ -0,0 +1,76 @@ +#!/bin/sh +set -e + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +install_resource() +{ + case $1 in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.framework) + echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcassets) + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" + ;; + *) + echo "${PODS_ROOT}/$1" + echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" + ;; + esac +} +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow@2x.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow@2x.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow@2x.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow@2x.png" + +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]]; then + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] +then + case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Pods-CoderwallTests.xcconfig b/Pods/Pods-CoderwallTests.xcconfig new file mode 100644 index 0000000..ada793d --- /dev/null +++ b/Pods/Pods-CoderwallTests.xcconfig @@ -0,0 +1,6 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_CFLAGS = $(inherited) "-isystem${PODS_ROOT}/Headers" "-isystem${PODS_ROOT}/Headers/DejalActivityView" "-isystem${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "-isystem${PODS_ROOT}/Headers/KIF" "-isystem${PODS_ROOT}/Headers/Kiwi" "-isystem${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC -framework QuartzCore -framework SenTestingKit -framework UIKit +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Pods-DejalActivityView-Private.xcconfig b/Pods/Pods-DejalActivityView-Private.xcconfig new file mode 100644 index 0000000..11febdc --- /dev/null +++ b/Pods/Pods-DejalActivityView-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-DejalActivityView.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/DejalActivityView" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC ${PODS_DEJALACTIVITYVIEW_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-DejalActivityView-dummy.m b/Pods/Pods-DejalActivityView-dummy.m new file mode 100644 index 0000000..5123114 --- /dev/null +++ b/Pods/Pods-DejalActivityView-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_DejalActivityView : NSObject +@end +@implementation PodsDummy_Pods_DejalActivityView +@end diff --git a/Pods/Pods-DejalActivityView-prefix.pch b/Pods/Pods-DejalActivityView-prefix.pch new file mode 100644 index 0000000..95cf11d --- /dev/null +++ b/Pods/Pods-DejalActivityView-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-environment.h" diff --git a/Pods/Pods-DejalActivityView.xcconfig b/Pods/Pods-DejalActivityView.xcconfig new file mode 100644 index 0000000..c2d87da --- /dev/null +++ b/Pods/Pods-DejalActivityView.xcconfig @@ -0,0 +1 @@ +PODS_DEJALACTIVITYVIEW_OTHER_LDFLAGS = -framework UIKit \ No newline at end of file diff --git a/Pods/Pods-EGOTableViewPullRefresh-Private.xcconfig b/Pods/Pods-EGOTableViewPullRefresh-Private.xcconfig new file mode 100644 index 0000000..1d7732e --- /dev/null +++ b/Pods/Pods-EGOTableViewPullRefresh-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-EGOTableViewPullRefresh.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC ${PODS_EGOTABLEVIEWPULLREFRESH_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-EGOTableViewPullRefresh-dummy.m b/Pods/Pods-EGOTableViewPullRefresh-dummy.m new file mode 100644 index 0000000..2a357bd --- /dev/null +++ b/Pods/Pods-EGOTableViewPullRefresh-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_EGOTableViewPullRefresh : NSObject +@end +@implementation PodsDummy_Pods_EGOTableViewPullRefresh +@end diff --git a/Pods/Pods-EGOTableViewPullRefresh-prefix.pch b/Pods/Pods-EGOTableViewPullRefresh-prefix.pch new file mode 100644 index 0000000..95cf11d --- /dev/null +++ b/Pods/Pods-EGOTableViewPullRefresh-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-environment.h" diff --git a/Pods/Pods-EGOTableViewPullRefresh.xcconfig b/Pods/Pods-EGOTableViewPullRefresh.xcconfig new file mode 100644 index 0000000..1ec3eee --- /dev/null +++ b/Pods/Pods-EGOTableViewPullRefresh.xcconfig @@ -0,0 +1 @@ +PODS_EGOTABLEVIEWPULLREFRESH_OTHER_LDFLAGS = -framework QuartzCore \ No newline at end of file diff --git a/Pods/Pods-Integration Tests-DejalActivityView-Private.xcconfig b/Pods/Pods-Integration Tests-DejalActivityView-Private.xcconfig new file mode 100644 index 0000000..e491ce9 --- /dev/null +++ b/Pods/Pods-Integration Tests-DejalActivityView-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-Integration Tests-DejalActivityView.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/DejalActivityView" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC ${PODS_INTEGRATION_TESTS_DEJALACTIVITYVIEW_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-Integration Tests-DejalActivityView-dummy.m b/Pods/Pods-Integration Tests-DejalActivityView-dummy.m new file mode 100644 index 0000000..a47bdfd --- /dev/null +++ b/Pods/Pods-Integration Tests-DejalActivityView-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Integration_Tests_DejalActivityView : NSObject +@end +@implementation PodsDummy_Pods_Integration_Tests_DejalActivityView +@end diff --git a/Pods/Pods-Integration Tests-DejalActivityView-prefix.pch b/Pods/Pods-Integration Tests-DejalActivityView-prefix.pch new file mode 100644 index 0000000..04c7753 --- /dev/null +++ b/Pods/Pods-Integration Tests-DejalActivityView-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-Integration Tests-environment.h" diff --git a/Pods/Pods-Integration Tests-DejalActivityView.xcconfig b/Pods/Pods-Integration Tests-DejalActivityView.xcconfig new file mode 100644 index 0000000..9ff1fe2 --- /dev/null +++ b/Pods/Pods-Integration Tests-DejalActivityView.xcconfig @@ -0,0 +1 @@ +PODS_INTEGRATION_TESTS_DEJALACTIVITYVIEW_OTHER_LDFLAGS = -framework UIKit \ No newline at end of file diff --git a/Pods/Pods-Integration Tests-EGOTableViewPullRefresh-Private.xcconfig b/Pods/Pods-Integration Tests-EGOTableViewPullRefresh-Private.xcconfig new file mode 100644 index 0000000..5283041 --- /dev/null +++ b/Pods/Pods-Integration Tests-EGOTableViewPullRefresh-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-Integration Tests-EGOTableViewPullRefresh.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC ${PODS_INTEGRATION_TESTS_EGOTABLEVIEWPULLREFRESH_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-Integration Tests-EGOTableViewPullRefresh-dummy.m b/Pods/Pods-Integration Tests-EGOTableViewPullRefresh-dummy.m new file mode 100644 index 0000000..f8ff054 --- /dev/null +++ b/Pods/Pods-Integration Tests-EGOTableViewPullRefresh-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Integration_Tests_EGOTableViewPullRefresh : NSObject +@end +@implementation PodsDummy_Pods_Integration_Tests_EGOTableViewPullRefresh +@end diff --git a/Pods/Pods-Integration Tests-EGOTableViewPullRefresh-prefix.pch b/Pods/Pods-Integration Tests-EGOTableViewPullRefresh-prefix.pch new file mode 100644 index 0000000..04c7753 --- /dev/null +++ b/Pods/Pods-Integration Tests-EGOTableViewPullRefresh-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-Integration Tests-environment.h" diff --git a/Pods/Pods-Integration Tests-EGOTableViewPullRefresh.xcconfig b/Pods/Pods-Integration Tests-EGOTableViewPullRefresh.xcconfig new file mode 100644 index 0000000..bc9074a --- /dev/null +++ b/Pods/Pods-Integration Tests-EGOTableViewPullRefresh.xcconfig @@ -0,0 +1 @@ +PODS_INTEGRATION_TESTS_EGOTABLEVIEWPULLREFRESH_OTHER_LDFLAGS = -framework QuartzCore \ No newline at end of file diff --git a/Pods/Pods-Integration Tests-KIF-Private.xcconfig b/Pods/Pods-Integration Tests-KIF-Private.xcconfig new file mode 100644 index 0000000..6171801 --- /dev/null +++ b/Pods/Pods-Integration Tests-KIF-Private.xcconfig @@ -0,0 +1,6 @@ +#include "Pods-Integration Tests-KIF.xcconfig" +FRAMEWORK_SEARCH_PATHS = ${PODS_INTEGRATION_TESTS_KIF_FRAMEWORK_SEARCH_PATHS} +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/KIF" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC ${PODS_INTEGRATION_TESTS_KIF_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-Integration Tests-KIF-dummy.m b/Pods/Pods-Integration Tests-KIF-dummy.m new file mode 100644 index 0000000..45ba216 --- /dev/null +++ b/Pods/Pods-Integration Tests-KIF-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Integration_Tests_KIF : NSObject +@end +@implementation PodsDummy_Pods_Integration_Tests_KIF +@end diff --git a/Pods/Pods-Integration Tests-KIF-prefix.pch b/Pods/Pods-Integration Tests-KIF-prefix.pch new file mode 100644 index 0000000..0d5c42e --- /dev/null +++ b/Pods/Pods-Integration Tests-KIF-prefix.pch @@ -0,0 +1,6 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-Integration Tests-environment.h" +#import diff --git a/Pods/Pods-Integration Tests-KIF.xcconfig b/Pods/Pods-Integration Tests-KIF.xcconfig new file mode 100644 index 0000000..8cb3ead --- /dev/null +++ b/Pods/Pods-Integration Tests-KIF.xcconfig @@ -0,0 +1,2 @@ +PODS_INTEGRATION_TESTS_KIF_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" +PODS_INTEGRATION_TESTS_KIF_OTHER_LDFLAGS = -framework CoreGraphics -framework SenTestingKit \ No newline at end of file diff --git a/Pods/Pods-Integration Tests-SBJson-Private.xcconfig b/Pods/Pods-Integration Tests-SBJson-Private.xcconfig new file mode 100644 index 0000000..ab4576e --- /dev/null +++ b/Pods/Pods-Integration Tests-SBJson-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-Integration Tests-SBJson.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/SBJson" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-Integration Tests-SBJson-dummy.m b/Pods/Pods-Integration Tests-SBJson-dummy.m new file mode 100644 index 0000000..c0b99d4 --- /dev/null +++ b/Pods/Pods-Integration Tests-SBJson-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Integration_Tests_SBJson : NSObject +@end +@implementation PodsDummy_Pods_Integration_Tests_SBJson +@end diff --git a/Pods/Pods-Integration Tests-SBJson-prefix.pch b/Pods/Pods-Integration Tests-SBJson-prefix.pch new file mode 100644 index 0000000..04c7753 --- /dev/null +++ b/Pods/Pods-Integration Tests-SBJson-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-Integration Tests-environment.h" diff --git a/Pods/Pods-Integration Tests-SBJson.xcconfig b/Pods/Pods-Integration Tests-SBJson.xcconfig new file mode 100644 index 0000000..e69de29 diff --git a/Pods/Pods-Integration Tests-acknowledgements.markdown b/Pods/Pods-Integration Tests-acknowledgements.markdown new file mode 100644 index 0000000..2e7626f --- /dev/null +++ b/Pods/Pods-Integration Tests-acknowledgements.markdown @@ -0,0 +1,70 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## DejalActivityView + +Please see the "Dejal Open Source License" web page for more information. + +Attribution is required, but a non-attribution license is also available. + + + +----- + +Copyright (c) 2002-2013 Dejal Systems, LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +## KIF + +KIF +Copyright 2011 Square, Inc. +A full list of contributors is available at https://github.com/square/KIF/contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +## SBJson + +Copyright (C) 2007-2014 Stig Brautaset. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Generated by CocoaPods - http://cocoapods.org diff --git a/Pods/Pods-Integration Tests-acknowledgements.plist b/Pods/Pods-Integration Tests-acknowledgements.plist new file mode 100644 index 0000000..6a4148a --- /dev/null +++ b/Pods/Pods-Integration Tests-acknowledgements.plist @@ -0,0 +1,108 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Please see the "Dejal Open Source License" web page for more information. + +Attribution is required, but a non-attribution license is also available. + +<http://www.dejal.com/developer/license/> + +----- + +Copyright (c) 2002-2013 Dejal Systems, LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Title + DejalActivityView + Type + PSGroupSpecifier + + + FooterText + KIF +Copyright 2011 Square, Inc. +A full list of contributors is available at https://github.com/square/KIF/contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + Title + KIF + Type + PSGroupSpecifier + + + FooterText + Copyright (C) 2007-2014 Stig Brautaset. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Title + SBJson + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - http://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Pods-Integration Tests-dummy.m b/Pods/Pods-Integration Tests-dummy.m new file mode 100644 index 0000000..d853bc4 --- /dev/null +++ b/Pods/Pods-Integration Tests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Integration_Tests : NSObject +@end +@implementation PodsDummy_Pods_Integration_Tests +@end diff --git a/Pods/Pods-Integration Tests-environment.h b/Pods/Pods-Integration Tests-environment.h new file mode 100644 index 0000000..70f97cd --- /dev/null +++ b/Pods/Pods-Integration Tests-environment.h @@ -0,0 +1,32 @@ + +// To check if a library is compiled with CocoaPods you +// can use the `COCOAPODS` macro definition which is +// defined in the xcconfigs so it is available in +// headers also when they are imported in the client +// project. + + +// DejalActivityView +#define COCOAPODS_POD_AVAILABLE_DejalActivityView +#define COCOAPODS_VERSION_MAJOR_DejalActivityView 1 +#define COCOAPODS_VERSION_MINOR_DejalActivityView 2 +#define COCOAPODS_VERSION_PATCH_DejalActivityView 0 + +// EGOTableViewPullRefresh +#define COCOAPODS_POD_AVAILABLE_EGOTableViewPullRefresh +#define COCOAPODS_VERSION_MAJOR_EGOTableViewPullRefresh 0 +#define COCOAPODS_VERSION_MINOR_EGOTableViewPullRefresh 1 +#define COCOAPODS_VERSION_PATCH_EGOTableViewPullRefresh 0 + +// KIF +#define COCOAPODS_POD_AVAILABLE_KIF +#define COCOAPODS_VERSION_MAJOR_KIF 2 +#define COCOAPODS_VERSION_MINOR_KIF 0 +#define COCOAPODS_VERSION_PATCH_KIF 0 + +// SBJson +#define COCOAPODS_POD_AVAILABLE_SBJson +#define COCOAPODS_VERSION_MAJOR_SBJson 4 +#define COCOAPODS_VERSION_MINOR_SBJson 0 +#define COCOAPODS_VERSION_PATCH_SBJson 0 + diff --git a/Pods/Pods-Integration Tests-resources.sh b/Pods/Pods-Integration Tests-resources.sh new file mode 100755 index 0000000..a477367 --- /dev/null +++ b/Pods/Pods-Integration Tests-resources.sh @@ -0,0 +1,76 @@ +#!/bin/sh +set -e + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +install_resource() +{ + case $1 in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.framework) + echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcassets) + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" + ;; + *) + echo "${PODS_ROOT}/$1" + echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" + ;; + esac +} +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow@2x.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow@2x.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow@2x.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow@2x.png" + +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]]; then + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] +then + case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Pods-Integration Tests.xcconfig b/Pods/Pods-Integration Tests.xcconfig new file mode 100644 index 0000000..41c220b --- /dev/null +++ b/Pods/Pods-Integration Tests.xcconfig @@ -0,0 +1,6 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_CFLAGS = $(inherited) "-isystem${PODS_ROOT}/Headers" "-isystem${PODS_ROOT}/Headers/DejalActivityView" "-isystem${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "-isystem${PODS_ROOT}/Headers/KIF" "-isystem${PODS_ROOT}/Headers/Kiwi" "-isystem${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC -framework CoreGraphics -framework QuartzCore -framework SenTestingKit -framework UIKit +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Pods-SBJson-Private.xcconfig b/Pods/Pods-SBJson-Private.xcconfig new file mode 100644 index 0000000..7c4bda2 --- /dev/null +++ b/Pods/Pods-SBJson-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-SBJson.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/SBJson" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Pods/Pods-SBJson-dummy.m b/Pods/Pods-SBJson-dummy.m new file mode 100644 index 0000000..0e0e4b4 --- /dev/null +++ b/Pods/Pods-SBJson-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_SBJson : NSObject +@end +@implementation PodsDummy_Pods_SBJson +@end diff --git a/Pods/Pods-SBJson-prefix.pch b/Pods/Pods-SBJson-prefix.pch new file mode 100644 index 0000000..95cf11d --- /dev/null +++ b/Pods/Pods-SBJson-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-environment.h" diff --git a/Pods/Pods-SBJson.xcconfig b/Pods/Pods-SBJson.xcconfig new file mode 100644 index 0000000..e69de29 diff --git a/Pods/Pods-acknowledgements.markdown b/Pods/Pods-acknowledgements.markdown new file mode 100644 index 0000000..ea1dd56 --- /dev/null +++ b/Pods/Pods-acknowledgements.markdown @@ -0,0 +1,52 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## DejalActivityView + +Please see the "Dejal Open Source License" web page for more information. + +Attribution is required, but a non-attribution license is also available. + + + +----- + +Copyright (c) 2002-2013 Dejal Systems, LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +## SBJson + +Copyright (C) 2007-2014 Stig Brautaset. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Generated by CocoaPods - http://cocoapods.org diff --git a/Pods/Pods-acknowledgements.plist b/Pods/Pods-acknowledgements.plist new file mode 100644 index 0000000..e91d3f6 --- /dev/null +++ b/Pods/Pods-acknowledgements.plist @@ -0,0 +1,86 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Please see the "Dejal Open Source License" web page for more information. + +Attribution is required, but a non-attribution license is also available. + +<http://www.dejal.com/developer/license/> + +----- + +Copyright (c) 2002-2013 Dejal Systems, LLC. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + Title + DejalActivityView + Type + PSGroupSpecifier + + + FooterText + Copyright (C) 2007-2014 Stig Brautaset. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Title + SBJson + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - http://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Pods-dummy.m b/Pods/Pods-dummy.m new file mode 100644 index 0000000..ade64bd --- /dev/null +++ b/Pods/Pods-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods : NSObject +@end +@implementation PodsDummy_Pods +@end diff --git a/Pods/Pods-environment.h b/Pods/Pods-environment.h new file mode 100644 index 0000000..5ef9e8b --- /dev/null +++ b/Pods/Pods-environment.h @@ -0,0 +1,26 @@ + +// To check if a library is compiled with CocoaPods you +// can use the `COCOAPODS` macro definition which is +// defined in the xcconfigs so it is available in +// headers also when they are imported in the client +// project. + + +// DejalActivityView +#define COCOAPODS_POD_AVAILABLE_DejalActivityView +#define COCOAPODS_VERSION_MAJOR_DejalActivityView 1 +#define COCOAPODS_VERSION_MINOR_DejalActivityView 2 +#define COCOAPODS_VERSION_PATCH_DejalActivityView 0 + +// EGOTableViewPullRefresh +#define COCOAPODS_POD_AVAILABLE_EGOTableViewPullRefresh +#define COCOAPODS_VERSION_MAJOR_EGOTableViewPullRefresh 0 +#define COCOAPODS_VERSION_MINOR_EGOTableViewPullRefresh 1 +#define COCOAPODS_VERSION_PATCH_EGOTableViewPullRefresh 0 + +// SBJson +#define COCOAPODS_POD_AVAILABLE_SBJson +#define COCOAPODS_VERSION_MAJOR_SBJson 4 +#define COCOAPODS_VERSION_MINOR_SBJson 0 +#define COCOAPODS_VERSION_PATCH_SBJson 0 + diff --git a/Pods/Pods-integration-prefix.pch b/Pods/Pods-integration-prefix.pch deleted file mode 100755 index ad7a180..0000000 --- a/Pods/Pods-integration-prefix.pch +++ /dev/null @@ -1,3 +0,0 @@ -#ifdef __OBJC__ -#import -#endif diff --git a/Pods/Pods-integration-resources.sh b/Pods/Pods-integration-resources.sh deleted file mode 100755 index 4d28bf3..0000000 --- a/Pods/Pods-integration-resources.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -install_resource() -{ - case $1 in - *.xib) - echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib ${SRCROOT}/Pods/$1 --sdk ${SDKROOT}" - ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib ${SRCROOT}/Pods/$1 --sdk ${SDKROOT} - ;; - *) - echo "cp -R ${SRCROOT}/Pods/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - cp -R "${SRCROOT}/Pods/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - ;; - esac -} -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow@2x.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow@2x.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow@2x.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow@2x.png' diff --git a/Pods/Pods-integration.xcconfig b/Pods/Pods-integration.xcconfig deleted file mode 100755 index 64d6986..0000000 --- a/Pods/Pods-integration.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -PODS_ROOT = $(SRCROOT)/Pods -HEADER_SEARCH_PATHS = "$(PODS_ROOT)/Headers" "$(PODS_ROOT)/Headers/DejalActivityView" "$(PODS_ROOT)/Headers/EGOTableViewPullRefresh" "$(PODS_ROOT)/Headers/KIF" "$(PODS_ROOT)/Headers/SBJson" -ALWAYS_SEARCH_USER_PATHS = YES -OTHER_LDFLAGS = -ObjC -all_load -framework UIKit -framework QuartzCore -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) RUN_KIF_TESTS=1 \ No newline at end of file diff --git a/Pods/Pods-prefix.pch b/Pods/Pods-prefix.pch deleted file mode 100755 index ad7a180..0000000 --- a/Pods/Pods-prefix.pch +++ /dev/null @@ -1,3 +0,0 @@ -#ifdef __OBJC__ -#import -#endif diff --git a/Pods/Pods-resources.sh b/Pods/Pods-resources.sh index 4d28bf3..a477367 100755 --- a/Pods/Pods-resources.sh +++ b/Pods/Pods-resources.sh @@ -1,23 +1,76 @@ #!/bin/sh +set -e + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" install_resource() { case $1 in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; *.xib) - echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib ${SRCROOT}/Pods/$1 --sdk ${SDKROOT}" - ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib ${SRCROOT}/Pods/$1 --sdk ${SDKROOT} + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.framework) + echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcassets) + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" ;; *) - echo "cp -R ${SRCROOT}/Pods/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - cp -R "${SRCROOT}/Pods/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + echo "${PODS_ROOT}/$1" + echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" ;; esac } -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow@2x.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow@2x.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow@2x.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow@2x.png' +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow@2x.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow@2x.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow@2x.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow.png" +install_resource "EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow@2x.png" + +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]]; then + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] +then + case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Pods-test-prefix.pch b/Pods/Pods-test-prefix.pch deleted file mode 100755 index ad7a180..0000000 --- a/Pods/Pods-test-prefix.pch +++ /dev/null @@ -1,3 +0,0 @@ -#ifdef __OBJC__ -#import -#endif diff --git a/Pods/Pods-test-resources.sh b/Pods/Pods-test-resources.sh deleted file mode 100755 index 4d28bf3..0000000 --- a/Pods/Pods-test-resources.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -install_resource() -{ - case $1 in - *.xib) - echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib ${SRCROOT}/Pods/$1 --sdk ${SDKROOT}" - ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib ${SRCROOT}/Pods/$1 --sdk ${SDKROOT} - ;; - *) - echo "cp -R ${SRCROOT}/Pods/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - cp -R "${SRCROOT}/Pods/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - ;; - esac -} -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blackArrow@2x.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/blueArrow@2x.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/grayArrow@2x.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow.png' -install_resource 'EGOTableViewPullRefresh/EGOTableViewPullRefresh/Resources/whiteArrow@2x.png' diff --git a/Pods/Pods-test.xcconfig b/Pods/Pods-test.xcconfig deleted file mode 100755 index 159240b..0000000 --- a/Pods/Pods-test.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -PODS_ROOT = $(SRCROOT)/Pods -HEADER_SEARCH_PATHS = "$(PODS_ROOT)/Headers" "$(PODS_ROOT)/Headers/DejalActivityView" "$(PODS_ROOT)/Headers/EGOTableViewPullRefresh" "$(PODS_ROOT)/Headers/Kiwi" "$(PODS_ROOT)/Headers/SBJson" -ALWAYS_SEARCH_USER_PATHS = YES -OTHER_LDFLAGS = -ObjC -all_load -framework UIKit -framework QuartzCore -framework SenTestingKit -FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" \ No newline at end of file diff --git a/Pods/Pods.xcconfig b/Pods/Pods.xcconfig old mode 100755 new mode 100644 index 2379e6c..e91ab79 --- a/Pods/Pods.xcconfig +++ b/Pods/Pods.xcconfig @@ -1,4 +1,5 @@ -PODS_ROOT = $(SRCROOT)/Pods -HEADER_SEARCH_PATHS = "$(PODS_ROOT)/Headers" "$(PODS_ROOT)/Headers/DejalActivityView" "$(PODS_ROOT)/Headers/EGOTableViewPullRefresh" "$(PODS_ROOT)/Headers/SBJson" -ALWAYS_SEARCH_USER_PATHS = YES -OTHER_LDFLAGS = -ObjC -all_load -framework UIKit -framework QuartzCore \ No newline at end of file +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DejalActivityView" "${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "${PODS_ROOT}/Headers/KIF" "${PODS_ROOT}/Headers/Kiwi" "${PODS_ROOT}/Headers/SBJson" +OTHER_CFLAGS = $(inherited) "-isystem${PODS_ROOT}/Headers" "-isystem${PODS_ROOT}/Headers/DejalActivityView" "-isystem${PODS_ROOT}/Headers/EGOTableViewPullRefresh" "-isystem${PODS_ROOT}/Headers/KIF" "-isystem${PODS_ROOT}/Headers/Kiwi" "-isystem${PODS_ROOT}/Headers/SBJson" +OTHER_LDFLAGS = -ObjC -framework QuartzCore -framework UIKit +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj old mode 100755 new mode 100644 index 9cab6fe..0e2a27d --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -1,4908 +1,3188 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 0129D7DE1E8B4420B189B7A1 - - fileRef - E845B9F88A4C4E309522FBFB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 0156E8F2077C4B7A9C68A57D - - fileRef - C9265D4D4A6A40309C3B723F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 01D8A7E998154D01B2622C0B - - isa - PBXFileReference - name - KWMessageTracker.h - path - Kiwi/Kiwi/KWMessageTracker.h - sourceTree - SOURCE_ROOT - - 02ABC5A78BA746B59B2E115B - - fileRef - 347A6EE3669A4380A209C6ED - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 033D4AAD704D4DDCB130686F - - isa - PBXFileReference - name - KWBeforeAllNode.h - path - Kiwi/Kiwi/KWBeforeAllNode.h - sourceTree - SOURCE_ROOT - - 038BC5E198AD40788DF739A6 - - isa - PBXFileReference - name - KWBeforeEachNode.h - path - Kiwi/Kiwi/KWBeforeEachNode.h - sourceTree - SOURCE_ROOT - - 0410A533D56147E5A48510C5 - - isa - PBXFileReference - name - KWMessageSpying.h - path - Kiwi/Kiwi/KWMessageSpying.h - sourceTree - SOURCE_ROOT - - 049294EA947A417CB5572F67 - - fileRef - 26B5681BD9434C2A9641979C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 0547A3D6933A48A0B92DEA35 - - fileRef - 6F35B61FD2304093B11F5DD5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 05A2C1252C00480898B3A63B - - isa - PBXFileReference - name - NSValue+KiwiAdditions.h - path - Kiwi/Kiwi/NSValue+KiwiAdditions.h - sourceTree - SOURCE_ROOT - - 05D59930F18A47B69A1AC1A7 - - buildConfigurations - - CD578488781A44A997F96F06 - 142B789098574A9FB041C8F8 - - isa - XCConfigurationList - - 05E92ACDC2324529A075F801 - - isa - PBXFileReference - name - UIView-KIFAdditions.m - path - KIF/Additions/UIView-KIFAdditions.m - sourceTree - SOURCE_ROOT - - 06E06BFBEB6B4071B396B272 - - isa - PBXFileReference - name - SBJsonWriter.h - path - SBJson/Classes/SBJsonWriter.h - sourceTree - SOURCE_ROOT - - 06F9C0334C30428CB4D75F4A - - isa - PBXFileReference - name - KWWorkarounds.h - path - Kiwi/Kiwi/KWWorkarounds.h - sourceTree - SOURCE_ROOT - - 0750B4CAC8C743A3B613DF1F - - fileRef - AA456B82D7574C8DA3A91E30 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 0A18BDDB74AC4E02BD3B2C4C - - isa - PBXFileReference - name - KWMatcherFactory.h - path - Kiwi/Kiwi/KWMatcherFactory.h - sourceTree - SOURCE_ROOT - - 0A8A9B4D19A1420DA1E80FED - - fileRef - 7E4CDEF1D3954ACA98807B66 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 0AB9164030D443F184D7B44B - - isa - PBXFileReference - name - NSObject+KiwiMockAdditions.h - path - Kiwi/Kiwi/NSObject+KiwiMockAdditions.h - sourceTree - SOURCE_ROOT - - 0ACA2DD17F8B4B3E848F6986 - - isa - PBXFileReference - name - KWBeZeroMatcher.m - path - Kiwi/Kiwi/KWBeZeroMatcher.m - sourceTree - SOURCE_ROOT - - 0B71A846FB92428FBF26E56E - - isa - PBXFileReference - name - KWProbePoller.m - path - Kiwi/Kiwi/KWProbePoller.m - sourceTree - SOURCE_ROOT - - 0C78614F1EC64241980D623A - - fileRef - 57228EC50BF247C39F9D25F1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 0CA030FE19FB40B794BE0B41 - - fileRef - 3A6127E3A8A94A6A96BD8E27 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 0D75BF745801441ABE125628 - - isa - PBXFileReference - name - KWHamrestMatchingAdditions.h - path - Kiwi/Kiwi/KWHamrestMatchingAdditions.h - sourceTree - SOURCE_ROOT - - 11A0CE9C424B4BD09996B346 - - buildActionMask - 2147483647 - dstPath - $(PRODUCT_NAME) - dstSubfolderSpec - 16 - files - - isa - PBXCopyFilesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 12A2FAE15A0440D4B9B10D18 - - fileRef - 7EBEE924A50541B9A748BB75 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 12A81FE5FEFE4A37954C8D4F - - isa - PBXFileReference - name - LoadableCategory.h - path - KIF/Additions/LoadableCategory.h - sourceTree - SOURCE_ROOT - - 12B3D017A31747D8B20CA4E0 - - fileRef - AD9A8A4F5E4B40AB91322B49 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 130C027EAD294EA294E0FB68 - - isa - PBXFileReference - name - KWReporting.h - path - Kiwi/Kiwi/KWReporting.h - sourceTree - SOURCE_ROOT - - 13EAB2C2DEDA447E8FB3EF97 - - isa - PBXFileReference - name - KWSpec.m - path - Kiwi/Kiwi/KWSpec.m - sourceTree - SOURCE_ROOT - - 142B789098574A9FB041C8F8 - - baseConfigurationReference - CAA4CB8D88D34FBEA6738AED - buildSettings - - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - OTHER_LDFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - 14EED12BB9594ADAB0E131FC - - buildActionMask - 2147483647 - files - - 0CA030FE19FB40B794BE0B41 - 0156E8F2077C4B7A9C68A57D - 2E499B89872B4216A8D3B221 - D0B39D9B188A4EE7ABE100B5 - FF3D303331DB41328871AEE1 - 0129D7DE1E8B4420B189B7A1 - 376215CC265D426EB04B29A7 - 6A0211839A2648ABA97E9E3A - 870129DC9087452B9E4E9323 - 40F1A52C27AB4B7BAC882906 - FC6009A1F48F4D67AD0B4E09 - 0750B4CAC8C743A3B613DF1F - 603445C136244246A7F46717 - 336497138139483898D7019B - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 15AF7EA519AD4E9EB5BA2313 - - fileRef - 96D284144354414798D00935 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 172709802AC7454DAAB653EE - - isa - PBXFileReference - name - KWHaveValueMatcher.h - path - Kiwi/Kiwi/KWHaveValueMatcher.h - sourceTree - SOURCE_ROOT - - 1753EBE924AF4F1F998F4008 - - isa - PBXFileReference - name - KWVerifying.h - path - Kiwi/Kiwi/KWVerifying.h - sourceTree - SOURCE_ROOT - - 17DA633496114C3E8E4E2C0B - - fileRef - 1C8CE6530EDF47AE9385554A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 1844388C0EC94B5CB8AD8A50 - - isa - PBXFileReference - name - KWRaiseMatcher.h - path - Kiwi/Kiwi/KWRaiseMatcher.h - sourceTree - SOURCE_ROOT - - 1981E168CFB04A7C8FC09F49 - - isa - PBXFileReference - name - UITouch-KIFAdditions.h - path - KIF/Additions/UITouch-KIFAdditions.h - sourceTree - SOURCE_ROOT - - 19B4EFDF2B404DD6AE3E9FA9 - - isa - PBXFileReference - name - KWTestCase.h - path - Kiwi/Kiwi/KWTestCase.h - sourceTree - SOURCE_ROOT - - 19DCC2912FC74EE2A1863AD5 - - fileRef - AC89BE1B1D9249FFB8E2C877 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 1A16E1BE83D94F9698818FDB - - isa - PBXFileReference - name - UIAccessibilityElement-KIFAdditions.m - path - KIF/Additions/UIAccessibilityElement-KIFAdditions.m - sourceTree - SOURCE_ROOT - - 1B1565ED698E4AFFBBEB3D6B - - isa - PBXFileReference - name - KWExampleGroupBuilder.h - path - Kiwi/Kiwi/KWExampleGroupBuilder.h - sourceTree - SOURCE_ROOT - - 1B4550A4EE7E40D5B838C31B - - isa - PBXFileReference - name - SBJsonStreamParserState.m - path - SBJson/Classes/SBJsonStreamParserState.m - sourceTree - SOURCE_ROOT - - 1B47BE5316A64A5C999A41EF - - isa - PBXFileReference - name - CGGeometry-KIFAdditions.m - path - KIF/Additions/CGGeometry-KIFAdditions.m - sourceTree - SOURCE_ROOT - - 1B662BEBE1E6433DA7B2AA27 - - isa - PBXFileReference - name - UIWindow-KIFAdditions.h - path - KIF/Additions/UIWindow-KIFAdditions.h - sourceTree - SOURCE_ROOT - - 1C8CE6530EDF47AE9385554A - - isa - PBXFileReference - name - KWStringUtilities.m - path - Kiwi/Kiwi/KWStringUtilities.m - sourceTree - SOURCE_ROOT - - 1C96C1DA74154638A617B7B8 - - isa - PBXFileReference - name - KWBlockNode.h - path - Kiwi/Kiwi/KWBlockNode.h - sourceTree - SOURCE_ROOT - - 1FA60BCC9F794EF3822EA9A5 - - fileRef - 1A16E1BE83D94F9698818FDB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 1FF2193E3A6147A49FB4487E - - isa - PBXFileReference - name - KWBeEmptyMatcher.m - path - Kiwi/Kiwi/KWBeEmptyMatcher.m - sourceTree - SOURCE_ROOT - - 211013DEC23649EBA16EBF77 - - buildActionMask - 2147483647 - dstPath - $(PRODUCT_NAME) - dstSubfolderSpec - 16 - files - - isa - PBXCopyFilesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 214FE7F8B1CB44EE92885FA8 - - isa - PBXFileReference - name - KWHaveValueMatcher.m - path - Kiwi/Kiwi/KWHaveValueMatcher.m - sourceTree - SOURCE_ROOT - - 21A62676BA7F478091F4B73B - - isa - PBXFileReference - name - SBJsonStreamParser.m - path - SBJson/Classes/SBJsonStreamParser.m - sourceTree - SOURCE_ROOT - - 22B42DD607524531AF3B500F - - fileRef - F41FD3E33C8941D6BCE4D22C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 2457125824DC485B99002D20 - - fileRef - E845B9F88A4C4E309522FBFB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 24FC320FAE8944A6A80D9299 - - isa - PBXFileReference - name - KWStub.h - path - Kiwi/Kiwi/KWStub.h - sourceTree - SOURCE_ROOT - - 259A2C2467864D738D38A244 - - baseConfigurationReference - EBB34F7306A243E2957B230F - buildSettings - - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-integration-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - OTHER_LDFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - 26A0F7F903D64C89A0005974 - - fileRef - 214FE7F8B1CB44EE92885FA8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 26B5681BD9434C2A9641979C - - isa - PBXFileReference - name - NSNumber+KiwiAdditions.m - path - Kiwi/Kiwi/NSNumber+KiwiAdditions.m - sourceTree - SOURCE_ROOT - - 26FF6D66D9D941A9948A9288 - - fileRef - B7488AF134C14A33A11134BA - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 298C70404D454C0BBBD5DB8F - - fileRef - C43C4B14592B4DF7B6F7E032 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 2995975F613D414B8CC3D469 - - fileRef - A4179E4A2E1440DFAB76B96C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 2BC9849F8EB64B9F87C5B26F - - isa - PBXFileReference - name - KWMatcherFactory.m - path - Kiwi/Kiwi/KWMatcherFactory.m - sourceTree - SOURCE_ROOT - - 2BD0F039CE144B918B3BA322 - - fileRef - 6131AB8624594475A24B0D05 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 2C54CDA55EB8443D922A02F8 - - fileRef - DCF8A44C586140EC81C31371 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 2E499B89872B4216A8D3B221 - - fileRef - EE4511956BAB422C8521A880 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 322699B512B44EAEB3C09C48 - - isa - PBXFileReference - name - KWHamcrestMatcher.m - path - Kiwi/Kiwi/KWHamcrestMatcher.m - sourceTree - SOURCE_ROOT - - 32A6C61EBEC04BB099B16604 - - isa - PBXFileReference - name - UIWindow-KIFAdditions.m - path - KIF/Additions/UIWindow-KIFAdditions.m - sourceTree - SOURCE_ROOT - - 336497138139483898D7019B - - fileRef - C43C4B14592B4DF7B6F7E032 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 339896EFE99645BFA8AE76F8 - - children - - C5D986D57283421E9F5BC462 - EDC27B0618D344BC812300FD - B7AFCA284BAE4731A1DFE779 - 6B018349F39D423BBABDEF7F - AF77A59531324145BD52507E - B4CBAEC10A8548A5ABEFF17F - 5FCFA1BE567B4BB0949BA6B5 - BCCDFF09962A42F89A59AB45 - 6F1F26D7627843D79EB34A38 - C8055065AF6D4719A75315C8 - 033D4AAD704D4DDCB130686F - 038BC5E198AD40788DF739A6 - 5BA55CCA617D485BBE566209 - CC8E8A75505A4F55ACF0EAB2 - 6CE3DFF227964DB1BA2A7C0D - F48CB14B0B3F44FEA25A82F8 - A8CAB54DD8F34C17A055496E - 525A8AFC5B5E4774A915312F - D35690559C2F49899A21E993 - 8D33DD13B0E54702BEF92B44 - F7E7B6B0272844B8875236A7 - 1C96C1DA74154638A617B7B8 - 655D8F48BEAA46E59C5730BC - 96DF59D064FC451890D0BE4C - DF5165F47A2547CBA7E42F75 - 535CF85222D4471598B0113D - AC0BC145383E4819AF91D834 - A595EAD0E43F4494B198284E - 72EF44FC43784AADA019650A - B68A72D9F67A40499ED971BB - C44AA9F5AC904E0DAB3E26F0 - 1B1565ED698E4AFFBBEB3D6B - CC02BD9A492F422A93433F5F - 77AD8C86859045879E3FDAF9 - E98F5C2FC34F4FC9B7680043 - 35230E604EE3408A91ED7BDA - 42480EE7676040DCA325722D - E96B6D4F83DD441583C38570 - 8384806C611E47E3BFA99414 - 5612F9C2A78142309FF5CCD6 - FBE345A1E2D9483D9E94E09A - 0D75BF745801441ABE125628 - A20E8445E2DA46B2AE8985D6 - 172709802AC7454DAAB653EE - 52FDF82A020F43DDAE2CE8BA - 8790D4473E82418DB6A48AE8 - E3A2EB2A9BCB4C66A523291F - 62C513CC25264E4B987EB5BE - C6FD04D5541049318C13624E - C1F54449708041198F4C97C6 - 0A18BDDB74AC4E02BD3B2C4C - 956F077FEF024305BDFC766F - E56EE72F755C4DAD87C78D67 - D0230C8F3ED6411B85696CD0 - DFAF0E4EAE0D4EF9942123BD - 0410A533D56147E5A48510C5 - 01D8A7E998154D01B2622C0B - 4D3EA9592E554A65A84232E6 - 7027634B7F15493B9CE268D4 - 461A448440E340D4A53A751F - 8541F3AE76B645D3B8EA23CC - F337B0167C3A40099C5DAA46 - CE56CFE9A0724C72A46534C2 - 1844388C0EC94B5CB8AD8A50 - CCB0296C7A4C43649047547C - 4081E505FD1F487880443357 - 130C027EAD294EA294E0FB68 - C03BA26BCD3F40A3A34DD526 - C6483444DD8742BBBA1CF380 - BA6BBE104F64436C9B107944 - 24FC320FAE8944A6A80D9299 - 19B4EFDF2B404DD6AE3E9FA9 - EACBEBCE29864478A1242E6D - 9A33DECEC62E4152B32316A3 - 1753EBE924AF4F1F998F4008 - 06F9C0334C30428CB4D75F4A - FE438E0CCF914437B1227FD3 - B550F2BCF10B4AF9BF93D954 - E3FABA92BDD14BD3B19256D6 - 0AB9164030D443F184D7B44B - 7E400CF15A6643D0AFC84223 - FA12AFFF84AB4A5FAAA5A9BA - 05A2C1252C00480898B3A63B - 94F92DE0780040FEA701FFFB - 7EBEE924A50541B9A748BB75 - 91FF127CF1F445B4A3890341 - AC89BE1B1D9249FFB8E2C877 - 1FF2193E3A6147A49FB4487E - F4385D09D6FA48E2839F01D1 - BF673EECCAFD41309B8B47E2 - 57BF04DED9B74118A21D0B5F - 57F3FA16192D477BAF6F18E5 - 96D284144354414798D00935 - 5B5E81275E18452DA716B429 - 89D3B2676BF94F52B5AF148C - DCF8A44C586140EC81C31371 - DEFC9C7886B74E76AF621C6E - 0ACA2DD17F8B4B3E848F6986 - FC73548B4DF74952B968F929 - 8219B44A2405433D91842975 - 57228EC50BF247C39F9D25F1 - D25A41DDADAA4893822C5245 - 34F5ABBFC951467494092ABB - 517B7352987C4257B818CB0C - 5692BBB977D14EE28F9B9500 - C1B77337F288473FB67816A4 - 7E4CDEF1D3954ACA98807B66 - 5F5B1F0AF4E94E94A14C767A - 5B5D94C9E488407CA2E16F8F - D42BD3366FD542B9BF7C4191 - BD42E923CCC64E41A57463BE - 575F9B5C38BA437AB4A0992E - E7FA2BB0B2214A0F8C34B174 - 322699B512B44EAEB3C09C48 - 7DBABBE64B164E768C36AE51 - 42222CC3E0984F62A2ADE3E5 - 214FE7F8B1CB44EE92885FA8 - 3481CA9E475F487B92D64996 - A8845D8169BD48D39A43B0D4 - 652E40EE3D634F5F86ED6541 - 5C8D49B8F6F341A3A69E88E8 - B7308CAE75B84710AD5AB1D0 - 2BC9849F8EB64B9F87C5B26F - 4D9642FA8F584CA39E4C8718 - CEDF621D76DB46639F2E5D13 - 67F0EB2CC5AF411CA777748E - 953BD4FE41254540B15D464E - 51D0FFE3CBBC40D38A03FA42 - B7488AF134C14A33A11134BA - FF05D04A043443E49D35EC87 - 347A6EE3669A4380A209C6ED - 0B71A846FB92428FBF26E56E - B6504CD4F3444F2F900A5139 - 8BCCE44F7E7F46DEB08CB1B4 - D3FD03A56EC942D88C490B9B - E51B25B307224096B78318EC - 13EAB2C2DEDA447E8FB3EF97 - 1C8CE6530EDF47AE9385554A - A4179E4A2E1440DFAB76B96C - 6F35B61FD2304093B11F5DD5 - D2DDA6E428394D7B8B83E595 - 76720F9BD90B4DAC9C7EA672 - 3CE7053CCC03431290A8C5DD - 43B5AC4DC3F14FD2AB07A09C - 5A36A8131EA04FCB894E8C67 - 26B5681BD9434C2A9641979C - 89A4FCB99F254B0CAA35246E - 6131AB8624594475A24B0D05 - 7F27D5CDBBD947B28116C88A - 8A55268E39294719BC190494 - - isa - PBXGroup - name - Kiwi - sourceTree - <group> - - 33AE78E59FE84218A5473C96 - - isa - PBXFileReference - name - SBJson.h - path - SBJson/Classes/SBJson.h - sourceTree - SOURCE_ROOT - - 347A6EE3669A4380A209C6ED - - isa - PBXFileReference - name - KWPendingNode.m - path - Kiwi/Kiwi/KWPendingNode.m - sourceTree - SOURCE_ROOT - - 3481CA9E475F487B92D64996 - - isa - PBXFileReference - name - KWInequalityMatcher.m - path - Kiwi/Kiwi/KWInequalityMatcher.m - sourceTree - SOURCE_ROOT - - 34F5ABBFC951467494092ABB - - isa - PBXFileReference - name - KWConformToProtocolMatcher.m - path - Kiwi/Kiwi/KWConformToProtocolMatcher.m - sourceTree - SOURCE_ROOT - - 35230E604EE3408A91ED7BDA - - isa - PBXFileReference - name - KWExistVerifier.h - path - Kiwi/Kiwi/KWExistVerifier.h - sourceTree - SOURCE_ROOT - - 376215CC265D426EB04B29A7 - - fileRef - D8DA23896F234A05A532D1F7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 386C7281A25E49379ADE332D - - fileRef - AA456B82D7574C8DA3A91E30 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 3A6127E3A8A94A6A96BD8E27 - - isa - PBXFileReference - name - DejalActivityView.m - path - DejalActivityView/DejalActivityView.m - sourceTree - SOURCE_ROOT - - 3B5EAFFEA2B240B9B3885E52 - - fileRef - D2DDA6E428394D7B8B83E595 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 3BE4A342B3E84007B96E48C6 - - fileRef - E7FA2BB0B2214A0F8C34B174 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 3CE7053CCC03431290A8C5DD - - isa - PBXFileReference - name - KWWorkarounds.m - path - Kiwi/Kiwi/KWWorkarounds.m - sourceTree - SOURCE_ROOT - - 3F67F1537A594A3CB4DC55CB - - fileRef - B337A7FC90CA4B45AADECA0B - isa - PBXBuildFile - - 4037664714884B9E96B66289 - - fileRef - EB3351677E2341829C1E403E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 4081E505FD1F487880443357 - - isa - PBXFileReference - name - KWRegisterMatchersNode.h - path - Kiwi/Kiwi/KWRegisterMatchersNode.h - sourceTree - SOURCE_ROOT - - 40F1A52C27AB4B7BAC882906 - - fileRef - F41FD3E33C8941D6BCE4D22C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 41A53B1CD7594B028644832D - - children - - D8FBF5738B5347DA82C89407 - C9265D4D4A6A40309C3B723F - - isa - PBXGroup - name - EGOTableViewPullRefresh - sourceTree - <group> - - 41FD97FAA8F749AFBBA22CE1 - - isa - PBXFileReference - name - SBJsonStreamWriterAccumulator.h - path - SBJson/Classes/SBJsonStreamWriterAccumulator.h - sourceTree - SOURCE_ROOT - - 42222CC3E0984F62A2ADE3E5 - - isa - PBXFileReference - name - KWHaveMatcher.m - path - Kiwi/Kiwi/KWHaveMatcher.m - sourceTree - SOURCE_ROOT - - 42480EE7676040DCA325722D - - isa - PBXFileReference - name - KWExpectationType.h - path - Kiwi/Kiwi/KWExpectationType.h - sourceTree - SOURCE_ROOT - - 43B5AC4DC3F14FD2AB07A09C - - isa - PBXFileReference - name - NSInvocation+KiwiAdditions.m - path - Kiwi/Kiwi/NSInvocation+KiwiAdditions.m - sourceTree - SOURCE_ROOT - - 43C0F7B707C846F4971DC170 - - isa - PBXFileReference - name - NSFileManager-KIFAdditions.m - path - KIF/Additions/NSFileManager-KIFAdditions.m - sourceTree - SOURCE_ROOT - - 461A448440E340D4A53A751F - - isa - PBXFileReference - name - KWObjCUtilities.h - path - Kiwi/Kiwi/KWObjCUtilities.h - sourceTree - SOURCE_ROOT - - 465FFF5E4CA2405595FF2EFE - - fileRef - 6CC545EF52234F038BBFD84F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 4693C76DC5944223A689F53C - - fileRef - D3FD03A56EC942D88C490B9B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 469DBF6279314ED59C1D88DF - - fileRef - 8BCCE44F7E7F46DEB08CB1B4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 46FE4579429E4C788B1F4446 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - name - libPods-test.a - path - libPods-test.a - sourceTree - BUILT_PRODUCTS_DIR - - 4798A49C7F40419B85A99F49 - - isa - PBXFileReference - name - UIScrollView-KIFAdditions.m - path - KIF/Additions/UIScrollView-KIFAdditions.m - sourceTree - SOURCE_ROOT - - 48AAC0B0F52449B0BF9D0754 - - fileRef - 57BF04DED9B74118A21D0B5F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 48DF5B534BBE4F55A36E82A0 - - isa - PBXFileReference - name - SBJsonUTF8Stream.m - path - SBJson/Classes/SBJsonUTF8Stream.m - sourceTree - SOURCE_ROOT - - 4CAA33065F214675B3C5A0D6 - - isa - PBXFileReference - name - UIApplication-KIFAdditions.m - path - KIF/Additions/UIApplication-KIFAdditions.m - sourceTree - SOURCE_ROOT - - 4CE2CD51E0E34D2BAE43F475 - - fileRef - 4D9642FA8F584CA39E4C8718 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 4D3EA9592E554A65A84232E6 - - isa - PBXFileReference - name - KWMock.h - path - Kiwi/Kiwi/KWMock.h - sourceTree - SOURCE_ROOT - - 4D9642FA8F584CA39E4C8718 - - isa - PBXFileReference - name - KWMatchers.m - path - Kiwi/Kiwi/KWMatchers.m - sourceTree - SOURCE_ROOT - - 4DF26E22168442CAB95CBCDD - - children - - A7A0ED8A6A9244CA9DEEF702 - 5565FE1F40D44793AA02000F - 8517F9CE3A7347CDAE63B138 - - isa - PBXGroup - name - Targets Support Files - sourceTree - <group> - - 4E98C5C9E2814FD9ACCDBF42 - - fileRef - 1B47BE5316A64A5C999A41EF - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 4EC3E3C6AC854FB189C8538B - - fileRef - DEFC9C7886B74E76AF621C6E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 4ED611B349A146458B2BEAEB - - fileRef - F4385D09D6FA48E2839F01D1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 4FADB6505B8F4B78A5D0E3F2 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - $(ARCHS_STANDARD_32_BIT) - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvmgcc42 - GCC_WARN_ABOUT_MISSING_PROTOTYPES - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNUSED_VARIABLE - YES - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.3 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 517B7352987C4257B818CB0C - - isa - PBXFileReference - name - KWContainMatcher.m - path - Kiwi/Kiwi/KWContainMatcher.m - sourceTree - SOURCE_ROOT - - 517C154C9F5645C395FFD0BF - - buildConfigurations - - EFB5F298B734438AB315BC76 - 259A2C2467864D738D38A244 - - isa - XCConfigurationList - - 51D0FFE3CBBC40D38A03FA42 - - isa - PBXFileReference - name - KWMock.m - path - Kiwi/Kiwi/KWMock.m - sourceTree - SOURCE_ROOT - - 525A8AFC5B5E4774A915312F - - isa - PBXFileReference - name - KWBeTrueMatcher.h - path - Kiwi/Kiwi/KWBeTrueMatcher.h - sourceTree - SOURCE_ROOT - - 528D6B3ACB3947F7B081E0E6 - - isa - PBXFileReference - name - Pods-integration-resources.sh - path - Pods-integration-resources.sh - sourceTree - SOURCE_ROOT - - 52FDF82A020F43DDAE2CE8BA - - isa - PBXFileReference - name - KWHCMatcher.h - path - Kiwi/Kiwi/KWHCMatcher.h - sourceTree - SOURCE_ROOT - - 535CF85222D4471598B0113D - - isa - PBXFileReference - name - KWContainMatcher.h - path - Kiwi/Kiwi/KWContainMatcher.h - sourceTree - SOURCE_ROOT - - 54A7C94D21C5468198364A12 - - fileRef - 5C8D49B8F6F341A3A69E88E8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 5552B202B2804B318C9E86F9 - - isa - PBXFileReference - name - SBJsonStreamWriterState.m - path - SBJson/Classes/SBJsonStreamWriterState.m - sourceTree - SOURCE_ROOT - - 5565FE1F40D44793AA02000F - - children - - 6A9BC5977C8046B294A7F2EB - 57C0148A027B440BB26EE6EA - 6DC6CA5CFA424438BB2F65A1 - - isa - PBXGroup - name - Pods-test - sourceTree - <group> - - 55E09F608CD14F12A3D2A2AB - - fileRef - 575F9B5C38BA437AB4A0992E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 5612F9C2A78142309FF5CCD6 - - isa - PBXFileReference - name - KWFutureObject.h - path - Kiwi/Kiwi/KWFutureObject.h - sourceTree - SOURCE_ROOT - - 5692BBB977D14EE28F9B9500 - - isa - PBXFileReference - name - KWContextNode.m - path - Kiwi/Kiwi/KWContextNode.m - sourceTree - SOURCE_ROOT - - 56FC758943A94EDF934BC1E2 - - fileRef - C9265D4D4A6A40309C3B723F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 57228EC50BF247C39F9D25F1 - - isa - PBXFileReference - name - KWBlockRaiseMatcher.m - path - Kiwi/Kiwi/KWBlockRaiseMatcher.m - sourceTree - SOURCE_ROOT - - 575F9B5C38BA437AB4A0992E - - isa - PBXFileReference - name - KWFormatter.m - path - Kiwi/Kiwi/KWFormatter.m - sourceTree - SOURCE_ROOT - - 57BF04DED9B74118A21D0B5F - - isa - PBXFileReference - name - KWBeIdenticalToMatcher.m - path - Kiwi/Kiwi/KWBeIdenticalToMatcher.m - sourceTree - SOURCE_ROOT - - 57C0148A027B440BB26EE6EA - - isa - PBXFileReference - name - Pods-test-prefix.pch - path - Pods-test-prefix.pch - sourceTree - SOURCE_ROOT - - 57F3FA16192D477BAF6F18E5 - - isa - PBXFileReference - name - KWBeKindOfClassMatcher.m - path - Kiwi/Kiwi/KWBeKindOfClassMatcher.m - sourceTree - SOURCE_ROOT - - 57FC43534E4F4B52B2D3E0B7 - - isa - PBXFileReference - name - KIFTestController.m - path - KIF/Classes/KIFTestController.m - sourceTree - SOURCE_ROOT - - 583AF04B3ECF47E7A23E5279 - - isa - PBXFileReference - name - SBJsonStreamWriterState.h - path - SBJson/Classes/SBJsonStreamWriterState.h - sourceTree - SOURCE_ROOT - - 5993B4E5341B4CB9923042EC - - fileRef - 89A4FCB99F254B0CAA35246E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 59C1E135BB5147FBAD217924 - - isa - PBXFileReference - name - KIFTestController.h - path - KIF/Classes/KIFTestController.h - sourceTree - SOURCE_ROOT - - 5A36A8131EA04FCB894E8C67 - - isa - PBXFileReference - name - NSMethodSignature+KiwiAdditions.m - path - Kiwi/Kiwi/NSMethodSignature+KiwiAdditions.m - sourceTree - SOURCE_ROOT - - 5A7BB746787046DA8134C5F8 - - buildActionMask - 2147483647 - dstPath - $(PRODUCT_NAME) - dstSubfolderSpec - 16 - files - - isa - PBXCopyFilesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 5B17A860BB6B42179F4C3414 - - isa - PBXFileReference - name - SBJsonStreamWriter.m - path - SBJson/Classes/SBJsonStreamWriter.m - sourceTree - SOURCE_ROOT - - 5B5D94C9E488407CA2E16F8F - - isa - PBXFileReference - name - KWExampleGroupBuilder.m - path - Kiwi/Kiwi/KWExampleGroupBuilder.m - sourceTree - SOURCE_ROOT - - 5B5E81275E18452DA716B429 - - isa - PBXFileReference - name - KWBeNilMatcher.m - path - Kiwi/Kiwi/KWBeNilMatcher.m - sourceTree - SOURCE_ROOT - - 5BA55CCA617D485BBE566209 - - isa - PBXFileReference - name - KWBeIdenticalToMatcher.h - path - Kiwi/Kiwi/KWBeIdenticalToMatcher.h - sourceTree - SOURCE_ROOT - - 5C8D49B8F6F341A3A69E88E8 - - isa - PBXFileReference - name - KWItNode.m - path - Kiwi/Kiwi/KWItNode.m - sourceTree - SOURCE_ROOT - - 5D6CA16A5465480DB65FFFDF - - fileRef - D25A41DDADAA4893822C5245 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 5F2E7A46A3CD43AA9C16D9FB - - isa - PBXFileReference - name - SBJsonStreamParserAdapter.h - path - SBJson/Classes/SBJsonStreamParserAdapter.h - sourceTree - SOURCE_ROOT - - 5F5B1F0AF4E94E94A14C767A - - isa - PBXFileReference - name - KWExampleGroup.m - path - Kiwi/Kiwi/KWExampleGroup.m - sourceTree - SOURCE_ROOT - - 5FCFA1BE567B4BB0949BA6B5 - - isa - PBXFileReference - name - KWAfterEachNode.h - path - Kiwi/Kiwi/KWAfterEachNode.h - sourceTree - SOURCE_ROOT - - 60248D72BD884CA695B59643 - - fileRef - 517B7352987C4257B818CB0C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 603445C136244246A7F46717 - - fileRef - 48DF5B534BBE4F55A36E82A0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 60DAB2CD6CD343BA94C2F84D - - fileRef - D42BD3366FD542B9BF7C4191 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 6131AB8624594475A24B0D05 - - isa - PBXFileReference - name - NSObject+KiwiStubAdditions.m - path - Kiwi/Kiwi/NSObject+KiwiStubAdditions.m - sourceTree - SOURCE_ROOT - - 6187B5F1D5DC4753BF499682 - - fileRef - 5552B202B2804B318C9E86F9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 6205A2175A0A46C99928FB09 - - isa - PBXFileReference - name - SBJsonStreamParser.h - path - SBJson/Classes/SBJsonStreamParser.h - sourceTree - SOURCE_ROOT - - 62327607951D493880104882 - - fileRef - 5B17A860BB6B42179F4C3414 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 62C513CC25264E4B987EB5BE - - isa - PBXFileReference - name - KWInvocationCapturer.h - path - Kiwi/Kiwi/KWInvocationCapturer.h - sourceTree - SOURCE_ROOT - - 6385EDEB17A142DEB5811B92 - - buildConfigurationList - 9F7752667F5C4F1FA7A4DDC3 - buildPhases - - A314FFAC09AC4F3F8FC8FDEA - A6B229EE599F452A9863B6FD - 211013DEC23649EBA16EBF77 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-test - productName - Pods-test - productReference - 46FE4579429E4C788B1F4446 - productType - com.apple.product-type.library.static - - 6489A7564EF2478AAE2EE0F4 - - fileRef - 67F0EB2CC5AF411CA777748E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 652E40EE3D634F5F86ED6541 - - isa - PBXFileReference - name - KWInvocationCapturer.m - path - Kiwi/Kiwi/KWInvocationCapturer.m - sourceTree - SOURCE_ROOT - - 655D8F48BEAA46E59C5730BC - - isa - PBXFileReference - name - KWBlockRaiseMatcher.h - path - Kiwi/Kiwi/KWBlockRaiseMatcher.h - sourceTree - SOURCE_ROOT - - 65B9E629A8D0438287E13FE4 - - children - - 59C1E135BB5147FBAD217924 - BAE8FE41912C43689EE57826 - C3E8313DB4AC453A812E8908 - 57FC43534E4F4B52B2D3E0B7 - DAA37EDC88A744858F74A27F - EB3351677E2341829C1E403E - 8A03EE9F09B74C2CBFAB29C8 - 12A81FE5FEFE4A37954C8D4F - 7DA358E5F7A247179A9CA930 - E679B7D87F9047D298F5D404 - E2900A533C5941078E1083EA - 8538F30EAACF49E5AE9200F7 - 1981E168CFB04A7C8FC09F49 - 7DC3875A75AA4994ADFB7297 - 1B662BEBE1E6433DA7B2AA27 - 1B47BE5316A64A5C999A41EF - 43C0F7B707C846F4971DC170 - 1A16E1BE83D94F9698818FDB - 4CAA33065F214675B3C5A0D6 - 4798A49C7F40419B85A99F49 - 6CC545EF52234F038BBFD84F - 05E92ACDC2324529A075F801 - 32A6C61EBEC04BB099B16604 - - isa - PBXGroup - name - KIF - sourceTree - <group> - - 65C77F3FF748468583503B2E - - fileRef - F41FD3E33C8941D6BCE4D22C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 6648715E7F9D4224A4A03941 - - fileRef - 43B5AC4DC3F14FD2AB07A09C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 67EE05B17A344BE388B600D0 - - isa - PBXFileReference - name - SBJsonTokeniser.h - path - SBJson/Classes/SBJsonTokeniser.h - sourceTree - SOURCE_ROOT - - 67F0EB2CC5AF411CA777748E - - isa - PBXFileReference - name - KWMessagePattern.m - path - Kiwi/Kiwi/KWMessagePattern.m - sourceTree - SOURCE_ROOT - - 6A0211839A2648ABA97E9E3A - - fileRef - 1B4550A4EE7E40D5B838C31B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 6A9BC5977C8046B294A7F2EB - - isa - PBXFileReference - name - Pods-test-resources.sh - path - Pods-test-resources.sh - sourceTree - SOURCE_ROOT - - 6B018349F39D423BBABDEF7F - - isa - PBXFileReference - name - KiwiMacros.h - path - Kiwi/Kiwi/KiwiMacros.h - sourceTree - SOURCE_ROOT - - 6CC545EF52234F038BBFD84F - - isa - PBXFileReference - name - UITouch-KIFAdditions.m - path - KIF/Additions/UITouch-KIFAdditions.m - sourceTree - SOURCE_ROOT - - 6CE3DFF227964DB1BA2A7C0D - - isa - PBXFileReference - name - KWBeMemberOfClassMatcher.h - path - Kiwi/Kiwi/KWBeMemberOfClassMatcher.h - sourceTree - SOURCE_ROOT - - 6DC6CA5CFA424438BB2F65A1 - - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-test.xcconfig - path - Pods-test.xcconfig - sourceTree - SOURCE_ROOT - - 6E1849EA208B49B9A79C916D - - fileRef - 5B5D94C9E488407CA2E16F8F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 6EDD1186CBC542E0A0786BCF - - fileRef - E845B9F88A4C4E309522FBFB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 6F1F26D7627843D79EB34A38 - - isa - PBXFileReference - name - KWBeBetweenMatcher.h - path - Kiwi/Kiwi/KWBeBetweenMatcher.h - sourceTree - SOURCE_ROOT - - 6F35B61FD2304093B11F5DD5 - - isa - PBXFileReference - name - KWTestCase.m - path - Kiwi/Kiwi/KWTestCase.m - sourceTree - SOURCE_ROOT - - 7027634B7F15493B9CE268D4 - - isa - PBXFileReference - name - KWNull.h - path - Kiwi/Kiwi/KWNull.h - sourceTree - SOURCE_ROOT - - 71D89D5F054E40E4BFEC9E43 - - fileRef - 57F3FA16192D477BAF6F18E5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 72EF44FC43784AADA019650A - - isa - PBXFileReference - name - KWDeviceInfo.h - path - Kiwi/Kiwi/KWDeviceInfo.h - sourceTree - SOURCE_ROOT - - 74E95C210157427795D6F7C6 - - fileRef - 2BC9849F8EB64B9F87C5B26F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 75505E1EC4084CA1A142DC30 - - fileRef - 4798A49C7F40419B85A99F49 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 76720F9BD90B4DAC9C7EA672 - - isa - PBXFileReference - name - KWValue.m - path - Kiwi/Kiwi/KWValue.m - sourceTree - SOURCE_ROOT - - 7751609A5D604872850934E6 - - fileRef - 91FF127CF1F445B4A3890341 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 77AD8C86859045879E3FDAF9 - - isa - PBXFileReference - name - KWExampleNode.h - path - Kiwi/Kiwi/KWExampleNode.h - sourceTree - SOURCE_ROOT - - 78C764D3C5674A64B8E5BC14 - - fileRef - 76720F9BD90B4DAC9C7EA672 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 79C5ED0ACFC94EB49C87A984 - - fileRef - 89D3B2676BF94F52B5AF148C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 7BED2259C9FA4996974D1663 - - fileRef - 3A6127E3A8A94A6A96BD8E27 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 7DA358E5F7A247179A9CA930 - - isa - PBXFileReference - name - NSFileManager-KIFAdditions.h - path - KIF/Additions/NSFileManager-KIFAdditions.h - sourceTree - SOURCE_ROOT - - 7DBABBE64B164E768C36AE51 - - isa - PBXFileReference - name - KWHamrestMatchingAdditions.m - path - Kiwi/Kiwi/KWHamrestMatchingAdditions.m - sourceTree - SOURCE_ROOT - - 7DC3875A75AA4994ADFB7297 - - isa - PBXFileReference - name - UIView-KIFAdditions.h - path - KIF/Additions/UIView-KIFAdditions.h - sourceTree - SOURCE_ROOT - - 7E400CF15A6643D0AFC84223 - - isa - PBXFileReference - name - NSObject+KiwiStubAdditions.h - path - Kiwi/Kiwi/NSObject+KiwiStubAdditions.h - sourceTree - SOURCE_ROOT - - 7E4CDEF1D3954ACA98807B66 - - isa - PBXFileReference - name - KWEqualMatcher.m - path - Kiwi/Kiwi/KWEqualMatcher.m - sourceTree - SOURCE_ROOT - - 7EBEE924A50541B9A748BB75 - - isa - PBXFileReference - name - KWAfterEachNode.m - path - Kiwi/Kiwi/KWAfterEachNode.m - sourceTree - SOURCE_ROOT - - 7EC4B8949CE746F8B5B5E60F - - fileRef - B7308CAE75B84710AD5AB1D0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 7F27D5CDBBD947B28116C88A - - isa - PBXFileReference - name - NSObject+KiwiVerifierAdditions.m - path - Kiwi/Kiwi/NSObject+KiwiVerifierAdditions.m - sourceTree - SOURCE_ROOT - - 81514427BE7445F99DD2FCA3 - - fileRef - A8845D8169BD48D39A43B0D4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 8219B44A2405433D91842975 - - isa - PBXFileReference - name - KWBlockNode.m - path - Kiwi/Kiwi/KWBlockNode.m - sourceTree - SOURCE_ROOT - - 8384806C611E47E3BFA99414 - - isa - PBXFileReference - name - KWFormatter.h - path - Kiwi/Kiwi/KWFormatter.h - sourceTree - SOURCE_ROOT - - 8517F9CE3A7347CDAE63B138 - - children - - 528D6B3ACB3947F7B081E0E6 - C4396CDA4BBF4823948FFBC5 - EBB34F7306A243E2957B230F - - isa - PBXGroup - name - Pods-integration - sourceTree - <group> - - 8538F30EAACF49E5AE9200F7 - - isa - PBXFileReference - name - UIScrollView-KIFAdditions.h - path - KIF/Additions/UIScrollView-KIFAdditions.h - sourceTree - SOURCE_ROOT - - 8541F3AE76B645D3B8EA23CC - - isa - PBXFileReference - name - KWPendingNode.h - path - Kiwi/Kiwi/KWPendingNode.h - sourceTree - SOURCE_ROOT - - 870129DC9087452B9E4E9323 - - fileRef - 5B17A860BB6B42179F4C3414 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 8790D4473E82418DB6A48AE8 - - isa - PBXFileReference - name - KWInequalityMatcher.h - path - Kiwi/Kiwi/KWInequalityMatcher.h - sourceTree - SOURCE_ROOT - - 89610C47119E414380A6D95F - - fileRef - BF673EECCAFD41309B8B47E2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 89A4FCB99F254B0CAA35246E - - isa - PBXFileReference - name - NSObject+KiwiMockAdditions.m - path - Kiwi/Kiwi/NSObject+KiwiMockAdditions.m - sourceTree - SOURCE_ROOT - - 89D3B2676BF94F52B5AF148C - - isa - PBXFileReference - name - KWBeNonNilMatcher.m - path - Kiwi/Kiwi/KWBeNonNilMatcher.m - sourceTree - SOURCE_ROOT - - 8A03EE9F09B74C2CBFAB29C8 - - isa - PBXFileReference - name - CGGeometry-KIFAdditions.h - path - KIF/Additions/CGGeometry-KIFAdditions.h - sourceTree - SOURCE_ROOT - - 8A2B288EC91040AE93E503ED - - fileRef - 48DF5B534BBE4F55A36E82A0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 8A55268E39294719BC190494 - - isa - PBXFileReference - name - NSValue+KiwiAdditions.m - path - Kiwi/Kiwi/NSValue+KiwiAdditions.m - sourceTree - SOURCE_ROOT - - 8BCCE44F7E7F46DEB08CB1B4 - - isa - PBXFileReference - name - KWReceiveMatcher.m - path - Kiwi/Kiwi/KWReceiveMatcher.m - sourceTree - SOURCE_ROOT - - 8D33DD13B0E54702BEF92B44 - - isa - PBXFileReference - name - KWBeZeroMatcher.h - path - Kiwi/Kiwi/KWBeZeroMatcher.h - sourceTree - SOURCE_ROOT - - 8DEE442F5CEE40619F16641C - - fileRef - D8DA23896F234A05A532D1F7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 8E6C7C9C094141038A3BC2F7 - - buildConfigurationList - 05D59930F18A47B69A1AC1A7 - buildPhases - - 14EED12BB9594ADAB0E131FC - B8B2BA8F423F452B8782A726 - 11A0CE9C424B4BD09996B346 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - E4D19FE9EF54413790B985B2 - productType - com.apple.product-type.library.static - - 8F047843496845F3865BF65E - - buildActionMask - 2147483647 - files - - A3A28D8F20D94DE18CFAF408 - 56FC758943A94EDF934BC1E2 - EE95BA93E1064854A6870C90 - D69B731AA66D479EAFF2436B - 4037664714884B9E96B66289 - 4E98C5C9E2814FD9ACCDBF42 - CF0D4C587E164BFEAD1D1380 - 1FA60BCC9F794EF3822EA9A5 - 91FE2735C7A344C7B56BCA32 - 75505E1EC4084CA1A142DC30 - 465FFF5E4CA2405595FF2EFE - E389F2D9D84B400DADFC3038 - ADA8E9ADFE4D4C3094F6CA5F - D8E6A81560864CA88C7861CB - 12B3D017A31747D8B20CA4E0 - FE88B04EC9704E4FA3D0668A - 2457125824DC485B99002D20 - CF01FFCFC0384F1296F227E9 - 95579A8111D04EE08141B19A - DFA49ADF8B534EFB95FA7BEE - 65C77F3FF748468583503B2E - 6187B5F1D5DC4753BF499682 - B1164AF39C734E35A1E9079F - 8A2B288EC91040AE93E503ED - BA2C69F422F942B1BFA986F1 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 90983D3DD1C244F2B22223B4 - - fileRef - 34F5ABBFC951467494092ABB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 91FE2735C7A344C7B56BCA32 - - fileRef - 4CAA33065F214675B3C5A0D6 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 91FF127CF1F445B4A3890341 - - isa - PBXFileReference - name - KWAsyncVerifier.m - path - Kiwi/Kiwi/KWAsyncVerifier.m - sourceTree - SOURCE_ROOT - - 939B34ECB8E44285BCC7CA4A - - fileRef - CEDF621D76DB46639F2E5D13 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 94827E6A040B403B84963A7C - - isa - PBXFileReference - name - SBJsonParser.h - path - SBJson/Classes/SBJsonParser.h - sourceTree - SOURCE_ROOT - - 94F92DE0780040FEA701FFFB - - isa - PBXFileReference - name - KWAfterAllNode.m - path - Kiwi/Kiwi/KWAfterAllNode.m - sourceTree - SOURCE_ROOT - - 953BD4FE41254540B15D464E - - isa - PBXFileReference - name - KWMessageTracker.m - path - Kiwi/Kiwi/KWMessageTracker.m - sourceTree - SOURCE_ROOT - - 95579A8111D04EE08141B19A - - fileRef - 1B4550A4EE7E40D5B838C31B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 956F077FEF024305BDFC766F - - isa - PBXFileReference - name - KWMatchers.h - path - Kiwi/Kiwi/KWMatchers.h - sourceTree - SOURCE_ROOT - - 966CAC2A4CF1469CB0C1F73D - - fileRef - 5692BBB977D14EE28F9B9500 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 96D284144354414798D00935 - - isa - PBXFileReference - name - KWBeMemberOfClassMatcher.m - path - Kiwi/Kiwi/KWBeMemberOfClassMatcher.m - sourceTree - SOURCE_ROOT - - 96DF59D064FC451890D0BE4C - - isa - PBXFileReference - name - KWCallSite.h - path - Kiwi/Kiwi/KWCallSite.h - sourceTree - SOURCE_ROOT - - 99A3D463C9A24370B0090BEE - - fileRef - 652E40EE3D634F5F86ED6541 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 9A33DECEC62E4152B32316A3 - - isa - PBXFileReference - name - KWValue.h - path - Kiwi/Kiwi/KWValue.h - sourceTree - SOURCE_ROOT - - 9B0C7ACDEDCD43A09D8EEBFB - - fileRef - 1FF2193E3A6147A49FB4487E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 9D885B4D9AC546AF945C37BD - - baseConfigurationReference - 6DC6CA5CFA424438BB2F65A1 - buildSettings - - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-test-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - OTHER_LDFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 9DDA11EE9C554603AF6F1F99 - - fileRef - 51D0FFE3CBBC40D38A03FA42 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - 9F27EB145B334D3DAE225A35 - - fileRef - 1B4550A4EE7E40D5B838C31B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - 9F7752667F5C4F1FA7A4DDC3 - - buildConfigurations - - 9D885B4D9AC546AF945C37BD - A23E7E6FE3994211B8ADC8C7 - - isa - XCConfigurationList - - A07C6FFB393845D589ACEA6F - - fileRef - 42222CC3E0984F62A2ADE3E5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - A20E8445E2DA46B2AE8985D6 - - isa - PBXFileReference - name - KWHaveMatcher.h - path - Kiwi/Kiwi/KWHaveMatcher.h - sourceTree - SOURCE_ROOT - - A23E7E6FE3994211B8ADC8C7 - - baseConfigurationReference - 6DC6CA5CFA424438BB2F65A1 - buildSettings - - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-test-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - OTHER_LDFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - A289A9426467482BADC59FBF - - fileRef - 0ACA2DD17F8B4B3E848F6986 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - A314FFAC09AC4F3F8FC8FDEA - - buildActionMask - 2147483647 - files - - 7BED2259C9FA4996974D1663 - CE93A85DD77E48F38001F8BD - E083939F4A6C4DA5BE311534 - 12A2FAE15A0440D4B9B10D18 - 7751609A5D604872850934E6 - 19DCC2912FC74EE2A1863AD5 - 9B0C7ACDEDCD43A09D8EEBFB - 4ED611B349A146458B2BEAEB - 89610C47119E414380A6D95F - 48AAC0B0F52449B0BF9D0754 - 71D89D5F054E40E4BFEC9E43 - 15AF7EA519AD4E9EB5BA2313 - C91E2DE4EDEB44A2903942CE - 79C5ED0ACFC94EB49C87A984 - 2C54CDA55EB8443D922A02F8 - 4EC3E3C6AC854FB189C8538B - A289A9426467482BADC59FBF - D18D89E690D649C4A813EA12 - CCEA2B20B0DA4248AB6227B9 - 0C78614F1EC64241980D623A - 5D6CA16A5465480DB65FFFDF - 90983D3DD1C244F2B22223B4 - 60248D72BD884CA695B59643 - 966CAC2A4CF1469CB0C1F73D - E8F10DF23F334B598C2B41F8 - 0A8A9B4D19A1420DA1E80FED - F52349C30A304359B31D6E0D - 6E1849EA208B49B9A79C916D - 60DAB2CD6CD343BA94C2F84D - AC9410F942BE4B49ABD74FE6 - 55E09F608CD14F12A3D2A2AB - 3BE4A342B3E84007B96E48C6 - E91DEA0B2BE94DCB8F8D26AE - D9992C33CE2547088E49A347 - A07C6FFB393845D589ACEA6F - 26A0F7F903D64C89A0005974 - DCD2489D527D4B12AEA3350B - 81514427BE7445F99DD2FCA3 - 99A3D463C9A24370B0090BEE - 54A7C94D21C5468198364A12 - 7EC4B8949CE746F8B5B5E60F - 74E95C210157427795D6F7C6 - 4CE2CD51E0E34D2BAE43F475 - 939B34ECB8E44285BCC7CA4A - 6489A7564EF2478AAE2EE0F4 - CB5658829CD8442B94076F0E - 9DDA11EE9C554603AF6F1F99 - 26FF6D66D9D941A9948A9288 - C34A660FC67D41FB819038CF - 02ABC5A78BA746B59B2E115B - D3F7544C52B74DF2A0DBF58B - BDE3AC355AAC426ABC158EA3 - 469DBF6279314ED59C1D88DF - 4693C76DC5944223A689F53C - C443937C1E994A31AD1298E5 - BAD0C5B0936A4CCCB0C4A5BB - 17DA633496114C3E8E4E2C0B - 2995975F613D414B8CC3D469 - 0547A3D6933A48A0B92DEA35 - 3B5EAFFEA2B240B9B3885E52 - 78C764D3C5674A64B8E5BC14 - C58CB86FD6A64A8AAD42E196 - 6648715E7F9D4224A4A03941 - DDDB382CAC3D480085286092 - 049294EA947A417CB5572F67 - 5993B4E5341B4CB9923042EC - 2BD0F039CE144B918B3BA322 - A782BB69312A47629C453CB4 - D08B80EB7A3A4D99ABEA1FD4 - D1F6C6AC1B4342A8B39CCAA9 - C11F07CAF13E4D4A866B869D - C95BD6AA8CB44FA68E60BB03 - 6EDD1186CBC542E0A0786BCF - 8DEE442F5CEE40619F16641C - 9F27EB145B334D3DAE225A35 - 62327607951D493880104882 - 22B42DD607524531AF3B500F - B21F6C3831B0435B8FB3D4F4 - 386C7281A25E49379ADE332D - C5AE550AA6744277BD67F120 - 298C70404D454C0BBBD5DB8F - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - A3A28D8F20D94DE18CFAF408 - - fileRef - 3A6127E3A8A94A6A96BD8E27 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - A4179E4A2E1440DFAB76B96C - - isa - PBXFileReference - name - KWStub.m - path - Kiwi/Kiwi/KWStub.m - sourceTree - SOURCE_ROOT - - A595EAD0E43F4494B198284E - - isa - PBXFileReference - name - KWCountType.h - path - Kiwi/Kiwi/KWCountType.h - sourceTree - SOURCE_ROOT - - A5FA888D16F04742A2520023 - - children - - B337A7FC90CA4B45AADECA0B - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - A69C7CDAA6644D01A51AE6B7 - - isa - PBXFileReference - name - SBJsonUTF8Stream.h - path - SBJson/Classes/SBJsonUTF8Stream.h - sourceTree - SOURCE_ROOT - - A6B229EE599F452A9863B6FD - - buildActionMask - 2147483647 - files - - F7CBF2161633443486BE8227 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - A782BB69312A47629C453CB4 - - fileRef - 7F27D5CDBBD947B28116C88A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - A7A0ED8A6A9244CA9DEEF702 - - children - - CE7A7E35A48043D297C2B4A4 - F50A8408C59040E2B92399B3 - CAA4CB8D88D34FBEA6738AED - - isa - PBXGroup - name - Pods - sourceTree - <group> - - A874EB1BAE3141D2ADB967C1 - - isa - PBXFileReference - name - SBJsonStreamWriter.h - path - SBJson/Classes/SBJsonStreamWriter.h - sourceTree - SOURCE_ROOT - - A8845D8169BD48D39A43B0D4 - - isa - PBXFileReference - name - KWIntercept.m - path - Kiwi/Kiwi/KWIntercept.m - sourceTree - SOURCE_ROOT - - A8CAB54DD8F34C17A055496E - - isa - PBXFileReference - name - KWBeNonNilMatcher.h - path - Kiwi/Kiwi/KWBeNonNilMatcher.h - sourceTree - SOURCE_ROOT - - AA456B82D7574C8DA3A91E30 - - isa - PBXFileReference - name - SBJsonTokeniser.m - path - SBJson/Classes/SBJsonTokeniser.m - sourceTree - SOURCE_ROOT - - AC0BC145383E4819AF91D834 - - isa - PBXFileReference - name - KWContextNode.h - path - Kiwi/Kiwi/KWContextNode.h - sourceTree - SOURCE_ROOT - - AC89BE1B1D9249FFB8E2C877 - - isa - PBXFileReference - name - KWBeBetweenMatcher.m - path - Kiwi/Kiwi/KWBeBetweenMatcher.m - sourceTree - SOURCE_ROOT - - AC9410F942BE4B49ABD74FE6 - - fileRef - BD42E923CCC64E41A57463BE - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - AC985ADE709B4815A60A273E - - children - - C73AB06E56724F27AC453D8E - A5FA888D16F04742A2520023 - E7938079CB9E4D8482892224 - 4DF26E22168442CAB95CBCDD - - isa - PBXGroup - sourceTree - <group> - - AD9A8A4F5E4B40AB91322B49 - - isa - PBXFileReference - name - SBJsonParser.m - path - SBJson/Classes/SBJsonParser.m - sourceTree - SOURCE_ROOT - - ADA8E9ADFE4D4C3094F6CA5F - - fileRef - 32A6C61EBEC04BB099B16604 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - AF77A59531324145BD52507E - - isa - PBXFileReference - name - KiwiNewMacros.h - path - Kiwi/Kiwi/KiwiNewMacros.h - sourceTree - SOURCE_ROOT - - B1164AF39C734E35A1E9079F - - fileRef - AA456B82D7574C8DA3A91E30 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - B21F6C3831B0435B8FB3D4F4 - - fileRef - 5552B202B2804B318C9E86F9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - B337A7FC90CA4B45AADECA0B - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - System/Library/Frameworks/Foundation.framework - sourceTree - SDKROOT - - B4CBAEC10A8548A5ABEFF17F - - isa - PBXFileReference - name - KWAfterAllNode.h - path - Kiwi/Kiwi/KWAfterAllNode.h - sourceTree - SOURCE_ROOT - - B550F2BCF10B4AF9BF93D954 - - isa - PBXFileReference - name - NSMethodSignature+KiwiAdditions.h - path - Kiwi/Kiwi/NSMethodSignature+KiwiAdditions.h - sourceTree - SOURCE_ROOT - - B6504CD4F3444F2F900A5139 - - isa - PBXFileReference - name - KWRaiseMatcher.m - path - Kiwi/Kiwi/KWRaiseMatcher.m - sourceTree - SOURCE_ROOT - - B68A72D9F67A40499ED971BB - - isa - PBXFileReference - name - KWEqualMatcher.h - path - Kiwi/Kiwi/KWEqualMatcher.h - sourceTree - SOURCE_ROOT - - B7308CAE75B84710AD5AB1D0 - - isa - PBXFileReference - name - KWMatcher.m - path - Kiwi/Kiwi/KWMatcher.m - sourceTree - SOURCE_ROOT - - B7488AF134C14A33A11134BA - - isa - PBXFileReference - name - KWNull.m - path - Kiwi/Kiwi/KWNull.m - sourceTree - SOURCE_ROOT - - B7AFCA284BAE4731A1DFE779 - - isa - PBXFileReference - name - KiwiConfiguration.h - path - Kiwi/Kiwi/KiwiConfiguration.h - sourceTree - SOURCE_ROOT - - B8B2BA8F423F452B8782A726 - - buildActionMask - 2147483647 - files - - 3F67F1537A594A3CB4DC55CB - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - BA2C69F422F942B1BFA986F1 - - fileRef - C43C4B14592B4DF7B6F7E032 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - BA6BBE104F64436C9B107944 - - isa - PBXFileReference - name - KWStringUtilities.h - path - Kiwi/Kiwi/KWStringUtilities.h - sourceTree - SOURCE_ROOT - - BAD0C5B0936A4CCCB0C4A5BB - - fileRef - 13EAB2C2DEDA447E8FB3EF97 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - BAE8FE41912C43689EE57826 - - isa - PBXFileReference - name - KIFTestScenario.h - path - KIF/Classes/KIFTestScenario.h - sourceTree - SOURCE_ROOT - - BCCDFF09962A42F89A59AB45 - - isa - PBXFileReference - name - KWAsyncVerifier.h - path - Kiwi/Kiwi/KWAsyncVerifier.h - sourceTree - SOURCE_ROOT - - BD42E923CCC64E41A57463BE - - isa - PBXFileReference - name - KWFailure.m - path - Kiwi/Kiwi/KWFailure.m - sourceTree - SOURCE_ROOT - - BDE3AC355AAC426ABC158EA3 - - fileRef - B6504CD4F3444F2F900A5139 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - BF673EECCAFD41309B8B47E2 - - isa - PBXFileReference - name - KWBeforeEachNode.m - path - Kiwi/Kiwi/KWBeforeEachNode.m - sourceTree - SOURCE_ROOT - - C03BA26BCD3F40A3A34DD526 - - isa - PBXFileReference - name - KWRespondToSelectorMatcher.h - path - Kiwi/Kiwi/KWRespondToSelectorMatcher.h - sourceTree - SOURCE_ROOT - - C11F07CAF13E4D4A866B869D - - fileRef - AD9A8A4F5E4B40AB91322B49 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - C121DD216E6C4A18B6E4F542 - - isa - PBXFileReference - name - SBJsonStreamParserState.h - path - SBJson/Classes/SBJsonStreamParserState.h - sourceTree - SOURCE_ROOT - - C1B77337F288473FB67816A4 - - isa - PBXFileReference - name - KWDeviceInfo.m - path - Kiwi/Kiwi/KWDeviceInfo.m - sourceTree - SOURCE_ROOT - - C1F54449708041198F4C97C6 - - isa - PBXFileReference - name - KWMatcher.h - path - Kiwi/Kiwi/KWMatcher.h - sourceTree - SOURCE_ROOT - - C34A660FC67D41FB819038CF - - fileRef - FF05D04A043443E49D35EC87 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - C396247529474672B8F577CB - - buildConfigurations - - 4FADB6505B8F4B78A5D0E3F2 - C835A52797E04839A5EF3655 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - C3E8313DB4AC453A812E8908 - - isa - PBXFileReference - name - KIFTestStep.h - path - KIF/Classes/KIFTestStep.h - sourceTree - SOURCE_ROOT - - C4396CDA4BBF4823948FFBC5 - - isa - PBXFileReference - name - Pods-integration-prefix.pch - path - Pods-integration-prefix.pch - sourceTree - SOURCE_ROOT - - C43C4B14592B4DF7B6F7E032 - - isa - PBXFileReference - name - SBJsonWriter.m - path - SBJson/Classes/SBJsonWriter.m - sourceTree - SOURCE_ROOT - - C443937C1E994A31AD1298E5 - - fileRef - E51B25B307224096B78318EC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - C44AA9F5AC904E0DAB3E26F0 - - isa - PBXFileReference - name - KWExampleGroup.h - path - Kiwi/Kiwi/KWExampleGroup.h - sourceTree - SOURCE_ROOT - - C58CB86FD6A64A8AAD42E196 - - fileRef - 3CE7053CCC03431290A8C5DD - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - C5AE550AA6744277BD67F120 - - fileRef - 48DF5B534BBE4F55A36E82A0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - C5D986D57283421E9F5BC462 - - isa - PBXFileReference - name - Kiwi.h - path - Kiwi/Kiwi/Kiwi.h - sourceTree - SOURCE_ROOT - - C6483444DD8742BBBA1CF380 - - isa - PBXFileReference - name - KWSpec.h - path - Kiwi/Kiwi/KWSpec.h - sourceTree - SOURCE_ROOT - - C6FD04D5541049318C13624E - - isa - PBXFileReference - name - KWItNode.h - path - Kiwi/Kiwi/KWItNode.h - sourceTree - SOURCE_ROOT - - C73AB06E56724F27AC453D8E - - children - - EF82ED478C54419A9BF35CAE - 41A53B1CD7594B028644832D - 65B9E629A8D0438287E13FE4 - 339896EFE99645BFA8AE76F8 - C7DA2C06977D4D12B88DFB19 - - isa - PBXGroup - name - Pods - sourceTree - <group> - - C7DA2C06977D4D12B88DFB19 - - children - - EF5150FA704A4DE3A5E6C599 - 33AE78E59FE84218A5473C96 - 94827E6A040B403B84963A7C - 6205A2175A0A46C99928FB09 - CC4BF83B94F24C46A87E978F - 5F2E7A46A3CD43AA9C16D9FB - C121DD216E6C4A18B6E4F542 - A874EB1BAE3141D2ADB967C1 - 41FD97FAA8F749AFBBA22CE1 - 583AF04B3ECF47E7A23E5279 - 67EE05B17A344BE388B600D0 - A69C7CDAA6644D01A51AE6B7 - 06E06BFBEB6B4071B396B272 - EE4511956BAB422C8521A880 - AD9A8A4F5E4B40AB91322B49 - 21A62676BA7F478091F4B73B - E845B9F88A4C4E309522FBFB - D8DA23896F234A05A532D1F7 - 1B4550A4EE7E40D5B838C31B - 5B17A860BB6B42179F4C3414 - F41FD3E33C8941D6BCE4D22C - 5552B202B2804B318C9E86F9 - AA456B82D7574C8DA3A91E30 - 48DF5B534BBE4F55A36E82A0 - C43C4B14592B4DF7B6F7E032 - - isa - PBXGroup - name - SBJson - sourceTree - <group> - - C8055065AF6D4719A75315C8 - - isa - PBXFileReference - name - KWBeEmptyMatcher.h - path - Kiwi/Kiwi/KWBeEmptyMatcher.h - sourceTree - SOURCE_ROOT - - C835A52797E04839A5EF3655 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - $(ARCHS_STANDARD_32_BIT) - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_VERSION - com.apple.compilers.llvmgcc42 - GCC_WARN_ABOUT_MISSING_PROTOTYPES - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNUSED_VARIABLE - YES - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 4.3 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - C91E2DE4EDEB44A2903942CE - - fileRef - 5B5E81275E18452DA716B429 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - C9265D4D4A6A40309C3B723F - - isa - PBXFileReference - name - EGORefreshTableHeaderView.m - path - EGOTableViewPullRefresh/EGOTableViewPullRefresh/Classes/View/EGORefreshTableHeaderView.m - sourceTree - SOURCE_ROOT - - C95BD6AA8CB44FA68E60BB03 - - fileRef - 21A62676BA7F478091F4B73B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - CAA4CB8D88D34FBEA6738AED - - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods.xcconfig - path - Pods.xcconfig - sourceTree - SOURCE_ROOT - - CB3334DFAAF14EFB908618CE - - buildConfigurationList - 517C154C9F5645C395FFD0BF - buildPhases - - 8F047843496845F3865BF65E - EA485EC98C1947F382BAE5FE - 5A7BB746787046DA8134C5F8 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-integration - productName - Pods-integration - productReference - F57D815AF51D4F3286C280F9 - productType - com.apple.product-type.library.static - - CB5658829CD8442B94076F0E - - fileRef - 953BD4FE41254540B15D464E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - CC02BD9A492F422A93433F5F - - isa - PBXFileReference - name - KWExampleGroupDelegate.h - path - Kiwi/Kiwi/KWExampleGroupDelegate.h - sourceTree - SOURCE_ROOT - - CC4BF83B94F24C46A87E978F - - isa - PBXFileReference - name - SBJsonStreamParserAccumulator.h - path - SBJson/Classes/SBJsonStreamParserAccumulator.h - sourceTree - SOURCE_ROOT - - CC8E8A75505A4F55ACF0EAB2 - - isa - PBXFileReference - name - KWBeKindOfClassMatcher.h - path - Kiwi/Kiwi/KWBeKindOfClassMatcher.h - sourceTree - SOURCE_ROOT - - CCB0296C7A4C43649047547C - - isa - PBXFileReference - name - KWReceiveMatcher.h - path - Kiwi/Kiwi/KWReceiveMatcher.h - sourceTree - SOURCE_ROOT - - CCEA2B20B0DA4248AB6227B9 - - fileRef - 8219B44A2405433D91842975 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - CD578488781A44A997F96F06 - - baseConfigurationReference - CAA4CB8D88D34FBEA6738AED - buildSettings - - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - OTHER_LDFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - CE56CFE9A0724C72A46534C2 - - isa - PBXFileReference - name - KWProbePoller.h - path - Kiwi/Kiwi/KWProbePoller.h - sourceTree - SOURCE_ROOT - - CE59FCFD18DE47AF9B1B6EF9 - - isa - PBXFileReference - name - DejalActivityView.h - path - DejalActivityView/DejalActivityView.h - sourceTree - SOURCE_ROOT - - CE7A7E35A48043D297C2B4A4 - - isa - PBXFileReference - name - Pods-resources.sh - path - Pods-resources.sh - sourceTree - SOURCE_ROOT - - CE93A85DD77E48F38001F8BD - - fileRef - C9265D4D4A6A40309C3B723F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - CEDF621D76DB46639F2E5D13 - - isa - PBXFileReference - name - KWMatchVerifier.m - path - Kiwi/Kiwi/KWMatchVerifier.m - sourceTree - SOURCE_ROOT - - CF01FFCFC0384F1296F227E9 - - fileRef - D8DA23896F234A05A532D1F7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - CF0D4C587E164BFEAD1D1380 - - fileRef - 43C0F7B707C846F4971DC170 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - D0230C8F3ED6411B85696CD0 - - isa - PBXFileReference - name - KWMatchVerifier.h - path - Kiwi/Kiwi/KWMatchVerifier.h - sourceTree - SOURCE_ROOT - - D08B80EB7A3A4D99ABEA1FD4 - - fileRef - 8A55268E39294719BC190494 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - D0B39D9B188A4EE7ABE100B5 - - fileRef - AD9A8A4F5E4B40AB91322B49 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - D18D89E690D649C4A813EA12 - - fileRef - FC73548B4DF74952B968F929 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - D1F6C6AC1B4342A8B39CCAA9 - - fileRef - EE4511956BAB422C8521A880 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - D25A41DDADAA4893822C5245 - - isa - PBXFileReference - name - KWCallSite.m - path - Kiwi/Kiwi/KWCallSite.m - sourceTree - SOURCE_ROOT - - D2DDA6E428394D7B8B83E595 - - isa - PBXFileReference - name - KWUserDefinedMatcher.m - path - Kiwi/Kiwi/KWUserDefinedMatcher.m - sourceTree - SOURCE_ROOT - - D35690559C2F49899A21E993 - - isa - PBXFileReference - name - KWBeWithinMatcher.h - path - Kiwi/Kiwi/KWBeWithinMatcher.h - sourceTree - SOURCE_ROOT - - D3F7544C52B74DF2A0DBF58B - - fileRef - 0B71A846FB92428FBF26E56E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - D3FD03A56EC942D88C490B9B - - isa - PBXFileReference - name - KWRegisterMatchersNode.m - path - Kiwi/Kiwi/KWRegisterMatchersNode.m - sourceTree - SOURCE_ROOT - - D42BD3366FD542B9BF7C4191 - - isa - PBXFileReference - name - KWExistVerifier.m - path - Kiwi/Kiwi/KWExistVerifier.m - sourceTree - SOURCE_ROOT - - D69B731AA66D479EAFF2436B - - fileRef - DAA37EDC88A744858F74A27F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - D8DA23896F234A05A532D1F7 - - isa - PBXFileReference - name - SBJsonStreamParserAdapter.m - path - SBJson/Classes/SBJsonStreamParserAdapter.m - sourceTree - SOURCE_ROOT - - D8E6A81560864CA88C7861CB - - fileRef - EE4511956BAB422C8521A880 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - D8FBF5738B5347DA82C89407 - - isa - PBXFileReference - name - EGORefreshTableHeaderView.h - path - EGOTableViewPullRefresh/EGOTableViewPullRefresh/Classes/View/EGORefreshTableHeaderView.h - sourceTree - SOURCE_ROOT - - D9992C33CE2547088E49A347 - - fileRef - 7DBABBE64B164E768C36AE51 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - DAA37EDC88A744858F74A27F - - isa - PBXFileReference - name - KIFTestScenario.m - path - KIF/Classes/KIFTestScenario.m - sourceTree - SOURCE_ROOT - - DCD2489D527D4B12AEA3350B - - fileRef - 3481CA9E475F487B92D64996 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - DCF8A44C586140EC81C31371 - - isa - PBXFileReference - name - KWBeTrueMatcher.m - path - Kiwi/Kiwi/KWBeTrueMatcher.m - sourceTree - SOURCE_ROOT - - DDDB382CAC3D480085286092 - - fileRef - 5A36A8131EA04FCB894E8C67 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - DEFC9C7886B74E76AF621C6E - - isa - PBXFileReference - name - KWBeWithinMatcher.m - path - Kiwi/Kiwi/KWBeWithinMatcher.m - sourceTree - SOURCE_ROOT - - DF5165F47A2547CBA7E42F75 - - isa - PBXFileReference - name - KWConformToProtocolMatcher.h - path - Kiwi/Kiwi/KWConformToProtocolMatcher.h - sourceTree - SOURCE_ROOT - - DFA49ADF8B534EFB95FA7BEE - - fileRef - 5B17A860BB6B42179F4C3414 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - DFAF0E4EAE0D4EF9942123BD - - isa - PBXFileReference - name - KWMessagePattern.h - path - Kiwi/Kiwi/KWMessagePattern.h - sourceTree - SOURCE_ROOT - - E083939F4A6C4DA5BE311534 - - fileRef - 94F92DE0780040FEA701FFFB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - E2900A533C5941078E1083EA - - isa - PBXFileReference - name - UIApplication-KIFAdditions.h - path - KIF/Additions/UIApplication-KIFAdditions.h - sourceTree - SOURCE_ROOT - - E389F2D9D84B400DADFC3038 - - fileRef - 05E92ACDC2324529A075F801 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - E3A2EB2A9BCB4C66A523291F - - isa - PBXFileReference - name - KWIntercept.h - path - Kiwi/Kiwi/KWIntercept.h - sourceTree - SOURCE_ROOT - - E3FABA92BDD14BD3B19256D6 - - isa - PBXFileReference - name - NSNumber+KiwiAdditions.h - path - Kiwi/Kiwi/NSNumber+KiwiAdditions.h - sourceTree - SOURCE_ROOT - - E4D19FE9EF54413790B985B2 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - name - libPods.a - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - E51B25B307224096B78318EC - - isa - PBXFileReference - name - KWRespondToSelectorMatcher.m - path - Kiwi/Kiwi/KWRespondToSelectorMatcher.m - sourceTree - SOURCE_ROOT - - E56EE72F755C4DAD87C78D67 - - isa - PBXFileReference - name - KWMatching.h - path - Kiwi/Kiwi/KWMatching.h - sourceTree - SOURCE_ROOT - - E679B7D87F9047D298F5D404 - - isa - PBXFileReference - name - UIAccessibilityElement-KIFAdditions.h - path - KIF/Additions/UIAccessibilityElement-KIFAdditions.h - sourceTree - SOURCE_ROOT - - E7938079CB9E4D8482892224 - - children - - E4D19FE9EF54413790B985B2 - 46FE4579429E4C788B1F4446 - F57D815AF51D4F3286C280F9 - - isa - PBXGroup - name - Products - sourceTree - <group> - - E7FA2BB0B2214A0F8C34B174 - - isa - PBXFileReference - name - KWFutureObject.m - path - Kiwi/Kiwi/KWFutureObject.m - sourceTree - SOURCE_ROOT - - E845B9F88A4C4E309522FBFB - - isa - PBXFileReference - name - SBJsonStreamParserAccumulator.m - path - SBJson/Classes/SBJsonStreamParserAccumulator.m - sourceTree - SOURCE_ROOT - - E8F10DF23F334B598C2B41F8 - - fileRef - C1B77337F288473FB67816A4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - E91DEA0B2BE94DCB8F8D26AE - - fileRef - 322699B512B44EAEB3C09C48 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - E96B6D4F83DD441583C38570 - - isa - PBXFileReference - name - KWFailure.h - path - Kiwi/Kiwi/KWFailure.h - sourceTree - SOURCE_ROOT - - E98F5C2FC34F4FC9B7680043 - - isa - PBXFileReference - name - KWExampleNodeVisitor.h - path - Kiwi/Kiwi/KWExampleNodeVisitor.h - sourceTree - SOURCE_ROOT - - EA485EC98C1947F382BAE5FE - - buildActionMask - 2147483647 - files - - FEA08882B5404E9396C81232 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - EACBEBCE29864478A1242E6D - - isa - PBXFileReference - name - KWUserDefinedMatcher.h - path - Kiwi/Kiwi/KWUserDefinedMatcher.h - sourceTree - SOURCE_ROOT - - EB3351677E2341829C1E403E - - isa - PBXFileReference - name - KIFTestStep.m - path - KIF/Classes/KIFTestStep.m - sourceTree - SOURCE_ROOT - - EBB34F7306A243E2957B230F - - isa - PBXFileReference - lastKnownFileType - text.xcconfig - name - Pods-integration.xcconfig - path - Pods-integration.xcconfig - sourceTree - SOURCE_ROOT - - EDC27B0618D344BC812300FD - - isa - PBXFileReference - name - KiwiBlockMacros.h - path - Kiwi/Kiwi/KiwiBlockMacros.h - sourceTree - SOURCE_ROOT - - EE4511956BAB422C8521A880 - - isa - PBXFileReference - name - NSObject+SBJson.m - path - SBJson/Classes/NSObject+SBJson.m - sourceTree - SOURCE_ROOT - - EE95BA93E1064854A6870C90 - - fileRef - 57FC43534E4F4B52B2D3E0B7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - EF5150FA704A4DE3A5E6C599 - - isa - PBXFileReference - name - NSObject+SBJson.h - path - SBJson/Classes/NSObject+SBJson.h - sourceTree - SOURCE_ROOT - - EF82ED478C54419A9BF35CAE - - children - - CE59FCFD18DE47AF9B1B6EF9 - 3A6127E3A8A94A6A96BD8E27 - - isa - PBXGroup - name - DejalActivityView - sourceTree - <group> - - EFB5F298B734438AB315BC76 - - baseConfigurationReference - EBB34F7306A243E2957B230F - buildSettings - - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-integration-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - OTHER_LDFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - $(TARGET_NAME) - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - F337B0167C3A40099C5DAA46 - - isa - PBXFileReference - name - KWProbe.h - path - Kiwi/Kiwi/KWProbe.h - sourceTree - SOURCE_ROOT - - F41FD3E33C8941D6BCE4D22C - - isa - PBXFileReference - name - SBJsonStreamWriterAccumulator.m - path - SBJson/Classes/SBJsonStreamWriterAccumulator.m - sourceTree - SOURCE_ROOT - - F4385D09D6FA48E2839F01D1 - - isa - PBXFileReference - name - KWBeforeAllNode.m - path - Kiwi/Kiwi/KWBeforeAllNode.m - sourceTree - SOURCE_ROOT - - F48CB14B0B3F44FEA25A82F8 - - isa - PBXFileReference - name - KWBeNilMatcher.h - path - Kiwi/Kiwi/KWBeNilMatcher.h - sourceTree - SOURCE_ROOT - - F50A8408C59040E2B92399B3 - - isa - PBXFileReference - name - Pods-prefix.pch - path - Pods-prefix.pch - sourceTree - SOURCE_ROOT - - F52349C30A304359B31D6E0D - - fileRef - 5F5B1F0AF4E94E94A14C767A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - - - - F57D815AF51D4F3286C280F9 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - name - libPods-integration.a - path - libPods-integration.a - sourceTree - BUILT_PRODUCTS_DIR - - F7CBF2161633443486BE8227 - - fileRef - B337A7FC90CA4B45AADECA0B - isa - PBXBuildFile - - F7E7B6B0272844B8875236A7 - - isa - PBXFileReference - name - KWBlock.h - path - Kiwi/Kiwi/KWBlock.h - sourceTree - SOURCE_ROOT - - F828AA60B7E54356BCB0FD55 - - attributes - - LastUpgradeCheck - 0420 - - buildConfigurationList - C396247529474672B8F577CB - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - AC985ADE709B4815A60A273E - productRefGroup - E7938079CB9E4D8482892224 - projectDirPath - - projectRoot - - targets - - 8E6C7C9C094141038A3BC2F7 - 6385EDEB17A142DEB5811B92 - CB3334DFAAF14EFB908618CE - - - FA12AFFF84AB4A5FAAA5A9BA - - isa - PBXFileReference - name - NSObject+KiwiVerifierAdditions.h - path - Kiwi/Kiwi/NSObject+KiwiVerifierAdditions.h - sourceTree - SOURCE_ROOT - - FBE345A1E2D9483D9E94E09A - - isa - PBXFileReference - name - KWHamcrestMatcher.h - path - Kiwi/Kiwi/KWHamcrestMatcher.h - sourceTree - SOURCE_ROOT - - FC6009A1F48F4D67AD0B4E09 - - fileRef - 5552B202B2804B318C9E86F9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - FC73548B4DF74952B968F929 - - isa - PBXFileReference - name - KWBlock.m - path - Kiwi/Kiwi/KWBlock.m - sourceTree - SOURCE_ROOT - - FE438E0CCF914437B1227FD3 - - isa - PBXFileReference - name - NSInvocation+KiwiAdditions.h - path - Kiwi/Kiwi/NSInvocation+KiwiAdditions.h - sourceTree - SOURCE_ROOT - - FE88B04EC9704E4FA3D0668A - - fileRef - 21A62676BA7F478091F4B73B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - FEA08882B5404E9396C81232 - - fileRef - B337A7FC90CA4B45AADECA0B - isa - PBXBuildFile - - FF05D04A043443E49D35EC87 - - isa - PBXFileReference - name - KWObjCUtilities.m - path - Kiwi/Kiwi/KWObjCUtilities.m - sourceTree - SOURCE_ROOT - - FF3D303331DB41328871AEE1 - - fileRef - 21A62676BA7F478091F4B73B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc - - - - rootObject - F828AA60B7E54356BCB0FD55 - - +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 00EF318A1C044D0C96364CC6 /* UIWindow-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E5EEAACE534481ABF37A8AF /* UIWindow-KIFAdditions.m */; }; + 03A621324779475583D2D63D /* NSBundle-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E8D3AB7E349340D1BCA46732 /* NSBundle-KIFAdditions.m */; }; + 03CD51EE0D6243C8BE5C56D5 /* KWBeforeEachNode.h in Headers */ = {isa = PBXBuildFile; fileRef = FC613F54CADB48BCA16AD943 /* KWBeforeEachNode.h */; }; + 045A5AFA894B4EBD99940FD5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + 072878F96BD84008A9854098 /* SBJson4StreamWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = F1DB00B6DEEE46318214A2A9 /* SBJson4StreamWriter.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 0743BE9651FF4F269333E45E /* SBJson4StreamParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C6B801827AC141AD97E712A4 /* SBJson4StreamParser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 07B51266FE9F429E9D73BBF1 /* SBJson4StreamParserState.m in Sources */ = {isa = PBXBuildFile; fileRef = A71F1AF363664CEB945BA998 /* SBJson4StreamParserState.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 0806387E6D694ACFAA4D682C /* SBJson4Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = AB36E9F4B497455C90B8B30D /* SBJson4Parser.h */; }; + 0873B43F12DC4199A1BAB89F /* NSProxy+KiwiVerifierAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A224A8765AB24725A5908A97 /* NSProxy+KiwiVerifierAdditions.h */; }; + 08869600398848FEB414589F /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FC681FA41F92469FBC85F6F4 /* Pods-dummy.m */; }; + 08E1E9C0FB7841068B277B08 /* KWMock.m in Sources */ = {isa = PBXBuildFile; fileRef = D6A1A4941D14401DA957D2B3 /* KWMock.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 0A95CFCE3C314E439A5EF550 /* SBJson4StreamWriterState.m in Sources */ = {isa = PBXBuildFile; fileRef = 495C9264974F4F5F8AE6A9EC /* SBJson4StreamWriterState.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 0C62A95B3E6B49EEBE5198A9 /* KWStringContainsMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D5BFE5EEE1F443C891443223 /* KWStringContainsMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 0F354CF7F6F3461587128378 /* KWExistVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 48B6B45EF59649CDA0F621F2 /* KWExistVerifier.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 0FAD15AFB0CD4DD99761B7E9 /* EGORefreshTableHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = A5CC7198F7E64360BDAEC4A0 /* EGORefreshTableHeaderView.h */; }; + 0FC5F4339FF944DF97EF9FF5 /* SBJson4StreamParserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AC2C477651844438A4796F0 /* SBJson4StreamParserState.h */; }; + 10C3CC27331741B5AB6B915B /* SBJson4StreamTokeniser.h in Headers */ = {isa = PBXBuildFile; fileRef = 85997DBB40B44570B95F66C1 /* SBJson4StreamTokeniser.h */; }; + 13D37490CDD84AA18364D448 /* KWStringPrefixMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = CC290B79DEF045F09B3478D2 /* KWStringPrefixMatcher.h */; }; + 149683CF90D34EA6905BCFD0 /* libPods-SBJson.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 989D7B752B954662B3390A65 /* libPods-SBJson.a */; }; + 14C65CE6DFD947388E9C3B4B /* NSObject+KiwiVerifierAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B0329F4B5B2C44B8B8F15B76 /* NSObject+KiwiVerifierAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 14FBF32CFF7E4D14A5A9E5B1 /* KWContainStringMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F424E6637484386810C0EF5 /* KWContainStringMatcher.h */; }; + 1584CF10A0D64CEFAC36C3D9 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FD77985E97E4981801C94B6 /* SenTestingKit.framework */; }; + 15D5EE841E3445709D0618EA /* KWBlockNode.m in Sources */ = {isa = PBXBuildFile; fileRef = E853D267F7854F54AACC3526 /* KWBlockNode.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 165A5F06BC764550AD07EE2B /* KWExistVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = D8F4245C04134B15A6B7003B /* KWExistVerifier.h */; }; + 17CF973F6A3D435A9B05A561 /* libPods-Integration Tests-SBJson.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 756B96ACAE2B427C80E03C2D /* libPods-Integration Tests-SBJson.a */; }; + 181B3DD164D844BD91E816A9 /* KWMatchVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = A9B32B116A744B3EA7A468A0 /* KWMatchVerifier.h */; }; + 18DDCCF5AC3A401CB75AC58C /* KWChangeMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E0775BECD9C444A8BBEFB0B1 /* KWChangeMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 190D572AD3074BE0A2AAE127 /* KWInequalityMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C7627FA14854C468B9B8900 /* KWInequalityMatcher.h */; }; + 1C04778490A74F6880C120F1 /* SBJson4Writer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB8188DD5A7438A804899F1 /* SBJson4Writer.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 1C357524A8544D7C8E390D92 /* NSObject+KiwiSpyAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 435CF21A79BE48FB9A21BB80 /* NSObject+KiwiSpyAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 1C8908C555424BE79C058ECD /* KWRespondToSelectorMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 533AAA49A6614A389B783C79 /* KWRespondToSelectorMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 1DCB50B54705427699739463 /* KWStringPrefixMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = CC4F659D75C149CE95C0496F /* KWStringPrefixMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 1E03DA016FC14F1EA6791F02 /* KWMatchVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = AD4DFC209AE64D4AA50EB6CE /* KWMatchVerifier.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 1E9CB887BB5D4340B2CB1640 /* SBJson4Parser.m in Sources */ = {isa = PBXBuildFile; fileRef = C90AF1B3F3264B459ABF17A5 /* SBJson4Parser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 1EBE661525A649DF85EE5B6A /* NSFileManager-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C4CB85868F8C4798BC085864 /* NSFileManager-KIFAdditions.m */; }; + 1F4B6A16E2A14E859AC0998D /* NSFileManager-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9074C24D4ACE44DE8B1BC05A /* NSFileManager-KIFAdditions.h */; }; + 2022EBBBBBED4465BBC48860 /* DejalActivityView.m in Sources */ = {isa = PBXBuildFile; fileRef = 91A9EDA86F464E15B81DCA1F /* DejalActivityView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 20F6D94D03854E8E8850E84B /* KIFSystemTestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = 62F791A0D6814EC78E516737 /* KIFSystemTestActor.m */; }; + 216BC19939C643D6A919E121 /* KWRegularExpressionPatternMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A957C9ED21424A1B86A6AB67 /* KWRegularExpressionPatternMatcher.h */; }; + 229C7B57B80D431E834B8C9A /* KWExampleSuiteBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = DBBA1379970D4A42B2298854 /* KWExampleSuiteBuilder.h */; }; + 235E44F8B5644F61855B3F92 /* UIApplication-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C245018E7E424796430E7B /* UIApplication-KIFAdditions.h */; }; + 2387A01E3A1E45D795F8F257 /* NSNumber+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 55601D4B437849DAB124E1CE /* NSNumber+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 2465F7D113D549A4A844DF5A /* KWWorkarounds.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CFE19E9F589486D940FF252 /* KWWorkarounds.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 2469D71FAEB64FA0B495E9FF /* UIScrollView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CFB80DD6E854D378C5B4CA3 /* UIScrollView-KIFAdditions.h */; }; + 25655448D5E84CE69645DBB4 /* KWBeZeroMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C9D4C048C134028B0166CCF /* KWBeZeroMatcher.h */; }; + 26805BC19CBF48C69D6F9B85 /* KIFTestStepValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = FB656ECC09854E6E92DBD1C0 /* KIFTestStepValidation.m */; }; + 26A4EFC699204BB1BAA908FA /* Pods-Integration Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FE9C6D7EA7464D6F80D19084 /* Pods-Integration Tests-dummy.m */; }; + 27D072DA5B0C471C86A0B405 /* SenTestSuite+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BA3ABACE8C3413FB069AA20 /* SenTestSuite+KiwiAdditions.h */; }; + 27E9AA2B89824FD4AB0D032B /* SBJson4.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A17E4F52A494B84A8991560 /* SBJson4.h */; }; + 287F81074295464ABF3EF92F /* KWUserDefinedMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 7106C0BAA2044FC38556F844 /* KWUserDefinedMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 288208EB274E4C12B34AE199 /* SenTestSuite+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C781914DB6840DF92A2FE57 /* SenTestSuite+KiwiAdditions.m */; }; + 299E895D5B9E4E0BACC15344 /* SBJson4Writer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB8188DD5A7438A804899F1 /* SBJson4Writer.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 2BAE7602E83E425DA677C90D /* KiwiConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D732AE888C4498A260A263 /* KiwiConfiguration.h */; }; + 2C683C7BD3E14048B6EEFFC5 /* KWBlockNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 58F6EEBF929249809BD7BC3F /* KWBlockNode.h */; }; + 2D15980DA5F44F54BD3FDB3F /* KIFSystemTestActor.h in Headers */ = {isa = PBXBuildFile; fileRef = D4AF486F88DD43EA8D119C7D /* KIFSystemTestActor.h */; }; + 2D60ED95EAE94E64A56CC7C0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + 2DBEE2E1CCB94184B99DD9A0 /* LoadableCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = ACBD59B8972A4DF0ACDCD35B /* LoadableCategory.h */; }; + 2E7A7563BC274E69A2DC8BC4 /* KWObjCUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = FEB7DD0BBC7D415ABE87C2D7 /* KWObjCUtilities.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 2F93DD40678142189E3A4653 /* SBJson4Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = AB36E9F4B497455C90B8B30D /* SBJson4Parser.h */; }; + 30C87C0E63BB4E3D9D32C205 /* libPods-DejalActivityView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C84E6BB131E474E8D040828 /* libPods-DejalActivityView.a */; }; + 3139E502ECA240109EDB58FB /* KWBlockRaiseMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 972CAFA9E7C04F7C942DE53D /* KWBlockRaiseMatcher.h */; }; + 32FE839FC67048E79179CF0A /* KWHaveValueMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 599C7643ACE948569090F92B /* KWHaveValueMatcher.h */; }; + 340408E0600D46BEBBFA5AC6 /* SBJson4.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A17E4F52A494B84A8991560 /* SBJson4.h */; }; + 3544429C07024231A9FA6BD5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + 375A3EECA8EB4711B81B053A /* KWBeWithinMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D50388EC8654BBEABFCABE6 /* KWBeWithinMatcher.h */; }; + 37EC46907046435CA670FE4A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + 3873B1AB06114E26813F03CA /* KWMessagePattern.h in Headers */ = {isa = PBXBuildFile; fileRef = D1CF9C4063E146CCA73E5CAC /* KWMessagePattern.h */; }; + 3971DC9E8AF34D74A8F749D6 /* SBJson4Parser.m in Sources */ = {isa = PBXBuildFile; fileRef = C90AF1B3F3264B459ABF17A5 /* SBJson4Parser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 3973BCD05D31406D986681C8 /* KWBeforeAllNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C58F85F06D844E6A5ED7188 /* KWBeforeAllNode.h */; }; + 39D1771FD6F54A878A13BD5F /* KWHaveMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A9B2F5D5E7B94166AF1270A2 /* KWHaveMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 3ACF5F80E4954C0EA2F91930 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BF038A2C4FE4E8CBA7D5804 /* UIKit.framework */; }; + 3C97458466E841218E5C5A7E /* Pods-Integration Tests-KIF-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A2D2B6B74E441ABAA129986 /* Pods-Integration Tests-KIF-dummy.m */; }; + 3DA3A4F6947847FBA8F7828F /* Pods-CoderwallTests-EGOTableViewPullRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D8C5FD6C8AC543C3AC797A14 /* Pods-CoderwallTests-EGOTableViewPullRefresh-dummy.m */; }; + 3E9B8CB74B9E4613B09BF0BE /* KIFTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = D49763BBC2BF4141A5B56243 /* KIFTestCase.h */; }; + 3EE0AB2846CC4514AA6F6143 /* KIFTestActor.h in Headers */ = {isa = PBXBuildFile; fileRef = BD112DB9B8B5461DA647D969 /* KIFTestActor.h */; }; + 3FF1D4EAED8742668D2FCC47 /* KWConformToProtocolMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 69F3532B5C6643E794C6251D /* KWConformToProtocolMatcher.h */; }; + 4039352191D1435883D4E351 /* Pods-DejalActivityView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 134E464FF03343DE9AB90EB6 /* Pods-DejalActivityView-dummy.m */; }; + 40C2B647D06645FC9C80345F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F1E9F82515D4EBF849FB942 /* CoreGraphics.framework */; }; + 41B730461B4E493C96DC026B /* KWContainMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 78FC2EB07583411C9A646F43 /* KWContainMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 4386BF248BE5442AA3771E42 /* KWStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B86A08AFCC84629B8E53869 /* KWStringUtilities.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 43C68860AA01487380D90942 /* KWIntercept.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CC6ECFB60B44FD7B3B2CFEE /* KWIntercept.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 45435A31609A40AC827300D6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D5111DD932648CAB6D4BBD5 /* QuartzCore.framework */; }; + 45D9D6F8C7BD4F459BC2DF01 /* KWAfterEachNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AA5EBB9CE334EEDA4043726 /* KWAfterEachNode.h */; }; + 467B6C8582544A3BAAD81666 /* SBJson4StreamWriterState.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F7E9B58A924784A69347AE /* SBJson4StreamWriterState.h */; }; + 4B46916E943D451BB5F61458 /* SBJson4StreamParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 5506BAB36964473E8B9F4474 /* SBJson4StreamParser.h */; }; + 4E0516C24B734D8C83F42160 /* libPods-Integration Tests-EGOTableViewPullRefresh.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A0D2B9284744D01B1EC6B49 /* libPods-Integration Tests-EGOTableViewPullRefresh.a */; }; + 4E79EC5DDC0D470B84957766 /* KWBeKindOfClassMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 59EE11DB9B974251842EE049 /* KWBeKindOfClassMatcher.h */; }; + 4EC8CF60AE134C5287D083FA /* KWBeTrueMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = C6D8F16168F543E7A31B80C6 /* KWBeTrueMatcher.h */; }; + 4F431DC4BCA643CDB18DD650 /* KWInequalityMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 7193FED984BD4B7DB18D08DF /* KWInequalityMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 504206E8955D478E983BF08A /* KWDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 79494A524FF044CF951B2CF7 /* KWDeviceInfo.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 504A907D8F3040219BA0AC55 /* SBJson4StreamParserState.m in Sources */ = {isa = PBXBuildFile; fileRef = A71F1AF363664CEB945BA998 /* SBJson4StreamParserState.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 51ACEF9618E84D02A64CDB7A /* libPods-Integration Tests-KIF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD663848E25D4C84BA298E51 /* libPods-Integration Tests-KIF.a */; }; + 522E5BBA48C14A6798CB3232 /* KWReceiveMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = EB7A30283D594B22A2B8818B /* KWReceiveMatcher.h */; }; + 52CD608D699F489CA5219450 /* KWChangeMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1941000A40394269ADC5754B /* KWChangeMatcher.h */; }; + 52DE2086961C488695606F55 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BF038A2C4FE4E8CBA7D5804 /* UIKit.framework */; }; + 53AA274C225B4E2D8B782885 /* KWBeWithinMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 72425E82A42D447A986D1C9C /* KWBeWithinMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 53CD6D2EFE7F4625ABD6425C /* KWIntercept.h in Headers */ = {isa = PBXBuildFile; fileRef = 53DEC029DCC74A6A8C1CA00C /* KWIntercept.h */; }; + 53EC3F0A0210476DA74DC016 /* DejalActivityView.h in Headers */ = {isa = PBXBuildFile; fileRef = 504908A5CA9A4D8D81B4D8F8 /* DejalActivityView.h */; }; + 5488ADB664E6452FAF183392 /* KWMessageSpying.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AA61F31EFE144C492D5C041 /* KWMessageSpying.h */; }; + 548BCFCEB38D4733937E7B03 /* KWInvocationCapturer.m in Sources */ = {isa = PBXBuildFile; fileRef = C4C15D87EAFA44798901C342 /* KWInvocationCapturer.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 560339782C87440C8DC8DB3F /* libPods-CoderwallTests-Kiwi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C532444277A14914AD0CA4D2 /* libPods-CoderwallTests-Kiwi.a */; }; + 568B38FC76A04E308F5D659D /* KWGenericMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 4784BEDF088C4533A0A85AF4 /* KWGenericMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 5704FDE6A3364220B7F2885C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D5111DD932648CAB6D4BBD5 /* QuartzCore.framework */; }; + 5797961AA4604FC494E3D97F /* KWBlockRaiseMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E277A5A79F144372A87315AB /* KWBlockRaiseMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 593F750C6C5F4941BECF0DE2 /* KWBeEmptyMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 57FABE8B1AF4411D9BC7DC94 /* KWBeEmptyMatcher.h */; }; + 59B0FFE0B47A484E851844A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + 59B46642C97B466CB599051E /* KWExampleDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 624D8C21F690498DABB15200 /* KWExampleDelegate.h */; }; + 5A4EFBCA4ACF4B3F957C494A /* NSObject+KiwiSpyAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F0071D394B74AE88ADA02DD /* NSObject+KiwiSpyAdditions.h */; }; + 5BABEEDDD8634B6D8330E997 /* KWMatching.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F19AB6BE42E423183FEC650 /* KWMatching.h */; }; + 5C2A5AD8E7F74398AB791857 /* Pods-CoderwallTests-SBJson-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EA917B0C5CF4AB18FD5533F /* Pods-CoderwallTests-SBJson-dummy.m */; }; + 5C3155DD68FE417C9C835826 /* KWContainMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BA2D932508B4543A82BD312 /* KWContainMatcher.h */; }; + 5D672B2C597E4F20A66B0B20 /* KIFTypist.m in Sources */ = {isa = PBXBuildFile; fileRef = B95B351C835D4F16AD899A7C /* KIFTypist.m */; }; + 5DF1675FFD9543D892C20648 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + 5DF9E858CD514583B081F305 /* KWBeKindOfClassMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B57E82117244E14A270EC8D /* KWBeKindOfClassMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 5E6698D62F35445CAAD9679F /* KWBeEmptyMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 64B5CCBAD61F49C790C4EA76 /* KWBeEmptyMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 5E80BE964CD3418AB182F242 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + 5EE589E4ED884198B7CEC3D1 /* KWProbe.h in Headers */ = {isa = PBXBuildFile; fileRef = 24BC5FAEBD4E40B88BD33A59 /* KWProbe.h */; }; + 5F5D74A425654E089A44438C /* KIFTestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DFD097F19B54A53B18E54C3 /* KIFTestActor.m */; }; + 5F63BF0F35AC449E942A52F3 /* NSObject+KiwiVerifierAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 868DE3D08ED74CC29B60F23E /* NSObject+KiwiVerifierAdditions.h */; }; + 5FA6171089B441D495C8F132 /* SBJson4StreamParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 5506BAB36964473E8B9F4474 /* SBJson4StreamParser.h */; }; + 604C123D4A2C451983713C55 /* KWBeMemberOfClassMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D3550548D85C4B5291A750C8 /* KWBeMemberOfClassMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 6148EEAF0F9542468205BD0C /* KWGenericMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = DB66E547CF384497B24F06CB /* KWGenericMatcher.h */; }; + 62CC43254B624D2A8981893F /* KWValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 29A7E85A9F114A068855D05E /* KWValue.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 63E2E31A3D4F4CC383BF30AB /* KWFailure.h in Headers */ = {isa = PBXBuildFile; fileRef = F2D320B0D6ED4530AC286E1F /* KWFailure.h */; }; + 64094C51DD79454DBC60F438 /* DejalActivityView.m in Sources */ = {isa = PBXBuildFile; fileRef = 91A9EDA86F464E15B81DCA1F /* DejalActivityView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 656FA032F0C348F784ECDA8B /* KWInvocationCapturer.h in Headers */ = {isa = PBXBuildFile; fileRef = C46AA8D28D144A8BBCB768CA /* KWInvocationCapturer.h */; }; + 65D93F14612D49439F33A92B /* UIApplication-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 519F69D30E544503B3AF34C4 /* UIApplication-KIFAdditions.m */; }; + 65FA01E77165431F9082E929 /* NSInvocation+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DCE07D1B9C44C078AEEAABE /* NSInvocation+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 6614DE432224459FA0ABD39F /* SBJson4Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = AB36E9F4B497455C90B8B30D /* SBJson4Parser.h */; }; + 6672542004B343AF90AABC3E /* KWAfterEachNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 61071C2B816943BFA1600293 /* KWAfterEachNode.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 67A3854779244E24B6F8A94F /* KWGenericMatchEvaluator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7092C238A5284F5FAB8022F7 /* KWGenericMatchEvaluator.h */; }; + 6855D2BDDAF6474EBC9B60FB /* KWProbePoller.h in Headers */ = {isa = PBXBuildFile; fileRef = 2220AC2A36C449CDA1071628 /* KWProbePoller.h */; }; + 6B8DFBC801AB46C8B866B78D /* KWMessageTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = C0E9D52C763245789B5BBE49 /* KWMessageTracker.h */; }; + 6D0DB97578FF496C9D1E21E4 /* KWCallSite.m in Sources */ = {isa = PBXBuildFile; fileRef = 98046D9F4D104B1691C32921 /* KWCallSite.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 6D48E2DA0FB5488F82E04C88 /* Pods-CoderwallTests-Kiwi-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F26DFAC51416441888E0E77B /* Pods-CoderwallTests-Kiwi-dummy.m */; }; + 70223D74DDAE4B2DB83558F0 /* SBJson4.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A17E4F52A494B84A8991560 /* SBJson4.h */; }; + 70780574E35A4159AAA5D5A2 /* KWStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = AB1F523922194F4E8DF644AC /* KWStringUtilities.h */; }; + 70E66573E456477FABB862A9 /* NSObject+KiwiMockAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A666390F3E540F28DFC0FF3 /* NSObject+KiwiMockAdditions.h */; }; + 713DFDEEEC154DB1AF6ED086 /* Pods-Integration Tests-SBJson-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B6BD741FE643499A97170BB0 /* Pods-Integration Tests-SBJson-dummy.m */; }; + 71F7CE34D029449789779871 /* UIView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3826D80D120E4CF5AD5BAD39 /* UIView-KIFAdditions.h */; }; + 7205299DF5C7491D927CCC66 /* Pods-CoderwallTests-DejalActivityView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0459CA550AEE476080377798 /* Pods-CoderwallTests-DejalActivityView-dummy.m */; }; + 72F7DC58C4E3416A8B47E169 /* KWProbePoller.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C530B8019C047C690B3F946 /* KWProbePoller.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 73DB4FE377E94A19BB6D8203 /* KWExampleSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0914AD7335CC495EBF6DDF1A /* KWExampleSuiteBuilder.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 7425CC76B00C42DD831F2067 /* SBJson4StreamTokeniser.h in Headers */ = {isa = PBXBuildFile; fileRef = 85997DBB40B44570B95F66C1 /* SBJson4StreamTokeniser.h */; }; + 743AD1B86D8F4F629C1D0226 /* KIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 61F20BB1A3DC483AA58170D8 /* KIF.h */; }; + 75A90DFE9F614A8692616A9F /* KWMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 569180A44CB346969E95A140 /* KWMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 779DFC5B0EDF4B1FAF753F24 /* NSMethodSignature+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B42308F5EB2646FEB64903E0 /* NSMethodSignature+KiwiAdditions.h */; }; + 786F153E475742A1BABE7937 /* KWBeIdenticalToMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 574EA2168C4B40199E76C4A4 /* KWBeIdenticalToMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 789D944B399E4CC0A6A05D53 /* KWObjCUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = D6D025F093A442AC862B7CEA /* KWObjCUtilities.h */; }; + 78D85C0A375544B6869E6BC9 /* KWStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 60435698E6F4415597D03E8E /* KWStub.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 797E1674C54C4F71A0BB3E26 /* SBJson4StreamTokeniser.m in Sources */ = {isa = PBXBuildFile; fileRef = DA36856D715549C38D88CE85 /* SBJson4StreamTokeniser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 79F162E4D91948CB9E39C297 /* SBJson4StreamWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1D6CACC1BE49779795C853 /* SBJson4StreamWriter.h */; }; + 7A7130C5174D419FBA442670 /* KWGenericMatchEvaluator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2036288FE4BB4728839698ED /* KWGenericMatchEvaluator.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 7BB19602167F4770825AF80A /* KWEqualMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D800DCE31A0B4541B146E9FC /* KWEqualMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 7CE829F95E2D4A33B338E478 /* EGORefreshTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D1AA8A443F34E558967066B /* EGORefreshTableHeaderView.m */; }; + 7D14BB670A244CACB4D5F8E6 /* NSInvocation+OCMAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C264E1F6DA8B4BF7934A3288 /* NSInvocation+OCMAdditions.h */; }; + 7DC934366F4A451BBA5EE5CA /* SBJson4Parser.m in Sources */ = {isa = PBXBuildFile; fileRef = C90AF1B3F3264B459ABF17A5 /* SBJson4Parser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 7DD5025F26A84B7EB9B28904 /* KWItNode.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE71FE2B75B489888456C63 /* KWItNode.h */; }; + 7EE0CD14C88445DD8475A943 /* KWCountType.h in Headers */ = {isa = PBXBuildFile; fileRef = 408281467E124C6985F83CFD /* KWCountType.h */; }; + 80A21E1D41D84FCFAC2BDB5D /* SBJson4StreamParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C6B801827AC141AD97E712A4 /* SBJson4StreamParser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 824AC9E2A35343BA82D42F51 /* KWBeSubclassOfClassMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B77E11396294589AB742586 /* KWBeSubclassOfClassMatcher.h */; }; + 82991D0C14D34780A77061A1 /* Pods-Integration Tests-EGOTableViewPullRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 687C6F14E3224CF29F3B79C8 /* Pods-Integration Tests-EGOTableViewPullRefresh-dummy.m */; }; + 833849EF63D24EE4B7F5BB54 /* KWAsyncVerifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 166D666A0D4344F99CB6DDA7 /* KWAsyncVerifier.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 83D30E8EBE6E452798B771DB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + 8559134F3BD345CB8AA42C52 /* KWVerifying.h in Headers */ = {isa = PBXBuildFile; fileRef = 33940F808ACD4E9B9813C4E7 /* KWVerifying.h */; }; + 85C25333A3404C878183D99B /* UITouch-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E771285B4D445F6A05DC4A7 /* UITouch-KIFAdditions.m */; }; + 86274BF8FD9D4B2ABDB7FFBB /* KWFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = B43F22629CB64B6886D1BA92 /* KWFormatter.h */; }; + 86563BCD64464EBC9D84D83F /* SBJson4StreamWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1D6CACC1BE49779795C853 /* SBJson4StreamWriter.h */; }; + 87766C1FA1B048149BAF0915 /* SBJson4StreamParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C6B801827AC141AD97E712A4 /* SBJson4StreamParser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 87E66ECF54B5480DAB616373 /* KWRegularExpressionPatternMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = AE72AECF4B5E4A4FAB792DA7 /* KWRegularExpressionPatternMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 88076EAA2F6C4DBEB0508E3F /* SBJson4StreamParserState.m in Sources */ = {isa = PBXBuildFile; fileRef = A71F1AF363664CEB945BA998 /* SBJson4StreamParserState.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 88166094FB8A46179A59B86B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D5111DD932648CAB6D4BBD5 /* QuartzCore.framework */; }; + 88424F94164543938B2229AD /* KWSymbolicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C1C574AE8D4EDB9E752C5C /* KWSymbolicator.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 88699E17F7594E22B29875E6 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FD77985E97E4981801C94B6 /* SenTestingKit.framework */; }; + 891D93BAA771454BBEA1B766 /* KWCallSite.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C22D575BE134AEC8E8E3F72 /* KWCallSite.h */; }; + 894540CB600B48A2954AB4C9 /* KWMatchers.m in Sources */ = {isa = PBXBuildFile; fileRef = D624A1CAB58640ECAEDE6EAA /* KWMatchers.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 895A8841E91A4B4889522B08 /* KWBeMemberOfClassMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 454C62DCE2424DDA89723CA8 /* KWBeMemberOfClassMatcher.h */; }; + 89A2A118C0D34EF8A0629CA7 /* KWMock.h in Headers */ = {isa = PBXBuildFile; fileRef = B0F957B81DC346DEBC53D0BB /* KWMock.h */; }; + 8A480F18A1BC4492A4F4813A /* KWReporting.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E221FFC95CC459792BCB70A /* KWReporting.h */; }; + 8B5F6446D4864985921D3954 /* KWConformToProtocolMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E1A8A09FDC144767AF3D5281 /* KWConformToProtocolMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 8CDBC15E21C145D19D986EF3 /* SBJson4Writer.h in Headers */ = {isa = PBXBuildFile; fileRef = CDACCC1765FC4270B72D1A51 /* SBJson4Writer.h */; }; + 8D6A8D6F0A2B494E805BA703 /* SenTestCase-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B2D3565B36C141E08416F636 /* SenTestCase-KIFAdditions.h */; }; + 8EEF2A7C7AE649F79859379B /* NSObject+KiwiStubAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D617DA0ABF64B0BB3F22B5A /* NSObject+KiwiStubAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 8F08F09E79F444CDA6AF6FD5 /* KWRaiseMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6697741CE0C3444FAB120FCA /* KWRaiseMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 8FCB97E4F35947CE8BDCCD71 /* NSObject+KiwiMockAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 378769FD92DA4AB6B5EB8647 /* NSObject+KiwiMockAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 90428BB7F10E450FB87023E3 /* NSError-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 66F63E3046CE46299EB17654 /* NSError-KIFAdditions.m */; }; + 91710A80D2004BED91D0ADA1 /* libPods-Integration Tests-DejalActivityView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 444327FDE5524220A58DB6BE /* libPods-Integration Tests-DejalActivityView.a */; }; + 92335086E16B4EF1B26C8775 /* KWBeTrueMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D8C5CC64AA5747158D4A738B /* KWBeTrueMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 93419EC562C240349F513377 /* UIScrollView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A962282B54CE482888B045A6 /* UIScrollView-KIFAdditions.m */; }; + 935CB037774241E2B8596B42 /* KWContainStringMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = C9B6B3F6810F42119030F2EF /* KWContainStringMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 93892E272BF44A209A64E547 /* KWAfterAllNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DA5562A2263947C0BB6F9AF2 /* KWAfterAllNode.h */; }; + 95C6297A2D0D4BA7A2544CA0 /* KWWorkarounds.h in Headers */ = {isa = PBXBuildFile; fileRef = C2BACF6EA1B54B8FB3851D59 /* KWWorkarounds.h */; }; + 9616A01BF8C94C57BB9F3274 /* CGGeometry-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FD97785EAF241BF9B379F69 /* CGGeometry-KIFAdditions.m */; }; + 97AF780667434801AEA22DBE /* NSValue+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D5F0DAA3C3642B1BE0219FC /* NSValue+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 98E2D9E7C6FA4CC2824B0B07 /* Pods-EGOTableViewPullRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C45C9BC2009A474DBE86567B /* Pods-EGOTableViewPullRefresh-dummy.m */; }; + 995464D4CFC54B1AA1348BA6 /* KWHaveValueMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = EA14F3E9086E46F8A1A67F54 /* KWHaveValueMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 9A11902F742A458C8A8A95BB /* SBJson4StreamTokeniser.h in Headers */ = {isa = PBXBuildFile; fileRef = 85997DBB40B44570B95F66C1 /* SBJson4StreamTokeniser.h */; }; + 9AB58F6E945943BD950F22B1 /* KWItNode.m in Sources */ = {isa = PBXBuildFile; fileRef = FE69EF01645F4AD4AED1D926 /* KWItNode.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 9B1DA13789EF4ADFA6D30631 /* KWBeSubclassOfClassMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 420AC90D743248FA9078C298 /* KWBeSubclassOfClassMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + 9B8E38E6E5484D6BADABD01E /* UIAccessibilityElement-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C36C37995AAD4B629E834164 /* UIAccessibilityElement-KIFAdditions.h */; }; + 9D9AF2E7F4604790BD0DFAF0 /* NSProxy+KiwiVerifierAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E12231B5A09A47D5931C9808 /* NSProxy+KiwiVerifierAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + A03E1CC9634E46B9B5ADD7C6 /* KWBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 16127D529E9E45D1B86C3579 /* KWBlock.h */; }; + A153DD877B1D47449F96E3E2 /* libPods-CoderwallTests-EGOTableViewPullRefresh.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F0DC82FF1134CC3B5DC9634 /* libPods-CoderwallTests-EGOTableViewPullRefresh.a */; }; + A2739AB467DA4E2F94767BD3 /* KWMatchers.h in Headers */ = {isa = PBXBuildFile; fileRef = 8897D52921C34EE5BEC5B370 /* KWMatchers.h */; }; + A30867C4B1A54B75B01CBFD2 /* SBJson4StreamTokeniser.m in Sources */ = {isa = PBXBuildFile; fileRef = DA36856D715549C38D88CE85 /* SBJson4StreamTokeniser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + A40F3D4A14D94AEFA697D62C /* KWRaiseMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D9B9D0D43724AB087A027D3 /* KWRaiseMatcher.h */; }; + A4F45575FECD4010AAAC09EE /* NSBundle-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D918EE6BBC74C22ADEA2549 /* NSBundle-KIFAdditions.h */; }; + A5BBB0C03E1847E2879FF90E /* KWExampleNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 47E1F8B2B1BF4750940F1A5E /* KWExampleNode.h */; }; + A5C3209D13894EBE8FA35232 /* KWHaveMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 166CA18B3C844C1F9BE1BCE2 /* KWHaveMatcher.h */; }; + A69F739A4E6D476BB5C99AB8 /* Kiwi.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D3479D7CBB3424099A70873 /* Kiwi.h */; }; + A7D9E1C343F04DC0B63C30E6 /* KWReceiveMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B43FA92B41948C3A0F45F5C /* KWReceiveMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + A7F1E53BF7C44C0EA695F982 /* NSInvocation+OCMAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A1F3C21F71BF48C4BA9BF4D3 /* NSInvocation+OCMAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + A9771C65FCBF4C7A9B22D895 /* EGORefreshTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D1AA8A443F34E558967066B /* EGORefreshTableHeaderView.m */; }; + AA341DE1D9A244848975E28F /* SBJson4StreamTokeniser.m in Sources */ = {isa = PBXBuildFile; fileRef = DA36856D715549C38D88CE85 /* SBJson4StreamTokeniser.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + AA6D01BFC4C14419B1A2BE66 /* KWStringContainsMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = D8E9151209B64BC7BE4A186E /* KWStringContainsMatcher.h */; }; + AA94A3F156EC40B393105C20 /* Pods-SBJson-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 22D0903D81F046048CC1BFF9 /* Pods-SBJson-dummy.m */; }; + AAAE0F5827634EF1A816A85C /* KIFUITestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FBA6D19AC514DB48181C131 /* KIFUITestActor.m */; }; + AB035F6FA7BA4AB6A52945BD /* SBJson4StreamParserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AC2C477651844438A4796F0 /* SBJson4StreamParserState.h */; }; + ABEF2C2C069541CE9AC9ED13 /* SBJson4StreamWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1D6CACC1BE49779795C853 /* SBJson4StreamWriter.h */; }; + AE3500E27E1B4B04ADBDE372 /* EGORefreshTableHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = A5CC7198F7E64360BDAEC4A0 /* EGORefreshTableHeaderView.h */; }; + AE569133512C463ABC1C9018 /* KWRespondToSelectorMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A7AAB838EE144B0B96917CA /* KWRespondToSelectorMatcher.h */; }; + AF7CD6FCC94843F1BF888033 /* KWExampleSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = 75C8D9036B48423FA801C5E4 /* KWExampleSuite.h */; }; + B12945F5CE754B7291AD6206 /* KiwiMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 83B95B975BAE4EAEADB8D0E7 /* KiwiMacros.h */; }; + B27324AE61E046BDB4B633B6 /* KWPendingNode.m in Sources */ = {isa = PBXBuildFile; fileRef = C2C6E8CFBA4543B89CDD777C /* KWPendingNode.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + B27E80DAC74B49F6B09A4733 /* KWGenericMatchingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9657A5FD62D74CCF9586C10F /* KWGenericMatchingAdditions.h */; }; + B39A0A41F2604301B77DDA53 /* KWMessagePattern.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CAFCE8420104A5E9A80D547 /* KWMessagePattern.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B55F167E57054A63896DDBDF /* DejalActivityView.h in Headers */ = {isa = PBXBuildFile; fileRef = 504908A5CA9A4D8D81B4D8F8 /* DejalActivityView.h */; }; + B5689EF53B8C4D569C856969 /* KWNilMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 0121665D1487469BA64C8940 /* KWNilMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + B5F11AF5CACB4E95B3452B1B /* KWSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 894AF56B4AF7461D9D547412 /* KWSpec.h */; }; + B97D8E9EC965453080BF5007 /* Pods-Integration Tests-DejalActivityView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B2C0999815344E7481C2852A /* Pods-Integration Tests-DejalActivityView-dummy.m */; }; + B9C149E6AA994C56AFBAD85C /* EGORefreshTableHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = A5CC7198F7E64360BDAEC4A0 /* EGORefreshTableHeaderView.h */; }; + B9D1C92827414E82B643973C /* KWExampleNodeVisitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E5140134B4744638B05D159 /* KWExampleNodeVisitor.h */; }; + B9D6ACACAF2A41359C3EBF6C /* SBJson4Writer.h in Headers */ = {isa = PBXBuildFile; fileRef = CDACCC1765FC4270B72D1A51 /* SBJson4Writer.h */; }; + BA17C2403EB3400BBF2BC294 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + BAAEE045169E4B46AA5D6A97 /* KIFTestStepValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 70A8416A10924DBDB16FCFAF /* KIFTestStepValidation.h */; }; + BBAD292205E147478EA8ADCE /* KWStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 5591BBFECFBA45AAA0E80970 /* KWStub.h */; }; + BC0D01C3399F4C368CC18614 /* KWBeBetweenMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 418DA2E1F71E428E801FAABE /* KWBeBetweenMatcher.h */; }; + BCF328E55E754C87912E882C /* KWFutureObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D71F5975804643B8E147B8 /* KWFutureObject.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + BD5F8B61A5684762BFD0D54A /* KWGenericMatchingAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EE84DEB82AA94E6A9EA4E98D /* KWGenericMatchingAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + BDD6867EF4EC47108811502F /* KWFailure.m in Sources */ = {isa = PBXBuildFile; fileRef = 29DC101E8895492C9AA78940 /* KWFailure.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + BE9FDDED008A4288BAC28494 /* KWAny.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BE600863A184BB88F9E695D /* KWAny.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + BF1FD03326F9422498FCD0F4 /* UIAccessibilityElement-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = FCFCEE90186F45E581075B49 /* UIAccessibilityElement-KIFAdditions.m */; }; + BF8A1BDC3B5E4229914B83CA /* KWUserDefinedMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = AE9CDD2E4C8E4E5980792C15 /* KWUserDefinedMatcher.h */; }; + BFBA5F38EC32497DB7748A5E /* KWBeforeAllNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 36110EF7406340C588FE55E9 /* KWBeforeAllNode.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + C1CE506732A44CA4BC54A043 /* KWContextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = A8217E312B934572AB9DFA06 /* KWContextNode.h */; }; + C2678F244E9E4160B6C58906 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + C2C1BE7EBBC44CDF8E6BF185 /* SBJson4StreamWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = F1DB00B6DEEE46318214A2A9 /* SBJson4StreamWriter.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + C5921597F3954583934A1E31 /* NSNumber+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CCA4728D25449395E4D0DB /* NSNumber+KiwiAdditions.h */; }; + C5EABB223FC24FF9905CCF2B /* KWPendingNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D7675467F1A143AFB486FA96 /* KWPendingNode.h */; }; + C61FFE7D86564880BD8498B7 /* SBJson4Writer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CB8188DD5A7438A804899F1 /* SBJson4Writer.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + C652A1F667A24E6AA1A54FAD /* KIFTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = A68A8E1BEA2C4D62A101F6B1 /* KIFTestCase.m */; }; + C7EA4E2BE6884EA2B026B107 /* UIView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A73591B17D3E47D3B6E9AC74 /* UIView-KIFAdditions.m */; }; + C97C3F015A5E43CCAFBCC696 /* libPods-CoderwallTests-SBJson.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 411CD0F5E40F4C4DB43C4569 /* libPods-CoderwallTests-SBJson.a */; }; + CBF21652805B4A69B2807EC5 /* KWSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 26EE7C9D8A3E4A8381DE4A87 /* KWSpec.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + CCA8436518B448BF97E25F4E /* KWExampleSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC59A6B1EFB451FAECB062C /* KWExampleSuite.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + CE62D6CD42F1460D80695EDB /* KWAfterAllNode.m in Sources */ = {isa = PBXBuildFile; fileRef = BBCAF31970D743FDADEBAC84 /* KWAfterAllNode.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + CE84F0CD5FC047F78EF87A0B /* KWBeZeroMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D80CA8FB209B4E4B9F8C60E8 /* KWBeZeroMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + D0443AAF5B4D4CD0ADDF70CD /* UIWindow-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 453516D391FA4CA397D3F1F8 /* UIWindow-KIFAdditions.h */; }; + D055A67552224549931525B4 /* KiwiBlockMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 35B8DB81F9AF47CA873708BE /* KiwiBlockMacros.h */; }; + D14B6DB4B75C4D9C83B8639B /* KWBeBetweenMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = CA24AB35EC5F466683ABB99A /* KWBeBetweenMatcher.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + D280220F1CE44081B823CE0E /* KWContextNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 7084CB0A467E4601A9477027 /* KWContextNode.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + D3B49A66B9B04D898AD7479C /* libPods-EGOTableViewPullRefresh.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 258F55888F4E4599BF7A2E1E /* libPods-EGOTableViewPullRefresh.a */; }; + D54B17331DE64395B96F7678 /* NSObject+KiwiStubAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B40BD4C4D1C443DDB9135515 /* NSObject+KiwiStubAdditions.h */; }; + D579161E02AC4ED5B45FC479 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + D6F0006E96ED4ADB8EBAEDF3 /* KWMessageTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = DC3E4EC4A47E4548A1608507 /* KWMessageTracker.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + D745954B2AB642149F6C1D7C /* KIFTypist.h in Headers */ = {isa = PBXBuildFile; fileRef = 6844DC0B9E3548A4B75191CD /* KIFTypist.h */; }; + D7594DB6EFEB4874853CC35C /* EGORefreshTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D1AA8A443F34E558967066B /* EGORefreshTableHeaderView.m */; }; + D79E8A8AEF1E417E9095FA4C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + D7BA994BAB3A487B9F59953D /* KWFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D548B7F4CD94172BBD63789 /* KWFormatter.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + D8EC05B6A4054BFD807005F4 /* SBJson4StreamParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 5506BAB36964473E8B9F4474 /* SBJson4StreamParser.h */; }; + DACD176947F2492BB6EF190D /* KWFutureObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C2F50F1FA40B4B4BACB70491 /* KWFutureObject.h */; }; + DB31C0C2EA6E4878A5C650A0 /* UITouch-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 715C760EEFD047F48AE92CE0 /* UITouch-KIFAdditions.h */; }; + DCDB4FA2531F48BBA994C576 /* KWExample.h in Headers */ = {isa = PBXBuildFile; fileRef = B3DC7C85358A491CA3641B54 /* KWExample.h */; }; + DD4B6F1831174942AB36CE02 /* SBJson4StreamWriterState.m in Sources */ = {isa = PBXBuildFile; fileRef = 495C9264974F4F5F8AE6A9EC /* SBJson4StreamWriterState.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + DE6E5E87CB584380B001074B /* KWNull.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B5289CBBBC84D4791A65517 /* KWNull.h */; }; + DEC33B17F8CE43DDA9F8EBF4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + DED016EB94594392B76D5850 /* NSValue+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C0D6BFD5B1D455A8FB55ED5 /* NSValue+KiwiAdditions.h */; }; + DFDEB905E806402687A1B39E /* DejalActivityView.m in Sources */ = {isa = PBXBuildFile; fileRef = 91A9EDA86F464E15B81DCA1F /* DejalActivityView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + DFFF740B04E84924B25FE208 /* KIFUITestActor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AE5E4F1632346E1AA0895D7 /* KIFUITestActor.h */; }; + E0E520E4735A46FF8069A315 /* KWValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7CD89DA6064510A37CF14B /* KWValue.h */; }; + E249C9D4FFFE4770A59E56EC /* NSMethodSignature+KiwiAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B6E508866B6405F9C8F60A8 /* NSMethodSignature+KiwiAdditions.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + E32694C3E60B454AB53559AE /* KWDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E931A754C1B4A60B8C21296 /* KWDeviceInfo.h */; }; + E3826C48066A49B68B01E180 /* KWSymbolicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D15DFC25D8446A1A8353B0C /* KWSymbolicator.h */; }; + E390FFA19B594354AFCF833B /* KWExpectationType.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D87B12BEED24A4D86ED025C /* KWExpectationType.h */; }; + E574F56B58904F23ABA5D7E1 /* KWMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = DD5D257FD6F845048A1A2842 /* KWMatcher.h */; }; + E5A87897FE044035900FF91B /* KWAny.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BDC5BC05EB54C0A8F33CE1C /* KWAny.h */; }; + E8DE8938A09941209ACA39C6 /* DejalActivityView.h in Headers */ = {isa = PBXBuildFile; fileRef = 504908A5CA9A4D8D81B4D8F8 /* DejalActivityView.h */; }; + E8F7276424EC4330BB1451EC /* SBJson4StreamWriterState.m in Sources */ = {isa = PBXBuildFile; fileRef = 495C9264974F4F5F8AE6A9EC /* SBJson4StreamWriterState.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + EAE37FC7A28641D196374C48 /* Pods-CoderwallTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A54D3C469A346E2837EBEA4 /* Pods-CoderwallTests-dummy.m */; }; + EB698CB558014545AE454D20 /* libPods-CoderwallTests-DejalActivityView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EC64E16E9124D4588C8D107 /* libPods-CoderwallTests-DejalActivityView.a */; }; + EBEB5BBB080C48FFA3819D46 /* KWRegisterMatchersNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F922FD5CB2204862902D5FC9 /* KWRegisterMatchersNode.h */; }; + ECA0AE252C51408E8192D5C9 /* KWCaptureSpy.h in Headers */ = {isa = PBXBuildFile; fileRef = 2849577CBAA14720B3D81315 /* KWCaptureSpy.h */; }; + ED021E1406064603A159D738 /* SBJson4StreamParserState.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AC2C477651844438A4796F0 /* SBJson4StreamParserState.h */; }; + ED10964C82264E008C881C9F /* SBJson4StreamWriterState.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F7E9B58A924784A69347AE /* SBJson4StreamWriterState.h */; }; + EDCFEFBC60EA4535A47B23BF /* SBJson4StreamWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = F1DB00B6DEEE46318214A2A9 /* SBJson4StreamWriter.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + EEA7AC5D5AF74BEBAA7C59C7 /* NSInvocation+KiwiAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = ED4FF5B5B85A4D958D337C72 /* NSInvocation+KiwiAdditions.h */; }; + EEBB98DA7BB1498FB6FCEA40 /* SenTestCase-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B653BE7015B043EB801477FD /* SenTestCase-KIFAdditions.m */; }; + EF2254D09E5042DD8193E29C /* KWMatcherFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C1E02B06BB448248F57E207 /* KWMatcherFactory.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + EF61B65FFD804E508A92F4BF /* SBJson4StreamWriterState.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F7E9B58A924784A69347AE /* SBJson4StreamWriterState.h */; }; + F22E631C20394E90BBA52A11 /* KWNilMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AE0D762CE75471F8FB78582 /* KWNilMatcher.h */; }; + F37106B484604FE7B6DFE948 /* KWBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D4179E9E04B4FE4AF93E67E /* KWBlock.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + F3A4CC8742B744A6A5587821 /* NSError-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = A06259CFE3BD4B73A6F45836 /* NSError-KIFAdditions.h */; }; + F9442F84C8E64BA3BF0FA334 /* KWBeIdenticalToMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8317B5213D674926AB145FEB /* KWBeIdenticalToMatcher.h */; }; + F9AE14D1D43442738F7B387E /* KWMatcherFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C46A3E3BB8D4CD787BDC4FE /* KWMatcherFactory.h */; }; + F9EA9DC6CEBB41689F95F8C2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BF038A2C4FE4E8CBA7D5804 /* UIKit.framework */; }; + FA6F0E4F3FCD45A9AD88C841 /* KWNull.m in Sources */ = {isa = PBXBuildFile; fileRef = 176CDB6CCEF74E13A176B7A5 /* KWNull.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + FB3B2C36BCBA40119EB0EA90 /* CGGeometry-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 609AD201258C403EBCA94716 /* CGGeometry-KIFAdditions.h */; }; + FB4DCABBFDCA4AA2872BF81F /* KWAsyncVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 440FDBAA28FA40F68272869C /* KWAsyncVerifier.h */; }; + FBB8246097F2407B86F67138 /* KWRegisterMatchersNode.m in Sources */ = {isa = PBXBuildFile; fileRef = C203781A6B6E40139A2CA84C /* KWRegisterMatchersNode.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + FC08BBE050E54D61A03042EE /* KWBeforeEachNode.m in Sources */ = {isa = PBXBuildFile; fileRef = B70E8DA793774280B6028A30 /* KWBeforeEachNode.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + FD17B0F21C524D1586B28C8B /* SBJson4Writer.h in Headers */ = {isa = PBXBuildFile; fileRef = CDACCC1765FC4270B72D1A51 /* SBJson4Writer.h */; }; + FE45FFF30A2B490481A58BCF /* KWCaptureSpy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0443954508434C1398B3705F /* KWCaptureSpy.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + FEBB108E3AD8493597CDA9A5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */; }; + FECDFD8BB61847129DD2221A /* KWExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D48A8E7D2E6417D9592C3BB /* KWExample.m */; settings = {COMPILER_FLAGS = "-fobjc-arc -DOS_OBJECT_USE_OBJC=0"; }; }; + FFBA9407C8A849C6B8A8C067 /* KWEqualMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = DA808CD838C741F29F4FF2E5 /* KWEqualMatcher.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 2F6CBA5FE5204443A35FF131 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3DCC03C18367418FB774B1CD; + remoteInfo = "Pods-EGOTableViewPullRefresh"; + }; + 367F96E9A0AE43E89FE9BF7B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5161A5D54A454843B4ED9E62; + remoteInfo = "Pods-SBJson"; + }; + 3B545E3BA3BF4F75AADECD6F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4482B0C4B2474DD5B6150F76; + remoteInfo = "Pods-Integration Tests-DejalActivityView"; + }; + 541663298EA3492290C387F2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8DED04B8BBFC47EBB10ECB2F; + remoteInfo = "Pods-Integration Tests-KIF"; + }; + 570D5EA19F3D4960BF957691 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0491CC7D0EC747A48F89C80F; + remoteInfo = "Pods-DejalActivityView"; + }; + 6F44B93549D64982B0B0249E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1E9853B8E0094E99B8EF4104; + remoteInfo = "Pods-CoderwallTests-EGOTableViewPullRefresh"; + }; + 8622BFBAF8694E9B843313C0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6B6391CFA1A949A0A1FAABA0; + remoteInfo = "Pods-CoderwallTests-SBJson"; + }; + 890EC28F16BD4487A3AE73F9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19C221923F7B4B75A4598DE7; + remoteInfo = "Pods-CoderwallTests-DejalActivityView"; + }; + E96A8714641D40A1BEB757EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 29ECF8741AF940F7895B2672; + remoteInfo = "Pods-CoderwallTests-Kiwi"; + }; + EAA321FBC2664091972D552E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4735B4FCA4194299880CF589; + remoteInfo = "Pods-Integration Tests-EGOTableViewPullRefresh"; + }; + F70FD4BC69FA40A78C6D2882 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 7EFC5F676FE249F3BE6FEA60 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A9C67A8848B541A0A5560A36; + remoteInfo = "Pods-Integration Tests-SBJson"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 00CFCAC93E824C9C91AAB89A /* libPods-Integration Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Integration Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0121665D1487469BA64C8940 /* KWNilMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWNilMatcher.m; path = Classes/Matchers/KWNilMatcher.m; sourceTree = ""; }; + 0443954508434C1398B3705F /* KWCaptureSpy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWCaptureSpy.m; path = Classes/Core/KWCaptureSpy.m; sourceTree = ""; }; + 0459CA550AEE476080377798 /* Pods-CoderwallTests-DejalActivityView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CoderwallTests-DejalActivityView-dummy.m"; sourceTree = ""; }; + 08D99DE9966F4982B9D1FA3D /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; + 0914AD7335CC495EBF6DDF1A /* KWExampleSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExampleSuiteBuilder.m; path = Classes/Core/KWExampleSuiteBuilder.m; sourceTree = ""; }; + 0B77E11396294589AB742586 /* KWBeSubclassOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeSubclassOfClassMatcher.h; path = Classes/Matchers/KWBeSubclassOfClassMatcher.h; sourceTree = ""; }; + 0B86A08AFCC84629B8E53869 /* KWStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStringUtilities.m; path = Classes/Core/KWStringUtilities.m; sourceTree = ""; }; + 0C58F85F06D844E6A5ED7188 /* KWBeforeAllNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeforeAllNode.h; path = Classes/Nodes/KWBeforeAllNode.h; sourceTree = ""; }; + 0D1AA8A443F34E558967066B /* EGORefreshTableHeaderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EGORefreshTableHeaderView.m; path = EGOTableViewPullRefresh/Classes/View/EGORefreshTableHeaderView.m; sourceTree = ""; }; + 0D5111DD932648CAB6D4BBD5 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 0D918EE6BBC74C22ADEA2549 /* NSBundle-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle-KIFAdditions.h"; path = "Additions/NSBundle-KIFAdditions.h"; sourceTree = ""; }; + 107887656E8446B79ABE77A2 /* Pods-CoderwallTests-DejalActivityView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CoderwallTests-DejalActivityView-prefix.pch"; sourceTree = ""; }; + 134E464FF03343DE9AB90EB6 /* Pods-DejalActivityView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DejalActivityView-dummy.m"; sourceTree = ""; }; + 13CE47DBA8D74BAD806AA50E /* Pods-Integration Tests-KIF.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Integration Tests-KIF.xcconfig"; sourceTree = ""; }; + 16127D529E9E45D1B86C3579 /* KWBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlock.h; path = Classes/Core/KWBlock.h; sourceTree = ""; }; + 1625077DC7624F7A81C9D67F /* Pods-CoderwallTests-DejalActivityView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CoderwallTests-DejalActivityView.xcconfig"; sourceTree = ""; }; + 162E1E952686452AA205161C /* Pods-Integration Tests-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Integration Tests-environment.h"; sourceTree = ""; }; + 166CA18B3C844C1F9BE1BCE2 /* KWHaveMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWHaveMatcher.h; path = Classes/Matchers/KWHaveMatcher.h; sourceTree = ""; }; + 166D666A0D4344F99CB6DDA7 /* KWAsyncVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAsyncVerifier.m; path = Classes/Verifiers/KWAsyncVerifier.m; sourceTree = ""; }; + 16E69B4C731042DE9CF00CB0 /* blueArrow@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "blueArrow@2x.png"; path = "EGOTableViewPullRefresh/Resources/blueArrow@2x.png"; sourceTree = ""; }; + 176CDB6CCEF74E13A176B7A5 /* KWNull.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWNull.m; path = Classes/Core/KWNull.m; sourceTree = ""; }; + 1941000A40394269ADC5754B /* KWChangeMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWChangeMatcher.h; path = Classes/Matchers/KWChangeMatcher.h; sourceTree = ""; }; + 1B57E82117244E14A270EC8D /* KWBeKindOfClassMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeKindOfClassMatcher.m; path = Classes/Matchers/KWBeKindOfClassMatcher.m; sourceTree = ""; }; + 1BA2D932508B4543A82BD312 /* KWContainMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContainMatcher.h; path = Classes/Matchers/KWContainMatcher.h; sourceTree = ""; }; + 1BA3ABACE8C3413FB069AA20 /* SenTestSuite+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SenTestSuite+KiwiAdditions.h"; path = "SenTestingKit/SenTestSuite+KiwiAdditions.h"; sourceTree = ""; }; + 1C1E02B06BB448248F57E207 /* KWMatcherFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatcherFactory.m; path = Classes/Core/KWMatcherFactory.m; sourceTree = ""; }; + 1CFE19E9F589486D940FF252 /* KWWorkarounds.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWWorkarounds.m; path = Classes/Core/KWWorkarounds.m; sourceTree = ""; }; + 1DA65A08CCAD4903B1796549 /* Pods-Integration Tests-DejalActivityView-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Integration Tests-DejalActivityView-Private.xcconfig"; sourceTree = ""; }; + 1E221FFC95CC459792BCB70A /* KWReporting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWReporting.h; path = Classes/Core/KWReporting.h; sourceTree = ""; }; + 1E7EEFE0B1044C3AB4AE8F27 /* Pods-CoderwallTests-SBJson.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CoderwallTests-SBJson.xcconfig"; sourceTree = ""; }; + 1F0DC82FF1134CC3B5DC9634 /* libPods-CoderwallTests-EGOTableViewPullRefresh.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CoderwallTests-EGOTableViewPullRefresh.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1FD97785EAF241BF9B379F69 /* CGGeometry-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CGGeometry-KIFAdditions.m"; path = "Additions/CGGeometry-KIFAdditions.m"; sourceTree = ""; }; + 2036288FE4BB4728839698ED /* KWGenericMatchEvaluator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWGenericMatchEvaluator.m; path = Classes/Matchers/KWGenericMatchEvaluator.m; sourceTree = ""; }; + 2220AC2A36C449CDA1071628 /* KWProbePoller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWProbePoller.h; path = Classes/Core/KWProbePoller.h; sourceTree = ""; }; + 22D0903D81F046048CC1BFF9 /* Pods-SBJson-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SBJson-dummy.m"; sourceTree = ""; }; + 22D586E3967343259A98E0CE /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 24BC5FAEBD4E40B88BD33A59 /* KWProbe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWProbe.h; path = Classes/Core/KWProbe.h; sourceTree = ""; }; + 258F55888F4E4599BF7A2E1E /* libPods-EGOTableViewPullRefresh.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-EGOTableViewPullRefresh.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2697406EEC5B47D28666DC6A /* Pods-CoderwallTests-EGOTableViewPullRefresh.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CoderwallTests-EGOTableViewPullRefresh.xcconfig"; sourceTree = ""; }; + 26EE7C9D8A3E4A8381DE4A87 /* KWSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSpec.m; path = Classes/Core/KWSpec.m; sourceTree = ""; }; + 27B52C79712A494C9D11D20B /* Pods-DejalActivityView-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DejalActivityView-Private.xcconfig"; sourceTree = ""; }; + 2849577CBAA14720B3D81315 /* KWCaptureSpy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCaptureSpy.h; path = Classes/Core/KWCaptureSpy.h; sourceTree = ""; }; + 28CDDEAEF8254FBA8D2E40DF /* whiteArrow@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "whiteArrow@2x.png"; path = "EGOTableViewPullRefresh/Resources/whiteArrow@2x.png"; sourceTree = ""; }; + 29A7E85A9F114A068855D05E /* KWValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWValue.m; path = Classes/Core/KWValue.m; sourceTree = ""; }; + 29DC101E8895492C9AA78940 /* KWFailure.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFailure.m; path = Classes/Core/KWFailure.m; sourceTree = ""; }; + 2A17E4F52A494B84A8991560 /* SBJson4.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson4.h; path = src/main/objc/SBJson4.h; sourceTree = ""; }; + 2AA61F31EFE144C492D5C041 /* KWMessageSpying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMessageSpying.h; path = Classes/Core/KWMessageSpying.h; sourceTree = ""; }; + 2C7627FA14854C468B9B8900 /* KWInequalityMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWInequalityMatcher.h; path = Classes/Matchers/KWInequalityMatcher.h; sourceTree = ""; }; + 2CBEF9DA7001499D8E153950 /* Pods-CoderwallTests-EGOTableViewPullRefresh-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CoderwallTests-EGOTableViewPullRefresh-Private.xcconfig"; sourceTree = ""; }; + 2D4179E9E04B4FE4AF93E67E /* KWBlock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlock.m; path = Classes/Core/KWBlock.m; sourceTree = ""; }; + 2E771285B4D445F6A05DC4A7 /* UITouch-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITouch-KIFAdditions.m"; path = "Additions/UITouch-KIFAdditions.m"; sourceTree = ""; }; + 2FD77985E97E4981801C94B6 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + 33940F808ACD4E9B9813C4E7 /* KWVerifying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWVerifying.h; path = Classes/Verifiers/KWVerifying.h; sourceTree = ""; }; + 35B8DB81F9AF47CA873708BE /* KiwiBlockMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiBlockMacros.h; path = Classes/Core/KiwiBlockMacros.h; sourceTree = ""; }; + 36110EF7406340C588FE55E9 /* KWBeforeAllNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeforeAllNode.m; path = Classes/Nodes/KWBeforeAllNode.m; sourceTree = ""; }; + 378769FD92DA4AB6B5EB8647 /* NSObject+KiwiMockAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiMockAdditions.m"; path = "Classes/Mocking/NSObject+KiwiMockAdditions.m"; sourceTree = ""; }; + 3826D80D120E4CF5AD5BAD39 /* UIView-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView-KIFAdditions.h"; path = "Additions/UIView-KIFAdditions.h"; sourceTree = ""; }; + 3951492BD8624FEF8648A032 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; + 3A666390F3E540F28DFC0FF3 /* NSObject+KiwiMockAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiMockAdditions.h"; path = "Classes/Mocking/NSObject+KiwiMockAdditions.h"; sourceTree = ""; }; + 3AE5E4F1632346E1AA0895D7 /* KIFUITestActor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KIFUITestActor.h; path = Classes/KIFUITestActor.h; sourceTree = ""; }; + 3C22D575BE134AEC8E8E3F72 /* KWCallSite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCallSite.h; path = Classes/Core/KWCallSite.h; sourceTree = ""; }; + 3D3479D7CBB3424099A70873 /* Kiwi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Kiwi.h; path = Classes/Core/Kiwi.h; sourceTree = ""; }; + 3E3905E6CF8446F9BCD0021D /* Pods-DejalActivityView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DejalActivityView-prefix.pch"; sourceTree = ""; }; + 3F0071D394B74AE88ADA02DD /* NSObject+KiwiSpyAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiSpyAdditions.h"; path = "Classes/Core/NSObject+KiwiSpyAdditions.h"; sourceTree = ""; }; + 3F1E9F82515D4EBF849FB942 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 3F5D8544C48E4C9890F3CCE1 /* grayArrow.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = grayArrow.png; path = EGOTableViewPullRefresh/Resources/grayArrow.png; sourceTree = ""; }; + 408281467E124C6985F83CFD /* KWCountType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWCountType.h; path = Classes/Core/KWCountType.h; sourceTree = ""; }; + 40D732AE888C4498A260A263 /* KiwiConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiConfiguration.h; path = Classes/Core/KiwiConfiguration.h; sourceTree = ""; }; + 40EF75756D9B42F8B547C039 /* Pods-SBJson.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SBJson.xcconfig"; sourceTree = ""; }; + 411CD0F5E40F4C4DB43C4569 /* libPods-CoderwallTests-SBJson.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CoderwallTests-SBJson.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 418DA2E1F71E428E801FAABE /* KWBeBetweenMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeBetweenMatcher.h; path = Classes/Matchers/KWBeBetweenMatcher.h; sourceTree = ""; }; + 420AC90D743248FA9078C298 /* KWBeSubclassOfClassMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeSubclassOfClassMatcher.m; path = Classes/Matchers/KWBeSubclassOfClassMatcher.m; sourceTree = ""; }; + 42CCA4728D25449395E4D0DB /* NSNumber+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+KiwiAdditions.h"; path = "Classes/Core/NSNumber+KiwiAdditions.h"; sourceTree = ""; }; + 435CF21A79BE48FB9A21BB80 /* NSObject+KiwiSpyAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiSpyAdditions.m"; path = "Classes/Core/NSObject+KiwiSpyAdditions.m"; sourceTree = ""; }; + 43AA731ABBBD4FDFA6DFDCDE /* Pods-Integration Tests-KIF-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Integration Tests-KIF-Private.xcconfig"; sourceTree = ""; }; + 440FDBAA28FA40F68272869C /* KWAsyncVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAsyncVerifier.h; path = Classes/Verifiers/KWAsyncVerifier.h; sourceTree = ""; }; + 444327FDE5524220A58DB6BE /* libPods-Integration Tests-DejalActivityView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Integration Tests-DejalActivityView.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 453516D391FA4CA397D3F1F8 /* UIWindow-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWindow-KIFAdditions.h"; path = "Additions/UIWindow-KIFAdditions.h"; sourceTree = ""; }; + 454C62DCE2424DDA89723CA8 /* KWBeMemberOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeMemberOfClassMatcher.h; path = Classes/Matchers/KWBeMemberOfClassMatcher.h; sourceTree = ""; }; + 4784BEDF088C4533A0A85AF4 /* KWGenericMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWGenericMatcher.m; path = Classes/Matchers/KWGenericMatcher.m; sourceTree = ""; }; + 47E1F8B2B1BF4750940F1A5E /* KWExampleNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleNode.h; path = Classes/Nodes/KWExampleNode.h; sourceTree = ""; }; + 48B6B45EF59649CDA0F621F2 /* KWExistVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExistVerifier.m; path = Classes/Verifiers/KWExistVerifier.m; sourceTree = ""; }; + 495C9264974F4F5F8AE6A9EC /* SBJson4StreamWriterState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson4StreamWriterState.m; path = src/main/objc/SBJson4StreamWriterState.m; sourceTree = ""; }; + 4A7AAB838EE144B0B96917CA /* KWRespondToSelectorMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRespondToSelectorMatcher.h; path = Classes/Matchers/KWRespondToSelectorMatcher.h; sourceTree = ""; }; + 4BF038A2C4FE4E8CBA7D5804 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 4C781914DB6840DF92A2FE57 /* SenTestSuite+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SenTestSuite+KiwiAdditions.m"; path = "SenTestingKit/SenTestSuite+KiwiAdditions.m"; sourceTree = ""; }; + 4CFB80DD6E854D378C5B4CA3 /* UIScrollView-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView-KIFAdditions.h"; path = "Additions/UIScrollView-KIFAdditions.h"; sourceTree = ""; }; + 4D5F0DAA3C3642B1BE0219FC /* NSValue+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSValue+KiwiAdditions.m"; path = "Classes/Core/NSValue+KiwiAdditions.m"; sourceTree = ""; }; + 4D9B9D0D43724AB087A027D3 /* KWRaiseMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRaiseMatcher.h; path = Classes/Matchers/KWRaiseMatcher.h; sourceTree = ""; }; + 4F19AB6BE42E423183FEC650 /* KWMatching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatching.h; path = Classes/Core/KWMatching.h; sourceTree = ""; }; + 504908A5CA9A4D8D81B4D8F8 /* DejalActivityView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DejalActivityView.h; sourceTree = ""; }; + 519F69D30E544503B3AF34C4 /* UIApplication-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication-KIFAdditions.m"; path = "Additions/UIApplication-KIFAdditions.m"; sourceTree = ""; }; + 533AAA49A6614A389B783C79 /* KWRespondToSelectorMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRespondToSelectorMatcher.m; path = Classes/Matchers/KWRespondToSelectorMatcher.m; sourceTree = ""; }; + 53DEC029DCC74A6A8C1CA00C /* KWIntercept.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWIntercept.h; path = NonARC/KWIntercept.h; sourceTree = ""; }; + 5421AE83B9F1489D8123046B /* Pods-Integration Tests-DejalActivityView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Integration Tests-DejalActivityView-prefix.pch"; sourceTree = ""; }; + 5506BAB36964473E8B9F4474 /* SBJson4StreamParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson4StreamParser.h; path = src/main/objc/SBJson4StreamParser.h; sourceTree = ""; }; + 55601D4B437849DAB124E1CE /* NSNumber+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+KiwiAdditions.m"; path = "Classes/Core/NSNumber+KiwiAdditions.m"; sourceTree = ""; }; + 5591BBFECFBA45AAA0E80970 /* KWStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStub.h; path = NonARC/KWStub.h; sourceTree = ""; }; + 569180A44CB346969E95A140 /* KWMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatcher.m; path = Classes/Core/KWMatcher.m; sourceTree = ""; }; + 574EA2168C4B40199E76C4A4 /* KWBeIdenticalToMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeIdenticalToMatcher.m; path = Classes/Matchers/KWBeIdenticalToMatcher.m; sourceTree = ""; }; + 57FABE8B1AF4411D9BC7DC94 /* KWBeEmptyMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeEmptyMatcher.h; path = Classes/Matchers/KWBeEmptyMatcher.h; sourceTree = ""; }; + 5862979AFA3A464C8AF9E78F /* blackArrow@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "blackArrow@2x.png"; path = "EGOTableViewPullRefresh/Resources/blackArrow@2x.png"; sourceTree = ""; }; + 58F6EEBF929249809BD7BC3F /* KWBlockNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlockNode.h; path = Classes/Nodes/KWBlockNode.h; sourceTree = ""; }; + 5941A06B65D940CE96AC8B24 /* Pods-Integration Tests.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Integration Tests.xcconfig"; sourceTree = ""; }; + 599C7643ACE948569090F92B /* KWHaveValueMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWHaveValueMatcher.h; path = Classes/Matchers/KWHaveValueMatcher.h; sourceTree = ""; }; + 59EE11DB9B974251842EE049 /* KWBeKindOfClassMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeKindOfClassMatcher.h; path = Classes/Matchers/KWBeKindOfClassMatcher.h; sourceTree = ""; }; + 59F7E9B58A924784A69347AE /* SBJson4StreamWriterState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson4StreamWriterState.h; path = src/main/objc/SBJson4StreamWriterState.h; sourceTree = ""; }; + 5AC2C477651844438A4796F0 /* SBJson4StreamParserState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson4StreamParserState.h; path = src/main/objc/SBJson4StreamParserState.h; sourceTree = ""; }; + 5B5289CBBBC84D4791A65517 /* KWNull.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWNull.h; path = Classes/Core/KWNull.h; sourceTree = ""; }; + 5C46A3E3BB8D4CD787BDC4FE /* KWMatcherFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatcherFactory.h; path = Classes/Core/KWMatcherFactory.h; sourceTree = ""; }; + 5CB8188DD5A7438A804899F1 /* SBJson4Writer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson4Writer.m; path = src/main/objc/SBJson4Writer.m; sourceTree = ""; }; + 5CC6ECFB60B44FD7B3B2CFEE /* KWIntercept.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWIntercept.m; path = NonARC/KWIntercept.m; sourceTree = ""; }; + 5D48A8E7D2E6417D9592C3BB /* KWExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExample.m; path = Classes/Core/KWExample.m; sourceTree = ""; }; + 5D50388EC8654BBEABFCABE6 /* KWBeWithinMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeWithinMatcher.h; path = Classes/Matchers/KWBeWithinMatcher.h; sourceTree = ""; }; + 5D5CC6AFBFF94B34BDCD6254 /* blackArrow.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = blackArrow.png; path = EGOTableViewPullRefresh/Resources/blackArrow.png; sourceTree = ""; }; + 5E5EEAACE534481ABF37A8AF /* UIWindow-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWindow-KIFAdditions.m"; path = "Additions/UIWindow-KIFAdditions.m"; sourceTree = ""; }; + 60435698E6F4415597D03E8E /* KWStub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStub.m; path = NonARC/KWStub.m; sourceTree = ""; }; + 609AD201258C403EBCA94716 /* CGGeometry-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CGGeometry-KIFAdditions.h"; path = "Additions/CGGeometry-KIFAdditions.h"; sourceTree = ""; }; + 609CE693AACF40FC8D3C145E /* Pods-Integration Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Integration Tests-acknowledgements.plist"; sourceTree = ""; }; + 61071C2B816943BFA1600293 /* KWAfterEachNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAfterEachNode.m; path = Classes/Nodes/KWAfterEachNode.m; sourceTree = ""; }; + 61F20BB1A3DC483AA58170D8 /* KIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KIF.h; path = Classes/KIF.h; sourceTree = ""; }; + 624D8C21F690498DABB15200 /* KWExampleDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleDelegate.h; path = Classes/Core/KWExampleDelegate.h; sourceTree = ""; }; + 62F791A0D6814EC78E516737 /* KIFSystemTestActor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KIFSystemTestActor.m; path = Classes/KIFSystemTestActor.m; sourceTree = ""; }; + 64B5CCBAD61F49C790C4EA76 /* KWBeEmptyMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeEmptyMatcher.m; path = Classes/Matchers/KWBeEmptyMatcher.m; sourceTree = ""; }; + 6697741CE0C3444FAB120FCA /* KWRaiseMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRaiseMatcher.m; path = Classes/Matchers/KWRaiseMatcher.m; sourceTree = ""; }; + 66F63E3046CE46299EB17654 /* NSError-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError-KIFAdditions.m"; path = "Additions/NSError-KIFAdditions.m"; sourceTree = ""; }; + 677A00A9D6D148D184141A09 /* Pods-CoderwallTests-EGOTableViewPullRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CoderwallTests-EGOTableViewPullRefresh-prefix.pch"; sourceTree = ""; }; + 6844DC0B9E3548A4B75191CD /* KIFTypist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KIFTypist.h; path = Classes/KIFTypist.h; sourceTree = ""; }; + 687C6F14E3224CF29F3B79C8 /* Pods-Integration Tests-EGOTableViewPullRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Integration Tests-EGOTableViewPullRefresh-dummy.m"; sourceTree = ""; }; + 69F3532B5C6643E794C6251D /* KWConformToProtocolMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWConformToProtocolMatcher.h; path = Classes/Matchers/KWConformToProtocolMatcher.h; sourceTree = ""; }; + 6A72FBBF5A3F45FC95F58CF0 /* Pods-CoderwallTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CoderwallTests-acknowledgements.markdown"; sourceTree = ""; }; + 6B43FA92B41948C3A0F45F5C /* KWReceiveMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWReceiveMatcher.m; path = Classes/Matchers/KWReceiveMatcher.m; sourceTree = ""; }; + 6C530B8019C047C690B3F946 /* KWProbePoller.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWProbePoller.m; path = Classes/Core/KWProbePoller.m; sourceTree = ""; }; + 6CAFCE8420104A5E9A80D547 /* KWMessagePattern.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMessagePattern.m; path = NonARC/KWMessagePattern.m; sourceTree = ""; }; + 6EAC456D65734A9A95ABFF39 /* whiteArrow.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = whiteArrow.png; path = EGOTableViewPullRefresh/Resources/whiteArrow.png; sourceTree = ""; }; + 7084CB0A467E4601A9477027 /* KWContextNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContextNode.m; path = Classes/Nodes/KWContextNode.m; sourceTree = ""; }; + 7092C238A5284F5FAB8022F7 /* KWGenericMatchEvaluator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWGenericMatchEvaluator.h; path = Classes/Matchers/KWGenericMatchEvaluator.h; sourceTree = ""; }; + 70A8416A10924DBDB16FCFAF /* KIFTestStepValidation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KIFTestStepValidation.h; path = Classes/KIFTestStepValidation.h; sourceTree = ""; }; + 7106C0BAA2044FC38556F844 /* KWUserDefinedMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWUserDefinedMatcher.m; path = Classes/Matchers/KWUserDefinedMatcher.m; sourceTree = ""; }; + 715C760EEFD047F48AE92CE0 /* UITouch-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITouch-KIFAdditions.h"; path = "Additions/UITouch-KIFAdditions.h"; sourceTree = ""; }; + 7193FED984BD4B7DB18D08DF /* KWInequalityMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWInequalityMatcher.m; path = Classes/Matchers/KWInequalityMatcher.m; sourceTree = ""; }; + 72331ABF178E4C269359E20F /* Pods-CoderwallTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CoderwallTests-acknowledgements.plist"; sourceTree = ""; }; + 72425E82A42D447A986D1C9C /* KWBeWithinMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeWithinMatcher.m; path = Classes/Matchers/KWBeWithinMatcher.m; sourceTree = ""; }; + 72B6F09158C9469785815067 /* Pods-CoderwallTests-DejalActivityView-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CoderwallTests-DejalActivityView-Private.xcconfig"; sourceTree = ""; }; + 74C1C574AE8D4EDB9E752C5C /* KWSymbolicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWSymbolicator.m; path = NonARC/KWSymbolicator.m; sourceTree = ""; }; + 7500732C2EB647C282D9B1D8 /* Pods-CoderwallTests-SBJson-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CoderwallTests-SBJson-prefix.pch"; sourceTree = ""; }; + 756B96ACAE2B427C80E03C2D /* libPods-Integration Tests-SBJson.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Integration Tests-SBJson.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 75C8D9036B48423FA801C5E4 /* KWExampleSuite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleSuite.h; path = Classes/Core/KWExampleSuite.h; sourceTree = ""; }; + 778CC112D59E4DA5BF061F0E /* Pods-CoderwallTests-Kiwi-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CoderwallTests-Kiwi-Private.xcconfig"; sourceTree = ""; }; + 77C245018E7E424796430E7B /* UIApplication-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication-KIFAdditions.h"; path = "Additions/UIApplication-KIFAdditions.h"; sourceTree = ""; }; + 78FC2EB07583411C9A646F43 /* KWContainMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContainMatcher.m; path = Classes/Matchers/KWContainMatcher.m; sourceTree = ""; }; + 79494A524FF044CF951B2CF7 /* KWDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWDeviceInfo.m; path = Classes/Core/KWDeviceInfo.m; sourceTree = ""; }; + 7A2D2B6B74E441ABAA129986 /* Pods-Integration Tests-KIF-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Integration Tests-KIF-dummy.m"; sourceTree = ""; }; + 7AA5EBB9CE334EEDA4043726 /* KWAfterEachNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAfterEachNode.h; path = Classes/Nodes/KWAfterEachNode.h; sourceTree = ""; }; + 7B6E508866B6405F9C8F60A8 /* NSMethodSignature+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMethodSignature+KiwiAdditions.m"; path = "Classes/Core/NSMethodSignature+KiwiAdditions.m"; sourceTree = ""; }; + 7C0D6BFD5B1D455A8FB55ED5 /* NSValue+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+KiwiAdditions.h"; path = "Classes/Core/NSValue+KiwiAdditions.h"; sourceTree = ""; }; + 7C84E6BB131E474E8D040828 /* libPods-DejalActivityView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DejalActivityView.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7C9D4C048C134028B0166CCF /* KWBeZeroMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeZeroMatcher.h; path = Classes/Matchers/KWBeZeroMatcher.h; sourceTree = ""; }; + 7D54BF5ED67A4505BCE9C452 /* Pods-Integration Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Integration Tests-resources.sh"; sourceTree = ""; }; + 7EA917B0C5CF4AB18FD5533F /* Pods-CoderwallTests-SBJson-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CoderwallTests-SBJson-dummy.m"; sourceTree = ""; }; + 7F424E6637484386810C0EF5 /* KWContainStringMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContainStringMatcher.h; path = Classes/Matchers/KWContainStringMatcher.h; sourceTree = ""; }; + 7FBA6D19AC514DB48181C131 /* KIFUITestActor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KIFUITestActor.m; path = Classes/KIFUITestActor.m; sourceTree = ""; }; + 8317B5213D674926AB145FEB /* KWBeIdenticalToMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeIdenticalToMatcher.h; path = Classes/Matchers/KWBeIdenticalToMatcher.h; sourceTree = ""; }; + 83B95B975BAE4EAEADB8D0E7 /* KiwiMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KiwiMacros.h; path = Classes/Core/KiwiMacros.h; sourceTree = ""; }; + 846F6B86027B4998ACB323F1 /* Pods-Integration Tests-SBJson.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Integration Tests-SBJson.xcconfig"; sourceTree = ""; }; + 85997DBB40B44570B95F66C1 /* SBJson4StreamTokeniser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson4StreamTokeniser.h; path = src/main/objc/SBJson4StreamTokeniser.h; sourceTree = ""; }; + 868DE3D08ED74CC29B60F23E /* NSObject+KiwiVerifierAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiVerifierAdditions.h"; path = "Classes/Core/NSObject+KiwiVerifierAdditions.h"; sourceTree = ""; }; + 87F9C958DF0546F7AF5E56F1 /* Pods-Integration Tests-DejalActivityView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Integration Tests-DejalActivityView.xcconfig"; sourceTree = ""; }; + 8897D52921C34EE5BEC5B370 /* KWMatchers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatchers.h; path = Classes/Core/KWMatchers.h; sourceTree = ""; }; + 894AF56B4AF7461D9D547412 /* KWSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSpec.h; path = Classes/Core/KWSpec.h; sourceTree = ""; }; + 8A54D3C469A346E2837EBEA4 /* Pods-CoderwallTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CoderwallTests-dummy.m"; sourceTree = ""; }; + 8AE0D762CE75471F8FB78582 /* KWNilMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWNilMatcher.h; path = Classes/Matchers/KWNilMatcher.h; sourceTree = ""; }; + 8B7CD89DA6064510A37CF14B /* KWValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWValue.h; path = Classes/Core/KWValue.h; sourceTree = ""; }; + 8BC59A6B1EFB451FAECB062C /* KWExampleSuite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWExampleSuite.m; path = Classes/Core/KWExampleSuite.m; sourceTree = ""; }; + 8BDC5BC05EB54C0A8F33CE1C /* KWAny.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAny.h; path = Classes/Core/KWAny.h; sourceTree = ""; }; + 8D617DA0ABF64B0BB3F22B5A /* NSObject+KiwiStubAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiStubAdditions.m"; path = "Classes/Stubbing/NSObject+KiwiStubAdditions.m"; sourceTree = ""; }; + 8DFD097F19B54A53B18E54C3 /* KIFTestActor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KIFTestActor.m; path = Classes/KIFTestActor.m; sourceTree = ""; }; + 8EC64E16E9124D4588C8D107 /* libPods-CoderwallTests-DejalActivityView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CoderwallTests-DejalActivityView.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9074C24D4ACE44DE8B1BC05A /* NSFileManager-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileManager-KIFAdditions.h"; path = "Additions/NSFileManager-KIFAdditions.h"; sourceTree = ""; }; + 91A9EDA86F464E15B81DCA1F /* DejalActivityView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = DejalActivityView.m; sourceTree = ""; }; + 9657A5FD62D74CCF9586C10F /* KWGenericMatchingAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWGenericMatchingAdditions.h; path = Classes/Matchers/KWGenericMatchingAdditions.h; sourceTree = ""; }; + 972CAFA9E7C04F7C942DE53D /* KWBlockRaiseMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBlockRaiseMatcher.h; path = Classes/Matchers/KWBlockRaiseMatcher.h; sourceTree = ""; }; + 98046D9F4D104B1691C32921 /* KWCallSite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWCallSite.m; path = Classes/Core/KWCallSite.m; sourceTree = ""; }; + 989D7B752B954662B3390A65 /* libPods-SBJson.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SBJson.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A0D2B9284744D01B1EC6B49 /* libPods-Integration Tests-EGOTableViewPullRefresh.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Integration Tests-EGOTableViewPullRefresh.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BE600863A184BB88F9E695D /* KWAny.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAny.m; path = Classes/Core/KWAny.m; sourceTree = ""; }; + 9D15DFC25D8446A1A8353B0C /* KWSymbolicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWSymbolicator.h; path = NonARC/KWSymbolicator.h; sourceTree = ""; }; + 9D548B7F4CD94172BBD63789 /* KWFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFormatter.m; path = Classes/Core/KWFormatter.m; sourceTree = ""; }; + 9D87B12BEED24A4D86ED025C /* KWExpectationType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExpectationType.h; path = Classes/Core/KWExpectationType.h; sourceTree = ""; }; + 9DCE07D1B9C44C078AEEAABE /* NSInvocation+KiwiAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+KiwiAdditions.m"; path = "Classes/Core/NSInvocation+KiwiAdditions.m"; sourceTree = ""; }; + 9E5140134B4744638B05D159 /* KWExampleNodeVisitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleNodeVisitor.h; path = Classes/Core/KWExampleNodeVisitor.h; sourceTree = ""; }; + 9E931A754C1B4A60B8C21296 /* KWDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWDeviceInfo.h; path = Classes/Core/KWDeviceInfo.h; sourceTree = ""; }; + A06259CFE3BD4B73A6F45836 /* NSError-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError-KIFAdditions.h"; path = "Additions/NSError-KIFAdditions.h"; sourceTree = ""; }; + A1F3C21F71BF48C4BA9BF4D3 /* NSInvocation+OCMAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSInvocation+OCMAdditions.m"; path = "Classes/Core/NSInvocation+OCMAdditions.m"; sourceTree = ""; }; + A224A8765AB24725A5908A97 /* NSProxy+KiwiVerifierAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSProxy+KiwiVerifierAdditions.h"; path = "Classes/Core/NSProxy+KiwiVerifierAdditions.h"; sourceTree = ""; }; + A5CC7198F7E64360BDAEC4A0 /* EGORefreshTableHeaderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EGORefreshTableHeaderView.h; path = EGOTableViewPullRefresh/Classes/View/EGORefreshTableHeaderView.h; sourceTree = ""; }; + A68A8E1BEA2C4D62A101F6B1 /* KIFTestCase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KIFTestCase.m; path = Classes/KIFTestCase.m; sourceTree = ""; }; + A71F1AF363664CEB945BA998 /* SBJson4StreamParserState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson4StreamParserState.m; path = src/main/objc/SBJson4StreamParserState.m; sourceTree = ""; }; + A73591B17D3E47D3B6E9AC74 /* UIView-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView-KIFAdditions.m"; path = "Additions/UIView-KIFAdditions.m"; sourceTree = ""; }; + A8217E312B934572AB9DFA06 /* KWContextNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWContextNode.h; path = Classes/Nodes/KWContextNode.h; sourceTree = ""; }; + A957C9ED21424A1B86A6AB67 /* KWRegularExpressionPatternMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRegularExpressionPatternMatcher.h; path = Classes/Matchers/KWRegularExpressionPatternMatcher.h; sourceTree = ""; }; + A962282B54CE482888B045A6 /* UIScrollView-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView-KIFAdditions.m"; path = "Additions/UIScrollView-KIFAdditions.m"; sourceTree = ""; }; + A9B2F5D5E7B94166AF1270A2 /* KWHaveMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWHaveMatcher.m; path = Classes/Matchers/KWHaveMatcher.m; sourceTree = ""; }; + A9B32B116A744B3EA7A468A0 /* KWMatchVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatchVerifier.h; path = Classes/Verifiers/KWMatchVerifier.h; sourceTree = ""; }; + AB1F523922194F4E8DF644AC /* KWStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStringUtilities.h; path = Classes/Core/KWStringUtilities.h; sourceTree = ""; }; + AB36E9F4B497455C90B8B30D /* SBJson4Parser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson4Parser.h; path = src/main/objc/SBJson4Parser.h; sourceTree = ""; }; + ACBD59B8972A4DF0ACDCD35B /* LoadableCategory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LoadableCategory.h; path = Additions/LoadableCategory.h; sourceTree = ""; }; + AD3159C4BE884EB7836207B5 /* Pods-Integration Tests-EGOTableViewPullRefresh-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Integration Tests-EGOTableViewPullRefresh-Private.xcconfig"; sourceTree = ""; }; + AD4DFC209AE64D4AA50EB6CE /* KWMatchVerifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatchVerifier.m; path = Classes/Verifiers/KWMatchVerifier.m; sourceTree = ""; }; + AE72AECF4B5E4A4FAB792DA7 /* KWRegularExpressionPatternMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRegularExpressionPatternMatcher.m; path = Classes/Matchers/KWRegularExpressionPatternMatcher.m; sourceTree = ""; }; + AE9CDD2E4C8E4E5980792C15 /* KWUserDefinedMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWUserDefinedMatcher.h; path = Classes/Matchers/KWUserDefinedMatcher.h; sourceTree = ""; }; + AEE2DEC6DF4B4EB9A120DAF3 /* Pods-EGOTableViewPullRefresh-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-EGOTableViewPullRefresh-Private.xcconfig"; sourceTree = ""; }; + B0329F4B5B2C44B8B8F15B76 /* NSObject+KiwiVerifierAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+KiwiVerifierAdditions.m"; path = "Classes/Core/NSObject+KiwiVerifierAdditions.m"; sourceTree = ""; }; + B0E50458FC9941C68F40D8F0 /* Pods-SBJson-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-SBJson-prefix.pch"; sourceTree = ""; }; + B0F957B81DC346DEBC53D0BB /* KWMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMock.h; path = Classes/Mocking/KWMock.h; sourceTree = ""; }; + B27FA756B0E844438BE10DB3 /* Pods-Integration Tests-EGOTableViewPullRefresh.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Integration Tests-EGOTableViewPullRefresh.xcconfig"; sourceTree = ""; }; + B2C0999815344E7481C2852A /* Pods-Integration Tests-DejalActivityView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Integration Tests-DejalActivityView-dummy.m"; sourceTree = ""; }; + B2D3565B36C141E08416F636 /* SenTestCase-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SenTestCase-KIFAdditions.h"; path = "Additions/SenTestCase-KIFAdditions.h"; sourceTree = ""; }; + B3DC7C85358A491CA3641B54 /* KWExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExample.h; path = Classes/Core/KWExample.h; sourceTree = ""; }; + B40BD4C4D1C443DDB9135515 /* NSObject+KiwiStubAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+KiwiStubAdditions.h"; path = "Classes/Stubbing/NSObject+KiwiStubAdditions.h"; sourceTree = ""; }; + B42308F5EB2646FEB64903E0 /* NSMethodSignature+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMethodSignature+KiwiAdditions.h"; path = "Classes/Core/NSMethodSignature+KiwiAdditions.h"; sourceTree = ""; }; + B43F22629CB64B6886D1BA92 /* KWFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFormatter.h; path = Classes/Core/KWFormatter.h; sourceTree = ""; }; + B653BE7015B043EB801477FD /* SenTestCase-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SenTestCase-KIFAdditions.m"; path = "Additions/SenTestCase-KIFAdditions.m"; sourceTree = ""; }; + B6BD741FE643499A97170BB0 /* Pods-Integration Tests-SBJson-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Integration Tests-SBJson-dummy.m"; sourceTree = ""; }; + B70E8DA793774280B6028A30 /* KWBeforeEachNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeforeEachNode.m; path = Classes/Nodes/KWBeforeEachNode.m; sourceTree = ""; }; + B95B351C835D4F16AD899A7C /* KIFTypist.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KIFTypist.m; path = Classes/KIFTypist.m; sourceTree = ""; }; + BB3729D359FD4B6480E552C9 /* Pods-EGOTableViewPullRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-EGOTableViewPullRefresh-prefix.pch"; sourceTree = ""; }; + BBCAF31970D743FDADEBAC84 /* KWAfterAllNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWAfterAllNode.m; path = Classes/Nodes/KWAfterAllNode.m; sourceTree = ""; }; + BC2866E6C7A340898D373199 /* Pods-Integration Tests-EGOTableViewPullRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Integration Tests-EGOTableViewPullRefresh-prefix.pch"; sourceTree = ""; }; + BD112DB9B8B5461DA647D969 /* KIFTestActor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KIFTestActor.h; path = Classes/KIFTestActor.h; sourceTree = ""; }; + BD6DBC5E5FD44DF0A57C2B31 /* Pods-Integration Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Integration Tests-acknowledgements.markdown"; sourceTree = ""; }; + BF605553F5124CD69BAA263A /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; + BF96081C85EE4128B9B66A27 /* Pods-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-environment.h"; sourceTree = ""; }; + BFA84E2CA2834DC09FB2BC1B /* Pods-CoderwallTests-Kiwi.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CoderwallTests-Kiwi.xcconfig"; sourceTree = ""; }; + C0E9D52C763245789B5BBE49 /* KWMessageTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMessageTracker.h; path = Classes/Core/KWMessageTracker.h; sourceTree = ""; }; + C203781A6B6E40139A2CA84C /* KWRegisterMatchersNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWRegisterMatchersNode.m; path = Classes/Nodes/KWRegisterMatchersNode.m; sourceTree = ""; }; + C264E1F6DA8B4BF7934A3288 /* NSInvocation+OCMAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+OCMAdditions.h"; path = "Classes/Core/NSInvocation+OCMAdditions.h"; sourceTree = ""; }; + C2BACF6EA1B54B8FB3851D59 /* KWWorkarounds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWWorkarounds.h; path = Classes/Core/KWWorkarounds.h; sourceTree = ""; }; + C2C6E8CFBA4543B89CDD777C /* KWPendingNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWPendingNode.m; path = Classes/Nodes/KWPendingNode.m; sourceTree = ""; }; + C2F50F1FA40B4B4BACB70491 /* KWFutureObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFutureObject.h; path = Classes/Core/KWFutureObject.h; sourceTree = ""; }; + C36C37995AAD4B629E834164 /* UIAccessibilityElement-KIFAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAccessibilityElement-KIFAdditions.h"; path = "Additions/UIAccessibilityElement-KIFAdditions.h"; sourceTree = ""; }; + C45C9BC2009A474DBE86567B /* Pods-EGOTableViewPullRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-EGOTableViewPullRefresh-dummy.m"; sourceTree = ""; }; + C46AA8D28D144A8BBCB768CA /* KWInvocationCapturer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWInvocationCapturer.h; path = Classes/Core/KWInvocationCapturer.h; sourceTree = ""; }; + C49B039040B34C8592AF0929 /* Pods-CoderwallTests-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CoderwallTests-environment.h"; sourceTree = ""; }; + C4C15D87EAFA44798901C342 /* KWInvocationCapturer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWInvocationCapturer.m; path = Classes/Core/KWInvocationCapturer.m; sourceTree = ""; }; + C4CB85868F8C4798BC085864 /* NSFileManager-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileManager-KIFAdditions.m"; path = "Additions/NSFileManager-KIFAdditions.m"; sourceTree = ""; }; + C532444277A14914AD0CA4D2 /* libPods-CoderwallTests-Kiwi.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CoderwallTests-Kiwi.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + C6B801827AC141AD97E712A4 /* SBJson4StreamParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson4StreamParser.m; path = src/main/objc/SBJson4StreamParser.m; sourceTree = ""; }; + C6D8F16168F543E7A31B80C6 /* KWBeTrueMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeTrueMatcher.h; path = Classes/Matchers/KWBeTrueMatcher.h; sourceTree = ""; }; + C862D092CFF04D42A647CC84 /* libPods-CoderwallTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CoderwallTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + C90AF1B3F3264B459ABF17A5 /* SBJson4Parser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson4Parser.m; path = src/main/objc/SBJson4Parser.m; sourceTree = ""; }; + C9B6B3F6810F42119030F2EF /* KWContainStringMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWContainStringMatcher.m; path = Classes/Matchers/KWContainStringMatcher.m; sourceTree = ""; }; + CA24AB35EC5F466683ABB99A /* KWBeBetweenMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeBetweenMatcher.m; path = Classes/Matchers/KWBeBetweenMatcher.m; sourceTree = ""; }; + CAC1ED62F49040AA9CEC4012 /* Pods-CoderwallTests.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CoderwallTests.xcconfig"; sourceTree = ""; }; + CC290B79DEF045F09B3478D2 /* KWStringPrefixMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStringPrefixMatcher.h; path = Classes/Matchers/KWStringPrefixMatcher.h; sourceTree = ""; }; + CC4F659D75C149CE95C0496F /* KWStringPrefixMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStringPrefixMatcher.m; path = Classes/Matchers/KWStringPrefixMatcher.m; sourceTree = ""; }; + CD663848E25D4C84BA298E51 /* libPods-Integration Tests-KIF.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Integration Tests-KIF.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + CDACCC1765FC4270B72D1A51 /* SBJson4Writer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson4Writer.h; path = src/main/objc/SBJson4Writer.h; sourceTree = ""; }; + CFCEF6015B1E478C84704278 /* Pods-CoderwallTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CoderwallTests-resources.sh"; sourceTree = ""; }; + D1CF9C4063E146CCA73E5CAC /* KWMessagePattern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMessagePattern.h; path = NonARC/KWMessagePattern.h; sourceTree = ""; }; + D2F6DD8BE96040F7BF06A8E2 /* Pods-DejalActivityView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DejalActivityView.xcconfig"; sourceTree = ""; }; + D3550548D85C4B5291A750C8 /* KWBeMemberOfClassMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeMemberOfClassMatcher.m; path = Classes/Matchers/KWBeMemberOfClassMatcher.m; sourceTree = ""; }; + D49763BBC2BF4141A5B56243 /* KIFTestCase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KIFTestCase.h; path = Classes/KIFTestCase.h; sourceTree = ""; }; + D4AF486F88DD43EA8D119C7D /* KIFSystemTestActor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KIFSystemTestActor.h; path = Classes/KIFSystemTestActor.h; sourceTree = ""; }; + D5BFE5EEE1F443C891443223 /* KWStringContainsMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWStringContainsMatcher.m; path = Classes/Matchers/KWStringContainsMatcher.m; sourceTree = ""; }; + D5D71F5975804643B8E147B8 /* KWFutureObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWFutureObject.m; path = Classes/Core/KWFutureObject.m; sourceTree = ""; }; + D624A1CAB58640ECAEDE6EAA /* KWMatchers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMatchers.m; path = Classes/Core/KWMatchers.m; sourceTree = ""; }; + D6A1A4941D14401DA957D2B3 /* KWMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMock.m; path = Classes/Mocking/KWMock.m; sourceTree = ""; }; + D6D025F093A442AC862B7CEA /* KWObjCUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWObjCUtilities.h; path = Classes/Core/KWObjCUtilities.h; sourceTree = ""; }; + D7675467F1A143AFB486FA96 /* KWPendingNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWPendingNode.h; path = Classes/Nodes/KWPendingNode.h; sourceTree = ""; }; + D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + D800DCE31A0B4541B146E9FC /* KWEqualMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWEqualMatcher.m; path = Classes/Matchers/KWEqualMatcher.m; sourceTree = ""; }; + D80CA8FB209B4E4B9F8C60E8 /* KWBeZeroMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeZeroMatcher.m; path = Classes/Matchers/KWBeZeroMatcher.m; sourceTree = ""; }; + D8C5CC64AA5747158D4A738B /* KWBeTrueMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBeTrueMatcher.m; path = Classes/Matchers/KWBeTrueMatcher.m; sourceTree = ""; }; + D8C5FD6C8AC543C3AC797A14 /* Pods-CoderwallTests-EGOTableViewPullRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CoderwallTests-EGOTableViewPullRefresh-dummy.m"; sourceTree = ""; }; + D8E9151209B64BC7BE4A186E /* KWStringContainsMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWStringContainsMatcher.h; path = Classes/Matchers/KWStringContainsMatcher.h; sourceTree = ""; }; + D8F4245C04134B15A6B7003B /* KWExistVerifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExistVerifier.h; path = Classes/Verifiers/KWExistVerifier.h; sourceTree = ""; }; + D9CFDFCABB5140DC89FB246B /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + DA36856D715549C38D88CE85 /* SBJson4StreamTokeniser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson4StreamTokeniser.m; path = src/main/objc/SBJson4StreamTokeniser.m; sourceTree = ""; }; + DA5562A2263947C0BB6F9AF2 /* KWAfterAllNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWAfterAllNode.h; path = Classes/Nodes/KWAfterAllNode.h; sourceTree = ""; }; + DA808CD838C741F29F4FF2E5 /* KWEqualMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWEqualMatcher.h; path = Classes/Matchers/KWEqualMatcher.h; sourceTree = ""; }; + DB66E547CF384497B24F06CB /* KWGenericMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWGenericMatcher.h; path = Classes/Matchers/KWGenericMatcher.h; sourceTree = ""; }; + DBBA1379970D4A42B2298854 /* KWExampleSuiteBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWExampleSuiteBuilder.h; path = Classes/Core/KWExampleSuiteBuilder.h; sourceTree = ""; }; + DC3E4EC4A47E4548A1608507 /* KWMessageTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWMessageTracker.m; path = Classes/Core/KWMessageTracker.m; sourceTree = ""; }; + DD5D257FD6F845048A1A2842 /* KWMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWMatcher.h; path = Classes/Core/KWMatcher.h; sourceTree = ""; }; + DD78E167A9F543518D979C7C /* Pods-CoderwallTests-Kiwi-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CoderwallTests-Kiwi-prefix.pch"; sourceTree = ""; }; + DED629F5B61648CAB919E517 /* Pods-Integration Tests-KIF-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Integration Tests-KIF-prefix.pch"; sourceTree = ""; }; + E0775BECD9C444A8BBEFB0B1 /* KWChangeMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWChangeMatcher.m; path = Classes/Matchers/KWChangeMatcher.m; sourceTree = ""; }; + E12231B5A09A47D5931C9808 /* NSProxy+KiwiVerifierAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSProxy+KiwiVerifierAdditions.m"; path = "Classes/Core/NSProxy+KiwiVerifierAdditions.m"; sourceTree = ""; }; + E1A8A09FDC144767AF3D5281 /* KWConformToProtocolMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWConformToProtocolMatcher.m; path = Classes/Matchers/KWConformToProtocolMatcher.m; sourceTree = ""; }; + E277A5A79F144372A87315AB /* KWBlockRaiseMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlockRaiseMatcher.m; path = Classes/Matchers/KWBlockRaiseMatcher.m; sourceTree = ""; }; + E2B65D782C1C4E748277287F /* Pods-Integration Tests-SBJson-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Integration Tests-SBJson-prefix.pch"; sourceTree = ""; }; + E7970CB71D0F4847AC858D79 /* blueArrow.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = blueArrow.png; path = EGOTableViewPullRefresh/Resources/blueArrow.png; sourceTree = ""; }; + E853D267F7854F54AACC3526 /* KWBlockNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWBlockNode.m; path = Classes/Nodes/KWBlockNode.m; sourceTree = ""; }; + E8D3AB7E349340D1BCA46732 /* NSBundle-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle-KIFAdditions.m"; path = "Additions/NSBundle-KIFAdditions.m"; sourceTree = ""; }; + E9063162C2804CCE9A71C5CD /* Pods-SBJson-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SBJson-Private.xcconfig"; sourceTree = ""; }; + EA14F3E9086E46F8A1A67F54 /* KWHaveValueMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWHaveValueMatcher.m; path = Classes/Matchers/KWHaveValueMatcher.m; sourceTree = ""; }; + EB7A30283D594B22A2B8818B /* KWReceiveMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWReceiveMatcher.h; path = Classes/Matchers/KWReceiveMatcher.h; sourceTree = ""; }; + ED4FF5B5B85A4D958D337C72 /* NSInvocation+KiwiAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSInvocation+KiwiAdditions.h"; path = "Classes/Core/NSInvocation+KiwiAdditions.h"; sourceTree = ""; }; + EDE71FE2B75B489888456C63 /* KWItNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWItNode.h; path = Classes/Nodes/KWItNode.h; sourceTree = ""; }; + EE84DEB82AA94E6A9EA4E98D /* KWGenericMatchingAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWGenericMatchingAdditions.m; path = Classes/Matchers/KWGenericMatchingAdditions.m; sourceTree = ""; }; + EEFF293F56F446F489569CC2 /* Pods-EGOTableViewPullRefresh.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-EGOTableViewPullRefresh.xcconfig"; sourceTree = ""; }; + F1DB00B6DEEE46318214A2A9 /* SBJson4StreamWriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SBJson4StreamWriter.m; path = src/main/objc/SBJson4StreamWriter.m; sourceTree = ""; }; + F26DFAC51416441888E0E77B /* Pods-CoderwallTests-Kiwi-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CoderwallTests-Kiwi-dummy.m"; sourceTree = ""; }; + F2D320B0D6ED4530AC286E1F /* KWFailure.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWFailure.h; path = Classes/Core/KWFailure.h; sourceTree = ""; }; + F74F87FC3436445FB9BA2543 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.xcconfig; sourceTree = ""; }; + F7DA9FEF5E47452FA2E0BAB6 /* grayArrow@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "grayArrow@2x.png"; path = "EGOTableViewPullRefresh/Resources/grayArrow@2x.png"; sourceTree = ""; }; + F922FD5CB2204862902D5FC9 /* KWRegisterMatchersNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWRegisterMatchersNode.h; path = Classes/Nodes/KWRegisterMatchersNode.h; sourceTree = ""; }; + FA787E931EFF4172BF87554E /* Pods-CoderwallTests-SBJson-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CoderwallTests-SBJson-Private.xcconfig"; sourceTree = ""; }; + FB1D6CACC1BE49779795C853 /* SBJson4StreamWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SBJson4StreamWriter.h; path = src/main/objc/SBJson4StreamWriter.h; sourceTree = ""; }; + FB656ECC09854E6E92DBD1C0 /* KIFTestStepValidation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KIFTestStepValidation.m; path = Classes/KIFTestStepValidation.m; sourceTree = ""; }; + FC613F54CADB48BCA16AD943 /* KWBeforeEachNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KWBeforeEachNode.h; path = Classes/Nodes/KWBeforeEachNode.h; sourceTree = ""; }; + FC681FA41F92469FBC85F6F4 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; + FCFCEE90186F45E581075B49 /* UIAccessibilityElement-KIFAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAccessibilityElement-KIFAdditions.m"; path = "Additions/UIAccessibilityElement-KIFAdditions.m"; sourceTree = ""; }; + FD43BABB2FB94F2A9D93FBF4 /* Pods-Integration Tests-SBJson-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Integration Tests-SBJson-Private.xcconfig"; sourceTree = ""; }; + FE69EF01645F4AD4AED1D926 /* KWItNode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWItNode.m; path = Classes/Nodes/KWItNode.m; sourceTree = ""; }; + FE9C6D7EA7464D6F80D19084 /* Pods-Integration Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Integration Tests-dummy.m"; sourceTree = ""; }; + FEB7DD0BBC7D415ABE87C2D7 /* KWObjCUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KWObjCUtilities.m; path = Classes/Core/KWObjCUtilities.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 27FC9AE8735A48C18DD9D966 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BA17C2403EB3400BBF2BC294 /* Foundation.framework in Frameworks */, + 5704FDE6A3364220B7F2885C /* QuartzCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2DAE3402359C4128874F391C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D60ED95EAE94E64A56CC7C0 /* Foundation.framework in Frameworks */, + 88166094FB8A46179A59B86B /* QuartzCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 41D49CB534DE4D668A7F7CA3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FEBB108E3AD8493597CDA9A5 /* Foundation.framework in Frameworks */, + 30C87C0E63BB4E3D9D32C205 /* libPods-DejalActivityView.a in Frameworks */, + D3B49A66B9B04D898AD7479C /* libPods-EGOTableViewPullRefresh.a in Frameworks */, + 149683CF90D34EA6905BCFD0 /* libPods-SBJson.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 45E7103D72694C6B99362547 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 40C2B647D06645FC9C80345F /* CoreGraphics.framework in Frameworks */, + DEC33B17F8CE43DDA9F8EBF4 /* Foundation.framework in Frameworks */, + 1584CF10A0D64CEFAC36C3D9 /* SenTestingKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4E05520504384C769BDBFF0A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 045A5AFA894B4EBD99940FD5 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 528586A8577847E487170D4D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5DF1675FFD9543D892C20648 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 52962CBFBF134D2EAF67178F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C2678F244E9E4160B6C58906 /* Foundation.framework in Frameworks */, + EB698CB558014545AE454D20 /* libPods-CoderwallTests-DejalActivityView.a in Frameworks */, + A153DD877B1D47449F96E3E2 /* libPods-CoderwallTests-EGOTableViewPullRefresh.a in Frameworks */, + 560339782C87440C8DC8DB3F /* libPods-CoderwallTests-Kiwi.a in Frameworks */, + C97C3F015A5E43CCAFBCC696 /* libPods-CoderwallTests-SBJson.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9D5AFE1F987E464F9BBC613F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D579161E02AC4ED5B45FC479 /* Foundation.framework in Frameworks */, + 91710A80D2004BED91D0ADA1 /* libPods-Integration Tests-DejalActivityView.a in Frameworks */, + 4E0516C24B734D8C83F42160 /* libPods-Integration Tests-EGOTableViewPullRefresh.a in Frameworks */, + 51ACEF9618E84D02A64CDB7A /* libPods-Integration Tests-KIF.a in Frameworks */, + 17CF973F6A3D435A9B05A561 /* libPods-Integration Tests-SBJson.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B6C92CDE6E7D46F89D946C03 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 83D30E8EBE6E452798B771DB /* Foundation.framework in Frameworks */, + 3ACF5F80E4954C0EA2F91930 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E2AA70453CFE4CE49BE6EA2C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D79E8A8AEF1E417E9095FA4C /* Foundation.framework in Frameworks */, + 88699E17F7594E22B29875E6 /* SenTestingKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E70A547EB1B94153ABCB24AB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5E80BE964CD3418AB182F242 /* Foundation.framework in Frameworks */, + F9EA9DC6CEBB41689F95F8C2 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E902D833B999440FA39AC401 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3544429C07024231A9FA6BD5 /* Foundation.framework in Frameworks */, + 52DE2086961C488695606F55 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EE2B684AC68B4C38A0A3D123 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 37EC46907046435CA670FE4A /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F2C91B9293494C8E98BEEC44 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 59B0FFE0B47A484E851844A8 /* Foundation.framework in Frameworks */, + 45435A31609A40AC827300D6 /* QuartzCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0804DCFEB8614BF9AFC722A3 /* Support Files */ = { + isa = PBXGroup; + children = ( + 1625077DC7624F7A81C9D67F /* Pods-CoderwallTests-DejalActivityView.xcconfig */, + 72B6F09158C9469785815067 /* Pods-CoderwallTests-DejalActivityView-Private.xcconfig */, + 0459CA550AEE476080377798 /* Pods-CoderwallTests-DejalActivityView-dummy.m */, + 107887656E8446B79ABE77A2 /* Pods-CoderwallTests-DejalActivityView-prefix.pch */, + D2F6DD8BE96040F7BF06A8E2 /* Pods-DejalActivityView.xcconfig */, + 27B52C79712A494C9D11D20B /* Pods-DejalActivityView-Private.xcconfig */, + 134E464FF03343DE9AB90EB6 /* Pods-DejalActivityView-dummy.m */, + 3E3905E6CF8446F9BCD0021D /* Pods-DejalActivityView-prefix.pch */, + 87F9C958DF0546F7AF5E56F1 /* Pods-Integration Tests-DejalActivityView.xcconfig */, + 1DA65A08CCAD4903B1796549 /* Pods-Integration Tests-DejalActivityView-Private.xcconfig */, + B2C0999815344E7481C2852A /* Pods-Integration Tests-DejalActivityView-dummy.m */, + 5421AE83B9F1489D8123046B /* Pods-Integration Tests-DejalActivityView-prefix.pch */, + ); + name = "Support Files"; + sourceTree = SOURCE_ROOT; + }; + 08B7FA894AF94DF9B1D8E61F /* NonARC */ = { + isa = PBXGroup; + children = ( + 53DEC029DCC74A6A8C1CA00C /* KWIntercept.h */, + 5CC6ECFB60B44FD7B3B2CFEE /* KWIntercept.m */, + D1CF9C4063E146CCA73E5CAC /* KWMessagePattern.h */, + 6CAFCE8420104A5E9A80D547 /* KWMessagePattern.m */, + 5591BBFECFBA45AAA0E80970 /* KWStub.h */, + 60435698E6F4415597D03E8E /* KWStub.m */, + 9D15DFC25D8446A1A8353B0C /* KWSymbolicator.h */, + 74C1C574AE8D4EDB9E752C5C /* KWSymbolicator.m */, + ); + name = NonARC; + sourceTree = ""; + }; + 15D6A5928A4A4099B092B32D /* Support Files */ = { + isa = PBXGroup; + children = ( + 2697406EEC5B47D28666DC6A /* Pods-CoderwallTests-EGOTableViewPullRefresh.xcconfig */, + 2CBEF9DA7001499D8E153950 /* Pods-CoderwallTests-EGOTableViewPullRefresh-Private.xcconfig */, + D8C5FD6C8AC543C3AC797A14 /* Pods-CoderwallTests-EGOTableViewPullRefresh-dummy.m */, + 677A00A9D6D148D184141A09 /* Pods-CoderwallTests-EGOTableViewPullRefresh-prefix.pch */, + EEFF293F56F446F489569CC2 /* Pods-EGOTableViewPullRefresh.xcconfig */, + AEE2DEC6DF4B4EB9A120DAF3 /* Pods-EGOTableViewPullRefresh-Private.xcconfig */, + C45C9BC2009A474DBE86567B /* Pods-EGOTableViewPullRefresh-dummy.m */, + BB3729D359FD4B6480E552C9 /* Pods-EGOTableViewPullRefresh-prefix.pch */, + B27FA756B0E844438BE10DB3 /* Pods-Integration Tests-EGOTableViewPullRefresh.xcconfig */, + AD3159C4BE884EB7836207B5 /* Pods-Integration Tests-EGOTableViewPullRefresh-Private.xcconfig */, + 687C6F14E3224CF29F3B79C8 /* Pods-Integration Tests-EGOTableViewPullRefresh-dummy.m */, + BC2866E6C7A340898D373199 /* Pods-Integration Tests-EGOTableViewPullRefresh-prefix.pch */, + ); + name = "Support Files"; + sourceTree = SOURCE_ROOT; + }; + 18C606C745F64D0A9C621703 /* EGOTableViewPullRefresh */ = { + isa = PBXGroup; + children = ( + A5CC7198F7E64360BDAEC4A0 /* EGORefreshTableHeaderView.h */, + 0D1AA8A443F34E558967066B /* EGORefreshTableHeaderView.m */, + E17A6FC719284472ACD394B0 /* Resources */, + 15D6A5928A4A4099B092B32D /* Support Files */, + ); + path = EGOTableViewPullRefresh; + sourceTree = ""; + }; + 1BEBD18D94FD4E489645C754 /* Pods */ = { + isa = PBXGroup; + children = ( + 8C1879DA548D4B2786F53201 /* DejalActivityView */, + 18C606C745F64D0A9C621703 /* EGOTableViewPullRefresh */, + 9A17F69342684ABFA672247D /* KIF */, + 7671A04437754E0DBFCCAE33 /* Kiwi */, + 41EE39F04C074C88AD47FE05 /* SBJson */, + ); + name = Pods; + sourceTree = ""; + }; + 33B249AE01724ABF83FE42DF = { + isa = PBXGroup; + children = ( + 22D586E3967343259A98E0CE /* Podfile */, + 539871821F6E4E96A8EFEDD9 /* Frameworks */, + 1BEBD18D94FD4E489645C754 /* Pods */, + 8E40D9186E3D4DA9B3F4684C /* Products */, + 8E44196DFCCE431E868C0822 /* Targets Support Files */, + ); + sourceTree = ""; + }; + 340136DAD1DE4A2DA78AD394 /* iOS */ = { + isa = PBXGroup; + children = ( + 3F1E9F82515D4EBF849FB942 /* CoreGraphics.framework */, + D7B0500CD2C24BD6ACC2FF4F /* Foundation.framework */, + 0D5111DD932648CAB6D4BBD5 /* QuartzCore.framework */, + 2FD77985E97E4981801C94B6 /* SenTestingKit.framework */, + 4BF038A2C4FE4E8CBA7D5804 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 360B586EFCCD4A339B6E74DA /* Pods-Integration Tests */ = { + isa = PBXGroup; + children = ( + 5941A06B65D940CE96AC8B24 /* Pods-Integration Tests.xcconfig */, + BD6DBC5E5FD44DF0A57C2B31 /* Pods-Integration Tests-acknowledgements.markdown */, + 609CE693AACF40FC8D3C145E /* Pods-Integration Tests-acknowledgements.plist */, + FE9C6D7EA7464D6F80D19084 /* Pods-Integration Tests-dummy.m */, + 162E1E952686452AA205161C /* Pods-Integration Tests-environment.h */, + 7D54BF5ED67A4505BCE9C452 /* Pods-Integration Tests-resources.sh */, + ); + name = "Pods-Integration Tests"; + sourceTree = ""; + }; + 41EE39F04C074C88AD47FE05 /* SBJson */ = { + isa = PBXGroup; + children = ( + 2A17E4F52A494B84A8991560 /* SBJson4.h */, + AB36E9F4B497455C90B8B30D /* SBJson4Parser.h */, + C90AF1B3F3264B459ABF17A5 /* SBJson4Parser.m */, + 5506BAB36964473E8B9F4474 /* SBJson4StreamParser.h */, + C6B801827AC141AD97E712A4 /* SBJson4StreamParser.m */, + 5AC2C477651844438A4796F0 /* SBJson4StreamParserState.h */, + A71F1AF363664CEB945BA998 /* SBJson4StreamParserState.m */, + 85997DBB40B44570B95F66C1 /* SBJson4StreamTokeniser.h */, + DA36856D715549C38D88CE85 /* SBJson4StreamTokeniser.m */, + FB1D6CACC1BE49779795C853 /* SBJson4StreamWriter.h */, + F1DB00B6DEEE46318214A2A9 /* SBJson4StreamWriter.m */, + 59F7E9B58A924784A69347AE /* SBJson4StreamWriterState.h */, + 495C9264974F4F5F8AE6A9EC /* SBJson4StreamWriterState.m */, + CDACCC1765FC4270B72D1A51 /* SBJson4Writer.h */, + 5CB8188DD5A7438A804899F1 /* SBJson4Writer.m */, + 6E1BB9B2640147A189CC1BFC /* Support Files */, + ); + path = SBJson; + sourceTree = ""; + }; + 45431A726D374BDFA8074527 /* Pods-CoderwallTests */ = { + isa = PBXGroup; + children = ( + CAC1ED62F49040AA9CEC4012 /* Pods-CoderwallTests.xcconfig */, + 6A72FBBF5A3F45FC95F58CF0 /* Pods-CoderwallTests-acknowledgements.markdown */, + 72331ABF178E4C269359E20F /* Pods-CoderwallTests-acknowledgements.plist */, + 8A54D3C469A346E2837EBEA4 /* Pods-CoderwallTests-dummy.m */, + C49B039040B34C8592AF0929 /* Pods-CoderwallTests-environment.h */, + CFCEF6015B1E478C84704278 /* Pods-CoderwallTests-resources.sh */, + ); + name = "Pods-CoderwallTests"; + sourceTree = ""; + }; + 4B13CC71CBDE437F962BBF8A /* Support Files */ = { + isa = PBXGroup; + children = ( + 13CE47DBA8D74BAD806AA50E /* Pods-Integration Tests-KIF.xcconfig */, + 43AA731ABBBD4FDFA6DFDCDE /* Pods-Integration Tests-KIF-Private.xcconfig */, + 7A2D2B6B74E441ABAA129986 /* Pods-Integration Tests-KIF-dummy.m */, + DED629F5B61648CAB919E517 /* Pods-Integration Tests-KIF-prefix.pch */, + ); + name = "Support Files"; + sourceTree = SOURCE_ROOT; + }; + 539871821F6E4E96A8EFEDD9 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 340136DAD1DE4A2DA78AD394 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6E1BB9B2640147A189CC1BFC /* Support Files */ = { + isa = PBXGroup; + children = ( + 1E7EEFE0B1044C3AB4AE8F27 /* Pods-CoderwallTests-SBJson.xcconfig */, + FA787E931EFF4172BF87554E /* Pods-CoderwallTests-SBJson-Private.xcconfig */, + 7EA917B0C5CF4AB18FD5533F /* Pods-CoderwallTests-SBJson-dummy.m */, + 7500732C2EB647C282D9B1D8 /* Pods-CoderwallTests-SBJson-prefix.pch */, + 846F6B86027B4998ACB323F1 /* Pods-Integration Tests-SBJson.xcconfig */, + FD43BABB2FB94F2A9D93FBF4 /* Pods-Integration Tests-SBJson-Private.xcconfig */, + B6BD741FE643499A97170BB0 /* Pods-Integration Tests-SBJson-dummy.m */, + E2B65D782C1C4E748277287F /* Pods-Integration Tests-SBJson-prefix.pch */, + 40EF75756D9B42F8B547C039 /* Pods-SBJson.xcconfig */, + E9063162C2804CCE9A71C5CD /* Pods-SBJson-Private.xcconfig */, + 22D0903D81F046048CC1BFF9 /* Pods-SBJson-dummy.m */, + B0E50458FC9941C68F40D8F0 /* Pods-SBJson-prefix.pch */, + ); + name = "Support Files"; + sourceTree = SOURCE_ROOT; + }; + 7671A04437754E0DBFCCAE33 /* Kiwi */ = { + isa = PBXGroup; + children = ( + B68C0C0892F542D59D070EA5 /* ARC */, + 08B7FA894AF94DF9B1D8E61F /* NonARC */, + AE4D2D5B840C43D09EE07F67 /* SenTestingKit */, + CA8E7AEB9ED9466CA201E4F6 /* Support Files */, + ); + path = Kiwi; + sourceTree = ""; + }; + 8C1879DA548D4B2786F53201 /* DejalActivityView */ = { + isa = PBXGroup; + children = ( + 504908A5CA9A4D8D81B4D8F8 /* DejalActivityView.h */, + 91A9EDA86F464E15B81DCA1F /* DejalActivityView.m */, + 0804DCFEB8614BF9AFC722A3 /* Support Files */, + ); + path = DejalActivityView; + sourceTree = ""; + }; + 8E40D9186E3D4DA9B3F4684C /* Products */ = { + isa = PBXGroup; + children = ( + D9CFDFCABB5140DC89FB246B /* libPods.a */, + C862D092CFF04D42A647CC84 /* libPods-CoderwallTests.a */, + 8EC64E16E9124D4588C8D107 /* libPods-CoderwallTests-DejalActivityView.a */, + 1F0DC82FF1134CC3B5DC9634 /* libPods-CoderwallTests-EGOTableViewPullRefresh.a */, + C532444277A14914AD0CA4D2 /* libPods-CoderwallTests-Kiwi.a */, + 411CD0F5E40F4C4DB43C4569 /* libPods-CoderwallTests-SBJson.a */, + 7C84E6BB131E474E8D040828 /* libPods-DejalActivityView.a */, + 258F55888F4E4599BF7A2E1E /* libPods-EGOTableViewPullRefresh.a */, + 00CFCAC93E824C9C91AAB89A /* libPods-Integration Tests.a */, + 444327FDE5524220A58DB6BE /* libPods-Integration Tests-DejalActivityView.a */, + 9A0D2B9284744D01B1EC6B49 /* libPods-Integration Tests-EGOTableViewPullRefresh.a */, + CD663848E25D4C84BA298E51 /* libPods-Integration Tests-KIF.a */, + 756B96ACAE2B427C80E03C2D /* libPods-Integration Tests-SBJson.a */, + 989D7B752B954662B3390A65 /* libPods-SBJson.a */, + ); + name = Products; + sourceTree = ""; + }; + 8E44196DFCCE431E868C0822 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + E9C9F7AF9C90463F88650CAE /* Pods */, + 45431A726D374BDFA8074527 /* Pods-CoderwallTests */, + 360B586EFCCD4A339B6E74DA /* Pods-Integration Tests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 9A17F69342684ABFA672247D /* KIF */ = { + isa = PBXGroup; + children = ( + 609AD201258C403EBCA94716 /* CGGeometry-KIFAdditions.h */, + 1FD97785EAF241BF9B379F69 /* CGGeometry-KIFAdditions.m */, + 61F20BB1A3DC483AA58170D8 /* KIF.h */, + D4AF486F88DD43EA8D119C7D /* KIFSystemTestActor.h */, + 62F791A0D6814EC78E516737 /* KIFSystemTestActor.m */, + BD112DB9B8B5461DA647D969 /* KIFTestActor.h */, + 8DFD097F19B54A53B18E54C3 /* KIFTestActor.m */, + D49763BBC2BF4141A5B56243 /* KIFTestCase.h */, + A68A8E1BEA2C4D62A101F6B1 /* KIFTestCase.m */, + 70A8416A10924DBDB16FCFAF /* KIFTestStepValidation.h */, + FB656ECC09854E6E92DBD1C0 /* KIFTestStepValidation.m */, + 6844DC0B9E3548A4B75191CD /* KIFTypist.h */, + B95B351C835D4F16AD899A7C /* KIFTypist.m */, + 3AE5E4F1632346E1AA0895D7 /* KIFUITestActor.h */, + 7FBA6D19AC514DB48181C131 /* KIFUITestActor.m */, + ACBD59B8972A4DF0ACDCD35B /* LoadableCategory.h */, + 0D918EE6BBC74C22ADEA2549 /* NSBundle-KIFAdditions.h */, + E8D3AB7E349340D1BCA46732 /* NSBundle-KIFAdditions.m */, + A06259CFE3BD4B73A6F45836 /* NSError-KIFAdditions.h */, + 66F63E3046CE46299EB17654 /* NSError-KIFAdditions.m */, + 9074C24D4ACE44DE8B1BC05A /* NSFileManager-KIFAdditions.h */, + C4CB85868F8C4798BC085864 /* NSFileManager-KIFAdditions.m */, + B2D3565B36C141E08416F636 /* SenTestCase-KIFAdditions.h */, + B653BE7015B043EB801477FD /* SenTestCase-KIFAdditions.m */, + C36C37995AAD4B629E834164 /* UIAccessibilityElement-KIFAdditions.h */, + FCFCEE90186F45E581075B49 /* UIAccessibilityElement-KIFAdditions.m */, + 77C245018E7E424796430E7B /* UIApplication-KIFAdditions.h */, + 519F69D30E544503B3AF34C4 /* UIApplication-KIFAdditions.m */, + 4CFB80DD6E854D378C5B4CA3 /* UIScrollView-KIFAdditions.h */, + A962282B54CE482888B045A6 /* UIScrollView-KIFAdditions.m */, + 715C760EEFD047F48AE92CE0 /* UITouch-KIFAdditions.h */, + 2E771285B4D445F6A05DC4A7 /* UITouch-KIFAdditions.m */, + 3826D80D120E4CF5AD5BAD39 /* UIView-KIFAdditions.h */, + A73591B17D3E47D3B6E9AC74 /* UIView-KIFAdditions.m */, + 453516D391FA4CA397D3F1F8 /* UIWindow-KIFAdditions.h */, + 5E5EEAACE534481ABF37A8AF /* UIWindow-KIFAdditions.m */, + 4B13CC71CBDE437F962BBF8A /* Support Files */, + ); + path = KIF; + sourceTree = ""; + }; + AE4D2D5B840C43D09EE07F67 /* SenTestingKit */ = { + isa = PBXGroup; + children = ( + 1BA3ABACE8C3413FB069AA20 /* SenTestSuite+KiwiAdditions.h */, + 4C781914DB6840DF92A2FE57 /* SenTestSuite+KiwiAdditions.m */, + ); + name = SenTestingKit; + sourceTree = ""; + }; + B68C0C0892F542D59D070EA5 /* ARC */ = { + isa = PBXGroup; + children = ( + DA5562A2263947C0BB6F9AF2 /* KWAfterAllNode.h */, + BBCAF31970D743FDADEBAC84 /* KWAfterAllNode.m */, + 7AA5EBB9CE334EEDA4043726 /* KWAfterEachNode.h */, + 61071C2B816943BFA1600293 /* KWAfterEachNode.m */, + 8BDC5BC05EB54C0A8F33CE1C /* KWAny.h */, + 9BE600863A184BB88F9E695D /* KWAny.m */, + 440FDBAA28FA40F68272869C /* KWAsyncVerifier.h */, + 166D666A0D4344F99CB6DDA7 /* KWAsyncVerifier.m */, + 418DA2E1F71E428E801FAABE /* KWBeBetweenMatcher.h */, + CA24AB35EC5F466683ABB99A /* KWBeBetweenMatcher.m */, + 57FABE8B1AF4411D9BC7DC94 /* KWBeEmptyMatcher.h */, + 64B5CCBAD61F49C790C4EA76 /* KWBeEmptyMatcher.m */, + 8317B5213D674926AB145FEB /* KWBeIdenticalToMatcher.h */, + 574EA2168C4B40199E76C4A4 /* KWBeIdenticalToMatcher.m */, + 59EE11DB9B974251842EE049 /* KWBeKindOfClassMatcher.h */, + 1B57E82117244E14A270EC8D /* KWBeKindOfClassMatcher.m */, + 454C62DCE2424DDA89723CA8 /* KWBeMemberOfClassMatcher.h */, + D3550548D85C4B5291A750C8 /* KWBeMemberOfClassMatcher.m */, + 0B77E11396294589AB742586 /* KWBeSubclassOfClassMatcher.h */, + 420AC90D743248FA9078C298 /* KWBeSubclassOfClassMatcher.m */, + C6D8F16168F543E7A31B80C6 /* KWBeTrueMatcher.h */, + D8C5CC64AA5747158D4A738B /* KWBeTrueMatcher.m */, + 5D50388EC8654BBEABFCABE6 /* KWBeWithinMatcher.h */, + 72425E82A42D447A986D1C9C /* KWBeWithinMatcher.m */, + 7C9D4C048C134028B0166CCF /* KWBeZeroMatcher.h */, + D80CA8FB209B4E4B9F8C60E8 /* KWBeZeroMatcher.m */, + 0C58F85F06D844E6A5ED7188 /* KWBeforeAllNode.h */, + 36110EF7406340C588FE55E9 /* KWBeforeAllNode.m */, + FC613F54CADB48BCA16AD943 /* KWBeforeEachNode.h */, + B70E8DA793774280B6028A30 /* KWBeforeEachNode.m */, + 16127D529E9E45D1B86C3579 /* KWBlock.h */, + 2D4179E9E04B4FE4AF93E67E /* KWBlock.m */, + 58F6EEBF929249809BD7BC3F /* KWBlockNode.h */, + E853D267F7854F54AACC3526 /* KWBlockNode.m */, + 972CAFA9E7C04F7C942DE53D /* KWBlockRaiseMatcher.h */, + E277A5A79F144372A87315AB /* KWBlockRaiseMatcher.m */, + 3C22D575BE134AEC8E8E3F72 /* KWCallSite.h */, + 98046D9F4D104B1691C32921 /* KWCallSite.m */, + 2849577CBAA14720B3D81315 /* KWCaptureSpy.h */, + 0443954508434C1398B3705F /* KWCaptureSpy.m */, + 1941000A40394269ADC5754B /* KWChangeMatcher.h */, + E0775BECD9C444A8BBEFB0B1 /* KWChangeMatcher.m */, + 69F3532B5C6643E794C6251D /* KWConformToProtocolMatcher.h */, + E1A8A09FDC144767AF3D5281 /* KWConformToProtocolMatcher.m */, + 1BA2D932508B4543A82BD312 /* KWContainMatcher.h */, + 78FC2EB07583411C9A646F43 /* KWContainMatcher.m */, + 7F424E6637484386810C0EF5 /* KWContainStringMatcher.h */, + C9B6B3F6810F42119030F2EF /* KWContainStringMatcher.m */, + A8217E312B934572AB9DFA06 /* KWContextNode.h */, + 7084CB0A467E4601A9477027 /* KWContextNode.m */, + 408281467E124C6985F83CFD /* KWCountType.h */, + 9E931A754C1B4A60B8C21296 /* KWDeviceInfo.h */, + 79494A524FF044CF951B2CF7 /* KWDeviceInfo.m */, + DA808CD838C741F29F4FF2E5 /* KWEqualMatcher.h */, + D800DCE31A0B4541B146E9FC /* KWEqualMatcher.m */, + B3DC7C85358A491CA3641B54 /* KWExample.h */, + 5D48A8E7D2E6417D9592C3BB /* KWExample.m */, + 624D8C21F690498DABB15200 /* KWExampleDelegate.h */, + 47E1F8B2B1BF4750940F1A5E /* KWExampleNode.h */, + 9E5140134B4744638B05D159 /* KWExampleNodeVisitor.h */, + 75C8D9036B48423FA801C5E4 /* KWExampleSuite.h */, + 8BC59A6B1EFB451FAECB062C /* KWExampleSuite.m */, + DBBA1379970D4A42B2298854 /* KWExampleSuiteBuilder.h */, + 0914AD7335CC495EBF6DDF1A /* KWExampleSuiteBuilder.m */, + D8F4245C04134B15A6B7003B /* KWExistVerifier.h */, + 48B6B45EF59649CDA0F621F2 /* KWExistVerifier.m */, + 9D87B12BEED24A4D86ED025C /* KWExpectationType.h */, + F2D320B0D6ED4530AC286E1F /* KWFailure.h */, + 29DC101E8895492C9AA78940 /* KWFailure.m */, + B43F22629CB64B6886D1BA92 /* KWFormatter.h */, + 9D548B7F4CD94172BBD63789 /* KWFormatter.m */, + C2F50F1FA40B4B4BACB70491 /* KWFutureObject.h */, + D5D71F5975804643B8E147B8 /* KWFutureObject.m */, + 7092C238A5284F5FAB8022F7 /* KWGenericMatchEvaluator.h */, + 2036288FE4BB4728839698ED /* KWGenericMatchEvaluator.m */, + DB66E547CF384497B24F06CB /* KWGenericMatcher.h */, + 4784BEDF088C4533A0A85AF4 /* KWGenericMatcher.m */, + 9657A5FD62D74CCF9586C10F /* KWGenericMatchingAdditions.h */, + EE84DEB82AA94E6A9EA4E98D /* KWGenericMatchingAdditions.m */, + 166CA18B3C844C1F9BE1BCE2 /* KWHaveMatcher.h */, + A9B2F5D5E7B94166AF1270A2 /* KWHaveMatcher.m */, + 599C7643ACE948569090F92B /* KWHaveValueMatcher.h */, + EA14F3E9086E46F8A1A67F54 /* KWHaveValueMatcher.m */, + 2C7627FA14854C468B9B8900 /* KWInequalityMatcher.h */, + 7193FED984BD4B7DB18D08DF /* KWInequalityMatcher.m */, + C46AA8D28D144A8BBCB768CA /* KWInvocationCapturer.h */, + C4C15D87EAFA44798901C342 /* KWInvocationCapturer.m */, + EDE71FE2B75B489888456C63 /* KWItNode.h */, + FE69EF01645F4AD4AED1D926 /* KWItNode.m */, + A9B32B116A744B3EA7A468A0 /* KWMatchVerifier.h */, + AD4DFC209AE64D4AA50EB6CE /* KWMatchVerifier.m */, + DD5D257FD6F845048A1A2842 /* KWMatcher.h */, + 569180A44CB346969E95A140 /* KWMatcher.m */, + 5C46A3E3BB8D4CD787BDC4FE /* KWMatcherFactory.h */, + 1C1E02B06BB448248F57E207 /* KWMatcherFactory.m */, + 8897D52921C34EE5BEC5B370 /* KWMatchers.h */, + D624A1CAB58640ECAEDE6EAA /* KWMatchers.m */, + 4F19AB6BE42E423183FEC650 /* KWMatching.h */, + 2AA61F31EFE144C492D5C041 /* KWMessageSpying.h */, + C0E9D52C763245789B5BBE49 /* KWMessageTracker.h */, + DC3E4EC4A47E4548A1608507 /* KWMessageTracker.m */, + B0F957B81DC346DEBC53D0BB /* KWMock.h */, + D6A1A4941D14401DA957D2B3 /* KWMock.m */, + 8AE0D762CE75471F8FB78582 /* KWNilMatcher.h */, + 0121665D1487469BA64C8940 /* KWNilMatcher.m */, + 5B5289CBBBC84D4791A65517 /* KWNull.h */, + 176CDB6CCEF74E13A176B7A5 /* KWNull.m */, + D6D025F093A442AC862B7CEA /* KWObjCUtilities.h */, + FEB7DD0BBC7D415ABE87C2D7 /* KWObjCUtilities.m */, + D7675467F1A143AFB486FA96 /* KWPendingNode.h */, + C2C6E8CFBA4543B89CDD777C /* KWPendingNode.m */, + 24BC5FAEBD4E40B88BD33A59 /* KWProbe.h */, + 2220AC2A36C449CDA1071628 /* KWProbePoller.h */, + 6C530B8019C047C690B3F946 /* KWProbePoller.m */, + 4D9B9D0D43724AB087A027D3 /* KWRaiseMatcher.h */, + 6697741CE0C3444FAB120FCA /* KWRaiseMatcher.m */, + EB7A30283D594B22A2B8818B /* KWReceiveMatcher.h */, + 6B43FA92B41948C3A0F45F5C /* KWReceiveMatcher.m */, + F922FD5CB2204862902D5FC9 /* KWRegisterMatchersNode.h */, + C203781A6B6E40139A2CA84C /* KWRegisterMatchersNode.m */, + A957C9ED21424A1B86A6AB67 /* KWRegularExpressionPatternMatcher.h */, + AE72AECF4B5E4A4FAB792DA7 /* KWRegularExpressionPatternMatcher.m */, + 1E221FFC95CC459792BCB70A /* KWReporting.h */, + 4A7AAB838EE144B0B96917CA /* KWRespondToSelectorMatcher.h */, + 533AAA49A6614A389B783C79 /* KWRespondToSelectorMatcher.m */, + 894AF56B4AF7461D9D547412 /* KWSpec.h */, + 26EE7C9D8A3E4A8381DE4A87 /* KWSpec.m */, + D8E9151209B64BC7BE4A186E /* KWStringContainsMatcher.h */, + D5BFE5EEE1F443C891443223 /* KWStringContainsMatcher.m */, + CC290B79DEF045F09B3478D2 /* KWStringPrefixMatcher.h */, + CC4F659D75C149CE95C0496F /* KWStringPrefixMatcher.m */, + AB1F523922194F4E8DF644AC /* KWStringUtilities.h */, + 0B86A08AFCC84629B8E53869 /* KWStringUtilities.m */, + AE9CDD2E4C8E4E5980792C15 /* KWUserDefinedMatcher.h */, + 7106C0BAA2044FC38556F844 /* KWUserDefinedMatcher.m */, + 8B7CD89DA6064510A37CF14B /* KWValue.h */, + 29A7E85A9F114A068855D05E /* KWValue.m */, + 33940F808ACD4E9B9813C4E7 /* KWVerifying.h */, + C2BACF6EA1B54B8FB3851D59 /* KWWorkarounds.h */, + 1CFE19E9F589486D940FF252 /* KWWorkarounds.m */, + 3D3479D7CBB3424099A70873 /* Kiwi.h */, + 35B8DB81F9AF47CA873708BE /* KiwiBlockMacros.h */, + 40D732AE888C4498A260A263 /* KiwiConfiguration.h */, + 83B95B975BAE4EAEADB8D0E7 /* KiwiMacros.h */, + ED4FF5B5B85A4D958D337C72 /* NSInvocation+KiwiAdditions.h */, + 9DCE07D1B9C44C078AEEAABE /* NSInvocation+KiwiAdditions.m */, + C264E1F6DA8B4BF7934A3288 /* NSInvocation+OCMAdditions.h */, + A1F3C21F71BF48C4BA9BF4D3 /* NSInvocation+OCMAdditions.m */, + B42308F5EB2646FEB64903E0 /* NSMethodSignature+KiwiAdditions.h */, + 7B6E508866B6405F9C8F60A8 /* NSMethodSignature+KiwiAdditions.m */, + 42CCA4728D25449395E4D0DB /* NSNumber+KiwiAdditions.h */, + 55601D4B437849DAB124E1CE /* NSNumber+KiwiAdditions.m */, + 3A666390F3E540F28DFC0FF3 /* NSObject+KiwiMockAdditions.h */, + 378769FD92DA4AB6B5EB8647 /* NSObject+KiwiMockAdditions.m */, + 3F0071D394B74AE88ADA02DD /* NSObject+KiwiSpyAdditions.h */, + 435CF21A79BE48FB9A21BB80 /* NSObject+KiwiSpyAdditions.m */, + B40BD4C4D1C443DDB9135515 /* NSObject+KiwiStubAdditions.h */, + 8D617DA0ABF64B0BB3F22B5A /* NSObject+KiwiStubAdditions.m */, + 868DE3D08ED74CC29B60F23E /* NSObject+KiwiVerifierAdditions.h */, + B0329F4B5B2C44B8B8F15B76 /* NSObject+KiwiVerifierAdditions.m */, + A224A8765AB24725A5908A97 /* NSProxy+KiwiVerifierAdditions.h */, + E12231B5A09A47D5931C9808 /* NSProxy+KiwiVerifierAdditions.m */, + 7C0D6BFD5B1D455A8FB55ED5 /* NSValue+KiwiAdditions.h */, + 4D5F0DAA3C3642B1BE0219FC /* NSValue+KiwiAdditions.m */, + ); + name = ARC; + sourceTree = ""; + }; + CA8E7AEB9ED9466CA201E4F6 /* Support Files */ = { + isa = PBXGroup; + children = ( + BFA84E2CA2834DC09FB2BC1B /* Pods-CoderwallTests-Kiwi.xcconfig */, + 778CC112D59E4DA5BF061F0E /* Pods-CoderwallTests-Kiwi-Private.xcconfig */, + F26DFAC51416441888E0E77B /* Pods-CoderwallTests-Kiwi-dummy.m */, + DD78E167A9F543518D979C7C /* Pods-CoderwallTests-Kiwi-prefix.pch */, + ); + name = "Support Files"; + sourceTree = SOURCE_ROOT; + }; + E17A6FC719284472ACD394B0 /* Resources */ = { + isa = PBXGroup; + children = ( + 5D5CC6AFBFF94B34BDCD6254 /* blackArrow.png */, + 5862979AFA3A464C8AF9E78F /* blackArrow@2x.png */, + E7970CB71D0F4847AC858D79 /* blueArrow.png */, + 16E69B4C731042DE9CF00CB0 /* blueArrow@2x.png */, + 3F5D8544C48E4C9890F3CCE1 /* grayArrow.png */, + F7DA9FEF5E47452FA2E0BAB6 /* grayArrow@2x.png */, + 6EAC456D65734A9A95ABFF39 /* whiteArrow.png */, + 28CDDEAEF8254FBA8D2E40DF /* whiteArrow@2x.png */, + ); + name = Resources; + sourceTree = ""; + }; + E9C9F7AF9C90463F88650CAE /* Pods */ = { + isa = PBXGroup; + children = ( + F74F87FC3436445FB9BA2543 /* Pods.xcconfig */, + 08D99DE9966F4982B9D1FA3D /* Pods-acknowledgements.markdown */, + BF605553F5124CD69BAA263A /* Pods-acknowledgements.plist */, + FC681FA41F92469FBC85F6F4 /* Pods-dummy.m */, + BF96081C85EE4128B9B66A27 /* Pods-environment.h */, + 3951492BD8624FEF8648A032 /* Pods-resources.sh */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 0505CE70E6674EF490211627 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 70223D74DDAE4B2DB83558F0 /* SBJson4.h in Headers */, + 0806387E6D694ACFAA4D682C /* SBJson4Parser.h in Headers */, + 5FA6171089B441D495C8F132 /* SBJson4StreamParser.h in Headers */, + 0FC5F4339FF944DF97EF9FF5 /* SBJson4StreamParserState.h in Headers */, + 7425CC76B00C42DD831F2067 /* SBJson4StreamTokeniser.h in Headers */, + 79F162E4D91948CB9E39C297 /* SBJson4StreamWriter.h in Headers */, + EF61B65FFD804E508A92F4BF /* SBJson4StreamWriterState.h in Headers */, + B9D6ACACAF2A41359C3EBF6C /* SBJson4Writer.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 08FD06F9452440C3BAA3130D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AE3500E27E1B4B04ADBDE372 /* EGORefreshTableHeaderView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 184CDFB717D64E0FBC276B35 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 340408E0600D46BEBBFA5AC6 /* SBJson4.h in Headers */, + 2F93DD40678142189E3A4653 /* SBJson4Parser.h in Headers */, + D8EC05B6A4054BFD807005F4 /* SBJson4StreamParser.h in Headers */, + AB035F6FA7BA4AB6A52945BD /* SBJson4StreamParserState.h in Headers */, + 9A11902F742A458C8A8A95BB /* SBJson4StreamTokeniser.h in Headers */, + ABEF2C2C069541CE9AC9ED13 /* SBJson4StreamWriter.h in Headers */, + ED10964C82264E008C881C9F /* SBJson4StreamWriterState.h in Headers */, + FD17B0F21C524D1586B28C8B /* SBJson4Writer.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 18A07E5F2F56472EA9359F40 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 53EC3F0A0210476DA74DC016 /* DejalActivityView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1D586B729E2C4B408ABCB2FF /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 93892E272BF44A209A64E547 /* KWAfterAllNode.h in Headers */, + 45D9D6F8C7BD4F459BC2DF01 /* KWAfterEachNode.h in Headers */, + E5A87897FE044035900FF91B /* KWAny.h in Headers */, + FB4DCABBFDCA4AA2872BF81F /* KWAsyncVerifier.h in Headers */, + BC0D01C3399F4C368CC18614 /* KWBeBetweenMatcher.h in Headers */, + 593F750C6C5F4941BECF0DE2 /* KWBeEmptyMatcher.h in Headers */, + F9442F84C8E64BA3BF0FA334 /* KWBeIdenticalToMatcher.h in Headers */, + 4E79EC5DDC0D470B84957766 /* KWBeKindOfClassMatcher.h in Headers */, + 895A8841E91A4B4889522B08 /* KWBeMemberOfClassMatcher.h in Headers */, + 824AC9E2A35343BA82D42F51 /* KWBeSubclassOfClassMatcher.h in Headers */, + 4EC8CF60AE134C5287D083FA /* KWBeTrueMatcher.h in Headers */, + 375A3EECA8EB4711B81B053A /* KWBeWithinMatcher.h in Headers */, + 25655448D5E84CE69645DBB4 /* KWBeZeroMatcher.h in Headers */, + 3973BCD05D31406D986681C8 /* KWBeforeAllNode.h in Headers */, + 03CD51EE0D6243C8BE5C56D5 /* KWBeforeEachNode.h in Headers */, + A03E1CC9634E46B9B5ADD7C6 /* KWBlock.h in Headers */, + 2C683C7BD3E14048B6EEFFC5 /* KWBlockNode.h in Headers */, + 3139E502ECA240109EDB58FB /* KWBlockRaiseMatcher.h in Headers */, + 891D93BAA771454BBEA1B766 /* KWCallSite.h in Headers */, + ECA0AE252C51408E8192D5C9 /* KWCaptureSpy.h in Headers */, + 52CD608D699F489CA5219450 /* KWChangeMatcher.h in Headers */, + 3FF1D4EAED8742668D2FCC47 /* KWConformToProtocolMatcher.h in Headers */, + 5C3155DD68FE417C9C835826 /* KWContainMatcher.h in Headers */, + 14FBF32CFF7E4D14A5A9E5B1 /* KWContainStringMatcher.h in Headers */, + C1CE506732A44CA4BC54A043 /* KWContextNode.h in Headers */, + 7EE0CD14C88445DD8475A943 /* KWCountType.h in Headers */, + E32694C3E60B454AB53559AE /* KWDeviceInfo.h in Headers */, + FFBA9407C8A849C6B8A8C067 /* KWEqualMatcher.h in Headers */, + DCDB4FA2531F48BBA994C576 /* KWExample.h in Headers */, + 59B46642C97B466CB599051E /* KWExampleDelegate.h in Headers */, + A5BBB0C03E1847E2879FF90E /* KWExampleNode.h in Headers */, + B9D1C92827414E82B643973C /* KWExampleNodeVisitor.h in Headers */, + AF7CD6FCC94843F1BF888033 /* KWExampleSuite.h in Headers */, + 229C7B57B80D431E834B8C9A /* KWExampleSuiteBuilder.h in Headers */, + 165A5F06BC764550AD07EE2B /* KWExistVerifier.h in Headers */, + E390FFA19B594354AFCF833B /* KWExpectationType.h in Headers */, + 63E2E31A3D4F4CC383BF30AB /* KWFailure.h in Headers */, + 86274BF8FD9D4B2ABDB7FFBB /* KWFormatter.h in Headers */, + DACD176947F2492BB6EF190D /* KWFutureObject.h in Headers */, + 67A3854779244E24B6F8A94F /* KWGenericMatchEvaluator.h in Headers */, + 6148EEAF0F9542468205BD0C /* KWGenericMatcher.h in Headers */, + B27E80DAC74B49F6B09A4733 /* KWGenericMatchingAdditions.h in Headers */, + A5C3209D13894EBE8FA35232 /* KWHaveMatcher.h in Headers */, + 32FE839FC67048E79179CF0A /* KWHaveValueMatcher.h in Headers */, + 190D572AD3074BE0A2AAE127 /* KWInequalityMatcher.h in Headers */, + 53CD6D2EFE7F4625ABD6425C /* KWIntercept.h in Headers */, + 656FA032F0C348F784ECDA8B /* KWInvocationCapturer.h in Headers */, + 7DD5025F26A84B7EB9B28904 /* KWItNode.h in Headers */, + 181B3DD164D844BD91E816A9 /* KWMatchVerifier.h in Headers */, + E574F56B58904F23ABA5D7E1 /* KWMatcher.h in Headers */, + F9AE14D1D43442738F7B387E /* KWMatcherFactory.h in Headers */, + A2739AB467DA4E2F94767BD3 /* KWMatchers.h in Headers */, + 5BABEEDDD8634B6D8330E997 /* KWMatching.h in Headers */, + 3873B1AB06114E26813F03CA /* KWMessagePattern.h in Headers */, + 5488ADB664E6452FAF183392 /* KWMessageSpying.h in Headers */, + 6B8DFBC801AB46C8B866B78D /* KWMessageTracker.h in Headers */, + 89A2A118C0D34EF8A0629CA7 /* KWMock.h in Headers */, + F22E631C20394E90BBA52A11 /* KWNilMatcher.h in Headers */, + DE6E5E87CB584380B001074B /* KWNull.h in Headers */, + 789D944B399E4CC0A6A05D53 /* KWObjCUtilities.h in Headers */, + C5EABB223FC24FF9905CCF2B /* KWPendingNode.h in Headers */, + 5EE589E4ED884198B7CEC3D1 /* KWProbe.h in Headers */, + 6855D2BDDAF6474EBC9B60FB /* KWProbePoller.h in Headers */, + A40F3D4A14D94AEFA697D62C /* KWRaiseMatcher.h in Headers */, + 522E5BBA48C14A6798CB3232 /* KWReceiveMatcher.h in Headers */, + EBEB5BBB080C48FFA3819D46 /* KWRegisterMatchersNode.h in Headers */, + 216BC19939C643D6A919E121 /* KWRegularExpressionPatternMatcher.h in Headers */, + 8A480F18A1BC4492A4F4813A /* KWReporting.h in Headers */, + AE569133512C463ABC1C9018 /* KWRespondToSelectorMatcher.h in Headers */, + B5F11AF5CACB4E95B3452B1B /* KWSpec.h in Headers */, + AA6D01BFC4C14419B1A2BE66 /* KWStringContainsMatcher.h in Headers */, + 13D37490CDD84AA18364D448 /* KWStringPrefixMatcher.h in Headers */, + 70780574E35A4159AAA5D5A2 /* KWStringUtilities.h in Headers */, + BBAD292205E147478EA8ADCE /* KWStub.h in Headers */, + E3826C48066A49B68B01E180 /* KWSymbolicator.h in Headers */, + BF8A1BDC3B5E4229914B83CA /* KWUserDefinedMatcher.h in Headers */, + E0E520E4735A46FF8069A315 /* KWValue.h in Headers */, + 8559134F3BD345CB8AA42C52 /* KWVerifying.h in Headers */, + 95C6297A2D0D4BA7A2544CA0 /* KWWorkarounds.h in Headers */, + A69F739A4E6D476BB5C99AB8 /* Kiwi.h in Headers */, + D055A67552224549931525B4 /* KiwiBlockMacros.h in Headers */, + 2BAE7602E83E425DA677C90D /* KiwiConfiguration.h in Headers */, + B12945F5CE754B7291AD6206 /* KiwiMacros.h in Headers */, + EEA7AC5D5AF74BEBAA7C59C7 /* NSInvocation+KiwiAdditions.h in Headers */, + 7D14BB670A244CACB4D5F8E6 /* NSInvocation+OCMAdditions.h in Headers */, + 779DFC5B0EDF4B1FAF753F24 /* NSMethodSignature+KiwiAdditions.h in Headers */, + C5921597F3954583934A1E31 /* NSNumber+KiwiAdditions.h in Headers */, + 70E66573E456477FABB862A9 /* NSObject+KiwiMockAdditions.h in Headers */, + 5A4EFBCA4ACF4B3F957C494A /* NSObject+KiwiSpyAdditions.h in Headers */, + D54B17331DE64395B96F7678 /* NSObject+KiwiStubAdditions.h in Headers */, + 5F63BF0F35AC449E942A52F3 /* NSObject+KiwiVerifierAdditions.h in Headers */, + 0873B43F12DC4199A1BAB89F /* NSProxy+KiwiVerifierAdditions.h in Headers */, + DED016EB94594392B76D5850 /* NSValue+KiwiAdditions.h in Headers */, + 27D072DA5B0C471C86A0B405 /* SenTestSuite+KiwiAdditions.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2B0859CBA0D94A4CBA83F92B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 27E9AA2B89824FD4AB0D032B /* SBJson4.h in Headers */, + 6614DE432224459FA0ABD39F /* SBJson4Parser.h in Headers */, + 4B46916E943D451BB5F61458 /* SBJson4StreamParser.h in Headers */, + ED021E1406064603A159D738 /* SBJson4StreamParserState.h in Headers */, + 10C3CC27331741B5AB6B915B /* SBJson4StreamTokeniser.h in Headers */, + 86563BCD64464EBC9D84D83F /* SBJson4StreamWriter.h in Headers */, + 467B6C8582544A3BAAD81666 /* SBJson4StreamWriterState.h in Headers */, + 8CDBC15E21C145D19D986EF3 /* SBJson4Writer.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 39503F2B70B146F2AF5D9C85 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B9C149E6AA994C56AFBAD85C /* EGORefreshTableHeaderView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 71C3736A5B35481C9DF8E4B7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B55F167E57054A63896DDBDF /* DejalActivityView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A519A265930F4C65B39A14AB /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E8DE8938A09941209ACA39C6 /* DejalActivityView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AEFAD60EC9684E3D9FF32297 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 0FAD15AFB0CD4DD99761B7E9 /* EGORefreshTableHeaderView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D519BD67326249DCAB85E755 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + FB3B2C36BCBA40119EB0EA90 /* CGGeometry-KIFAdditions.h in Headers */, + 743AD1B86D8F4F629C1D0226 /* KIF.h in Headers */, + 2D15980DA5F44F54BD3FDB3F /* KIFSystemTestActor.h in Headers */, + 3EE0AB2846CC4514AA6F6143 /* KIFTestActor.h in Headers */, + 3E9B8CB74B9E4613B09BF0BE /* KIFTestCase.h in Headers */, + BAAEE045169E4B46AA5D6A97 /* KIFTestStepValidation.h in Headers */, + D745954B2AB642149F6C1D7C /* KIFTypist.h in Headers */, + DFFF740B04E84924B25FE208 /* KIFUITestActor.h in Headers */, + 2DBEE2E1CCB94184B99DD9A0 /* LoadableCategory.h in Headers */, + A4F45575FECD4010AAAC09EE /* NSBundle-KIFAdditions.h in Headers */, + F3A4CC8742B744A6A5587821 /* NSError-KIFAdditions.h in Headers */, + 1F4B6A16E2A14E859AC0998D /* NSFileManager-KIFAdditions.h in Headers */, + 8D6A8D6F0A2B494E805BA703 /* SenTestCase-KIFAdditions.h in Headers */, + 9B8E38E6E5484D6BADABD01E /* UIAccessibilityElement-KIFAdditions.h in Headers */, + 235E44F8B5644F61855B3F92 /* UIApplication-KIFAdditions.h in Headers */, + 2469D71FAEB64FA0B495E9FF /* UIScrollView-KIFAdditions.h in Headers */, + DB31C0C2EA6E4878A5C650A0 /* UITouch-KIFAdditions.h in Headers */, + 71F7CE34D029449789779871 /* UIView-KIFAdditions.h in Headers */, + D0443AAF5B4D4CD0ADDF70CD /* UIWindow-KIFAdditions.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 0491CC7D0EC747A48F89C80F /* Pods-DejalActivityView */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9748BA147843455A8C4AEBB5 /* Build configuration list for PBXNativeTarget "Pods-DejalActivityView" */; + buildPhases = ( + 386E771D13D34E8CBD1DEC45 /* Sources */, + E70A547EB1B94153ABCB24AB /* Frameworks */, + A519A265930F4C65B39A14AB /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-DejalActivityView"; + productName = "Pods-DejalActivityView"; + productReference = 7C84E6BB131E474E8D040828 /* libPods-DejalActivityView.a */; + productType = "com.apple.product-type.library.static"; + }; + 0FF3D6503D884183AC95D5E3 /* Pods-Integration Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 053B04E820E04962ADB0AF35 /* Build configuration list for PBXNativeTarget "Pods-Integration Tests" */; + buildPhases = ( + 723EA66F5348488DA08243E8 /* Sources */, + 9D5AFE1F987E464F9BBC613F /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 947B1A6821714F698B1AE83B /* PBXTargetDependency */, + 10F082DB6C8F40FE90D57421 /* PBXTargetDependency */, + 8CA46404EC714A4BA3354275 /* PBXTargetDependency */, + 97D71B56969E42D49A2F5FB6 /* PBXTargetDependency */, + ); + name = "Pods-Integration Tests"; + productName = "Pods-Integration Tests"; + productReference = 00CFCAC93E824C9C91AAB89A /* libPods-Integration Tests.a */; + productType = "com.apple.product-type.library.static"; + }; + 19C221923F7B4B75A4598DE7 /* Pods-CoderwallTests-DejalActivityView */ = { + isa = PBXNativeTarget; + buildConfigurationList = F0582C8DDF6240F09BCA1054 /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests-DejalActivityView" */; + buildPhases = ( + 1DA0E62D8E9443618B8BEBD8 /* Sources */, + B6C92CDE6E7D46F89D946C03 /* Frameworks */, + 18A07E5F2F56472EA9359F40 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-CoderwallTests-DejalActivityView"; + productName = "Pods-CoderwallTests-DejalActivityView"; + productReference = 8EC64E16E9124D4588C8D107 /* libPods-CoderwallTests-DejalActivityView.a */; + productType = "com.apple.product-type.library.static"; + }; + 1E9853B8E0094E99B8EF4104 /* Pods-CoderwallTests-EGOTableViewPullRefresh */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6FB32C61CE4A4E5987D0A0A5 /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests-EGOTableViewPullRefresh" */; + buildPhases = ( + 8497661028984E8D9678F90B /* Sources */, + 2DAE3402359C4128874F391C /* Frameworks */, + 08FD06F9452440C3BAA3130D /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-CoderwallTests-EGOTableViewPullRefresh"; + productName = "Pods-CoderwallTests-EGOTableViewPullRefresh"; + productReference = 1F0DC82FF1134CC3B5DC9634 /* libPods-CoderwallTests-EGOTableViewPullRefresh.a */; + productType = "com.apple.product-type.library.static"; + }; + 29A8A04BCD5543358CED18A6 /* Pods */ = { + isa = PBXNativeTarget; + buildConfigurationList = EFDDC5F5D1354342A1CEB8BF /* Build configuration list for PBXNativeTarget "Pods" */; + buildPhases = ( + E312733D7FF14280AFA7C624 /* Sources */, + 41D49CB534DE4D668A7F7CA3 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 69A5C772F1D9447DA6E00F33 /* PBXTargetDependency */, + D393D73049F1478CB185B356 /* PBXTargetDependency */, + FF42187F1DD04D47BF0CA631 /* PBXTargetDependency */, + ); + name = Pods; + productName = Pods; + productReference = D9CFDFCABB5140DC89FB246B /* libPods.a */; + productType = "com.apple.product-type.library.static"; + }; + 29ECF8741AF940F7895B2672 /* Pods-CoderwallTests-Kiwi */ = { + isa = PBXNativeTarget; + buildConfigurationList = 02F8487909D7460893AA6BAC /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests-Kiwi" */; + buildPhases = ( + 6E964A9548F14DAD93C5DCEF /* Sources */, + E2AA70453CFE4CE49BE6EA2C /* Frameworks */, + 1D586B729E2C4B408ABCB2FF /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-CoderwallTests-Kiwi"; + productName = "Pods-CoderwallTests-Kiwi"; + productReference = C532444277A14914AD0CA4D2 /* libPods-CoderwallTests-Kiwi.a */; + productType = "com.apple.product-type.library.static"; + }; + 3DCC03C18367418FB774B1CD /* Pods-EGOTableViewPullRefresh */ = { + isa = PBXNativeTarget; + buildConfigurationList = 52E6E67670CA497586B2DAD5 /* Build configuration list for PBXNativeTarget "Pods-EGOTableViewPullRefresh" */; + buildPhases = ( + 6DF5B33D4DF04C65919829B4 /* Sources */, + F2C91B9293494C8E98BEEC44 /* Frameworks */, + AEFAD60EC9684E3D9FF32297 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-EGOTableViewPullRefresh"; + productName = "Pods-EGOTableViewPullRefresh"; + productReference = 258F55888F4E4599BF7A2E1E /* libPods-EGOTableViewPullRefresh.a */; + productType = "com.apple.product-type.library.static"; + }; + 4482B0C4B2474DD5B6150F76 /* Pods-Integration Tests-DejalActivityView */ = { + isa = PBXNativeTarget; + buildConfigurationList = AD602020016F4E24BE912DA7 /* Build configuration list for PBXNativeTarget "Pods-Integration Tests-DejalActivityView" */; + buildPhases = ( + 5D12FF289F3E477799E77E35 /* Sources */, + E902D833B999440FA39AC401 /* Frameworks */, + 71C3736A5B35481C9DF8E4B7 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-Integration Tests-DejalActivityView"; + productName = "Pods-Integration Tests-DejalActivityView"; + productReference = 444327FDE5524220A58DB6BE /* libPods-Integration Tests-DejalActivityView.a */; + productType = "com.apple.product-type.library.static"; + }; + 4735B4FCA4194299880CF589 /* Pods-Integration Tests-EGOTableViewPullRefresh */ = { + isa = PBXNativeTarget; + buildConfigurationList = E34443E26C01404F81379578 /* Build configuration list for PBXNativeTarget "Pods-Integration Tests-EGOTableViewPullRefresh" */; + buildPhases = ( + CB15BAE832214F84A9D7BFFE /* Sources */, + 27FC9AE8735A48C18DD9D966 /* Frameworks */, + 39503F2B70B146F2AF5D9C85 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-Integration Tests-EGOTableViewPullRefresh"; + productName = "Pods-Integration Tests-EGOTableViewPullRefresh"; + productReference = 9A0D2B9284744D01B1EC6B49 /* libPods-Integration Tests-EGOTableViewPullRefresh.a */; + productType = "com.apple.product-type.library.static"; + }; + 5161A5D54A454843B4ED9E62 /* Pods-SBJson */ = { + isa = PBXNativeTarget; + buildConfigurationList = DBCAB477C674464C9CA2C5BC /* Build configuration list for PBXNativeTarget "Pods-SBJson" */; + buildPhases = ( + 69E077FF7B294656853BC6BB /* Sources */, + 528586A8577847E487170D4D /* Frameworks */, + 184CDFB717D64E0FBC276B35 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-SBJson"; + productName = "Pods-SBJson"; + productReference = 989D7B752B954662B3390A65 /* libPods-SBJson.a */; + productType = "com.apple.product-type.library.static"; + }; + 5926E3A165BA4A97BCE6FFAE /* Pods-CoderwallTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = BF679D73F61B4B4C849997AF /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests" */; + buildPhases = ( + 50C363310CA842F48A6F7667 /* Sources */, + 52962CBFBF134D2EAF67178F /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 0991A3F48D51416ABC5D2952 /* PBXTargetDependency */, + B32AC66EDB9A4D15995B0FC0 /* PBXTargetDependency */, + 0E1D47C388E44D1794C3085E /* PBXTargetDependency */, + C085F6554FAD4644B312630F /* PBXTargetDependency */, + ); + name = "Pods-CoderwallTests"; + productName = "Pods-CoderwallTests"; + productReference = C862D092CFF04D42A647CC84 /* libPods-CoderwallTests.a */; + productType = "com.apple.product-type.library.static"; + }; + 6B6391CFA1A949A0A1FAABA0 /* Pods-CoderwallTests-SBJson */ = { + isa = PBXNativeTarget; + buildConfigurationList = E872EDF15F754F6FA73E6B50 /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests-SBJson" */; + buildPhases = ( + BE3BF985ACF9483DB1CD4533 /* Sources */, + 4E05520504384C769BDBFF0A /* Frameworks */, + 2B0859CBA0D94A4CBA83F92B /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-CoderwallTests-SBJson"; + productName = "Pods-CoderwallTests-SBJson"; + productReference = 411CD0F5E40F4C4DB43C4569 /* libPods-CoderwallTests-SBJson.a */; + productType = "com.apple.product-type.library.static"; + }; + 8DED04B8BBFC47EBB10ECB2F /* Pods-Integration Tests-KIF */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6F80ACB5BAF340DB895EE3FE /* Build configuration list for PBXNativeTarget "Pods-Integration Tests-KIF" */; + buildPhases = ( + 3FE2F4D388E440BD9A554F23 /* Sources */, + 45E7103D72694C6B99362547 /* Frameworks */, + D519BD67326249DCAB85E755 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-Integration Tests-KIF"; + productName = "Pods-Integration Tests-KIF"; + productReference = CD663848E25D4C84BA298E51 /* libPods-Integration Tests-KIF.a */; + productType = "com.apple.product-type.library.static"; + }; + A9C67A8848B541A0A5560A36 /* Pods-Integration Tests-SBJson */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0EE4353EAE1B43F6A1008C7D /* Build configuration list for PBXNativeTarget "Pods-Integration Tests-SBJson" */; + buildPhases = ( + E7C5F62F7A76413F81E75F66 /* Sources */, + EE2B684AC68B4C38A0A3D123 /* Frameworks */, + 0505CE70E6674EF490211627 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-Integration Tests-SBJson"; + productName = "Pods-Integration Tests-SBJson"; + productReference = 756B96ACAE2B427C80E03C2D /* libPods-Integration Tests-SBJson.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7EFC5F676FE249F3BE6FEA60 /* Project object */ = { + isa = PBXProject; + attributes = { + LastTestingUpgradeCheck = 0510; + LastUpgradeCheck = 0510; + }; + buildConfigurationList = 7D86E533D0BA4797B8C839E2 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 33B249AE01724ABF83FE42DF; + productRefGroup = 8E40D9186E3D4DA9B3F4684C /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 29A8A04BCD5543358CED18A6 /* Pods */, + 5926E3A165BA4A97BCE6FFAE /* Pods-CoderwallTests */, + 19C221923F7B4B75A4598DE7 /* Pods-CoderwallTests-DejalActivityView */, + 1E9853B8E0094E99B8EF4104 /* Pods-CoderwallTests-EGOTableViewPullRefresh */, + 29ECF8741AF940F7895B2672 /* Pods-CoderwallTests-Kiwi */, + 6B6391CFA1A949A0A1FAABA0 /* Pods-CoderwallTests-SBJson */, + 0491CC7D0EC747A48F89C80F /* Pods-DejalActivityView */, + 3DCC03C18367418FB774B1CD /* Pods-EGOTableViewPullRefresh */, + 0FF3D6503D884183AC95D5E3 /* Pods-Integration Tests */, + 4482B0C4B2474DD5B6150F76 /* Pods-Integration Tests-DejalActivityView */, + 4735B4FCA4194299880CF589 /* Pods-Integration Tests-EGOTableViewPullRefresh */, + 8DED04B8BBFC47EBB10ECB2F /* Pods-Integration Tests-KIF */, + A9C67A8848B541A0A5560A36 /* Pods-Integration Tests-SBJson */, + 5161A5D54A454843B4ED9E62 /* Pods-SBJson */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 1DA0E62D8E9443618B8BEBD8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 64094C51DD79454DBC60F438 /* DejalActivityView.m in Sources */, + 7205299DF5C7491D927CCC66 /* Pods-CoderwallTests-DejalActivityView-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 386E771D13D34E8CBD1DEC45 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DFDEB905E806402687A1B39E /* DejalActivityView.m in Sources */, + 4039352191D1435883D4E351 /* Pods-DejalActivityView-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3FE2F4D388E440BD9A554F23 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9616A01BF8C94C57BB9F3274 /* CGGeometry-KIFAdditions.m in Sources */, + 20F6D94D03854E8E8850E84B /* KIFSystemTestActor.m in Sources */, + 5F5D74A425654E089A44438C /* KIFTestActor.m in Sources */, + C652A1F667A24E6AA1A54FAD /* KIFTestCase.m in Sources */, + 26805BC19CBF48C69D6F9B85 /* KIFTestStepValidation.m in Sources */, + 5D672B2C597E4F20A66B0B20 /* KIFTypist.m in Sources */, + AAAE0F5827634EF1A816A85C /* KIFUITestActor.m in Sources */, + 03A621324779475583D2D63D /* NSBundle-KIFAdditions.m in Sources */, + 90428BB7F10E450FB87023E3 /* NSError-KIFAdditions.m in Sources */, + 1EBE661525A649DF85EE5B6A /* NSFileManager-KIFAdditions.m in Sources */, + 3C97458466E841218E5C5A7E /* Pods-Integration Tests-KIF-dummy.m in Sources */, + EEBB98DA7BB1498FB6FCEA40 /* SenTestCase-KIFAdditions.m in Sources */, + BF1FD03326F9422498FCD0F4 /* UIAccessibilityElement-KIFAdditions.m in Sources */, + 65D93F14612D49439F33A92B /* UIApplication-KIFAdditions.m in Sources */, + 93419EC562C240349F513377 /* UIScrollView-KIFAdditions.m in Sources */, + 85C25333A3404C878183D99B /* UITouch-KIFAdditions.m in Sources */, + C7EA4E2BE6884EA2B026B107 /* UIView-KIFAdditions.m in Sources */, + 00EF318A1C044D0C96364CC6 /* UIWindow-KIFAdditions.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 50C363310CA842F48A6F7667 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EAE37FC7A28641D196374C48 /* Pods-CoderwallTests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5D12FF289F3E477799E77E35 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2022EBBBBBED4465BBC48860 /* DejalActivityView.m in Sources */, + B97D8E9EC965453080BF5007 /* Pods-Integration Tests-DejalActivityView-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 69E077FF7B294656853BC6BB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AA94A3F156EC40B393105C20 /* Pods-SBJson-dummy.m in Sources */, + 3971DC9E8AF34D74A8F749D6 /* SBJson4Parser.m in Sources */, + 87766C1FA1B048149BAF0915 /* SBJson4StreamParser.m in Sources */, + 88076EAA2F6C4DBEB0508E3F /* SBJson4StreamParserState.m in Sources */, + A30867C4B1A54B75B01CBFD2 /* SBJson4StreamTokeniser.m in Sources */, + C2C1BE7EBBC44CDF8E6BF185 /* SBJson4StreamWriter.m in Sources */, + DD4B6F1831174942AB36CE02 /* SBJson4StreamWriterState.m in Sources */, + 1C04778490A74F6880C120F1 /* SBJson4Writer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6DF5B33D4DF04C65919829B4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D7594DB6EFEB4874853CC35C /* EGORefreshTableHeaderView.m in Sources */, + 98E2D9E7C6FA4CC2824B0B07 /* Pods-EGOTableViewPullRefresh-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6E964A9548F14DAD93C5DCEF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CE62D6CD42F1460D80695EDB /* KWAfterAllNode.m in Sources */, + 6672542004B343AF90AABC3E /* KWAfterEachNode.m in Sources */, + BE9FDDED008A4288BAC28494 /* KWAny.m in Sources */, + 833849EF63D24EE4B7F5BB54 /* KWAsyncVerifier.m in Sources */, + D14B6DB4B75C4D9C83B8639B /* KWBeBetweenMatcher.m in Sources */, + 5E6698D62F35445CAAD9679F /* KWBeEmptyMatcher.m in Sources */, + 786F153E475742A1BABE7937 /* KWBeIdenticalToMatcher.m in Sources */, + 5DF9E858CD514583B081F305 /* KWBeKindOfClassMatcher.m in Sources */, + 604C123D4A2C451983713C55 /* KWBeMemberOfClassMatcher.m in Sources */, + 9B1DA13789EF4ADFA6D30631 /* KWBeSubclassOfClassMatcher.m in Sources */, + 92335086E16B4EF1B26C8775 /* KWBeTrueMatcher.m in Sources */, + 53AA274C225B4E2D8B782885 /* KWBeWithinMatcher.m in Sources */, + CE84F0CD5FC047F78EF87A0B /* KWBeZeroMatcher.m in Sources */, + BFBA5F38EC32497DB7748A5E /* KWBeforeAllNode.m in Sources */, + FC08BBE050E54D61A03042EE /* KWBeforeEachNode.m in Sources */, + F37106B484604FE7B6DFE948 /* KWBlock.m in Sources */, + 15D5EE841E3445709D0618EA /* KWBlockNode.m in Sources */, + 5797961AA4604FC494E3D97F /* KWBlockRaiseMatcher.m in Sources */, + 6D0DB97578FF496C9D1E21E4 /* KWCallSite.m in Sources */, + FE45FFF30A2B490481A58BCF /* KWCaptureSpy.m in Sources */, + 18DDCCF5AC3A401CB75AC58C /* KWChangeMatcher.m in Sources */, + 8B5F6446D4864985921D3954 /* KWConformToProtocolMatcher.m in Sources */, + 41B730461B4E493C96DC026B /* KWContainMatcher.m in Sources */, + 935CB037774241E2B8596B42 /* KWContainStringMatcher.m in Sources */, + D280220F1CE44081B823CE0E /* KWContextNode.m in Sources */, + 504206E8955D478E983BF08A /* KWDeviceInfo.m in Sources */, + 7BB19602167F4770825AF80A /* KWEqualMatcher.m in Sources */, + FECDFD8BB61847129DD2221A /* KWExample.m in Sources */, + CCA8436518B448BF97E25F4E /* KWExampleSuite.m in Sources */, + 73DB4FE377E94A19BB6D8203 /* KWExampleSuiteBuilder.m in Sources */, + 0F354CF7F6F3461587128378 /* KWExistVerifier.m in Sources */, + BDD6867EF4EC47108811502F /* KWFailure.m in Sources */, + D7BA994BAB3A487B9F59953D /* KWFormatter.m in Sources */, + BCF328E55E754C87912E882C /* KWFutureObject.m in Sources */, + 7A7130C5174D419FBA442670 /* KWGenericMatchEvaluator.m in Sources */, + 568B38FC76A04E308F5D659D /* KWGenericMatcher.m in Sources */, + BD5F8B61A5684762BFD0D54A /* KWGenericMatchingAdditions.m in Sources */, + 39D1771FD6F54A878A13BD5F /* KWHaveMatcher.m in Sources */, + 995464D4CFC54B1AA1348BA6 /* KWHaveValueMatcher.m in Sources */, + 4F431DC4BCA643CDB18DD650 /* KWInequalityMatcher.m in Sources */, + 43C68860AA01487380D90942 /* KWIntercept.m in Sources */, + 548BCFCEB38D4733937E7B03 /* KWInvocationCapturer.m in Sources */, + 9AB58F6E945943BD950F22B1 /* KWItNode.m in Sources */, + 1E03DA016FC14F1EA6791F02 /* KWMatchVerifier.m in Sources */, + 75A90DFE9F614A8692616A9F /* KWMatcher.m in Sources */, + EF2254D09E5042DD8193E29C /* KWMatcherFactory.m in Sources */, + 894540CB600B48A2954AB4C9 /* KWMatchers.m in Sources */, + B39A0A41F2604301B77DDA53 /* KWMessagePattern.m in Sources */, + D6F0006E96ED4ADB8EBAEDF3 /* KWMessageTracker.m in Sources */, + 08E1E9C0FB7841068B277B08 /* KWMock.m in Sources */, + B5689EF53B8C4D569C856969 /* KWNilMatcher.m in Sources */, + FA6F0E4F3FCD45A9AD88C841 /* KWNull.m in Sources */, + 2E7A7563BC274E69A2DC8BC4 /* KWObjCUtilities.m in Sources */, + B27324AE61E046BDB4B633B6 /* KWPendingNode.m in Sources */, + 72F7DC58C4E3416A8B47E169 /* KWProbePoller.m in Sources */, + 8F08F09E79F444CDA6AF6FD5 /* KWRaiseMatcher.m in Sources */, + A7D9E1C343F04DC0B63C30E6 /* KWReceiveMatcher.m in Sources */, + FBB8246097F2407B86F67138 /* KWRegisterMatchersNode.m in Sources */, + 87E66ECF54B5480DAB616373 /* KWRegularExpressionPatternMatcher.m in Sources */, + 1C8908C555424BE79C058ECD /* KWRespondToSelectorMatcher.m in Sources */, + CBF21652805B4A69B2807EC5 /* KWSpec.m in Sources */, + 0C62A95B3E6B49EEBE5198A9 /* KWStringContainsMatcher.m in Sources */, + 1DCB50B54705427699739463 /* KWStringPrefixMatcher.m in Sources */, + 4386BF248BE5442AA3771E42 /* KWStringUtilities.m in Sources */, + 78D85C0A375544B6869E6BC9 /* KWStub.m in Sources */, + 88424F94164543938B2229AD /* KWSymbolicator.m in Sources */, + 287F81074295464ABF3EF92F /* KWUserDefinedMatcher.m in Sources */, + 62CC43254B624D2A8981893F /* KWValue.m in Sources */, + 2465F7D113D549A4A844DF5A /* KWWorkarounds.m in Sources */, + 65FA01E77165431F9082E929 /* NSInvocation+KiwiAdditions.m in Sources */, + A7F1E53BF7C44C0EA695F982 /* NSInvocation+OCMAdditions.m in Sources */, + E249C9D4FFFE4770A59E56EC /* NSMethodSignature+KiwiAdditions.m in Sources */, + 2387A01E3A1E45D795F8F257 /* NSNumber+KiwiAdditions.m in Sources */, + 8FCB97E4F35947CE8BDCCD71 /* NSObject+KiwiMockAdditions.m in Sources */, + 1C357524A8544D7C8E390D92 /* NSObject+KiwiSpyAdditions.m in Sources */, + 8EEF2A7C7AE649F79859379B /* NSObject+KiwiStubAdditions.m in Sources */, + 14C65CE6DFD947388E9C3B4B /* NSObject+KiwiVerifierAdditions.m in Sources */, + 9D9AF2E7F4604790BD0DFAF0 /* NSProxy+KiwiVerifierAdditions.m in Sources */, + 97AF780667434801AEA22DBE /* NSValue+KiwiAdditions.m in Sources */, + 6D48E2DA0FB5488F82E04C88 /* Pods-CoderwallTests-Kiwi-dummy.m in Sources */, + 288208EB274E4C12B34AE199 /* SenTestSuite+KiwiAdditions.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 723EA66F5348488DA08243E8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 26A4EFC699204BB1BAA908FA /* Pods-Integration Tests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8497661028984E8D9678F90B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CE829F95E2D4A33B338E478 /* EGORefreshTableHeaderView.m in Sources */, + 3DA3A4F6947847FBA8F7828F /* Pods-CoderwallTests-EGOTableViewPullRefresh-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BE3BF985ACF9483DB1CD4533 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5C2A5AD8E7F74398AB791857 /* Pods-CoderwallTests-SBJson-dummy.m in Sources */, + 1E9CB887BB5D4340B2CB1640 /* SBJson4Parser.m in Sources */, + 80A21E1D41D84FCFAC2BDB5D /* SBJson4StreamParser.m in Sources */, + 07B51266FE9F429E9D73BBF1 /* SBJson4StreamParserState.m in Sources */, + 797E1674C54C4F71A0BB3E26 /* SBJson4StreamTokeniser.m in Sources */, + 072878F96BD84008A9854098 /* SBJson4StreamWriter.m in Sources */, + E8F7276424EC4330BB1451EC /* SBJson4StreamWriterState.m in Sources */, + C61FFE7D86564880BD8498B7 /* SBJson4Writer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CB15BAE832214F84A9D7BFFE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A9771C65FCBF4C7A9B22D895 /* EGORefreshTableHeaderView.m in Sources */, + 82991D0C14D34780A77061A1 /* Pods-Integration Tests-EGOTableViewPullRefresh-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E312733D7FF14280AFA7C624 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 08869600398848FEB414589F /* Pods-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E7C5F62F7A76413F81E75F66 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 713DFDEEEC154DB1AF6ED086 /* Pods-Integration Tests-SBJson-dummy.m in Sources */, + 7DC934366F4A451BBA5EE5CA /* SBJson4Parser.m in Sources */, + 0743BE9651FF4F269333E45E /* SBJson4StreamParser.m in Sources */, + 504A907D8F3040219BA0AC55 /* SBJson4StreamParserState.m in Sources */, + AA341DE1D9A244848975E28F /* SBJson4StreamTokeniser.m in Sources */, + EDCFEFBC60EA4535A47B23BF /* SBJson4StreamWriter.m in Sources */, + 0A95CFCE3C314E439A5EF550 /* SBJson4StreamWriterState.m in Sources */, + 299E895D5B9E4E0BACC15344 /* SBJson4Writer.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 0991A3F48D51416ABC5D2952 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 19C221923F7B4B75A4598DE7 /* Pods-CoderwallTests-DejalActivityView */; + targetProxy = 890EC28F16BD4487A3AE73F9 /* PBXContainerItemProxy */; + }; + 0E1D47C388E44D1794C3085E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 29ECF8741AF940F7895B2672 /* Pods-CoderwallTests-Kiwi */; + targetProxy = E96A8714641D40A1BEB757EF /* PBXContainerItemProxy */; + }; + 10F082DB6C8F40FE90D57421 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4735B4FCA4194299880CF589 /* Pods-Integration Tests-EGOTableViewPullRefresh */; + targetProxy = EAA321FBC2664091972D552E /* PBXContainerItemProxy */; + }; + 69A5C772F1D9447DA6E00F33 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0491CC7D0EC747A48F89C80F /* Pods-DejalActivityView */; + targetProxy = 570D5EA19F3D4960BF957691 /* PBXContainerItemProxy */; + }; + 8CA46404EC714A4BA3354275 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8DED04B8BBFC47EBB10ECB2F /* Pods-Integration Tests-KIF */; + targetProxy = 541663298EA3492290C387F2 /* PBXContainerItemProxy */; + }; + 947B1A6821714F698B1AE83B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4482B0C4B2474DD5B6150F76 /* Pods-Integration Tests-DejalActivityView */; + targetProxy = 3B545E3BA3BF4F75AADECD6F /* PBXContainerItemProxy */; + }; + 97D71B56969E42D49A2F5FB6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A9C67A8848B541A0A5560A36 /* Pods-Integration Tests-SBJson */; + targetProxy = F70FD4BC69FA40A78C6D2882 /* PBXContainerItemProxy */; + }; + B32AC66EDB9A4D15995B0FC0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 1E9853B8E0094E99B8EF4104 /* Pods-CoderwallTests-EGOTableViewPullRefresh */; + targetProxy = 6F44B93549D64982B0B0249E /* PBXContainerItemProxy */; + }; + C085F6554FAD4644B312630F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6B6391CFA1A949A0A1FAABA0 /* Pods-CoderwallTests-SBJson */; + targetProxy = 8622BFBAF8694E9B843313C0 /* PBXContainerItemProxy */; + }; + D393D73049F1478CB185B356 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3DCC03C18367418FB774B1CD /* Pods-EGOTableViewPullRefresh */; + targetProxy = 2F6CBA5FE5204443A35FF131 /* PBXContainerItemProxy */; + }; + FF42187F1DD04D47BF0CA631 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5161A5D54A454843B4ED9E62 /* Pods-SBJson */; + targetProxy = 367F96E9A0AE43E89FE9BF7B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 07007999460E407CA14483DF /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1DA65A08CCAD4903B1796549 /* Pods-Integration Tests-DejalActivityView-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-Integration Tests-DejalActivityView-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 10135218853F4878909983E9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F74F87FC3436445FB9BA2543 /* Pods.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 18A2C2B0495F4E0E86276BE0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 43AA731ABBBD4FDFA6DFDCDE /* Pods-Integration Tests-KIF-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-Integration Tests-KIF-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 1D9DED14F7D148CB85E21E81 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FA787E931EFF4172BF87554E /* Pods-CoderwallTests-SBJson-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-CoderwallTests-SBJson-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 2541FAF809754DED8B67EB12 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FA787E931EFF4172BF87554E /* Pods-CoderwallTests-SBJson-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-CoderwallTests-SBJson-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2E0002AC4E1D47DA8F4D9DD0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CAC1ED62F49040AA9CEC4012 /* Pods-CoderwallTests.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 39ED1882C6A546848EA76F25 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CAC1ED62F49040AA9CEC4012 /* Pods-CoderwallTests.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 3FFC063310AE4752BB48E623 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E9063162C2804CCE9A71C5CD /* Pods-SBJson-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-SBJson-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 42F9155F478D417EBE1292BC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AD3159C4BE884EB7836207B5 /* Pods-Integration Tests-EGOTableViewPullRefresh-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-Integration Tests-EGOTableViewPullRefresh-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 62E046812FA8458AA8DCA399 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 43AA731ABBBD4FDFA6DFDCDE /* Pods-Integration Tests-KIF-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-Integration Tests-KIF-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 74A956944B594E68B7F5B38C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 72B6F09158C9469785815067 /* Pods-CoderwallTests-DejalActivityView-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-CoderwallTests-DejalActivityView-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 845621E04B344DD08292A2B0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AEE2DEC6DF4B4EB9A120DAF3 /* Pods-EGOTableViewPullRefresh-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-EGOTableViewPullRefresh-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 901948E95CEC4FBBA760E620 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 72B6F09158C9469785815067 /* Pods-CoderwallTests-DejalActivityView-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-CoderwallTests-DejalActivityView-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 929DF9717AAE46B89B2A6EC3 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 778CC112D59E4DA5BF061F0E /* Pods-CoderwallTests-Kiwi-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-CoderwallTests-Kiwi-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 9496B324C483483CAC9D8976 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5941A06B65D940CE96AC8B24 /* Pods-Integration Tests.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 96799001E61E4533A078BB57 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = NO; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + COPY_PHASE_STRIP = NO; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + STRIP_INSTALLED_PRODUCT = NO; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A0843DCAF77843629CF890FE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5941A06B65D940CE96AC8B24 /* Pods-Integration Tests.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A36A7551B33044FB8E492458 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1DA65A08CCAD4903B1796549 /* Pods-Integration Tests-DejalActivityView-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-Integration Tests-DejalActivityView-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + B7749905CCA944B0B9263DD6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = NO; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + COPY_PHASE_STRIP = YES; + 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_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + ONLY_ACTIVE_ARCH = YES; + STRIP_INSTALLED_PRODUCT = NO; + }; + name = Debug; + }; + C4260A3D084241AFA2896822 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 27B52C79712A494C9D11D20B /* Pods-DejalActivityView-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-DejalActivityView-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + C9C0C5E6127349BBA74B683B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AD3159C4BE884EB7836207B5 /* Pods-Integration Tests-EGOTableViewPullRefresh-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-Integration Tests-EGOTableViewPullRefresh-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + DE02AF51D3C84551975921C7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 778CC112D59E4DA5BF061F0E /* Pods-CoderwallTests-Kiwi-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-CoderwallTests-Kiwi-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + DFA9C77922B044898A814FAB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2CBEF9DA7001499D8E153950 /* Pods-CoderwallTests-EGOTableViewPullRefresh-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-CoderwallTests-EGOTableViewPullRefresh-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E1A88715ADBC47E7A6B3C4B0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AEE2DEC6DF4B4EB9A120DAF3 /* Pods-EGOTableViewPullRefresh-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-EGOTableViewPullRefresh-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E5AF74F9284947B888EC7D6E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 27B52C79712A494C9D11D20B /* Pods-DejalActivityView-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-DejalActivityView-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + EB84E3B3C8A34435BFB15634 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F74F87FC3436445FB9BA2543 /* Pods.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EC1507C1686F4DB0BE384183 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FD43BABB2FB94F2A9D93FBF4 /* Pods-Integration Tests-SBJson-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-Integration Tests-SBJson-prefix.pch"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-DNS_BLOCK_ASSERTIONS=1", + "$(inherited)", + ); + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + F72AB5E3264D4E349E1A1AB5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2CBEF9DA7001499D8E153950 /* Pods-CoderwallTests-EGOTableViewPullRefresh-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-CoderwallTests-EGOTableViewPullRefresh-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + F98E15BF4EE44028BC2665F7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FD43BABB2FB94F2A9D93FBF4 /* Pods-Integration Tests-SBJson-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-Integration Tests-SBJson-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + FD51C8BDA0B249E9B4FCFF36 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E9063162C2804CCE9A71C5CD /* Pods-SBJson-Private.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + DSTROOT = /tmp/xcodeproj.dst; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Pods-SBJson-prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 02F8487909D7460893AA6BAC /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests-Kiwi" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DE02AF51D3C84551975921C7 /* Debug */, + 929DF9717AAE46B89B2A6EC3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 053B04E820E04962ADB0AF35 /* Build configuration list for PBXNativeTarget "Pods-Integration Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9496B324C483483CAC9D8976 /* Debug */, + A0843DCAF77843629CF890FE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0EE4353EAE1B43F6A1008C7D /* Build configuration list for PBXNativeTarget "Pods-Integration Tests-SBJson" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F98E15BF4EE44028BC2665F7 /* Debug */, + EC1507C1686F4DB0BE384183 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 52E6E67670CA497586B2DAD5 /* Build configuration list for PBXNativeTarget "Pods-EGOTableViewPullRefresh" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 845621E04B344DD08292A2B0 /* Debug */, + E1A88715ADBC47E7A6B3C4B0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6F80ACB5BAF340DB895EE3FE /* Build configuration list for PBXNativeTarget "Pods-Integration Tests-KIF" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 18A2C2B0495F4E0E86276BE0 /* Debug */, + 62E046812FA8458AA8DCA399 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6FB32C61CE4A4E5987D0A0A5 /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests-EGOTableViewPullRefresh" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F72AB5E3264D4E349E1A1AB5 /* Debug */, + DFA9C77922B044898A814FAB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7D86E533D0BA4797B8C839E2 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B7749905CCA944B0B9263DD6 /* Debug */, + 96799001E61E4533A078BB57 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9748BA147843455A8C4AEBB5 /* Build configuration list for PBXNativeTarget "Pods-DejalActivityView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E5AF74F9284947B888EC7D6E /* Debug */, + C4260A3D084241AFA2896822 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AD602020016F4E24BE912DA7 /* Build configuration list for PBXNativeTarget "Pods-Integration Tests-DejalActivityView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 07007999460E407CA14483DF /* Debug */, + A36A7551B33044FB8E492458 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BF679D73F61B4B4C849997AF /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2E0002AC4E1D47DA8F4D9DD0 /* Debug */, + 39ED1882C6A546848EA76F25 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DBCAB477C674464C9CA2C5BC /* Build configuration list for PBXNativeTarget "Pods-SBJson" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FD51C8BDA0B249E9B4FCFF36 /* Debug */, + 3FFC063310AE4752BB48E623 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E34443E26C01404F81379578 /* Build configuration list for PBXNativeTarget "Pods-Integration Tests-EGOTableViewPullRefresh" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 42F9155F478D417EBE1292BC /* Debug */, + C9C0C5E6127349BBA74B683B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E872EDF15F754F6FA73E6B50 /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests-SBJson" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D9DED14F7D148CB85E21E81 /* Debug */, + 2541FAF809754DED8B67EB12 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EFDDC5F5D1354342A1CEB8BF /* Build configuration list for PBXNativeTarget "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 10135218853F4878909983E9 /* Debug */, + EB84E3B3C8A34435BFB15634 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F0582C8DDF6240F09BCA1054 /* Build configuration list for PBXNativeTarget "Pods-CoderwallTests-DejalActivityView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 901948E95CEC4FBBA760E620 /* Debug */, + 74A956944B594E68B7F5B38C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7EFC5F676FE249F3BE6FEA60 /* Project object */; +} diff --git a/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/Pods-integration.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/Pods-integration.xcscheme deleted file mode 100644 index 122117c..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/Pods-integration.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/Pods-test.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/Pods-test.xcscheme deleted file mode 100644 index 0ae180d..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/Pods-test.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index b994e46..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,42 +0,0 @@ - - - - - SchemeUserState - - Pods-integration.xcscheme - - orderHint - 2 - - Pods-test.xcscheme - - orderHint - 1 - - Pods.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - 6385EDEB17A142DEB5811B92 - - primary - - - 8E6C7C9C094141038A3BC2F7 - - primary - - - CB3334DFAAF14EFB908618CE - - primary - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-DejalActivityView.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-DejalActivityView.xcscheme new file mode 100644 index 0000000..90e8064 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-DejalActivityView.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-EGOTableViewPullRefresh.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-EGOTableViewPullRefresh.xcscheme new file mode 100644 index 0000000..5230bd6 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-EGOTableViewPullRefresh.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-Kiwi.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-Kiwi.xcscheme new file mode 100644 index 0000000..b28587a --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-Kiwi.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-SBJson.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-SBJson.xcscheme new file mode 100644 index 0000000..6616896 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests-SBJson.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests.xcscheme new file mode 100644 index 0000000..f31c022 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-CoderwallTests.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-DejalActivityView.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-DejalActivityView.xcscheme new file mode 100644 index 0000000..457cf29 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-DejalActivityView.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-EGOTableViewPullRefresh.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-EGOTableViewPullRefresh.xcscheme new file mode 100644 index 0000000..635a9b2 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-EGOTableViewPullRefresh.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-DejalActivityView.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-DejalActivityView.xcscheme new file mode 100644 index 0000000..d043413 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-DejalActivityView.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-EGOTableViewPullRefresh.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-EGOTableViewPullRefresh.xcscheme new file mode 100644 index 0000000..902440b --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-EGOTableViewPullRefresh.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-KIF.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-KIF.xcscheme new file mode 100644 index 0000000..daaab0b --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-KIF.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-SBJson.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-SBJson.xcscheme new file mode 100644 index 0000000..051e43a --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests-SBJson.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests.xcscheme new file mode 100644 index 0000000..4672578 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-Integration Tests.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-SBJson.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-SBJson.xcscheme new file mode 100644 index 0000000..a027eab --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods-SBJson.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/Pods.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods.xcscheme similarity index 95% rename from Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/Pods.xcscheme rename to Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods.xcscheme index ddd6e30..1ba4674 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/James.xcuserdatad/xcschemes/Pods.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/Pods.xcscheme @@ -1,6 +1,6 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..d8bc710 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/will.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,152 @@ + + + + + SchemeUserState + + Pods-CoderwallTests-DejalActivityView.xcscheme + + isShown + + + Pods-CoderwallTests-EGOTableViewPullRefresh.xcscheme + + isShown + + + Pods-CoderwallTests-Kiwi.xcscheme + + isShown + + + Pods-CoderwallTests-SBJson.xcscheme + + isShown + + + Pods-CoderwallTests.xcscheme + + isShown + + + Pods-DejalActivityView.xcscheme + + isShown + + + Pods-EGOTableViewPullRefresh.xcscheme + + isShown + + + Pods-Integration Tests-DejalActivityView.xcscheme + + isShown + + + Pods-Integration Tests-EGOTableViewPullRefresh.xcscheme + + isShown + + + Pods-Integration Tests-KIF.xcscheme + + isShown + + + Pods-Integration Tests-SBJson.xcscheme + + isShown + + + Pods-Integration Tests.xcscheme + + isShown + + + Pods-SBJson.xcscheme + + isShown + + + Pods.xcscheme + + isShown + + + + SuppressBuildableAutocreation + + 0491CC7D0EC747A48F89C80F + + primary + + + 0FF3D6503D884183AC95D5E3 + + primary + + + 19C221923F7B4B75A4598DE7 + + primary + + + 1E9853B8E0094E99B8EF4104 + + primary + + + 29A8A04BCD5543358CED18A6 + + primary + + + 29ECF8741AF940F7895B2672 + + primary + + + 3DCC03C18367418FB774B1CD + + primary + + + 4482B0C4B2474DD5B6150F76 + + primary + + + 4735B4FCA4194299880CF589 + + primary + + + 5161A5D54A454843B4ED9E62 + + primary + + + 5926E3A165BA4A97BCE6FFAE + + primary + + + 6B6391CFA1A949A0A1FAABA0 + + primary + + + 8DED04B8BBFC47EBB10ECB2F + + primary + + + A9C67A8848B541A0A5560A36 + + primary + + + + + diff --git a/Pods/SBJson/.gitignore b/Pods/SBJson/.gitignore deleted file mode 100755 index 7a498d1..0000000 --- a/Pods/SBJson/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -*.xcodeproj/* -!*.xcodeproj/project.pbxproj -*.xcworkspace/* -*.xcworkspace/xcuserdata -!*.xcworkspace/contents.xcworkspacedata -.DS_Store -.idea/* -build/* diff --git a/Pods/SBJson/CREDITS.md b/Pods/SBJson/CREDITS.md deleted file mode 100755 index f2d126b..0000000 --- a/Pods/SBJson/CREDITS.md +++ /dev/null @@ -1,41 +0,0 @@ -Credits -======= - -My thanks to the following people and organisations, without whom this -library wouldn't be what it is today: - -* Andrew Hannon -* Andrew W. Donoho -* Andy Warwick -* Ben Rimmington -* Blake Seely -* Gabriel Handford -* George MacKerron -* Greg Bolsinga -* Hager Hu -* Hiroshi Saito -* Jens Alfke -* Joerg Schwieder -* John Engelhart -* Konstantin Welke -* Lloyd Hilaiel -* Marc Lehmann -* Michael Papp -* Mike Monaco -* Robin Lu -* Sam Soffes -* Sean Scanlon -* The Adium Crew -* Tobias Höhmann -* Tod Karpinski -* Ullrich Schäfer -* Wolfgang Sourdeau -* aethereal -* boredzo -* dewvinci -* dmaclach -* jinksys -* lukef -* renerattur - -(Please let me know if I've mistakenly omitted anyone.) diff --git a/Pods/SBJson/Classes/NSObject+SBJson.h b/Pods/SBJson/Classes/NSObject+SBJson.h deleted file mode 100755 index c9eeaa5..0000000 --- a/Pods/SBJson/Classes/NSObject+SBJson.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright (C) 2009 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import - -#pragma mark JSON Writing - -/// Adds JSON generation to NSObject -@interface NSObject (NSObject_SBJsonWriting) - -/** - @brief Encodes the receiver into a JSON string - - Although defined as a category on NSObject it is only defined for NSArray and NSDictionary. - - @return the receiver encoded in JSON, or nil on error. - - @see @ref objc2json - */ -- (NSString *)JSONRepresentation; - -@end - - -#pragma mark JSON Parsing - -/// Adds JSON parsing methods to NSString -@interface NSString (NSString_SBJsonParsing) - -/** - @brief Decodes the receiver's JSON text - - @return the NSDictionary or NSArray represented by the receiver, or nil on error. - - @see @ref json2objc - */ -- (id)JSONValue; - -@end - -/// Adds JSON parsing methods to NSData -@interface NSData (NSData_SBJsonParsing) - -/** - @brief Decodes the receiver's JSON data - - @return the NSDictionary or NSArray represented by the receiver, or nil on error. - - @see @ref json2objc - */ -- (id)JSONValue; - -@end diff --git a/Pods/SBJson/Classes/NSObject+SBJson.m b/Pods/SBJson/Classes/NSObject+SBJson.m deleted file mode 100755 index 62b0987..0000000 --- a/Pods/SBJson/Classes/NSObject+SBJson.m +++ /dev/null @@ -1,72 +0,0 @@ -/* - Copyright (C) 2009 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "NSObject+SBJson.h" -#import "SBJsonWriter.h" -#import "SBJsonParser.h" - -@implementation NSObject (NSObject_SBJsonWriting) - -- (NSString *)JSONRepresentation { - SBJsonWriter *writer = [[SBJsonWriter alloc] init]; - NSString *json = [writer stringWithObject:self]; - if (!json) - NSLog(@"-JSONRepresentation failed. Error is: %@", writer.error); - return json; -} - -@end - - - -@implementation NSString (NSString_SBJsonParsing) - -- (id)JSONValue { - SBJsonParser *parser = [[SBJsonParser alloc] init]; - id repr = [parser objectWithString:self]; - if (!repr) - NSLog(@"-JSONValue failed. Error is: %@", parser.error); - return repr; -} - -@end - - - -@implementation NSData (NSData_SBJsonParsing) - -- (id)JSONValue { - SBJsonParser *parser = [[SBJsonParser alloc] init]; - id repr = [parser objectWithData:self]; - if (!repr) - NSLog(@"-JSONValue failed. Error is: %@", parser.error); - return repr; -} - -@end diff --git a/Pods/SBJson/Classes/SBJson.h b/Pods/SBJson/Classes/SBJson.h deleted file mode 100755 index b25da4a..0000000 --- a/Pods/SBJson/Classes/SBJson.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright (C) 2009-2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @page json2objc JSON to Objective-C - - JSON is mapped to Objective-C types in the following way: - - @li null -> NSNull - @li string -> NSString - @li array -> NSMutableArray - @li object -> NSMutableDictionary - @li true -> NSNumber's -numberWithBool:YES - @li false -> NSNumber's -numberWithBool:NO - @li integer up to 19 digits -> NSNumber's -numberWithLongLong: - @li all other numbers -> NSDecimalNumber - - Since Objective-C doesn't have a dedicated class for boolean values, - these turns into NSNumber instances. However, since these are - initialised with the -initWithBool: method they round-trip back to JSON - properly. In other words, they won't silently suddenly become 0 or 1; - they'll be represented as 'true' and 'false' again. - - As an optimisation integers up to 19 digits in length (the max length - for signed long long integers) turn into NSNumber instances, while - complex ones turn into NSDecimalNumber instances. We can thus avoid any - loss of precision as JSON allows ridiculously large numbers. - - @page objc2json Objective-C to JSON - - Objective-C types are mapped to JSON types in the following way: - - @li NSNull -> null - @li NSString -> string - @li NSArray -> array - @li NSDictionary -> object - @li NSNumber's -initWithBool:YES -> true - @li NSNumber's -initWithBool:NO -> false - @li NSNumber -> number - - @note In JSON the keys of an object must be strings. NSDictionary - keys need not be, but attempting to convert an NSDictionary with - non-string keys into JSON will throw an exception. - - NSNumber instances created with the -numberWithBool: method are - converted into the JSON boolean "true" and "false" values, and vice - versa. Any other NSNumber instances are converted to a JSON number the - way you would expect. - - */ - -#import "SBJsonParser.h" -#import "SBJsonWriter.h" -#import "SBJsonStreamParser.h" -#import "SBJsonStreamParserAdapter.h" -#import "SBJsonStreamWriter.h" -#import "NSObject+SBJson.h" - diff --git a/Pods/SBJson/Classes/SBJsonParser.h b/Pods/SBJson/Classes/SBJsonParser.h deleted file mode 100755 index 751122f..0000000 --- a/Pods/SBJson/Classes/SBJsonParser.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - Copyright (C) 2009 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import - -/** - @brief Parse JSON Strings and NSData objects - - This uses SBJsonStreamParser internally. - - @see @ref objc2json - - */ - -@interface SBJsonParser : NSObject - -/** - @brief The maximum recursing depth. - - Defaults to 32. If the input is nested deeper than this the input will be deemed to be - malicious and the parser returns nil, signalling an error. ("Nested too deep".) You can - turn off this security feature by setting the maxDepth value to 0. - */ -@property NSUInteger maxDepth; - -/** - @brief Description of parse error - - This method returns the trace of the last method that failed. - You need to check the return value of the call you're making to figure out - if the call actually failed, before you know call this method. - - @return A string describing the error encountered, or nil if no error occured. - - */ -@property(copy) NSString *error; - -/** - @brief Return the object represented by the given NSData object. - - The data *must* be UTF8 encoded. - - @param data An NSData containing UTF8 encoded data to parse. - @return The NSArray or NSDictionary represented by the object, or nil if an error occured. - - */ -- (id)objectWithData:(NSData*)data; - -/** - @brief Return the object represented by the given string - - This method converts its input to an NSData object containing UTF8 and calls -objectWithData: with it. - - @return The NSArray or NSDictionary represented by the object, or nil if an error occured. - */ -- (id)objectWithString:(NSString *)repr; - -/** - @brief Return the object represented by the given string - - This method calls objectWithString: internally. If an error occurs, and if @p error - is not nil, it creates an NSError object and returns this through its second argument. - - @param jsonText the json string to parse - @param error pointer to an NSError object to populate on error - - @return The NSArray or NSDictionary represented by the object, or nil if an error occured. - */ - -- (id)objectWithString:(NSString*)jsonText - error:(NSError**)error; - -@end - - diff --git a/Pods/SBJson/Classes/SBJsonParser.m b/Pods/SBJson/Classes/SBJsonParser.m deleted file mode 100755 index d1b4b1e..0000000 --- a/Pods/SBJson/Classes/SBJsonParser.m +++ /dev/null @@ -1,100 +0,0 @@ -/* - Copyright (C) 2009,2010 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonParser.h" -#import "SBJsonStreamParser.h" -#import "SBJsonStreamParserAdapter.h" -#import "SBJsonStreamParserAccumulator.h" - -@implementation SBJsonParser - -@synthesize maxDepth; -@synthesize error; - -- (id)init { - self = [super init]; - if (self) - self.maxDepth = 32u; - return self; -} - - -#pragma mark Methods - -- (id)objectWithData:(NSData *)data { - - if (!data) { - self.error = @"Input was 'nil'"; - return nil; - } - - SBJsonStreamParserAccumulator *accumulator = [[SBJsonStreamParserAccumulator alloc] init]; - - SBJsonStreamParserAdapter *adapter = [[SBJsonStreamParserAdapter alloc] init]; - adapter.delegate = accumulator; - - SBJsonStreamParser *parser = [[SBJsonStreamParser alloc] init]; - parser.maxDepth = self.maxDepth; - parser.delegate = adapter; - - switch ([parser parse:data]) { - case SBJsonStreamParserComplete: - return accumulator.value; - break; - - case SBJsonStreamParserWaitingForData: - self.error = @"Unexpected end of input"; - break; - - case SBJsonStreamParserError: - self.error = parser.error; - break; - } - - return nil; -} - -- (id)objectWithString:(NSString *)repr { - return [self objectWithData:[repr dataUsingEncoding:NSUTF8StringEncoding]]; -} - -- (id)objectWithString:(NSString*)repr error:(NSError**)error_ { - id tmp = [self objectWithString:repr]; - if (tmp) - return tmp; - - if (error_) { - NSDictionary *ui = [NSDictionary dictionaryWithObjectsAndKeys:error, NSLocalizedDescriptionKey, nil]; - *error_ = [NSError errorWithDomain:@"org.brautaset.SBJsonParser.ErrorDomain" code:0 userInfo:ui]; - } - - return nil; -} - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamParser.h b/Pods/SBJson/Classes/SBJsonStreamParser.h deleted file mode 100755 index 2530eca..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamParser.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import - -@class SBJsonTokeniser; -@class SBJsonStreamParser; -@class SBJsonStreamParserState; - -typedef enum { - SBJsonStreamParserComplete, - SBJsonStreamParserWaitingForData, - SBJsonStreamParserError, -} SBJsonStreamParserStatus; - - -/** - @brief Delegate for interacting directly with the stream parser - - You will most likely find it much more convenient to implement the - SBJsonStreamParserAdapterDelegate protocol instead. - */ -@protocol SBJsonStreamParserDelegate - -/// Called when object start is found -- (void)parserFoundObjectStart:(SBJsonStreamParser*)parser; - -/// Called when object key is found -- (void)parser:(SBJsonStreamParser*)parser foundObjectKey:(NSString*)key; - -/// Called when object end is found -- (void)parserFoundObjectEnd:(SBJsonStreamParser*)parser; - -/// Called when array start is found -- (void)parserFoundArrayStart:(SBJsonStreamParser*)parser; - -/// Called when array end is found -- (void)parserFoundArrayEnd:(SBJsonStreamParser*)parser; - -/// Called when a boolean value is found -- (void)parser:(SBJsonStreamParser*)parser foundBoolean:(BOOL)x; - -/// Called when a null value is found -- (void)parserFoundNull:(SBJsonStreamParser*)parser; - -/// Called when a number is found -- (void)parser:(SBJsonStreamParser*)parser foundNumber:(NSNumber*)num; - -/// Called when a string is found -- (void)parser:(SBJsonStreamParser*)parser foundString:(NSString*)string; - -@end - - -/** - @brief Parse a stream of JSON data. - - Using this class directly you can reduce the apparent latency for each - download/parse cycle of documents over a slow connection. You can start - parsing *and return chunks of the parsed document* before the entire - document is downloaded. - - Using this class is also useful to parse huge documents on disk - bit by bit so you don't have to keep them all in memory. - - @see SBJsonStreamParserAdapter for more information. - - @see @ref objc2json - - */ -@interface SBJsonStreamParser : NSObject { -@private - SBJsonTokeniser *tokeniser; -} - -@property (nonatomic, unsafe_unretained) SBJsonStreamParserState *state; // Private -@property (nonatomic, readonly, strong) NSMutableArray *stateStack; // Private - -/** - @brief Expect multiple documents separated by whitespace - - Normally the @p -parse: method returns SBJsonStreamParserComplete when it's found a complete JSON document. - Attempting to parse any more data at that point is considered an error. ("Garbage after JSON".) - - If you set this property to true the parser will never return SBJsonStreamParserComplete. Rather, - once an object is completed it will expect another object to immediately follow, separated - only by (optional) whitespace. - - @see The TweetStream app in the Examples - */ -@property BOOL supportMultipleDocuments; - -/** - @brief Delegate to receive messages - - The object set here receives a series of messages as the parser breaks down the JSON stream - into valid tokens. - - @note - Usually this should be an instance of SBJsonStreamParserAdapter, but you can - substitute your own implementation of the SBJsonStreamParserDelegate protocol if you need to. - */ -@property (unsafe_unretained) id delegate; - -/** - @brief The max parse depth - - If the input is nested deeper than this the parser will halt parsing and return an error. - - Defaults to 32. - */ -@property NSUInteger maxDepth; - -/// Holds the error after SBJsonStreamParserError was returned -@property (copy) NSString *error; - -/** - @brief Parse some JSON - - The JSON is assumed to be UTF8 encoded. This can be a full JSON document, or a part of one. - - @param data An NSData object containing the next chunk of JSON - - @return - @li SBJsonStreamParserComplete if a full document was found - @li SBJsonStreamParserWaitingForData if a partial document was found and more data is required to complete it - @li SBJsonStreamParserError if an error occured. (See the error property for details in this case.) - - */ -- (SBJsonStreamParserStatus)parse:(NSData*)data; - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamParser.m b/Pods/SBJson/Classes/SBJsonStreamParser.m deleted file mode 100755 index 2243102..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamParser.m +++ /dev/null @@ -1,252 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamParser.h" -#import "SBJsonTokeniser.h" -#import "SBJsonStreamParserState.h" -#import - -@implementation SBJsonStreamParser - -@synthesize supportMultipleDocuments; -@synthesize error; -@synthesize delegate; -@synthesize maxDepth; -@synthesize state; -@synthesize stateStack; - -#pragma mark Housekeeping - -- (id)init { - self = [super init]; - if (self) { - maxDepth = 32u; - stateStack = [[NSMutableArray alloc] initWithCapacity:maxDepth]; - state = [SBJsonStreamParserStateStart sharedInstance]; - tokeniser = [[SBJsonTokeniser alloc] init]; - } - return self; -} - - -#pragma mark Methods - -- (NSString*)tokenName:(sbjson_token_t)token { - switch (token) { - case sbjson_token_array_start: - return @"start of array"; - break; - - case sbjson_token_array_end: - return @"end of array"; - break; - - case sbjson_token_number: - return @"number"; - break; - - case sbjson_token_string: - return @"string"; - break; - - case sbjson_token_true: - case sbjson_token_false: - return @"boolean"; - break; - - case sbjson_token_null: - return @"null"; - break; - - case sbjson_token_keyval_separator: - return @"key-value separator"; - break; - - case sbjson_token_separator: - return @"value separator"; - break; - - case sbjson_token_object_start: - return @"start of object"; - break; - - case sbjson_token_object_end: - return @"end of object"; - break; - - case sbjson_token_eof: - case sbjson_token_error: - break; - } - NSAssert(NO, @"Should not get here"); - return @""; -} - -- (void)maxDepthError { - self.error = [NSString stringWithFormat:@"Input depth exceeds max depth of %u", maxDepth]; - self.state = [SBJsonStreamParserStateError sharedInstance]; -} - -- (void)handleObjectStart { - if (stateStack.count >= maxDepth) { - [self maxDepthError]; - return; - } - - [delegate parserFoundObjectStart:self]; - [stateStack addObject:state]; - self.state = [SBJsonStreamParserStateObjectStart sharedInstance]; -} - -- (void)handleObjectEnd: (sbjson_token_t) tok { - self.state = [stateStack lastObject]; - [stateStack removeLastObject]; - [state parser:self shouldTransitionTo:tok]; - [delegate parserFoundObjectEnd:self]; -} - -- (void)handleArrayStart { - if (stateStack.count >= maxDepth) { - [self maxDepthError]; - return; - } - - [delegate parserFoundArrayStart:self]; - [stateStack addObject:state]; - self.state = [SBJsonStreamParserStateArrayStart sharedInstance]; -} - -- (void)handleArrayEnd: (sbjson_token_t) tok { - self.state = [stateStack lastObject]; - [stateStack removeLastObject]; - [state parser:self shouldTransitionTo:tok]; - [delegate parserFoundArrayEnd:self]; -} - -- (void) handleTokenNotExpectedHere: (sbjson_token_t) tok { - NSString *tokenName = [self tokenName:tok]; - NSString *stateName = [state name]; - - self.error = [NSString stringWithFormat:@"Token '%@' not expected %@", tokenName, stateName]; - self.state = [SBJsonStreamParserStateError sharedInstance]; -} - -- (SBJsonStreamParserStatus)parse:(NSData *)data_ { - @autoreleasepool { - [tokeniser appendData:data_]; - - for (;;) { - - if ([state isError]) - return SBJsonStreamParserError; - - NSObject *token; - sbjson_token_t tok = [tokeniser getToken:&token]; - switch (tok) { - case sbjson_token_eof: - return [state parserShouldReturn:self]; - break; - - case sbjson_token_error: - self.state = [SBJsonStreamParserStateError sharedInstance]; - self.error = tokeniser.error; - return SBJsonStreamParserError; - break; - - default: - - if (![state parser:self shouldAcceptToken:tok]) { - [self handleTokenNotExpectedHere: tok]; - return SBJsonStreamParserError; - } - - switch (tok) { - case sbjson_token_object_start: - [self handleObjectStart]; - break; - - case sbjson_token_object_end: - [self handleObjectEnd: tok]; - break; - - case sbjson_token_array_start: - [self handleArrayStart]; - break; - - case sbjson_token_array_end: - [self handleArrayEnd: tok]; - break; - - case sbjson_token_separator: - case sbjson_token_keyval_separator: - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_true: - [delegate parser:self foundBoolean:YES]; - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_false: - [delegate parser:self foundBoolean:NO]; - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_null: - [delegate parserFoundNull:self]; - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_number: - [delegate parser:self foundNumber:(NSNumber*)token]; - [state parser:self shouldTransitionTo:tok]; - break; - - case sbjson_token_string: - if ([state needKey]) - [delegate parser:self foundObjectKey:(NSString*)token]; - else - [delegate parser:self foundString:(NSString*)token]; - [state parser:self shouldTransitionTo:tok]; - break; - - default: - break; - } - break; - } - } - return SBJsonStreamParserComplete; - } -} - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamParserAccumulator.h b/Pods/SBJson/Classes/SBJsonStreamParserAccumulator.h deleted file mode 100755 index 141d6ee..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamParserAccumulator.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import -#import "SBJsonStreamParserAdapter.h" - -@interface SBJsonStreamParserAccumulator : NSObject - -@property (copy) id value; - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamParserAccumulator.m b/Pods/SBJson/Classes/SBJsonStreamParserAccumulator.m deleted file mode 100755 index 1d39ceb..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamParserAccumulator.m +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamParserAccumulator.h" - -@implementation SBJsonStreamParserAccumulator - -@synthesize value; - - -#pragma mark SBJsonStreamParserAdapterDelegate - -- (void)parser:(SBJsonStreamParser*)parser foundArray:(NSArray *)array { - value = array; -} - -- (void)parser:(SBJsonStreamParser*)parser foundObject:(NSDictionary *)dict { - value = dict; -} - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamParserAdapter.h b/Pods/SBJson/Classes/SBJsonStreamParserAdapter.h deleted file mode 100755 index 942bc01..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamParserAdapter.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import -#import "SBJsonStreamParser.h" - -typedef enum { - SBJsonStreamParserAdapterNone, - SBJsonStreamParserAdapterArray, - SBJsonStreamParserAdapterObject, -} SBJsonStreamParserAdapterType; - -/** - @brief Delegate for getting objects & arrays from the stream parser adapter - - @see The TweetStream example project. - */ -@protocol SBJsonStreamParserAdapterDelegate - -/** - @brief Called if a JSON array is found - - This method is called if a JSON array is found. - - */ -- (void)parser:(SBJsonStreamParser*)parser foundArray:(NSArray*)array; - -/** - @brief Called when a JSON object is found - - This method is called if a JSON object is found. - */ -- (void)parser:(SBJsonStreamParser*)parser foundObject:(NSDictionary*)dict; - -@end - -/** - @brief SBJsonStreamParserDelegate protocol adapter - - Rather than implementing the SBJsonStreamParserDelegate protocol yourself you will - most likely find it much more convenient to use an instance of this class and - implement the SBJsonStreamParserAdapterDelegate protocol instead. - - The default behaviour is that the delegate only receives one call from - either the -parser:foundArray: or -parser:foundObject: method when the - document is fully parsed. However, if your inputs contains multiple JSON - documents and you set the parser's -supportMultipleDocuments property to YES - you will get one call for each full method. - - @code - SBJsonStreamParserAdapter *adapter = [[[SBJsonStreamParserAdapter alloc] init] autorelease]; - adapter.delegate = self; - - SBJsonStreamParser *parser = [[[SBJsonStreamParser alloc] init] autorelease]; - parser.delegate = adapter; - parser.supportMultipleDocuments = YES; - - // Note that this input contains multiple top-level JSON documents - NSData *json = [@"[]{}[]{}" dataWithEncoding:NSUTF8StringEncoding]; - [parser parse:data]; - @endcode - - In the above example @p self will have the following sequence of methods called on it: - - @li -parser:foundArray: - @li -parser:foundObject: - @li -parser:foundArray: - @li -parser:foundObject: - - Often you won't have control over the input you're parsing, so can't make use of - this feature. But, all is not lost: this class will let you get the same effect by - allowing you to skip one or more of the outer enclosing objects. Thus, the next - example results in the same sequence of -parser:foundArray: / -parser:foundObject: - being called on your delegate. - - @code - SBJsonStreamParserAdapter *adapter = [[[SBJsonStreamParserAdapter alloc] init] autorelease]; - adapter.delegate = self; - adapter.levelsToSkip = 1; - - SBJsonStreamParser *parser = [[[SBJsonStreamParser alloc] init] autorelease]; - parser.delegate = adapter; - - // Note that this input contains A SINGLE top-level document - NSData *json = [@"[[],{},[],{}]" dataWithEncoding:NSUTF8StringEncoding]; - [parser parse:data]; - @endcode - -*/ -@interface SBJsonStreamParserAdapter : NSObject { -@private - NSUInteger depth; - NSMutableArray *array; - NSMutableDictionary *dict; - NSMutableArray *keyStack; - NSMutableArray *stack; - - SBJsonStreamParserAdapterType currentType; -} - -/** - @brief How many levels to skip - - This is useful for parsing huge JSON documents, or documents coming in over a very slow link. - - If you set this to N it will skip the outer N levels and call the -parser:foundArray: - or -parser:foundObject: methods for each of the inner objects, as appropriate. - - @see The StreamParserIntegrationTest.m file for examples -*/ -@property NSUInteger levelsToSkip; - -/** - @brief Your delegate object - Set this to the object you want to receive the SBJsonStreamParserAdapterDelegate messages. - */ -@property (unsafe_unretained) id delegate; - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamParserAdapter.m b/Pods/SBJson/Classes/SBJsonStreamParserAdapter.m deleted file mode 100755 index e77b534..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamParserAdapter.m +++ /dev/null @@ -1,164 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamParserAdapter.h" - -@interface SBJsonStreamParserAdapter () - -- (void)pop; -- (void)parser:(SBJsonStreamParser*)parser found:(id)obj; - -@end - - - -@implementation SBJsonStreamParserAdapter - -@synthesize delegate; -@synthesize levelsToSkip; - -#pragma mark Housekeeping - -- (id)init { - self = [super init]; - if (self) { - keyStack = [[NSMutableArray alloc] initWithCapacity:32]; - stack = [[NSMutableArray alloc] initWithCapacity:32]; - - currentType = SBJsonStreamParserAdapterNone; - } - return self; -} - - -#pragma mark Private methods - -- (void)pop { - [stack removeLastObject]; - array = nil; - dict = nil; - currentType = SBJsonStreamParserAdapterNone; - - id value = [stack lastObject]; - - if ([value isKindOfClass:[NSArray class]]) { - array = value; - currentType = SBJsonStreamParserAdapterArray; - } else if ([value isKindOfClass:[NSDictionary class]]) { - dict = value; - currentType = SBJsonStreamParserAdapterObject; - } -} - -- (void)parser:(SBJsonStreamParser*)parser found:(id)obj { - NSParameterAssert(obj); - - switch (currentType) { - case SBJsonStreamParserAdapterArray: - [array addObject:obj]; - break; - - case SBJsonStreamParserAdapterObject: - NSParameterAssert(keyStack.count); - [dict setObject:obj forKey:[keyStack lastObject]]; - [keyStack removeLastObject]; - break; - - case SBJsonStreamParserAdapterNone: - if ([obj isKindOfClass:[NSArray class]]) { - [delegate parser:parser foundArray:obj]; - } else { - [delegate parser:parser foundObject:obj]; - } - break; - - default: - break; - } -} - - -#pragma mark Delegate methods - -- (void)parserFoundObjectStart:(SBJsonStreamParser*)parser { - if (++depth > self.levelsToSkip) { - dict = [NSMutableDictionary new]; - [stack addObject:dict]; - currentType = SBJsonStreamParserAdapterObject; - } -} - -- (void)parser:(SBJsonStreamParser*)parser foundObjectKey:(NSString*)key_ { - [keyStack addObject:key_]; -} - -- (void)parserFoundObjectEnd:(SBJsonStreamParser*)parser { - if (depth-- > self.levelsToSkip) { - id value = dict; - [self pop]; - [self parser:parser found:value]; - } -} - -- (void)parserFoundArrayStart:(SBJsonStreamParser*)parser { - if (++depth > self.levelsToSkip) { - array = [NSMutableArray new]; - [stack addObject:array]; - currentType = SBJsonStreamParserAdapterArray; - } -} - -- (void)parserFoundArrayEnd:(SBJsonStreamParser*)parser { - if (depth-- > self.levelsToSkip) { - id value = array; - [self pop]; - [self parser:parser found:value]; - } -} - -- (void)parser:(SBJsonStreamParser*)parser foundBoolean:(BOOL)x { - [self parser:parser found:[NSNumber numberWithBool:x]]; -} - -- (void)parserFoundNull:(SBJsonStreamParser*)parser { - [self parser:parser found:[NSNull null]]; -} - -- (void)parser:(SBJsonStreamParser*)parser foundNumber:(NSNumber*)num { - [self parser:parser found:num]; -} - -- (void)parser:(SBJsonStreamParser*)parser foundString:(NSString*)string { - [self parser:parser found:string]; -} - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamParserState.h b/Pods/SBJson/Classes/SBJsonStreamParserState.h deleted file mode 100755 index ea893cb..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamParserState.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import - -#import "SBJsonTokeniser.h" -#import "SBJsonStreamParser.h" - -@interface SBJsonStreamParserState : NSObject -+ (id)sharedInstance; - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token; -- (SBJsonStreamParserStatus)parserShouldReturn:(SBJsonStreamParser*)parser; -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok; -- (BOOL)needKey; -- (BOOL)isError; - -- (NSString*)name; - -@end - -@interface SBJsonStreamParserStateStart : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateComplete : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateError : SBJsonStreamParserState -@end - - -@interface SBJsonStreamParserStateObjectStart : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateObjectGotKey : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateObjectSeparator : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateObjectGotValue : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateObjectNeedKey : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateArrayStart : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateArrayGotValue : SBJsonStreamParserState -@end - -@interface SBJsonStreamParserStateArrayNeedValue : SBJsonStreamParserState -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamParserState.m b/Pods/SBJson/Classes/SBJsonStreamParserState.m deleted file mode 100755 index a24c6f6..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamParserState.m +++ /dev/null @@ -1,355 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamParserState.h" -#import "SBJsonStreamParser.h" - -#define SINGLETON \ -+ (id)sharedInstance { \ - static id state; \ - if (!state) state = [[self alloc] init]; \ - return state; \ -} - -@implementation SBJsonStreamParserState - -+ (id)sharedInstance { return nil; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return NO; -} - -- (SBJsonStreamParserStatus)parserShouldReturn:(SBJsonStreamParser*)parser { - return SBJsonStreamParserWaitingForData; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok {} - -- (BOOL)needKey { - return NO; -} - -- (NSString*)name { - return @""; -} - -- (BOOL)isError { - return NO; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateStart - -SINGLETON - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return token == sbjson_token_array_start || token == sbjson_token_object_start; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - - SBJsonStreamParserState *state = nil; - switch (tok) { - case sbjson_token_array_start: - state = [SBJsonStreamParserStateArrayStart sharedInstance]; - break; - - case sbjson_token_object_start: - state = [SBJsonStreamParserStateObjectStart sharedInstance]; - break; - - case sbjson_token_array_end: - case sbjson_token_object_end: - if (parser.supportMultipleDocuments) - state = parser.state; - else - state = [SBJsonStreamParserStateComplete sharedInstance]; - break; - - case sbjson_token_eof: - return; - - default: - state = [SBJsonStreamParserStateError sharedInstance]; - break; - } - - - parser.state = state; -} - -- (NSString*)name { return @"before outer-most array or object"; } - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateComplete - -SINGLETON - -- (NSString*)name { return @"after outer-most array or object"; } - -- (SBJsonStreamParserStatus)parserShouldReturn:(SBJsonStreamParser*)parser { - return SBJsonStreamParserComplete; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateError - -SINGLETON - -- (NSString*)name { return @"in error"; } - -- (SBJsonStreamParserStatus)parserShouldReturn:(SBJsonStreamParser*)parser { - return SBJsonStreamParserError; -} - -- (BOOL)isError { - return YES; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectStart - -SINGLETON - -- (NSString*)name { return @"at beginning of object"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_object_end: - case sbjson_token_string: - return YES; - break; - default: - return NO; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectGotKey sharedInstance]; -} - -- (BOOL)needKey { - return YES; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectGotKey - -SINGLETON - -- (NSString*)name { return @"after object key"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return token == sbjson_token_keyval_separator; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectSeparator sharedInstance]; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectSeparator - -SINGLETON - -- (NSString*)name { return @"as object value"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_object_start: - case sbjson_token_array_start: - case sbjson_token_true: - case sbjson_token_false: - case sbjson_token_null: - case sbjson_token_number: - case sbjson_token_string: - return YES; - break; - - default: - return NO; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectGotValue sharedInstance]; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectGotValue - -SINGLETON - -- (NSString*)name { return @"after object value"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_object_end: - case sbjson_token_separator: - return YES; - break; - default: - return NO; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectNeedKey sharedInstance]; -} - - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateObjectNeedKey - -SINGLETON - -- (NSString*)name { return @"in place of object key"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return sbjson_token_string == token; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateObjectGotKey sharedInstance]; -} - -- (BOOL)needKey { - return YES; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateArrayStart - -SINGLETON - -- (NSString*)name { return @"at array start"; } - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_object_end: - case sbjson_token_keyval_separator: - case sbjson_token_separator: - return NO; - break; - - default: - return YES; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateArrayGotValue sharedInstance]; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateArrayGotValue - -SINGLETON - -- (NSString*)name { return @"after array value"; } - - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - return token == sbjson_token_array_end || token == sbjson_token_separator; -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - if (tok == sbjson_token_separator) - parser.state = [SBJsonStreamParserStateArrayNeedValue sharedInstance]; -} - -@end - -#pragma mark - - -@implementation SBJsonStreamParserStateArrayNeedValue - -SINGLETON - -- (NSString*)name { return @"as array value"; } - - -- (BOOL)parser:(SBJsonStreamParser*)parser shouldAcceptToken:(sbjson_token_t)token { - switch (token) { - case sbjson_token_array_end: - case sbjson_token_keyval_separator: - case sbjson_token_object_end: - case sbjson_token_separator: - return NO; - break; - - default: - return YES; - break; - } -} - -- (void)parser:(SBJsonStreamParser*)parser shouldTransitionTo:(sbjson_token_t)tok { - parser.state = [SBJsonStreamParserStateArrayGotValue sharedInstance]; -} - -@end - diff --git a/Pods/SBJson/Classes/SBJsonStreamWriter.h b/Pods/SBJson/Classes/SBJsonStreamWriter.h deleted file mode 100755 index a46b7a1..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamWriter.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import - -/// Enable JSON writing for non-native objects -@interface NSObject (SBProxyForJson) - -/** - @brief Allows generation of JSON for otherwise unsupported classes. - - If you have a custom class that you want to create a JSON representation - for you can implement this method in your class. It should return a - representation of your object defined in terms of objects that can be - translated into JSON. For example, a Person object might implement it like this: - - @code - - (id)proxyForJson { - return [NSDictionary dictionaryWithObjectsAndKeys: - name, @"name", - phone, @"phone", - email, @"email", - nil]; - } - @endcode - - */ -- (id)proxyForJson; - -@end - -@class SBJsonStreamWriter; - -@protocol SBJsonStreamWriterDelegate - -- (void)writer:(SBJsonStreamWriter*)writer appendBytes:(const void *)bytes length:(NSUInteger)length; - -@end - -@class SBJsonStreamWriterState; - -/** - @brief The Stream Writer class. - - Accepts a stream of messages and writes JSON of these to its delegate object. - - This class provides a range of high-, mid- and low-level methods. You can mix - and match calls to these. For example, you may want to call -writeArrayOpen - to start an array and then repeatedly call -writeObject: with various objects - before finishing off with a -writeArrayClose call. - - @see @ref json2objc - - */ - -@interface SBJsonStreamWriter : NSObject { - NSMutableDictionary *cache; -} - -@property (nonatomic, unsafe_unretained) SBJsonStreamWriterState *state; // Internal -@property (nonatomic, readonly, strong) NSMutableArray *stateStack; // Internal - -/** - @brief delegate to receive JSON output - Delegate that will receive messages with output. - */ -@property (unsafe_unretained) id delegate; - -/** - @brief The maximum recursing depth. - - Defaults to 512. If the input is nested deeper than this the input will be deemed to be - malicious and the parser returns nil, signalling an error. ("Nested too deep".) You can - turn off this security feature by setting the maxDepth value to 0. - */ -@property NSUInteger maxDepth; - -/** - @brief Whether we are generating human-readable (multiline) JSON. - - Set whether or not to generate human-readable JSON. The default is NO, which produces - JSON without any whitespace between tokens. If set to YES, generates human-readable - JSON with linebreaks after each array value and dictionary key/value pair, indented two - spaces per nesting level. - */ -@property BOOL humanReadable; - -/** - @brief Whether or not to sort the dictionary keys in the output. - - If this is set to YES, the dictionary keys in the JSON output will be in sorted order. - (This is useful if you need to compare two structures, for example.) The default is NO. - */ -@property BOOL sortKeys; - -/** - @brief An optional comparator to be used if sortKeys is YES. - - If this is nil, sorting will be done via @selector(compare:). - */ -@property (copy) NSComparator sortKeysComparator; - -/// Contains the error description after an error has occured. -@property (copy) NSString *error; - -/** - Write an NSDictionary to the JSON stream. - @return YES if successful, or NO on failure - */ -- (BOOL)writeObject:(NSDictionary*)dict; - -/** - Write an NSArray to the JSON stream. - @return YES if successful, or NO on failure - */ -- (BOOL)writeArray:(NSArray *)array; - -/** - Start writing an Object to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeObjectOpen; - -/** - Close the current object being written - @return YES if successful, or NO on failure -*/ -- (BOOL)writeObjectClose; - -/** Start writing an Array to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeArrayOpen; - -/** Close the current Array being written - @return YES if successful, or NO on failure -*/ -- (BOOL)writeArrayClose; - -/** Write a null to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeNull; - -/** Write a boolean to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeBool:(BOOL)x; - -/** Write a Number to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeNumber:(NSNumber*)n; - -/** Write a String to the stream - @return YES if successful, or NO on failure -*/ -- (BOOL)writeString:(NSString*)s; - -@end - -@interface SBJsonStreamWriter (Private) -- (BOOL)writeValue:(id)v; -- (void)appendBytes:(const void *)bytes length:(NSUInteger)length; -@end - diff --git a/Pods/SBJson/Classes/SBJsonStreamWriter.m b/Pods/SBJson/Classes/SBJsonStreamWriter.m deleted file mode 100755 index 38a06b4..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamWriter.m +++ /dev/null @@ -1,370 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamWriter.h" -#import "SBJsonStreamWriterState.h" - -static NSNumber *kNotANumber; -static NSNumber *kTrue; -static NSNumber *kFalse; -static NSNumber *kPositiveInfinity; -static NSNumber *kNegativeInfinity; - - -@implementation SBJsonStreamWriter - -@synthesize error; -@synthesize maxDepth; -@synthesize state; -@synthesize stateStack; -@synthesize humanReadable; -@synthesize sortKeys; -@synthesize sortKeysComparator; - -+ (void)initialize { - kNotANumber = [NSDecimalNumber notANumber]; - kPositiveInfinity = [NSNumber numberWithDouble:+INFINITY]; - kNegativeInfinity = [NSNumber numberWithDouble:-INFINITY]; - kTrue = [NSNumber numberWithBool:YES]; - kFalse = [NSNumber numberWithBool:NO]; -} - -#pragma mark Housekeeping - -@synthesize delegate; - -- (id)init { - self = [super init]; - if (self) { - maxDepth = 32u; - stateStack = [[NSMutableArray alloc] initWithCapacity:maxDepth]; - state = [SBJsonStreamWriterStateStart sharedInstance]; - cache = [[NSMutableDictionary alloc] initWithCapacity:32]; - } - return self; -} - -#pragma mark Methods - -- (void)appendBytes:(const void *)bytes length:(NSUInteger)length { - [delegate writer:self appendBytes:bytes length:length]; -} - -- (BOOL)writeObject:(NSDictionary *)dict { - if (![self writeObjectOpen]) - return NO; - - NSArray *keys = [dict allKeys]; - - if (sortKeys) { - if (sortKeysComparator) { - keys = [keys sortedArrayWithOptions:NSSortStable usingComparator:sortKeysComparator]; - } - else{ - keys = [keys sortedArrayUsingSelector:@selector(compare:)]; - } - } - - for (id k in keys) { - if (![k isKindOfClass:[NSString class]]) { - self.error = [NSString stringWithFormat:@"JSON object key must be string: %@", k]; - return NO; - } - - if (![self writeString:k]) - return NO; - if (![self writeValue:[dict objectForKey:k]]) - return NO; - } - - return [self writeObjectClose]; -} - -- (BOOL)writeArray:(NSArray*)array { - if (![self writeArrayOpen]) - return NO; - for (id v in array) - if (![self writeValue:v]) - return NO; - return [self writeArrayClose]; -} - - -- (BOOL)writeObjectOpen { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable && stateStack.count) [state appendWhitespace:self]; - - [stateStack addObject:state]; - self.state = [SBJsonStreamWriterStateObjectStart sharedInstance]; - - if (maxDepth && stateStack.count > maxDepth) { - self.error = @"Nested too deep"; - return NO; - } - - [delegate writer:self appendBytes:"{" length:1]; - return YES; -} - -- (BOOL)writeObjectClose { - if ([state isInvalidState:self]) return NO; - - SBJsonStreamWriterState *prev = state; - - self.state = [stateStack lastObject]; - [stateStack removeLastObject]; - - if (humanReadable) [prev appendWhitespace:self]; - [delegate writer:self appendBytes:"}" length:1]; - - [state transitionState:self]; - return YES; -} - -- (BOOL)writeArrayOpen { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable && stateStack.count) [state appendWhitespace:self]; - - [stateStack addObject:state]; - self.state = [SBJsonStreamWriterStateArrayStart sharedInstance]; - - if (maxDepth && stateStack.count > maxDepth) { - self.error = @"Nested too deep"; - return NO; - } - - [delegate writer:self appendBytes:"[" length:1]; - return YES; -} - -- (BOOL)writeArrayClose { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - - SBJsonStreamWriterState *prev = state; - - self.state = [stateStack lastObject]; - [stateStack removeLastObject]; - - if (humanReadable) [prev appendWhitespace:self]; - [delegate writer:self appendBytes:"]" length:1]; - - [state transitionState:self]; - return YES; -} - -- (BOOL)writeNull { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable) [state appendWhitespace:self]; - - [delegate writer:self appendBytes:"null" length:4]; - [state transitionState:self]; - return YES; -} - -- (BOOL)writeBool:(BOOL)x { - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable) [state appendWhitespace:self]; - - if (x) - [delegate writer:self appendBytes:"true" length:4]; - else - [delegate writer:self appendBytes:"false" length:5]; - [state transitionState:self]; - return YES; -} - - -- (BOOL)writeValue:(id)o { - if ([o isKindOfClass:[NSDictionary class]]) { - return [self writeObject:o]; - - } else if ([o isKindOfClass:[NSArray class]]) { - return [self writeArray:o]; - - } else if ([o isKindOfClass:[NSString class]]) { - [self writeString:o]; - return YES; - - } else if ([o isKindOfClass:[NSNumber class]]) { - return [self writeNumber:o]; - - } else if ([o isKindOfClass:[NSNull class]]) { - return [self writeNull]; - - } else if ([o respondsToSelector:@selector(proxyForJson)]) { - return [self writeValue:[o proxyForJson]]; - - } - - self.error = [NSString stringWithFormat:@"JSON serialisation not supported for %@", [o class]]; - return NO; -} - -static const char *strForChar(int c) { - switch (c) { - case 0: return "\\u0000"; break; - case 1: return "\\u0001"; break; - case 2: return "\\u0002"; break; - case 3: return "\\u0003"; break; - case 4: return "\\u0004"; break; - case 5: return "\\u0005"; break; - case 6: return "\\u0006"; break; - case 7: return "\\u0007"; break; - case 8: return "\\b"; break; - case 9: return "\\t"; break; - case 10: return "\\n"; break; - case 11: return "\\u000b"; break; - case 12: return "\\f"; break; - case 13: return "\\r"; break; - case 14: return "\\u000e"; break; - case 15: return "\\u000f"; break; - case 16: return "\\u0010"; break; - case 17: return "\\u0011"; break; - case 18: return "\\u0012"; break; - case 19: return "\\u0013"; break; - case 20: return "\\u0014"; break; - case 21: return "\\u0015"; break; - case 22: return "\\u0016"; break; - case 23: return "\\u0017"; break; - case 24: return "\\u0018"; break; - case 25: return "\\u0019"; break; - case 26: return "\\u001a"; break; - case 27: return "\\u001b"; break; - case 28: return "\\u001c"; break; - case 29: return "\\u001d"; break; - case 30: return "\\u001e"; break; - case 31: return "\\u001f"; break; - case 34: return "\\\""; break; - case 92: return "\\\\"; break; - } - NSLog(@"FUTFUTFUT: -->'%c'<---", c); - return "FUTFUTFUT"; -} - -- (BOOL)writeString:(NSString*)string { - if ([state isInvalidState:self]) return NO; - [state appendSeparator:self]; - if (humanReadable) [state appendWhitespace:self]; - - NSMutableData *buf = [cache objectForKey:string]; - if (!buf) { - - NSUInteger len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; - const char *utf8 = [string UTF8String]; - NSUInteger written = 0, i = 0; - - buf = [NSMutableData dataWithCapacity:(NSUInteger)(len * 1.1f)]; - [buf appendBytes:"\"" length:1]; - - for (i = 0; i < len; i++) { - int c = utf8[i]; - BOOL isControlChar = c >= 0 && c < 32; - if (isControlChar || c == '"' || c == '\\') { - if (i - written) - [buf appendBytes:utf8 + written length:i - written]; - written = i + 1; - - const char *t = strForChar(c); - [buf appendBytes:t length:strlen(t)]; - } - } - - if (i - written) - [buf appendBytes:utf8 + written length:i - written]; - - [buf appendBytes:"\"" length:1]; - [cache setObject:buf forKey:string]; - } - - [delegate writer:self appendBytes:[buf bytes] length:[buf length]]; - [state transitionState:self]; - return YES; -} - -- (BOOL)writeNumber:(NSNumber*)number { - if (number == kTrue || number == kFalse) - return [self writeBool:[number boolValue]]; - - if ([state isInvalidState:self]) return NO; - if ([state expectingKey:self]) return NO; - [state appendSeparator:self]; - if (humanReadable) [state appendWhitespace:self]; - - if ([kPositiveInfinity isEqualToNumber:number]) { - self.error = @"+Infinity is not a valid number in JSON"; - return NO; - - } else if ([kNegativeInfinity isEqualToNumber:number]) { - self.error = @"-Infinity is not a valid number in JSON"; - return NO; - - } else if ([kNotANumber isEqualToNumber:number]) { - self.error = @"NaN is not a valid number in JSON"; - return NO; - } - - const char *objcType = [number objCType]; - char num[128]; - size_t len; - - switch (objcType[0]) { - case 'c': case 'i': case 's': case 'l': case 'q': - len = snprintf(num, sizeof num, "%lld", [number longLongValue]); - break; - case 'C': case 'I': case 'S': case 'L': case 'Q': - len = snprintf(num, sizeof num, "%llu", [number unsignedLongLongValue]); - break; - case 'f': case 'd': default: - if ([number isKindOfClass:[NSDecimalNumber class]]) { - char const *utf8 = [[number stringValue] UTF8String]; - [delegate writer:self appendBytes:utf8 length: strlen(utf8)]; - [state transitionState:self]; - return YES; - } - len = snprintf(num, sizeof num, "%.17g", [number doubleValue]); - break; - } - [delegate writer:self appendBytes:num length: len]; - [state transitionState:self]; - return YES; -} - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamWriterAccumulator.h b/Pods/SBJson/Classes/SBJsonStreamWriterAccumulator.h deleted file mode 100755 index b12d0d5..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamWriterAccumulator.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamWriter.h" - -@interface SBJsonStreamWriterAccumulator : NSObject - -@property (readonly, copy) NSMutableData* data; - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamWriterAccumulator.m b/Pods/SBJson/Classes/SBJsonStreamWriterAccumulator.m deleted file mode 100755 index be65190..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamWriterAccumulator.m +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamWriterAccumulator.h" - - -@implementation SBJsonStreamWriterAccumulator - -@synthesize data; - -- (id)init { - self = [super init]; - if (self) { - data = [[NSMutableData alloc] initWithCapacity:8096u]; - } - return self; -} - - -#pragma mark SBJsonStreamWriterDelegate - -- (void)writer:(SBJsonStreamWriter *)writer appendBytes:(const void *)bytes length:(NSUInteger)length { - [data appendBytes:bytes length:length]; -} - -@end diff --git a/Pods/SBJson/Classes/SBJsonStreamWriterState.h b/Pods/SBJson/Classes/SBJsonStreamWriterState.h deleted file mode 100755 index 90d442a..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamWriterState.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import - -@class SBJsonStreamWriter; - -@interface SBJsonStreamWriterState : NSObject -+ (id)sharedInstance; -- (BOOL)isInvalidState:(SBJsonStreamWriter*)writer; -- (void)appendSeparator:(SBJsonStreamWriter*)writer; -- (BOOL)expectingKey:(SBJsonStreamWriter*)writer; -- (void)transitionState:(SBJsonStreamWriter*)writer; -- (void)appendWhitespace:(SBJsonStreamWriter*)writer; -@end - -@interface SBJsonStreamWriterStateObjectStart : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateObjectKey : SBJsonStreamWriterStateObjectStart -@end - -@interface SBJsonStreamWriterStateObjectValue : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateArrayStart : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateArrayValue : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateStart : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateComplete : SBJsonStreamWriterState -@end - -@interface SBJsonStreamWriterStateError : SBJsonStreamWriterState -@end - diff --git a/Pods/SBJson/Classes/SBJsonStreamWriterState.m b/Pods/SBJson/Classes/SBJsonStreamWriterState.m deleted file mode 100755 index 9f04cac..0000000 --- a/Pods/SBJson/Classes/SBJsonStreamWriterState.m +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonStreamWriterState.h" -#import "SBJsonStreamWriter.h" - -#define SINGLETON \ -+ (id)sharedInstance { \ - static id state; \ - if (!state) state = [[self alloc] init]; \ - return state; \ -} - - -@implementation SBJsonStreamWriterState -+ (id)sharedInstance { return nil; } -- (BOOL)isInvalidState:(SBJsonStreamWriter*)writer { return NO; } -- (void)appendSeparator:(SBJsonStreamWriter*)writer {} -- (BOOL)expectingKey:(SBJsonStreamWriter*)writer { return NO; } -- (void)transitionState:(SBJsonStreamWriter *)writer {} -- (void)appendWhitespace:(SBJsonStreamWriter*)writer { - [writer appendBytes:"\n" length:1]; - for (NSUInteger i = 0; i < writer.stateStack.count; i++) - [writer appendBytes:" " length:2]; -} -@end - -@implementation SBJsonStreamWriterStateObjectStart - -SINGLETON - -- (void)transitionState:(SBJsonStreamWriter *)writer { - writer.state = [SBJsonStreamWriterStateObjectValue sharedInstance]; -} -- (BOOL)expectingKey:(SBJsonStreamWriter *)writer { - writer.error = @"JSON object key must be string"; - return YES; -} -@end - -@implementation SBJsonStreamWriterStateObjectKey - -SINGLETON - -- (void)appendSeparator:(SBJsonStreamWriter *)writer { - [writer appendBytes:"," length:1]; -} -@end - -@implementation SBJsonStreamWriterStateObjectValue - -SINGLETON - -- (void)appendSeparator:(SBJsonStreamWriter *)writer { - [writer appendBytes:":" length:1]; -} -- (void)transitionState:(SBJsonStreamWriter *)writer { - writer.state = [SBJsonStreamWriterStateObjectKey sharedInstance]; -} -- (void)appendWhitespace:(SBJsonStreamWriter *)writer { - [writer appendBytes:" " length:1]; -} -@end - -@implementation SBJsonStreamWriterStateArrayStart - -SINGLETON - -- (void)transitionState:(SBJsonStreamWriter *)writer { - writer.state = [SBJsonStreamWriterStateArrayValue sharedInstance]; -} -@end - -@implementation SBJsonStreamWriterStateArrayValue - -SINGLETON - -- (void)appendSeparator:(SBJsonStreamWriter *)writer { - [writer appendBytes:"," length:1]; -} -@end - -@implementation SBJsonStreamWriterStateStart - -SINGLETON - - -- (void)transitionState:(SBJsonStreamWriter *)writer { - writer.state = [SBJsonStreamWriterStateComplete sharedInstance]; -} -- (void)appendSeparator:(SBJsonStreamWriter *)writer { -} -@end - -@implementation SBJsonStreamWriterStateComplete - -SINGLETON - -- (BOOL)isInvalidState:(SBJsonStreamWriter*)writer { - writer.error = @"Stream is closed"; - return YES; -} -@end - -@implementation SBJsonStreamWriterStateError - -SINGLETON - -@end - diff --git a/Pods/SBJson/Classes/SBJsonTokeniser.h b/Pods/SBJson/Classes/SBJsonTokeniser.h deleted file mode 100755 index e484a94..0000000 --- a/Pods/SBJson/Classes/SBJsonTokeniser.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import - -typedef enum { - sbjson_token_error = -1, - sbjson_token_eof, - - sbjson_token_array_start, - sbjson_token_array_end, - - sbjson_token_object_start, - sbjson_token_object_end, - - sbjson_token_separator, - sbjson_token_keyval_separator, - - sbjson_token_number, - sbjson_token_string, - sbjson_token_true, - sbjson_token_false, - sbjson_token_null, - -} sbjson_token_t; - -@class SBJsonUTF8Stream; - -@interface SBJsonTokeniser : NSObject - -@property (strong) SBJsonUTF8Stream *stream; -@property (copy) NSString *error; - -- (void)appendData:(NSData*)data_; - -- (sbjson_token_t)getToken:(NSObject**)token; - -@end diff --git a/Pods/SBJson/Classes/SBJsonTokeniser.m b/Pods/SBJson/Classes/SBJsonTokeniser.m deleted file mode 100755 index 4d0f364..0000000 --- a/Pods/SBJson/Classes/SBJsonTokeniser.m +++ /dev/null @@ -1,472 +0,0 @@ -/* - Copyright (c) 2010-2011, Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonTokeniser.h" -#import "SBJsonUTF8Stream.h" - -#define SBStringIsIllegalSurrogateHighCharacter(character) (((character) >= 0xD800UL) && ((character) <= 0xDFFFUL)) -#define SBStringIsSurrogateLowCharacter(character) ((character >= 0xDC00UL) && (character <= 0xDFFFUL)) -#define SBStringIsSurrogateHighCharacter(character) ((character >= 0xD800UL) && (character <= 0xDBFFUL)) - -static int const DECIMAL_MAX_PRECISION = 38; -static int const DECIMAL_EXPONENT_MAX = 127; -static short const DECIMAL_EXPONENT_MIN = -128; -static int const LONG_LONG_DIGITS = 20; - -static NSCharacterSet *kDecimalDigitCharacterSet; - -@implementation SBJsonTokeniser - -@synthesize error = _error; -@synthesize stream = _stream; - -+ (void)initialize { - kDecimalDigitCharacterSet = [NSCharacterSet decimalDigitCharacterSet]; -} - -- (id)init { - self = [super init]; - if (self) { - _stream = [[SBJsonUTF8Stream alloc] init]; - - } - - return self; -} - - -- (void)appendData:(NSData *)data_ { - [_stream appendData:data_]; -} - - -- (sbjson_token_t)match:(const char *)pattern length:(NSUInteger)len retval:(sbjson_token_t)token { - if (![_stream haveRemainingCharacters:len]) - return sbjson_token_eof; - - if ([_stream skipCharacters:pattern length:len]) - return token; - - self.error = [NSString stringWithFormat:@"Expected '%s' after initial '%.1s'", pattern, pattern]; - return sbjson_token_error; -} - -- (BOOL)decodeEscape:(unichar)ch into:(unichar*)decoded { - switch (ch) { - case '\\': - case '/': - case '"': - *decoded = ch; - break; - - case 'b': - *decoded = '\b'; - break; - - case 'n': - *decoded = '\n'; - break; - - case 'r': - *decoded = '\r'; - break; - - case 't': - *decoded = '\t'; - break; - - case 'f': - *decoded = '\f'; - break; - - default: - self.error = @"Illegal escape character"; - return NO; - break; - } - return YES; -} - -- (BOOL)decodeHexQuad:(unichar*)quad { - unichar c, tmp = 0; - - for (int i = 0; i < 4; i++) { - (void)[_stream getNextUnichar:&c]; - tmp *= 16; - switch (c) { - case '0' ... '9': - tmp += c - '0'; - break; - - case 'a' ... 'f': - tmp += 10 + c - 'a'; - break; - - case 'A' ... 'F': - tmp += 10 + c - 'A'; - break; - - default: - return NO; - } - } - *quad = tmp; - return YES; -} - -- (sbjson_token_t)getStringToken:(NSObject**)token { - NSMutableString *acc = nil; - - for (;;) { - [_stream skip]; - - unichar ch; - { - NSMutableString *string = nil; - - if (![_stream getStringFragment:&string]) - return sbjson_token_eof; - - if (!string) { - self.error = @"Broken Unicode encoding"; - return sbjson_token_error; - } - - if (![_stream getUnichar:&ch]) - return sbjson_token_eof; - - if (acc) { - [acc appendString:string]; - - } else if (ch == '"') { - *token = [string copy]; - [_stream skip]; - return sbjson_token_string; - - } else { - acc = [string mutableCopy]; - } - } - - - switch (ch) { - case 0 ... 0x1F: - self.error = [NSString stringWithFormat:@"Unescaped control character [0x%0.2X]", (int)ch]; - return sbjson_token_error; - break; - - case '"': - *token = acc; - [_stream skip]; - return sbjson_token_string; - break; - - case '\\': - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - if (ch == 'u') { - if (![_stream haveRemainingCharacters:5]) - return sbjson_token_eof; - - unichar hi; - if (![self decodeHexQuad:&hi]) { - self.error = @"Invalid hex quad"; - return sbjson_token_error; - } - - if (SBStringIsSurrogateHighCharacter(hi)) { - unichar lo; - - if (![_stream haveRemainingCharacters:6]) - return sbjson_token_eof; - - (void)[_stream getNextUnichar:&ch]; - (void)[_stream getNextUnichar:&lo]; - if (ch != '\\' || lo != 'u' || ![self decodeHexQuad:&lo]) { - self.error = @"Missing low character in surrogate pair"; - return sbjson_token_error; - } - - if (!SBStringIsSurrogateLowCharacter(lo)) { - self.error = @"Invalid low character in surrogate pair"; - return sbjson_token_error; - } - - [acc appendFormat:@"%C%C", hi, lo]; - } else if (SBStringIsIllegalSurrogateHighCharacter(hi)) { - self.error = @"Invalid high character in surrogate pair"; - return sbjson_token_error; - } else { - [acc appendFormat:@"%C", hi]; - } - - - } else { - unichar decoded; - if (![self decodeEscape:ch into:&decoded]) - return sbjson_token_error; - [acc appendFormat:@"%C", decoded]; - } - - break; - - default: { - self.error = [NSString stringWithFormat:@"Invalid UTF-8: '%x'", (int)ch]; - return sbjson_token_error; - break; - } - } - } - return sbjson_token_eof; -} - -- (sbjson_token_t)getNumberToken:(NSObject**)token { - - NSUInteger numberStart = _stream.index; - - unichar ch; - if (![_stream getUnichar:&ch]) - return sbjson_token_eof; - - BOOL isNegative = NO; - if (ch == '-') { - isNegative = YES; - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - unsigned long long mantissa = 0; - int mantissa_length = 0; - - if (ch == '0') { - mantissa_length++; - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - if ([kDecimalDigitCharacterSet characterIsMember:ch]) { - self.error = @"Leading zero is illegal in number"; - return sbjson_token_error; - } - } - - while ([kDecimalDigitCharacterSet characterIsMember:ch]) { - mantissa *= 10; - mantissa += (ch - '0'); - mantissa_length++; - - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - short exponent = 0; - BOOL isFloat = NO; - - if (ch == '.') { - isFloat = YES; - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - while ([kDecimalDigitCharacterSet characterIsMember:ch]) { - mantissa *= 10; - mantissa += (ch - '0'); - mantissa_length++; - exponent--; - - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - if (!exponent) { - self.error = @"No digits after decimal point"; - return sbjson_token_error; - } - } - - BOOL hasExponent = NO; - if (ch == 'e' || ch == 'E') { - hasExponent = YES; - - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - BOOL expIsNegative = NO; - if (ch == '-') { - expIsNegative = YES; - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - - } else if (ch == '+') { - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - short explicit_exponent = 0; - short explicit_exponent_length = 0; - while ([kDecimalDigitCharacterSet characterIsMember:ch]) { - explicit_exponent *= 10; - explicit_exponent += (ch - '0'); - explicit_exponent_length++; - - if (![_stream getNextUnichar:&ch]) - return sbjson_token_eof; - } - - if (explicit_exponent_length == 0) { - self.error = @"No digits in exponent"; - return sbjson_token_error; - } - - if (expIsNegative) - exponent -= explicit_exponent; - else - exponent += explicit_exponent; - } - - if (!mantissa_length && isNegative) { - self.error = @"No digits after initial minus"; - return sbjson_token_error; - - } else if (mantissa_length > DECIMAL_MAX_PRECISION) { - self.error = @"Precision is too high"; - return sbjson_token_error; - - } else if (exponent > DECIMAL_EXPONENT_MAX || exponent < DECIMAL_EXPONENT_MIN) { - self.error = @"Exponent out of range"; - return sbjson_token_error; - } - - if (mantissa_length <= LONG_LONG_DIGITS) { - if (!isFloat && !hasExponent) { - *token = [NSNumber numberWithLongLong: isNegative ? -mantissa : mantissa]; - - } else { - *token = [NSDecimalNumber decimalNumberWithMantissa:mantissa - exponent:exponent - isNegative:isNegative]; - } - - } else { - NSString *number = [_stream stringWithRange:NSMakeRange(numberStart, _stream.index - numberStart)]; - *token = [NSDecimalNumber decimalNumberWithString:number]; - - } - - return sbjson_token_number; -} - -- (sbjson_token_t)getToken:(NSObject **)token { - - [_stream skipWhitespace]; - - unichar ch; - if (![_stream getUnichar:&ch]) - return sbjson_token_eof; - - NSUInteger oldIndexLocation = _stream.index; - sbjson_token_t tok; - - switch (ch) { - case '[': - tok = sbjson_token_array_start; - [_stream skip]; - break; - - case ']': - tok = sbjson_token_array_end; - [_stream skip]; - break; - - case '{': - tok = sbjson_token_object_start; - [_stream skip]; - break; - - case ':': - tok = sbjson_token_keyval_separator; - [_stream skip]; - break; - - case '}': - tok = sbjson_token_object_end; - [_stream skip]; - break; - - case ',': - tok = sbjson_token_separator; - [_stream skip]; - break; - - case 'n': - tok = [self match:"null" length:4 retval:sbjson_token_null]; - break; - - case 't': - tok = [self match:"true" length:4 retval:sbjson_token_true]; - break; - - case 'f': - tok = [self match:"false" length:5 retval:sbjson_token_false]; - break; - - case '"': - tok = [self getStringToken:token]; - break; - - case '0' ... '9': - case '-': - tok = [self getNumberToken:token]; - break; - - case '+': - self.error = @"Leading + is illegal in number"; - tok = sbjson_token_error; - break; - - default: - self.error = [NSString stringWithFormat:@"Illegal start of token [%c]", ch]; - tok = sbjson_token_error; - break; - } - - if (tok == sbjson_token_eof) { - // We ran out of bytes in the middle of a token. - // We don't know how to restart in mid-flight, so - // rewind to the start of the token for next attempt. - // Hopefully we'll have more data then. - _stream.index = oldIndexLocation; - } - - return tok; -} - - -@end diff --git a/Pods/SBJson/Classes/SBJsonUTF8Stream.h b/Pods/SBJson/Classes/SBJsonUTF8Stream.h deleted file mode 100755 index a26f032..0000000 --- a/Pods/SBJson/Classes/SBJsonUTF8Stream.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (c) 2011, Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import - - -@interface SBJsonUTF8Stream : NSObject { -@private - const char *_bytes; - NSMutableData *_data; - NSUInteger _length; -} - -@property (assign) NSUInteger index; - -- (void)appendData:(NSData*)data_; - -- (BOOL)haveRemainingCharacters:(NSUInteger)chars; - -- (void)skip; -- (void)skipWhitespace; -- (BOOL)skipCharacters:(const char *)chars length:(NSUInteger)len; - -- (BOOL)getUnichar:(unichar*)ch; -- (BOOL)getNextUnichar:(unichar*)ch; -- (BOOL)getStringFragment:(NSString**)string; - -- (NSString*)stringWithRange:(NSRange)range; - -@end diff --git a/Pods/SBJson/Classes/SBJsonUTF8Stream.m b/Pods/SBJson/Classes/SBJsonUTF8Stream.m deleted file mode 100755 index f57015d..0000000 --- a/Pods/SBJson/Classes/SBJsonUTF8Stream.m +++ /dev/null @@ -1,141 +0,0 @@ -/* - Copyright (c) 2011, Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonUTF8Stream.h" - - -@implementation SBJsonUTF8Stream - -@synthesize index = _index; - -- (id)init { - self = [super init]; - if (self) { - _data = [[NSMutableData alloc] initWithCapacity:4096u]; - } - return self; -} - - -- (void)appendData:(NSData *)data_ { - - if (_index) { - // Discard data we've already parsed - [_data replaceBytesInRange:NSMakeRange(0, _index) withBytes:"" length:0]; - - // Reset index to point to current position - _index = 0; - } - - [_data appendData:data_]; - - // This is an optimisation. - _bytes = (const char*)[_data bytes]; - _length = [_data length]; -} - - -- (BOOL)getUnichar:(unichar*)ch { - if (_index < _length) { - *ch = (unichar)_bytes[_index]; - return YES; - } - return NO; -} - -- (BOOL)getNextUnichar:(unichar*)ch { - if (++_index < _length) { - *ch = (unichar)_bytes[_index]; - return YES; - } - return NO; -} - -- (BOOL)getStringFragment:(NSString **)string { - NSUInteger start = _index; - while (_index < _length) { - switch (_bytes[_index]) { - case '"': - case '\\': - case 0 ... 0x1f: - *string = [[NSString alloc] initWithBytes:(_bytes + start) - length:(_index - start) - encoding:NSUTF8StringEncoding]; - return YES; - break; - default: - _index++; - break; - } - } - return NO; -} - -- (void)skip { - _index++; -} - -- (void)skipWhitespace { - while (_index < _length) { - switch (_bytes[_index]) { - case ' ': - case '\t': - case '\r': - case '\n': - _index++; - break; - default: - return; - break; - } - } -} - -- (BOOL)haveRemainingCharacters:(NSUInteger)chars { - return [_data length] - _index >= chars; -} - -- (BOOL)skipCharacters:(const char *)chars length:(NSUInteger)len { - const void *bytes = ((const char*)[_data bytes]) + _index; - if (!memcmp(bytes, chars, len)) { - _index += len; - return YES; - } - return NO; -} - -- (NSString*)stringWithRange:(NSRange)range { - return [[NSString alloc] initWithBytes:_bytes + range.location length:range.length encoding:NSUTF8StringEncoding]; - -} - - -@end diff --git a/Pods/SBJson/Classes/SBJsonWriter.h b/Pods/SBJson/Classes/SBJsonWriter.h deleted file mode 100755 index 640816c..0000000 --- a/Pods/SBJson/Classes/SBJsonWriter.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - Copyright (C) 2009 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import - -/** - @brief The JSON writer class. - - This uses SBJsonStreamWriter internally. - - @see @ref json2objc - */ - -@interface SBJsonWriter : NSObject - -/** - @brief The maximum recursing depth. - - Defaults to 32. If the input is nested deeper than this the input will be deemed to be - malicious and the parser returns nil, signalling an error. ("Nested too deep".) You can - turn off this security feature by setting the maxDepth value to 0. - */ -@property NSUInteger maxDepth; - -/** - @brief Return an error trace, or nil if there was no errors. - - Note that this method returns the trace of the last method that failed. - You need to check the return value of the call you're making to figure out - if the call actually failed, before you know call this method. - */ -@property (readonly, copy) NSString *error; - -/** - @brief Whether we are generating human-readable (multiline) JSON. - - Set whether or not to generate human-readable JSON. The default is NO, which produces - JSON without any whitespace. (Except inside strings.) If set to YES, generates human-readable - JSON with linebreaks after each array value and dictionary key/value pair, indented two - spaces per nesting level. - */ -@property BOOL humanReadable; - -/** - @brief Whether or not to sort the dictionary keys in the output. - - If this is set to YES, the dictionary keys in the JSON output will be in sorted order. - (This is useful if you need to compare two structures, for example.) The default is NO. - */ -@property BOOL sortKeys; - -/** - @brief An optional comparator to be used if sortKeys is YES. - - If this is nil, sorting will be done via @selector(compare:). - */ -@property (copy) NSComparator sortKeysComparator; - -/** - @brief Return JSON representation for the given object. - - Returns a string containing JSON representation of the passed in value, or nil on error. - If nil is returned and @p error is not NULL, @p *error can be interrogated to find the cause of the error. - - @param value any instance that can be represented as JSON text. - */ -- (NSString*)stringWithObject:(id)value; - -/** - @brief Return JSON representation for the given object. - - Returns an NSData object containing JSON represented as UTF8 text, or nil on error. - - @param value any instance that can be represented as JSON text. - */ -- (NSData*)dataWithObject:(id)value; - -/** - @brief Return JSON representation (or fragment) for the given object. - - Returns a string containing JSON representation of the passed in value, or nil on error. - If nil is returned and @p error is not NULL, @p *error can be interrogated to find the cause of the error. - - @param value any instance that can be represented as a JSON fragment - @param error pointer to object to be populated with NSError on failure - - */- (NSString*)stringWithObject:(id)value - error:(NSError**)error; - - -@end diff --git a/Pods/SBJson/Classes/SBJsonWriter.m b/Pods/SBJson/Classes/SBJsonWriter.m deleted file mode 100755 index d200f9c..0000000 --- a/Pods/SBJson/Classes/SBJsonWriter.m +++ /dev/null @@ -1,112 +0,0 @@ -/* - Copyright (C) 2009 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SBJsonWriter.h" -#import "SBJsonStreamWriter.h" -#import "SBJsonStreamWriterAccumulator.h" - - -@interface SBJsonWriter () -@property (copy) NSString *error; -@end - -@implementation SBJsonWriter - -@synthesize sortKeys; -@synthesize humanReadable; - -@synthesize error; -@synthesize maxDepth; - -@synthesize sortKeysComparator; - -- (id)init { - self = [super init]; - if (self) { - self.maxDepth = 32u; - } - return self; -} - - -- (NSString*)stringWithObject:(id)value { - NSData *data = [self dataWithObject:value]; - if (data) - return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - return nil; -} - -- (NSString*)stringWithObject:(id)value error:(NSError**)error_ { - NSString *tmp = [self stringWithObject:value]; - if (tmp) - return tmp; - - if (error_) { - NSDictionary *ui = [NSDictionary dictionaryWithObjectsAndKeys:error, NSLocalizedDescriptionKey, nil]; - *error_ = [NSError errorWithDomain:@"org.brautaset.SBJsonWriter.ErrorDomain" code:0 userInfo:ui]; - } - - return nil; -} - -- (NSData*)dataWithObject:(id)object { - self.error = nil; - - SBJsonStreamWriterAccumulator *accumulator = [[SBJsonStreamWriterAccumulator alloc] init]; - - SBJsonStreamWriter *streamWriter = [[SBJsonStreamWriter alloc] init]; - streamWriter.sortKeys = self.sortKeys; - streamWriter.maxDepth = self.maxDepth; - streamWriter.sortKeysComparator = self.sortKeysComparator; - streamWriter.humanReadable = self.humanReadable; - streamWriter.delegate = accumulator; - - BOOL ok = NO; - if ([object isKindOfClass:[NSDictionary class]]) - ok = [streamWriter writeObject:object]; - - else if ([object isKindOfClass:[NSArray class]]) - ok = [streamWriter writeArray:object]; - - else if ([object respondsToSelector:@selector(proxyForJson)]) - return [self dataWithObject:[object proxyForJson]]; - else { - self.error = @"Not valid type for JSON"; - return nil; - } - - if (ok) - return accumulator.data; - - self.error = streamWriter.error; - return nil; -} - - -@end diff --git a/Pods/SBJson/Examples/DisplayPretty/.gitignore b/Pods/SBJson/Examples/DisplayPretty/.gitignore deleted file mode 100755 index 12cbb71..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.xcodeproj/* -!*.xcodeproj/project.pbxproj diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty.xcodeproj/project.pbxproj b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty.xcodeproj/project.pbxproj deleted file mode 100755 index 789d5be..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty.xcodeproj/project.pbxproj +++ /dev/null @@ -1,409 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - BC70BEF8138D35AF00638110 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC70BEF7138D35AF00638110 /* Cocoa.framework */; }; - BC70BF02138D35AF00638110 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = BC70BF00138D35AF00638110 /* InfoPlist.strings */; }; - BC70BF05138D35AF00638110 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BC70BF04138D35AF00638110 /* main.m */; }; - BC70BF08138D35AF00638110 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = BC70BF06138D35AF00638110 /* Credits.rtf */; }; - BC70BF0B138D35AF00638110 /* DisplayPrettyAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BC70BF0A138D35AF00638110 /* DisplayPrettyAppDelegate.m */; }; - BC70BF0E138D35AF00638110 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC70BF0C138D35AF00638110 /* MainMenu.xib */; }; - BC70BF62138D408900638110 /* DisplayPrettyController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC70BF61138D408900638110 /* DisplayPrettyController.m */; }; - BCA5BD8013BE00DD00223625 /* SBJson.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCA5BD6513BE00A200223625 /* SBJson.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - BCA5BD6413BE00A200223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD5D13BE00A200223625 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BC12323D1391D5CC00131607; - remoteInfo = SBJson; - }; - BCA5BD6613BE00A200223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD5D13BE00A200223625 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BC1232521391D5CC00131607; - remoteInfo = SBJsonTests; - }; - BCA5BD6813BE00A200223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD5D13BE00A200223625 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BCC2626913920FC7003D9994; - remoteInfo = "sbjson-ios"; - }; - BCA5BD6A13BE00A200223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD5D13BE00A200223625 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BCC2627313920FC7003D9994; - remoteInfo = "sbjson-iosTests"; - }; - BCA5BD7E13BE00D600223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD5D13BE00A200223625 /* SBJson.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = BC12323C1391D5CC00131607; - remoteInfo = SBJson; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - BC70BEF3138D35AF00638110 /* DisplayPretty.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DisplayPretty.app; sourceTree = BUILT_PRODUCTS_DIR; }; - BC70BEF7138D35AF00638110 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - BC70BEFA138D35AF00638110 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; - BC70BEFB138D35AF00638110 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - BC70BEFC138D35AF00638110 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - BC70BEFF138D35AF00638110 /* DisplayPretty-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "DisplayPretty-Info.plist"; sourceTree = ""; }; - BC70BF01138D35AF00638110 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - BC70BF03138D35AF00638110 /* DisplayPretty-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DisplayPretty-Prefix.pch"; sourceTree = ""; }; - BC70BF04138D35AF00638110 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - BC70BF07138D35AF00638110 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; - BC70BF09138D35AF00638110 /* DisplayPrettyAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DisplayPrettyAppDelegate.h; sourceTree = ""; }; - BC70BF0A138D35AF00638110 /* DisplayPrettyAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DisplayPrettyAppDelegate.m; sourceTree = ""; }; - BC70BF0D138D35AF00638110 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; - BC70BF60138D408900638110 /* DisplayPrettyController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DisplayPrettyController.h; sourceTree = ""; }; - BC70BF61138D408900638110 /* DisplayPrettyController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DisplayPrettyController.m; sourceTree = ""; }; - BC76484113A3600500666A48 /* SBJson.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SBJson.framework; sourceTree = SOURCE_ROOT; }; - BCA5BD5D13BE00A200223625 /* SBJson.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SBJson.xcodeproj; path = ../../SBJson.xcodeproj; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - BC70BEF0138D35AF00638110 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BCA5BD8013BE00DD00223625 /* SBJson.framework in Frameworks */, - BC70BEF8138D35AF00638110 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - BC70BEE8138D35AF00638110 = { - isa = PBXGroup; - children = ( - BCA5BD5D13BE00A200223625 /* SBJson.xcodeproj */, - BC70BEFD138D35AF00638110 /* DisplayPretty */, - BC70BEF6138D35AF00638110 /* Frameworks */, - BC70BEF4138D35AF00638110 /* Products */, - ); - sourceTree = ""; - }; - BC70BEF4138D35AF00638110 /* Products */ = { - isa = PBXGroup; - children = ( - BC70BEF3138D35AF00638110 /* DisplayPretty.app */, - ); - name = Products; - sourceTree = ""; - }; - BC70BEF6138D35AF00638110 /* Frameworks */ = { - isa = PBXGroup; - children = ( - BC76484113A3600500666A48 /* SBJson.framework */, - BC70BEF7138D35AF00638110 /* Cocoa.framework */, - BC70BEF9138D35AF00638110 /* Other Frameworks */, - ); - name = Frameworks; - sourceTree = ""; - }; - BC70BEF9138D35AF00638110 /* Other Frameworks */ = { - isa = PBXGroup; - children = ( - BC70BEFA138D35AF00638110 /* AppKit.framework */, - BC70BEFB138D35AF00638110 /* CoreData.framework */, - BC70BEFC138D35AF00638110 /* Foundation.framework */, - ); - name = "Other Frameworks"; - sourceTree = ""; - }; - BC70BEFD138D35AF00638110 /* DisplayPretty */ = { - isa = PBXGroup; - children = ( - BC70BF09138D35AF00638110 /* DisplayPrettyAppDelegate.h */, - BC70BF0A138D35AF00638110 /* DisplayPrettyAppDelegate.m */, - BC70BF60138D408900638110 /* DisplayPrettyController.h */, - BC70BF61138D408900638110 /* DisplayPrettyController.m */, - BC70BF0C138D35AF00638110 /* MainMenu.xib */, - BC70BEFE138D35AF00638110 /* Supporting Files */, - ); - path = DisplayPretty; - sourceTree = ""; - }; - BC70BEFE138D35AF00638110 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - BC70BEFF138D35AF00638110 /* DisplayPretty-Info.plist */, - BC70BF00138D35AF00638110 /* InfoPlist.strings */, - BC70BF03138D35AF00638110 /* DisplayPretty-Prefix.pch */, - BC70BF04138D35AF00638110 /* main.m */, - BC70BF06138D35AF00638110 /* Credits.rtf */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - BCA5BD5E13BE00A200223625 /* Products */ = { - isa = PBXGroup; - children = ( - BCA5BD6513BE00A200223625 /* SBJson.framework */, - BCA5BD6713BE00A200223625 /* SBJsonTests.octest */, - BCA5BD6913BE00A200223625 /* libsbjson-ios.a */, - BCA5BD6B13BE00A200223625 /* sbjson-iosTests.octest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - BC70BEF2138D35AF00638110 /* DisplayPretty */ = { - isa = PBXNativeTarget; - buildConfigurationList = BC70BF11138D35AF00638110 /* Build configuration list for PBXNativeTarget "DisplayPretty" */; - buildPhases = ( - BC70BEEF138D35AF00638110 /* Sources */, - BC70BEF0138D35AF00638110 /* Frameworks */, - BC70BEF1138D35AF00638110 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - BCA5BD7F13BE00D600223625 /* PBXTargetDependency */, - ); - name = DisplayPretty; - productName = DisplayPretty; - productReference = BC70BEF3138D35AF00638110 /* DisplayPretty.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BC70BEEA138D35AF00638110 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0420; - ORGANIZATIONNAME = "Stig Brautaset"; - }; - buildConfigurationList = BC70BEED138D35AF00638110 /* Build configuration list for PBXProject "DisplayPretty" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = BC70BEE8138D35AF00638110; - productRefGroup = BC70BEF4138D35AF00638110 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = BCA5BD5E13BE00A200223625 /* Products */; - ProjectRef = BCA5BD5D13BE00A200223625 /* SBJson.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - BC70BEF2138D35AF00638110 /* DisplayPretty */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - BCA5BD6513BE00A200223625 /* SBJson.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = SBJson.framework; - remoteRef = BCA5BD6413BE00A200223625 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - BCA5BD6713BE00A200223625 /* SBJsonTests.octest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = SBJsonTests.octest; - remoteRef = BCA5BD6613BE00A200223625 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - BCA5BD6913BE00A200223625 /* libsbjson-ios.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libsbjson-ios.a"; - remoteRef = BCA5BD6813BE00A200223625 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - BCA5BD6B13BE00A200223625 /* sbjson-iosTests.octest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "sbjson-iosTests.octest"; - remoteRef = BCA5BD6A13BE00A200223625 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - BC70BEF1138D35AF00638110 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC70BF02138D35AF00638110 /* InfoPlist.strings in Resources */, - BC70BF08138D35AF00638110 /* Credits.rtf in Resources */, - BC70BF0E138D35AF00638110 /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - BC70BEEF138D35AF00638110 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC70BF05138D35AF00638110 /* main.m in Sources */, - BC70BF0B138D35AF00638110 /* DisplayPrettyAppDelegate.m in Sources */, - BC70BF62138D408900638110 /* DisplayPrettyController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - BCA5BD7F13BE00D600223625 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SBJson; - targetProxy = BCA5BD7E13BE00D600223625 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - BC70BF00138D35AF00638110 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - BC70BF01138D35AF00638110 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - BC70BF06138D35AF00638110 /* Credits.rtf */ = { - isa = PBXVariantGroup; - children = ( - BC70BF07138D35AF00638110 /* en */, - ); - name = Credits.rtf; - sourceTree = ""; - }; - BC70BF0C138D35AF00638110 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - BC70BF0D138D35AF00638110 /* en */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - BC70BF0F138D35AF00638110 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = DEBUG; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.6; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - BC70BF10138D35AF00638110 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.6; - SDKROOT = macosx; - }; - name = Release; - }; - BC70BF12138D35AF00638110 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "DisplayPretty/DisplayPretty-Prefix.pch"; - INFOPLIST_FILE = "DisplayPretty/DisplayPretty-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - BC70BF13138D35AF00638110 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "DisplayPretty/DisplayPretty-Prefix.pch"; - INFOPLIST_FILE = "DisplayPretty/DisplayPretty-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - BC70BEED138D35AF00638110 /* Build configuration list for PBXProject "DisplayPretty" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC70BF0F138D35AF00638110 /* Debug */, - BC70BF10138D35AF00638110 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BC70BF11138D35AF00638110 /* Build configuration list for PBXNativeTarget "DisplayPretty" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC70BF12138D35AF00638110 /* Debug */, - BC70BF13138D35AF00638110 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BC70BEEA138D35AF00638110 /* Project object */; -} diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPretty-Info.plist b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPretty-Info.plist deleted file mode 100755 index 9b51702..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPretty-Info.plist +++ /dev/null @@ -1,32 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - org.brautaset.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPretty-Prefix.pch b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPretty-Prefix.pch deleted file mode 100755 index 704c823..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPretty-Prefix.pch +++ /dev/null @@ -1,7 +0,0 @@ -// -// Prefix header for all source files of the 'DisplayPretty' target in the 'DisplayPretty' project -// - -#ifdef __OBJC__ - #import -#endif diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyAppDelegate.h b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyAppDelegate.h deleted file mode 100755 index 6a5244b..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyAppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// DisplayPrettyAppDelegate.h -// DisplayPretty -// -// Created by Stig Brautaset on 25/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import - -@interface DisplayPrettyAppDelegate : NSObject { -@private - NSWindow *window; -} - -@property (assign) IBOutlet NSWindow *window; - -@end diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyAppDelegate.m b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyAppDelegate.m deleted file mode 100755 index bff32e5..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyAppDelegate.m +++ /dev/null @@ -1,20 +0,0 @@ -// -// DisplayPrettyAppDelegate.m -// DisplayPretty -// -// Created by Stig Brautaset on 25/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import "DisplayPrettyAppDelegate.h" - -@implementation DisplayPrettyAppDelegate - -@synthesize window; - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification -{ - // Insert code here to initialize your application -} - -@end diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyController.h b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyController.h deleted file mode 100755 index ea59140..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyController.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// DisplayPrettyController.h -// DisplayPretty -// -// Created by Stig Brautaset on 25/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import - -@class SBJsonParser; -@class SBJsonWriter; - -@interface DisplayPrettyController : NSObject { -@private - SBJsonParser *_parser; - SBJsonWriter *_writer; - - IBOutlet NSTextField *_source; - IBOutlet NSTextField *_formatted; -} - -- (IBAction)formatText:(id)sender; - -@end diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyController.m b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyController.m deleted file mode 100755 index 7f76012..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/DisplayPrettyController.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// DisplayPrettyController.m -// DisplayPretty -// -// Created by Stig Brautaset on 25/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import "DisplayPrettyController.h" -#import - -@implementation DisplayPrettyController - -- (id)init -{ - self = [super init]; - if (self) { - _parser = [[SBJsonParser alloc] init]; - _writer = [[SBJsonWriter alloc] init]; - _writer.humanReadable = YES; - _writer.sortKeys = YES; - } - return self; -} - -- (void)dealloc -{ - [_parser release]; - [_writer release]; - [super dealloc]; -} - -- (IBAction)formatText:(id)sender { - id object = [_parser objectWithString:[_source stringValue]]; - if (object) { - [_formatted setStringValue:[_writer stringWithObject:object]]; - } else { - [_formatted setStringValue:[NSString stringWithFormat:@"An error occurred: %@", _parser.error]]; - } - -} - -@end diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/en.lproj/Credits.rtf b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/en.lproj/Credits.rtf deleted file mode 100755 index 46576ef..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/en.lproj/Credits.rtf +++ /dev/null @@ -1,29 +0,0 @@ -{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} -{\colortbl;\red255\green255\blue255;} -\paperw9840\paperh8400 -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\b\fs24 \cf0 Engineering: -\b0 \ - Some people\ -\ - -\b Human Interface Design: -\b0 \ - Some other people\ -\ - -\b Testing: -\b0 \ - Hopefully not nobody\ -\ - -\b Documentation: -\b0 \ - Whoever\ -\ - -\b With special thanks to: -\b0 \ - Mom\ -} diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/en.lproj/InfoPlist.strings b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/en.lproj/InfoPlist.strings deleted file mode 100755 index 477b28f..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/en.lproj/MainMenu.xib b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/en.lproj/MainMenu.xib deleted file mode 100755 index 61a762e..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/en.lproj/MainMenu.xib +++ /dev/null @@ -1,4040 +0,0 @@ - - - - 1060 - 10J869 - 1306 - 1038.35 - 461.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1306 - - - YES - NSTextField - NSMenu - NSWindowTemplate - NSMenuItem - NSCustomObject - NSView - NSSplitView - NSCustomView - NSTextFieldCell - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - - - YES - - YES - - - - - YES - - NSApplication - - - FirstResponder - - - NSApplication - - - AMainMenu - - YES - - - DisplayPretty - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - DisplayPretty - - YES - - - About DisplayPretty - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferences… - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - YES - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Hide DisplayPretty - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quit DisplayPretty - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - File - - 1048576 - 2147483647 - - - submenuAction: - - File - - YES - - - New - n - 1048576 - 2147483647 - - - - - - Open… - o - 1048576 - 2147483647 - - - - - - Open Recent - - 1048576 - 2147483647 - - - submenuAction: - - Open Recent - - YES - - - Clear Menu - - 1048576 - 2147483647 - - - - - _NSRecentDocumentsMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Close - w - 1048576 - 2147483647 - - - - - - Save - s - 1048576 - 2147483647 - - - - - - Save As… - S - 1179648 - 2147483647 - - - - - - Revert to Saved - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Page Setup... - P - 1179648 - 2147483647 - - - - - - - Print… - p - 1048576 - 2147483647 - - - - - - - - - Edit - - 1048576 - 2147483647 - - - submenuAction: - - Edit - - YES - - - Undo - z - 1048576 - 2147483647 - - - - - - Redo - Z - 1179648 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cut - x - 1048576 - 2147483647 - - - - - - Copy - c - 1048576 - 2147483647 - - - - - - Paste - v - 1048576 - 2147483647 - - - - - - Paste and Match Style - V - 1572864 - 2147483647 - - - - - - Delete - - 1048576 - 2147483647 - - - - - - Select All - a - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Find - - 1048576 - 2147483647 - - - submenuAction: - - Find - - YES - - - Find… - f - 1048576 - 2147483647 - - - 1 - - - - Find Next - g - 1048576 - 2147483647 - - - 2 - - - - Find Previous - G - 1179648 - 2147483647 - - - 3 - - - - Use Selection for Find - e - 1048576 - 2147483647 - - - 7 - - - - Jump to Selection - j - 1048576 - 2147483647 - - - - - - - - - Spelling and Grammar - - 1048576 - 2147483647 - - - submenuAction: - - Spelling and Grammar - - YES - - - Show Spelling and Grammar - : - 1048576 - 2147483647 - - - - - - Check Document Now - ; - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Check Spelling While Typing - - 1048576 - 2147483647 - - - - - - Check Grammar With Spelling - - 1048576 - 2147483647 - - - - - - Correct Spelling Automatically - - 2147483647 - - - - - - - - - Substitutions - - 1048576 - 2147483647 - - - submenuAction: - - Substitutions - - YES - - - Show Substitutions - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Smart Copy/Paste - f - 1048576 - 2147483647 - - - 1 - - - - Smart Quotes - g - 1048576 - 2147483647 - - - 2 - - - - Smart Dashes - - 2147483647 - - - - - - Smart Links - G - 1179648 - 2147483647 - - - 3 - - - - Text Replacement - - 2147483647 - - - - - - - - - Transformations - - 2147483647 - - - submenuAction: - - Transformations - - YES - - - Make Upper Case - - 2147483647 - - - - - - Make Lower Case - - 2147483647 - - - - - - Capitalize - - 2147483647 - - - - - - - - - Speech - - 1048576 - 2147483647 - - - submenuAction: - - Speech - - YES - - - Start Speaking - - 1048576 - 2147483647 - - - - - - Stop Speaking - - 1048576 - 2147483647 - - - - - - - - - - - - Format - - 2147483647 - - - submenuAction: - - Format - - YES - - - Font - - 2147483647 - - - submenuAction: - - Font - - YES - - - Show Fonts - t - 1048576 - 2147483647 - - - - - - Bold - b - 1048576 - 2147483647 - - - 2 - - - - Italic - i - 1048576 - 2147483647 - - - 1 - - - - Underline - u - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Bigger - + - 1048576 - 2147483647 - - - 3 - - - - Smaller - - - 1048576 - 2147483647 - - - 4 - - - - YES - YES - - - 2147483647 - - - - - - Kern - - 2147483647 - - - submenuAction: - - Kern - - YES - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Tighten - - 2147483647 - - - - - - Loosen - - 2147483647 - - - - - - - - - Ligature - - 2147483647 - - - submenuAction: - - Ligature - - YES - - - Use Default - - 2147483647 - - - - - - Use None - - 2147483647 - - - - - - Use All - - 2147483647 - - - - - - - - - Baseline - - 2147483647 - - - submenuAction: - - Baseline - - YES - - - Use Default - - 2147483647 - - - - - - Superscript - - 2147483647 - - - - - - Subscript - - 2147483647 - - - - - - Raise - - 2147483647 - - - - - - Lower - - 2147483647 - - - - - - - - - YES - YES - - - 2147483647 - - - - - - Show Colors - C - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Copy Style - c - 1572864 - 2147483647 - - - - - - Paste Style - v - 1572864 - 2147483647 - - - - - _NSFontMenu - - - - - Text - - 2147483647 - - - submenuAction: - - Text - - YES - - - Align Left - { - 1048576 - 2147483647 - - - - - - Center - | - 1048576 - 2147483647 - - - - - - Justify - - 2147483647 - - - - - - Align Right - } - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Writing Direction - - 2147483647 - - - submenuAction: - - Writing Direction - - YES - - - YES - Paragraph - - 2147483647 - - - - - - CURlZmF1bHQ - - 2147483647 - - - - - - CUxlZnQgdG8gUmlnaHQ - - 2147483647 - - - - - - CVJpZ2h0IHRvIExlZnQ - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - YES - Selection - - 2147483647 - - - - - - CURlZmF1bHQ - - 2147483647 - - - - - - CUxlZnQgdG8gUmlnaHQ - - 2147483647 - - - - - - CVJpZ2h0IHRvIExlZnQ - - 2147483647 - - - - - - - - - YES - YES - - - 2147483647 - - - - - - Show Ruler - - 2147483647 - - - - - - Copy Ruler - c - 1310720 - 2147483647 - - - - - - Paste Ruler - v - 1310720 - 2147483647 - - - - - - - - - - - - View - - 1048576 - 2147483647 - - - submenuAction: - - View - - YES - - - Show Toolbar - t - 1572864 - 2147483647 - - - - - - Customize Toolbar… - - 1048576 - 2147483647 - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - Window - - YES - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - _NSWindowsMenu - - - - - Help - - 2147483647 - - - submenuAction: - - Help - - YES - - - DisplayPretty Help - ? - 1048576 - 2147483647 - - - - - _NSHelpMenu - - - - _NSMainMenu - - - 15 - 2 - {{335, 390}, {480, 360}} - 1954021376 - DisplayPretty - NSWindow - - - - 256 - - YES - - - 274 - - YES - - - 256 - - YES - - - 274 - {229, 320} - - - - YES - - -1805517311 - 272629760 - - - Monaco - 13 - 16 - - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - 3 - MAA - - - - - - {229, 320} - - - - NSView - - - - 256 - - YES - - - 274 - {201, 320} - - - - YES - - -2073952767 - 272633856 - - - - YES - - - - - - {{239, 0}, {201, 320}} - - - - NSView - - - {{20, 20}, {440, 320}} - - - - YES - 3 - - - {{7, 11}, {480, 360}} - - - - - {{0, 0}, {1920, 1178}} - {1e+13, 1e+13} - - - DisplayPrettyAppDelegate - - - DisplayPrettyController - - - NSFontManager - - - - 268 - {696, 17} - YES - - 68288064 - 272630784 - Label - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - - - - - YES - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - print: - - - - 86 - - - - runPageLayout: - - - - 87 - - - - clearRecentDocuments: - - - - 127 - - - - orderFrontStandardAboutPanel: - - - - 142 - - - - performClose: - - - - 193 - - - - toggleContinuousSpellChecking: - - - - 222 - - - - undo: - - - - 223 - - - - copy: - - - - 224 - - - - checkSpelling: - - - - 225 - - - - paste: - - - - 226 - - - - stopSpeaking: - - - - 227 - - - - cut: - - - - 228 - - - - showGuessPanel: - - - - 230 - - - - redo: - - - - 231 - - - - selectAll: - - - - 232 - - - - startSpeaking: - - - - 233 - - - - delete: - - - - 235 - - - - performZoom: - - - - 240 - - - - performFindPanelAction: - - - - 241 - - - - centerSelectionInVisibleArea: - - - - 245 - - - - toggleGrammarChecking: - - - - 347 - - - - toggleSmartInsertDelete: - - - - 355 - - - - toggleAutomaticQuoteSubstitution: - - - - 356 - - - - toggleAutomaticLinkDetection: - - - - 357 - - - - saveDocument: - - - - 362 - - - - saveDocumentAs: - - - - 363 - - - - revertDocumentToSaved: - - - - 364 - - - - runToolbarCustomizationPalette: - - - - 365 - - - - toggleToolbarShown: - - - - 366 - - - - hide: - - - - 367 - - - - hideOtherApplications: - - - - 368 - - - - unhideAllApplications: - - - - 370 - - - - newDocument: - - - - 373 - - - - openDocument: - - - - 374 - - - - addFontTrait: - - - - 421 - - - - addFontTrait: - - - - 422 - - - - modifyFont: - - - - 423 - - - - orderFrontFontPanel: - - - - 424 - - - - modifyFont: - - - - 425 - - - - raiseBaseline: - - - - 426 - - - - lowerBaseline: - - - - 427 - - - - copyFont: - - - - 428 - - - - subscript: - - - - 429 - - - - superscript: - - - - 430 - - - - tightenKerning: - - - - 431 - - - - underline: - - - - 432 - - - - orderFrontColorPanel: - - - - 433 - - - - useAllLigatures: - - - - 434 - - - - loosenKerning: - - - - 435 - - - - pasteFont: - - - - 436 - - - - unscript: - - - - 437 - - - - useStandardKerning: - - - - 438 - - - - useStandardLigatures: - - - - 439 - - - - turnOffLigatures: - - - - 440 - - - - turnOffKerning: - - - - 441 - - - - terminate: - - - - 449 - - - - toggleAutomaticSpellingCorrection: - - - - 456 - - - - orderFrontSubstitutionsPanel: - - - - 458 - - - - toggleAutomaticDashSubstitution: - - - - 461 - - - - toggleAutomaticTextReplacement: - - - - 463 - - - - uppercaseWord: - - - - 464 - - - - capitalizeWord: - - - - 467 - - - - lowercaseWord: - - - - 468 - - - - pasteAsPlainText: - - - - 486 - - - - performFindPanelAction: - - - - 487 - - - - performFindPanelAction: - - - - 488 - - - - performFindPanelAction: - - - - 489 - - - - showHelp: - - - - 493 - - - - delegate - - - - 495 - - - - alignCenter: - - - - 518 - - - - pasteRuler: - - - - 519 - - - - toggleRuler: - - - - 520 - - - - alignRight: - - - - 521 - - - - copyRuler: - - - - 522 - - - - alignJustified: - - - - 523 - - - - alignLeft: - - - - 524 - - - - makeBaseWritingDirectionNatural: - - - - 525 - - - - makeBaseWritingDirectionLeftToRight: - - - - 526 - - - - makeBaseWritingDirectionRightToLeft: - - - - 527 - - - - makeTextWritingDirectionNatural: - - - - 528 - - - - makeTextWritingDirectionLeftToRight: - - - - 529 - - - - makeTextWritingDirectionRightToLeft: - - - - 530 - - - - window - - - - 532 - - - - _error - - - - 559 - - - - _source - - - - 583 - - - - formatText: - - - - 584 - - - - _formatted - - - - 590 - - - - - YES - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 29 - - - YES - - - - - - - - - - - - 19 - - - YES - - - - - - 56 - - - YES - - - - - - 217 - - - YES - - - - - - 83 - - - YES - - - - - - 81 - - - YES - - - - - - - - - - - - - - - - 75 - - - - - 80 - - - - - 78 - - - - - 72 - - - - - 82 - - - - - 124 - - - YES - - - - - - 77 - - - - - 73 - - - - - 79 - - - - - 112 - - - - - 74 - - - - - 125 - - - YES - - - - - - 126 - - - - - 205 - - - YES - - - - - - - - - - - - - - - - - - - - 202 - - - - - 198 - - - - - 207 - - - - - 214 - - - - - 199 - - - - - 203 - - - - - 197 - - - - - 206 - - - - - 215 - - - - - 218 - - - YES - - - - - - 216 - - - YES - - - - - - 200 - - - YES - - - - - - - - - - - 219 - - - - - 201 - - - - - 204 - - - - - 220 - - - YES - - - - - - - - - - 213 - - - - - 210 - - - - - 221 - - - - - 208 - - - - - 209 - - - - - 57 - - - YES - - - - - - - - - - - - - - - - 58 - - - - - 134 - - - - - 150 - - - - - 136 - - - - - 144 - - - - - 129 - - - - - 143 - - - - - 236 - - - - - 131 - - - YES - - - - - - 149 - - - - - 145 - - - - - 130 - - - - - 24 - - - YES - - - - - - - - - 92 - - - - - 5 - - - - - 239 - - - - - 23 - - - - - 295 - - - YES - - - - - - 296 - - - YES - - - - - - - 297 - - - - - 298 - - - - - 211 - - - YES - - - - - - 212 - - - YES - - - - - - - 195 - - - - - 196 - - - - - 346 - - - - - 348 - - - YES - - - - - - 349 - - - YES - - - - - - - - - - - - 350 - - - - - 351 - - - - - 354 - - - - - 375 - - - YES - - - - - - 376 - - - YES - - - - - - - 377 - - - YES - - - - - - 388 - - - YES - - - - - - - - - - - - - - - - - - - - - 389 - - - - - 390 - - - - - 391 - - - - - 392 - - - - - 393 - - - - - 394 - - - - - 395 - - - - - 396 - - - - - 397 - - - YES - - - - - - 398 - - - YES - - - - - - 399 - - - YES - - - - - - 400 - - - - - 401 - - - - - 402 - - - - - 403 - - - - - 404 - - - - - 405 - - - YES - - - - - - - - - - 406 - - - - - 407 - - - - - 408 - - - - - 409 - - - - - 410 - - - - - 411 - - - YES - - - - - - - - 412 - - - - - 413 - - - - - 414 - - - - - 415 - - - YES - - - - - - - - - 416 - - - - - 417 - - - - - 418 - - - - - 419 - - - - - 420 - - - - - 450 - - - YES - - - - - - 451 - - - YES - - - - - - - - 452 - - - - - 453 - - - - - 454 - - - - - 457 - - - - - 459 - - - - - 460 - - - - - 462 - - - - - 465 - - - - - 466 - - - - - 485 - - - - - 490 - - - YES - - - - - - 491 - - - YES - - - - - - 492 - - - - - 494 - - - - - 496 - - - YES - - - - - - 497 - - - YES - - - - - - - - - - - - - - - 498 - - - - - 499 - - - - - 500 - - - - - 501 - - - - - 502 - - - - - 503 - - - YES - - - - - - 504 - - - - - 505 - - - - - 506 - - - - - 507 - - - - - 508 - - - YES - - - - - - - - - - - - - - 509 - - - - - 510 - - - - - 511 - - - - - 512 - - - - - 513 - - - - - 514 - - - - - 515 - - - - - 516 - - - - - 517 - - - - - 547 - - - YES - - - - - - 548 - - - - - 558 - - - - - 371 - - - YES - - - - - - 372 - - - YES - - - - - - 563 - - - YES - - - - - - - 565 - - - YES - - - - - - 588 - - - YES - - - - - - 589 - - - - - 564 - - - YES - - - - - - 577 - - - YES - - - - - - 578 - - - - - - - YES - - YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency - 112.IBPluginDependency - 112.ImportedFromIB2 - 124.IBPluginDependency - 124.ImportedFromIB2 - 125.IBPluginDependency - 125.ImportedFromIB2 - 125.editorWindowContentRectSynchronizationRect - 126.IBPluginDependency - 126.ImportedFromIB2 - 129.IBPluginDependency - 129.ImportedFromIB2 - 130.IBPluginDependency - 130.ImportedFromIB2 - 130.editorWindowContentRectSynchronizationRect - 131.IBPluginDependency - 131.ImportedFromIB2 - 134.IBPluginDependency - 134.ImportedFromIB2 - 136.IBPluginDependency - 136.ImportedFromIB2 - 143.IBPluginDependency - 143.ImportedFromIB2 - 144.IBPluginDependency - 144.ImportedFromIB2 - 145.IBPluginDependency - 145.ImportedFromIB2 - 149.IBPluginDependency - 149.ImportedFromIB2 - 150.IBPluginDependency - 150.ImportedFromIB2 - 19.IBPluginDependency - 19.ImportedFromIB2 - 195.IBPluginDependency - 195.ImportedFromIB2 - 196.IBPluginDependency - 196.ImportedFromIB2 - 197.IBPluginDependency - 197.ImportedFromIB2 - 198.IBPluginDependency - 198.ImportedFromIB2 - 199.IBPluginDependency - 199.ImportedFromIB2 - 200.IBEditorWindowLastContentRect - 200.IBPluginDependency - 200.ImportedFromIB2 - 200.editorWindowContentRectSynchronizationRect - 201.IBPluginDependency - 201.ImportedFromIB2 - 202.IBPluginDependency - 202.ImportedFromIB2 - 203.IBPluginDependency - 203.ImportedFromIB2 - 204.IBPluginDependency - 204.ImportedFromIB2 - 205.IBEditorWindowLastContentRect - 205.IBPluginDependency - 205.ImportedFromIB2 - 205.editorWindowContentRectSynchronizationRect - 206.IBPluginDependency - 206.ImportedFromIB2 - 207.IBPluginDependency - 207.ImportedFromIB2 - 208.IBPluginDependency - 208.ImportedFromIB2 - 209.IBPluginDependency - 209.ImportedFromIB2 - 210.IBPluginDependency - 210.ImportedFromIB2 - 211.IBPluginDependency - 211.ImportedFromIB2 - 212.IBPluginDependency - 212.ImportedFromIB2 - 212.editorWindowContentRectSynchronizationRect - 213.IBPluginDependency - 213.ImportedFromIB2 - 214.IBPluginDependency - 214.ImportedFromIB2 - 215.IBPluginDependency - 215.ImportedFromIB2 - 216.IBPluginDependency - 216.ImportedFromIB2 - 217.IBPluginDependency - 217.ImportedFromIB2 - 218.IBPluginDependency - 218.ImportedFromIB2 - 219.IBPluginDependency - 219.ImportedFromIB2 - 220.IBEditorWindowLastContentRect - 220.IBPluginDependency - 220.ImportedFromIB2 - 220.editorWindowContentRectSynchronizationRect - 221.IBPluginDependency - 221.ImportedFromIB2 - 23.IBPluginDependency - 23.ImportedFromIB2 - 236.IBPluginDependency - 236.ImportedFromIB2 - 239.IBPluginDependency - 239.ImportedFromIB2 - 24.IBEditorWindowLastContentRect - 24.IBPluginDependency - 24.ImportedFromIB2 - 24.editorWindowContentRectSynchronizationRect - 29.IBEditorWindowLastContentRect - 29.IBPluginDependency - 29.ImportedFromIB2 - 29.WindowOrigin - 29.editorWindowContentRectSynchronizationRect - 295.IBPluginDependency - 296.IBEditorWindowLastContentRect - 296.IBPluginDependency - 296.editorWindowContentRectSynchronizationRect - 297.IBPluginDependency - 298.IBPluginDependency - 346.IBPluginDependency - 346.ImportedFromIB2 - 348.IBPluginDependency - 348.ImportedFromIB2 - 349.IBEditorWindowLastContentRect - 349.IBPluginDependency - 349.ImportedFromIB2 - 349.editorWindowContentRectSynchronizationRect - 350.IBPluginDependency - 350.ImportedFromIB2 - 351.IBPluginDependency - 351.ImportedFromIB2 - 354.IBPluginDependency - 354.ImportedFromIB2 - 371.IBEditorWindowLastContentRect - 371.IBNSWindowAutoPositionCentersHorizontal - 371.IBNSWindowAutoPositionCentersVertical - 371.IBPluginDependency - 371.IBWindowTemplateEditedContentRect - 371.NSWindowTemplate.visibleAtLaunch - 371.editorWindowContentRectSynchronizationRect - 372.IBPluginDependency - 375.IBPluginDependency - 376.IBEditorWindowLastContentRect - 376.IBPluginDependency - 377.IBPluginDependency - 388.IBEditorWindowLastContentRect - 388.IBPluginDependency - 389.IBPluginDependency - 390.IBPluginDependency - 391.IBPluginDependency - 392.IBPluginDependency - 393.IBPluginDependency - 394.IBPluginDependency - 395.IBPluginDependency - 396.IBPluginDependency - 397.IBPluginDependency - 398.IBPluginDependency - 399.IBPluginDependency - 400.IBPluginDependency - 401.IBPluginDependency - 402.IBPluginDependency - 403.IBPluginDependency - 404.IBPluginDependency - 405.IBPluginDependency - 406.IBPluginDependency - 407.IBPluginDependency - 408.IBPluginDependency - 409.IBPluginDependency - 410.IBPluginDependency - 411.IBPluginDependency - 412.IBPluginDependency - 413.IBPluginDependency - 414.IBPluginDependency - 415.IBPluginDependency - 416.IBPluginDependency - 417.IBPluginDependency - 418.IBPluginDependency - 419.IBPluginDependency - 420.IBPluginDependency - 450.IBPluginDependency - 451.IBEditorWindowLastContentRect - 451.IBPluginDependency - 452.IBPluginDependency - 453.IBPluginDependency - 454.IBPluginDependency - 457.IBPluginDependency - 459.IBPluginDependency - 460.IBPluginDependency - 462.IBPluginDependency - 465.IBPluginDependency - 466.IBPluginDependency - 485.IBPluginDependency - 490.IBPluginDependency - 491.IBEditorWindowLastContentRect - 491.IBPluginDependency - 492.IBPluginDependency - 494.IBPluginDependency - 496.IBPluginDependency - 497.IBEditorWindowLastContentRect - 497.IBPluginDependency - 498.IBPluginDependency - 499.IBPluginDependency - 5.IBPluginDependency - 5.ImportedFromIB2 - 500.IBPluginDependency - 501.IBPluginDependency - 502.IBPluginDependency - 503.IBPluginDependency - 504.IBPluginDependency - 505.IBPluginDependency - 506.IBPluginDependency - 507.IBPluginDependency - 508.IBEditorWindowLastContentRect - 508.IBPluginDependency - 509.IBPluginDependency - 510.IBPluginDependency - 511.IBPluginDependency - 512.IBPluginDependency - 513.IBPluginDependency - 514.IBPluginDependency - 515.IBPluginDependency - 516.IBPluginDependency - 517.IBPluginDependency - 547.IBPluginDependency - 548.IBPluginDependency - 558.IBPluginDependency - 56.IBPluginDependency - 56.ImportedFromIB2 - 563.IBPluginDependency - 564.IBPluginDependency - 565.IBPluginDependency - 57.IBEditorWindowLastContentRect - 57.IBPluginDependency - 57.ImportedFromIB2 - 57.editorWindowContentRectSynchronizationRect - 577.IBPluginDependency - 578.IBPluginDependency - 58.IBPluginDependency - 58.ImportedFromIB2 - 588.IBPluginDependency - 589.IBPluginDependency - 72.IBPluginDependency - 72.ImportedFromIB2 - 73.IBPluginDependency - 73.ImportedFromIB2 - 74.IBPluginDependency - 74.ImportedFromIB2 - 75.IBPluginDependency - 75.ImportedFromIB2 - 77.IBPluginDependency - 77.ImportedFromIB2 - 78.IBPluginDependency - 78.ImportedFromIB2 - 79.IBPluginDependency - 79.ImportedFromIB2 - 80.IBPluginDependency - 80.ImportedFromIB2 - 81.IBEditorWindowLastContentRect - 81.IBPluginDependency - 81.ImportedFromIB2 - 81.editorWindowContentRectSynchronizationRect - 82.IBPluginDependency - 82.ImportedFromIB2 - 83.IBPluginDependency - 83.ImportedFromIB2 - 92.IBPluginDependency - 92.ImportedFromIB2 - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{522, 812}, {146, 23}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{436, 809}, {64, 6}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{753, 187}, {275, 113}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {275, 83}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{547, 180}, {254, 283}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{187, 434}, {243, 243}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {167, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{753, 217}, {238, 103}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {241, 103}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{654, 239}, {194, 73}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{525, 802}, {197, 73}} - {{380, 836}, {512, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - - {74, 862} - {{6, 978}, {478, 20}} - com.apple.InterfaceBuilder.CocoaPlugin - {{604, 269}, {231, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - {{475, 832}, {234, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{746, 287}, {220, 133}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{608, 612}, {215, 63}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{380, 496}, {480, 360}} - - - com.apple.InterfaceBuilder.CocoaPlugin - {{380, 496}, {480, 360}} - - {{33, 99}, {480, 360}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{591, 420}, {83, 43}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{523, 2}, {178, 283}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{753, 197}, {170, 63}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{725, 289}, {246, 23}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{674, 260}, {204, 183}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{878, 180}, {164, 173}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{286, 129}, {275, 183}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{23, 794}, {245, 183}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{452, 109}, {196, 203}} - com.apple.InterfaceBuilder.CocoaPlugin - - {{145, 474}, {199, 203}} - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - YES - - - - - - YES - - - - - 590 - - - - YES - - DisplayPrettyAppDelegate - NSObject - - window - NSWindow - - - window - - window - NSWindow - - - - IBProjectSource - ./Classes/DisplayPrettyAppDelegate.h - - - - DisplayPrettyController - NSObject - - formatText: - id - - - formatText: - - formatText: - id - - - - YES - - YES - _formatted - _source - - - YES - NSTextField - NSTextField - - - - YES - - YES - _formatted - _source - - - YES - - _formatted - NSTextField - - - _source - NSTextField - - - - - IBProjectSource - ./Classes/DisplayPrettyController.h - - - - NSDocument - - YES - - YES - printDocument: - revertDocumentToSaved: - runPageLayout: - saveDocument: - saveDocumentAs: - saveDocumentTo: - - - YES - id - id - id - id - id - id - - - - YES - - YES - printDocument: - revertDocumentToSaved: - runPageLayout: - saveDocument: - saveDocumentAs: - saveDocumentTo: - - - YES - - printDocument: - id - - - revertDocumentToSaved: - id - - - runPageLayout: - id - - - saveDocument: - id - - - saveDocumentAs: - id - - - saveDocumentTo: - id - - - - - IBProjectSource - ./Classes/NSDocument.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - 3 - - YES - - YES - NSMenuCheckmark - NSMenuMixedState - - - YES - {9, 8} - {7, 2} - - - - diff --git a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/main.m b/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/main.m deleted file mode 100755 index 3fa681c..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/DisplayPretty/main.m +++ /dev/null @@ -1,14 +0,0 @@ -// -// main.m -// DisplayPretty -// -// Created by Stig Brautaset on 25/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import - -int main(int argc, char *argv[]) -{ - return NSApplicationMain(argc, (const char **)argv); -} diff --git a/Pods/SBJson/Examples/DisplayPretty/Readme.md b/Pods/SBJson/Examples/DisplayPretty/Readme.md deleted file mode 100755 index 8e081af..0000000 --- a/Pods/SBJson/Examples/DisplayPretty/Readme.md +++ /dev/null @@ -1,4 +0,0 @@ -## Display Pretty - -This example contains two text boxes. Input JSON into the left one, and -have it reformatted into the right one when you hit Enter. diff --git a/Pods/SBJson/Examples/TweetStream/.gitignore b/Pods/SBJson/Examples/TweetStream/.gitignore deleted file mode 100755 index 12cbb71..0000000 --- a/Pods/SBJson/Examples/TweetStream/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.xcodeproj/* -!*.xcodeproj/project.pbxproj diff --git a/Pods/SBJson/Examples/TweetStream/Readme.md b/Pods/SBJson/Examples/TweetStream/Readme.md deleted file mode 100755 index 30ff894..0000000 --- a/Pods/SBJson/Examples/TweetStream/Readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# Tweet Stream - -This is an example of how to use json-framework to interact with [Twitter's streaming API](http://dev.twitter.com/pages/streaming_api). It uses the streaming capabilities of the parser to display an "endless" stream of tweets, despite performing only a single HTTP request. - -Additionally, this shows how you can use external linking to link to a checkout of json-framework in the same workspace, rather than copying the sources into your project. diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream.xcodeproj/project.pbxproj b/Pods/SBJson/Examples/TweetStream/TweetStream.xcodeproj/project.pbxproj deleted file mode 100755 index 816a501..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream.xcodeproj/project.pbxproj +++ /dev/null @@ -1,413 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - BC70BE51138C025500638110 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC70BE50138C025500638110 /* UIKit.framework */; }; - BC70BE53138C025500638110 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC70BE52138C025500638110 /* Foundation.framework */; }; - BC70BE55138C025500638110 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC70BE54138C025500638110 /* CoreGraphics.framework */; }; - BC70BE5B138C025500638110 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = BC70BE59138C025500638110 /* InfoPlist.strings */; }; - BC70BE5E138C025500638110 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = BC70BE5D138C025500638110 /* main.m */; }; - BC70BE61138C025500638110 /* TweetStreamAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = BC70BE60138C025500638110 /* TweetStreamAppDelegate.m */; }; - BC70BE64138C025600638110 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC70BE62138C025500638110 /* MainWindow.xib */; }; - BC70BE67138C025600638110 /* TweetStreamViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC70BE66138C025600638110 /* TweetStreamViewController.m */; }; - BC70BE6A138C025600638110 /* TweetStreamViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC70BE68138C025600638110 /* TweetStreamViewController.xib */; }; - BCA5BD7D13BE00CF00223625 /* libsbjson-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BCA5BD7813BE00A700223625 /* libsbjson-ios.a */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - BCA5BD7313BE00A700223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD6C13BE00A600223625 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BC12323D1391D5CC00131607; - remoteInfo = SBJson; - }; - BCA5BD7513BE00A700223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD6C13BE00A600223625 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BC1232521391D5CC00131607; - remoteInfo = SBJsonTests; - }; - BCA5BD7713BE00A700223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD6C13BE00A600223625 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BCC2626913920FC7003D9994; - remoteInfo = "sbjson-ios"; - }; - BCA5BD7913BE00A700223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD6C13BE00A600223625 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BCC2627313920FC7003D9994; - remoteInfo = "sbjson-iosTests"; - }; - BCA5BD7B13BE00C900223625 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BCA5BD6C13BE00A600223625 /* SBJson.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = BCC2626813920FC7003D9994; - remoteInfo = "sbjson-ios"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - BC70BE4C138C025500638110 /* TweetStream.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TweetStream.app; sourceTree = BUILT_PRODUCTS_DIR; }; - BC70BE50138C025500638110 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - BC70BE52138C025500638110 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - BC70BE54138C025500638110 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - BC70BE58138C025500638110 /* TweetStream-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TweetStream-Info.plist"; sourceTree = ""; }; - BC70BE5A138C025500638110 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - BC70BE5C138C025500638110 /* TweetStream-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TweetStream-Prefix.pch"; sourceTree = ""; }; - BC70BE5D138C025500638110 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - BC70BE5F138C025500638110 /* TweetStreamAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TweetStreamAppDelegate.h; sourceTree = ""; }; - BC70BE60138C025500638110 /* TweetStreamAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TweetStreamAppDelegate.m; sourceTree = ""; }; - BC70BE63138C025600638110 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainWindow.xib; sourceTree = ""; }; - BC70BE65138C025600638110 /* TweetStreamViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TweetStreamViewController.h; sourceTree = ""; }; - BC70BE66138C025600638110 /* TweetStreamViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TweetStreamViewController.m; sourceTree = ""; }; - BC70BE69138C025600638110 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/TweetStreamViewController.xib; sourceTree = ""; }; - BCA5BD6C13BE00A600223625 /* SBJson.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SBJson.xcodeproj; path = ../../SBJson.xcodeproj; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - BC70BE49138C025500638110 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BCA5BD7D13BE00CF00223625 /* libsbjson-ios.a in Frameworks */, - BC70BE51138C025500638110 /* UIKit.framework in Frameworks */, - BC70BE53138C025500638110 /* Foundation.framework in Frameworks */, - BC70BE55138C025500638110 /* CoreGraphics.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - BC70BE41138C025500638110 = { - isa = PBXGroup; - children = ( - BCA5BD6C13BE00A600223625 /* SBJson.xcodeproj */, - BC70BE56138C025500638110 /* TweetStream */, - BC70BE4F138C025500638110 /* Frameworks */, - BC70BE4D138C025500638110 /* Products */, - ); - sourceTree = ""; - }; - BC70BE4D138C025500638110 /* Products */ = { - isa = PBXGroup; - children = ( - BC70BE4C138C025500638110 /* TweetStream.app */, - ); - name = Products; - sourceTree = ""; - }; - BC70BE4F138C025500638110 /* Frameworks */ = { - isa = PBXGroup; - children = ( - BC70BE50138C025500638110 /* UIKit.framework */, - BC70BE52138C025500638110 /* Foundation.framework */, - BC70BE54138C025500638110 /* CoreGraphics.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - BC70BE56138C025500638110 /* TweetStream */ = { - isa = PBXGroup; - children = ( - BC70BE5F138C025500638110 /* TweetStreamAppDelegate.h */, - BC70BE60138C025500638110 /* TweetStreamAppDelegate.m */, - BC70BE62138C025500638110 /* MainWindow.xib */, - BC70BE65138C025600638110 /* TweetStreamViewController.h */, - BC70BE66138C025600638110 /* TweetStreamViewController.m */, - BC70BE68138C025600638110 /* TweetStreamViewController.xib */, - BC70BE57138C025500638110 /* Supporting Files */, - ); - path = TweetStream; - sourceTree = ""; - }; - BC70BE57138C025500638110 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - BC70BE58138C025500638110 /* TweetStream-Info.plist */, - BC70BE59138C025500638110 /* InfoPlist.strings */, - BC70BE5C138C025500638110 /* TweetStream-Prefix.pch */, - BC70BE5D138C025500638110 /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - BCA5BD6D13BE00A600223625 /* Products */ = { - isa = PBXGroup; - children = ( - BCA5BD7413BE00A700223625 /* SBJson.framework */, - BCA5BD7613BE00A700223625 /* SBJsonTests.octest */, - BCA5BD7813BE00A700223625 /* libsbjson-ios.a */, - BCA5BD7A13BE00A700223625 /* sbjson-iosTests.octest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - BC70BE4B138C025500638110 /* TweetStream */ = { - isa = PBXNativeTarget; - buildConfigurationList = BC70BE6D138C025600638110 /* Build configuration list for PBXNativeTarget "TweetStream" */; - buildPhases = ( - BC70BE48138C025500638110 /* Sources */, - BC70BE49138C025500638110 /* Frameworks */, - BC70BE4A138C025500638110 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - BCA5BD7C13BE00C900223625 /* PBXTargetDependency */, - ); - name = TweetStream; - productName = TweetStream; - productReference = BC70BE4C138C025500638110 /* TweetStream.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BC70BE43138C025500638110 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0420; - ORGANIZATIONNAME = "Stig Brautaset"; - }; - buildConfigurationList = BC70BE46138C025500638110 /* Build configuration list for PBXProject "TweetStream" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = BC70BE41138C025500638110; - productRefGroup = BC70BE4D138C025500638110 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = BCA5BD6D13BE00A600223625 /* Products */; - ProjectRef = BCA5BD6C13BE00A600223625 /* SBJson.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - BC70BE4B138C025500638110 /* TweetStream */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - BCA5BD7413BE00A700223625 /* SBJson.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = SBJson.framework; - remoteRef = BCA5BD7313BE00A700223625 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - BCA5BD7613BE00A700223625 /* SBJsonTests.octest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = SBJsonTests.octest; - remoteRef = BCA5BD7513BE00A700223625 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - BCA5BD7813BE00A700223625 /* libsbjson-ios.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libsbjson-ios.a"; - remoteRef = BCA5BD7713BE00A700223625 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - BCA5BD7A13BE00A700223625 /* sbjson-iosTests.octest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "sbjson-iosTests.octest"; - remoteRef = BCA5BD7913BE00A700223625 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - BC70BE4A138C025500638110 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC70BE5B138C025500638110 /* InfoPlist.strings in Resources */, - BC70BE64138C025600638110 /* MainWindow.xib in Resources */, - BC70BE6A138C025600638110 /* TweetStreamViewController.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - BC70BE48138C025500638110 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC70BE5E138C025500638110 /* main.m in Sources */, - BC70BE61138C025500638110 /* TweetStreamAppDelegate.m in Sources */, - BC70BE67138C025600638110 /* TweetStreamViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - BCA5BD7C13BE00C900223625 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "sbjson-ios"; - targetProxy = BCA5BD7B13BE00C900223625 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - BC70BE59138C025500638110 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - BC70BE5A138C025500638110 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - BC70BE62138C025500638110 /* MainWindow.xib */ = { - isa = PBXVariantGroup; - children = ( - BC70BE63138C025600638110 /* en */, - ); - name = MainWindow.xib; - sourceTree = ""; - }; - BC70BE68138C025600638110 /* TweetStreamViewController.xib */ = { - isa = PBXVariantGroup; - children = ( - BC70BE69138C025600638110 /* en */, - ); - name = TweetStreamViewController.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - BC70BE6B138C025600638110 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = DEBUG; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvmgcc42; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - SDKROOT = iphoneos; - }; - name = Debug; - }; - BC70BE6C138C025600638110 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_VERSION = com.apple.compilers.llvmgcc42; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - SDKROOT = iphoneos; - }; - name = Release; - }; - BC70BE6E138C025600638110 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - "\"$(SRCROOT)/../../../Library/Developer/Xcode/DerivedData/Examples-atkbdjffzwdsgfgrgywggtsrhcwl/Build/Products/Debug\"", - ); - GCC_DYNAMIC_NO_PIC = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "TweetStream/TweetStream-Prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INFOPLIST_FILE = "TweetStream/TweetStream-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - BC70BE6F138C025600638110 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ENABLE_OBJC_ARC = YES; - COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - "\"$(SRCROOT)/../../../Library/Developer/Xcode/DerivedData/Examples-atkbdjffzwdsgfgrgywggtsrhcwl/Build/Products/Debug\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "TweetStream/TweetStream-Prefix.pch"; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - INFOPLIST_FILE = "TweetStream/TweetStream-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - OTHER_LDFLAGS = ""; - PRODUCT_NAME = "$(TARGET_NAME)"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - BC70BE46138C025500638110 /* Build configuration list for PBXProject "TweetStream" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC70BE6B138C025600638110 /* Debug */, - BC70BE6C138C025600638110 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BC70BE6D138C025600638110 /* Build configuration list for PBXNativeTarget "TweetStream" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC70BE6E138C025600638110 /* Debug */, - BC70BE6F138C025600638110 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BC70BE43138C025500638110 /* Project object */; -} diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStream-Info.plist b/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStream-Info.plist deleted file mode 100755 index 1a12571..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStream-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - org.brautaset.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - NSMainNibFile - MainWindow - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStream-Prefix.pch b/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStream-Prefix.pch deleted file mode 100755 index 55f74f8..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStream-Prefix.pch +++ /dev/null @@ -1,14 +0,0 @@ -// -// Prefix header for all source files of the 'TweetStream' target in the 'TweetStream' project -// - -#import - -#ifndef __IPHONE_3_0 -#warning "This project uses features only available in iPhone SDK 3.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamAppDelegate.h b/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamAppDelegate.h deleted file mode 100755 index 43732ab..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamAppDelegate.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// TweetStreamAppDelegate.h -// TweetStream -// -// Created by Stig Brautaset on 24/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import - -@class TweetStreamViewController; - -@interface TweetStreamAppDelegate : NSObject { - -} - -@property (nonatomic, retain) IBOutlet UIWindow *window; - -@property (nonatomic, retain) IBOutlet TweetStreamViewController *viewController; - -@end diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamAppDelegate.m b/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamAppDelegate.m deleted file mode 100755 index 3e73430..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamAppDelegate.m +++ /dev/null @@ -1,69 +0,0 @@ -// -// TweetStreamAppDelegate.m -// TweetStream -// -// Created by Stig Brautaset on 24/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import "TweetStreamAppDelegate.h" - -#import "TweetStreamViewController.h" - -@implementation TweetStreamAppDelegate - - -@synthesize window=_window; - -@synthesize viewController=_viewController; - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - // Override point for customization after application launch. - - self.window.rootViewController = self.viewController; - [self.window makeKeyAndVisible]; - 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 diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamViewController.h b/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamViewController.h deleted file mode 100755 index 6ed1d6b..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamViewController.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// TweetStreamViewController.h -// TweetStream -// -// Created by Stig Brautaset on 24/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import - -@class SBJsonStreamParser; -@class SBJsonStreamParserAdapter; - -@interface TweetStreamViewController : UIViewController { - IBOutlet UITextField *username; - IBOutlet UITextField *password; - IBOutlet UITextView *tweet; - - NSURLConnection *theConnection; - SBJsonStreamParser *parser; - SBJsonStreamParserAdapter *adapter; -} - -- (IBAction)go; - -@end diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamViewController.m b/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamViewController.m deleted file mode 100755 index 550a7f3..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/TweetStreamViewController.m +++ /dev/null @@ -1,132 +0,0 @@ -// -// TweetStreamViewController.m -// TweetStream -// -// Created by Stig Brautaset on 24/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import "TweetStreamViewController.h" -#import - -@interface TweetStreamViewController () -@end - -@implementation TweetStreamViewController - - -- (void)didReceiveMemoryWarning -{ - // Releases the view if it doesn't have a superview. - [super didReceiveMemoryWarning]; - - // Release any cached data, images, etc that aren't in use. -} - -#pragma mark - View lifecycle - -// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. -- (void)viewDidLoad { - [super viewDidLoad]; -} - -- (void)viewDidUnload { - [super viewDidUnload]; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - // Return YES for supported orientations - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -#pragma mark Actions - -- (IBAction)go { - [username resignFirstResponder]; - [password resignFirstResponder]; - - // We don't want *all* the individual messages from the - // SBJsonStreamParser, just the top-level objects. The stream - // parser adapter exists for this purpose. - adapter = [[SBJsonStreamParserAdapter alloc] init]; - - // Set ourselves as the delegate, so we receive the messages - // from the adapter. - adapter.delegate = self; - - // Create a new stream parser.. - parser = [[SBJsonStreamParser alloc] init]; - - // .. and set our adapter as its delegate. - parser.delegate = adapter; - - // Normally it's an error if JSON is followed by anything but - // whitespace. Setting this means that the parser will be - // expecting the stream to contain multiple whitespace-separated - // JSON documents. - parser.supportMultipleDocuments = YES; - - NSString *url = @"https://stream.twitter.com/1/statuses/sample.json"; - - NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:url] - cachePolicy:NSURLRequestUseProtocolCachePolicy - timeoutInterval:60.0]; - - theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; -} - -#pragma mark SBJsonStreamParserAdapterDelegate methods - -- (void)parser:(SBJsonStreamParser *)parser foundArray:(NSArray *)array { - [NSException raise:@"unexpected" format:@"Should not get here"]; -} - -- (void)parser:(SBJsonStreamParser *)parser foundObject:(NSDictionary *)dict { - tweet.text = [dict objectForKey:@"text"]; -} - -#pragma mark NSURLConnectionDelegate methods - -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { - NSLog(@"Connection didReceiveResponse: %@ - %@", response, [response MIMEType]); -} - -- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { - NSLog(@"Connection didReceiveAuthenticationChallenge: %@", challenge); - - NSURLCredential *credential = [NSURLCredential credentialWithUser:username.text - password:password.text - persistence:NSURLCredentialPersistenceForSession]; - - [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; -} - -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { - NSLog(@"Connection didReceiveData of length: %u", data.length); - - // Parse the new chunk of data. The parser will append it to - // its internal buffer, then parse from where it left off in - // the last chunk. - SBJsonStreamParserStatus status = [parser parse:data]; - - if (status == SBJsonStreamParserError) { - tweet.text = [NSString stringWithFormat: @"The parser encountered an error: %@", parser.error]; - NSLog(@"Parser error: %@", parser.error); - - } else if (status == SBJsonStreamParserWaitingForData) { - NSLog(@"Parser waiting for more data"); - } -} - -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { - NSLog(@"Connection failed! Error - %@ %@", - [error localizedDescription], - [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]); -} - -- (void)connectionDidFinishLoading:(NSURLConnection *)connection { -} - - -@end diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/en.lproj/InfoPlist.strings b/Pods/SBJson/Examples/TweetStream/TweetStream/en.lproj/InfoPlist.strings deleted file mode 100755 index 477b28f..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/en.lproj/MainWindow.xib b/Pods/SBJson/Examples/TweetStream/TweetStream/en.lproj/MainWindow.xib deleted file mode 100755 index d5faea3..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/en.lproj/MainWindow.xib +++ /dev/null @@ -1,444 +0,0 @@ - - - - 1024 - 10D571 - 786 - 1038.29 - 460.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 112 - - - YES - - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - IBCocoaTouchFramework - - - TweetStreamViewController - - - 1 - - IBCocoaTouchFramework - NO - - - - 292 - {320, 480} - - 1 - MSAxIDEAA - - NO - NO - - IBCocoaTouchFramework - YES - - - - - YES - - - delegate - - - - 4 - - - - viewController - - - - 11 - - - - window - - - - 14 - - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - 3 - - - TweetStream App Delegate - - - -2 - - - - - 10 - - - - - 12 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 10.CustomClassName - 10.IBEditorWindowLastContentRect - 10.IBPluginDependency - 12.IBEditorWindowLastContentRect - 12.IBPluginDependency - 3.CustomClassName - 3.IBPluginDependency - - - YES - UIApplication - UIResponder - TweetStreamViewController - {{234, 376}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - {{525, 346}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - TweetStreamAppDelegate - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - YES - - - - - YES - - - YES - - - - 15 - - - - YES - - UIWindow - UIView - - IBUserSource - - - - - TweetStreamAppDelegate - NSObject - - YES - - YES - viewController - window - - - YES - TweetStreamViewController - UIWindow - - - - YES - - YES - viewController - window - - - YES - - viewController - TweetStreamViewController - - - window - UIWindow - - - - - IBProjectSource - TweetStreamAppDelegate.h - - - - TweetStreamAppDelegate - NSObject - - IBUserSource - - - - - TweetStreamViewController - UIViewController - - IBProjectSource - TweetStreamViewController.h - - - - - YES - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UIApplication - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIApplication.h - - - - UIResponder - NSObject - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UIPopoverController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UISplitViewController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - UIWindow - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIWindow.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - TweetStream.xcodeproj - 3 - 112 - - diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/en.lproj/TweetStreamViewController.xib b/Pods/SBJson/Examples/TweetStream/TweetStream/en.lproj/TweetStreamViewController.xib deleted file mode 100755 index 89aa803..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/en.lproj/TweetStreamViewController.xib +++ /dev/null @@ -1,384 +0,0 @@ - - - - 1056 - 10J869 - 1306 - 1038.35 - 461.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 301 - - - YES - IBUITextView - IBUIButton - IBUIView - IBUITextField - IBProxyObject - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - YES - - - 292 - {{20, 20}, {280, 31}} - - - - NO - YES - IBCocoaTouchFramework - 0 - - 3 - Username - - 3 - MAA - - 2 - - - - Helvetica - 12 - 16 - - YES - 17 - - IBCocoaTouchFramework - - - - - 292 - {{20, 59}, {280, 31}} - - - - NO - YES - IBCocoaTouchFramework - 0 - - 3 - Password - - 3 - MAA - - - - YES - 17 - - YES - YES - IBCocoaTouchFramework - - - - - 292 - {{124, 98}, {72, 37}} - - - - NO - IBCocoaTouchFramework - 0 - 0 - - Helvetica-Bold - 15 - 16 - - 1 - Go! - - 3 - MQA - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - 3 - MC41AA - - - - - 292 - {{20, 143}, {280, 297}} - - - - - 1 - MSAxIDEAA - - YES - YES - IBCocoaTouchFramework - Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. - - 2 - IBCocoaTouchFramework - - - - {{0, 20}, {320, 460}} - - - - - 3 - MC43NQA - - - NO - - IBCocoaTouchFramework - - - - - YES - - - view - - - - 7 - - - - password - - - - 18 - - - - tweet - - - - 19 - - - - username - - - - 20 - - - - go - - - 7 - - 21 - - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 6 - - - YES - - - - - - - - - 9 - - - - - 10 - - - - - 11 - - - - - 12 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 10.IBPluginDependency - 11.IBPluginDependency - 12.IBPluginDependency - 6.IBEditorWindowLastContentRect - 6.IBPluginDependency - 9.IBPluginDependency - - - YES - TweetStreamViewController - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - {{239, 654}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 21 - - - - YES - - TweetStreamViewController - UIViewController - - go - id - - - go - - go - id - - - - YES - - YES - password - tweet - username - - - YES - UITextField - UITextView - UITextField - - - - YES - - YES - password - tweet - username - - - YES - - password - UITextField - - - tweet - UITextView - - - username - UITextField - - - - - IBProjectSource - ./Classes/TweetStreamViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 301 - - diff --git a/Pods/SBJson/Examples/TweetStream/TweetStream/main.m b/Pods/SBJson/Examples/TweetStream/TweetStream/main.m deleted file mode 100755 index 3e99043..0000000 --- a/Pods/SBJson/Examples/TweetStream/TweetStream/main.m +++ /dev/null @@ -1,20 +0,0 @@ -// -// main.m -// TweetStream -// -// Created by Stig Brautaset on 24/05/2011. -// Copyright 2011 Stig Brautaset. All rights reserved. -// - -#import - -#import "TweetStreamAppDelegate.h" - -int main(int argc, char *argv[]) -{ - int retVal = 0; - @autoreleasepool { - retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([TweetStreamAppDelegate class])); - } - return retVal; -} diff --git a/Pods/SBJson/INSTALL.md b/Pods/SBJson/INSTALL.md deleted file mode 100755 index 5e35727..0000000 --- a/Pods/SBJson/INSTALL.md +++ /dev/null @@ -1,34 +0,0 @@ -Installation -============ - -The simplest way to start using JSON in your application is to copy all -the source files (the contents of the `Classes` folder) into your own -Xcode project. - -1. In the Finder, navigate to the distribution's folder -1. Navigate into the `Classes` folder. -1. Select all the files and drag-and-drop them into your Xcode project. -1. Tick the **Copy items into destination group's folder** option. -1. Use `#import "SBJson.h"` in your source files. - -That should be it. Now create that Twitter client! - -Upgrading ---------- - -If you're upgrading from a previous version, make sure you're deleting -the old SBJson classes first, moving all the files to Trash. - - -Linking rather than copying ---------------------------- - -Copying the SBJson classes into your project isn't the only way to use -this framework. With Xcode 4's workspaces it has become much simpler to -link to dependant projects. The examples in the distribution link to the -iOS library and Mac framework, respectively. Des Hartman wrote [a blog -post with step-by-step instructions for iOS][link-ios]. - -[link-ios]: http://deshartman.wordpress.com/2011/09/02/configuring-sbjson-framework-for-xcode-4-2/ - - diff --git a/Pods/SBJson/InstallDocumentation.sh b/Pods/SBJson/InstallDocumentation.sh deleted file mode 100755 index 90e0912..0000000 --- a/Pods/SBJson/InstallDocumentation.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/sh -# -# Running this script installs the SBJson documentation so that it -# integrates with Xcode. It requires Doxygen to be installed. -# -# See also: -# http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# - -set -x - -VERSION=$(agvtool mvers -terse1) -TMPDIR=$(mktemp -d /tmp/$(basename $0).XXXXXX) || exit 1 -DOXYFILE=$TMPDIR/doxygen.config -DOXYGEN=/Applications/Doxygen.app/Contents/Resources/doxygen -PROJECT=$(echo *.xcodeproj | cut -d. -f1) - -if ! test -x $DOXYGEN ; then - echo "*** Install Doxygen to get documentation generated for you automatically ***" - exit 1 -fi - -# Create a doxygen configuration file with only the settings we care -# about -$DOXYGEN -g - > $DOXYFILE - -cat <> $DOXYFILE - -PROJECT_NAME = $PROJECT -PROJECT_NUMBER = $VERSION -OUTPUT_DIRECTORY = $TMPDIR -INPUT = Classes -FILE_PATTERNS = *.h *.m - -HIDE_UNDOC_MEMBERS = YES -HIDE_UNDOC_CLASSES = YES -HIDE_UNDOC_RELATIONS = YES -REPEAT_BRIEF = NO -CASE_SENSE_NAMES = YES -INLINE_INHERITED_MEMB = YES -SHOW_FILES = NO -SHOW_INCLUDE_FILES = NO -GENERATE_LATEX = NO -SEARCHENGINE = NO -GENERATE_HTML = YES -GENERATE_DOCSET = YES -DOCSET_FEEDNAME = "$PROJECT API Documentation" -DOCSET_BUNDLE_ID = org.brautaset.$PROJECT - -EOF - -# Run doxygen on the updated config file. -# doxygen creates a Makefile that does most of the heavy lifting. -$DOXYGEN $DOXYFILE - -# make will invoke docsetutil. Take a look at the Makefile to see how this is done. -make -C $TMPDIR/html install - -# Construct a temporary applescript file to tell Xcode to load a -# docset. -cat < $TMPDIR/loadDocSet.scpt -tell application "Xcode" - load documentation set with path "/Users/$USER/Library/Developer/Shared/Documentation/DocSets/org.brautaset.${PROJECT}.docset/" -end tell -EOF - -# Run the load-docset applescript command. -osascript $TMPDIR/loadDocSet.scpt diff --git a/Pods/SBJson/LICENSE.md b/Pods/SBJson/LICENSE.md deleted file mode 100755 index 2e3ec20..0000000 --- a/Pods/SBJson/LICENSE.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (C) 2007-2011 Stig Brautaset. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Pods/SBJson/NEWS.md b/Pods/SBJson/NEWS.md deleted file mode 100755 index 172ed3d..0000000 --- a/Pods/SBJson/NEWS.md +++ /dev/null @@ -1,94 +0,0 @@ -3.1 (March 26th, 2012) -===================== - -Automatic Reference Counting ----------------------------- - -3.1 requires Xcode 4.2 to build, because previous versions did -not have ARC support. If you can't use Xcode 4.2, or for some reason -can't use ARC, you need to stick with version 3.0. - -To make this move simpler I decided to move to 64-bit only & remove -instance variables for properties. - -Miscellaneous -------------- - -* Added an optional comparator that is used when sorting keys. -* Be more memory-efficient when parsing long strings containing escaped characters. -* Add a Workspace that includes the sample projects, for ease of browsing. -* Report error for numbers with exponents outside range of -128 to 127. - - -3.0 (June 18th, 2011) -===================== - -JSON Stream Support -------------------- - -We now support parsing of documents split into several NSData chunks, -like those returned by *NSURLConnection*. This means you can start -parsing a JSON document before it is fully downloaded. Depending how you -configure the delegates you can chose to have the entire document -delivered to your process when it's finished parsing, or delivered -bit-by-bit as records on a particular level finishes downloading. For -more details see *SBJsonStreamParser* and *SBJsonStreamParserAdapter* in -the [API docs][api]. - -There is also support for *writing to* JSON streams. This means you can -write huge JSON documents to disk, or an HTTP destination, without -having to hold the entire structure in memory. You can use this to -generate a stream of tick data for a stock trading simulation, for -example. For more information see *SBJsonStreamWriter* in the [API -docs][api]. - -Parse and write UTF8-encoded NSData ------------------------------------ - -The internals of *SBJsonParser* and *SBJsonWriter* have been rewritten -to be NSData based. It is no longer necessary to convert data returned -by NSURLConnection into an NSString before feeding it to the parser. The -old NSString-oriented API methods still exists, but now converts their -inputs to NSData objects and delegates to the new methods. - -Project renamed to SBJson -------------------------- - -The project was renamed to avoid clashing with Apple's private -JSON.framework. (And to make it easier to Google for.) - -* If you copy the classes into your project then all you need to update -is to change the header inclusion from `#import "JSON.h"` to `#import -"SBJson.h"`. -* If you link to the library rather than copy the classes you have to -change the library you link to. On the Mac `JSON.framework` became -`SBJson.framework`. On iOS `libjson.a` became `libsbjson-ios.a`. In both -cases you now have to `#import ` in your code. - -API documentation integrated with Xcode ---------------------------------------- - -The *InstallDocumentation.sh* script allows you to generate [API -documentation][api] from the source and install it into Xcode, so it's -always at your fingertips. (This script requires [Doxygen][] to be -installed.) After running the script from the top-level directory, open -Xcode's documentation window and search for SBJson. (You might have to -close and re-open Xcode for the changes to take effect.) - -[api]: http://stig.github.com/json-framework/api/3.0/ -[Doxygen]: http://doxygen.org - -Example Projects ----------------- - -These can be found in the Examples folder in the distribution. - -* TweetStream: An exampleshowing how to use the new streaming -functionality to interact with Twitter's multi-document streams. This -also shows how to link to the iOS static lib rather than having to copy -the classes into your project. -* DisplayPretty: A small Mac example project showing how to link to an -external JSON framework rather than copying the sources into your -project. This is a fully functional (though simplistic) application that -takes JSON input from a text field and presents it nicely formatted into -another text field. diff --git a/Pods/SBJson/README.md b/Pods/SBJson/README.md old mode 100755 new mode 100644 index 4f9008d..9156199 --- a/Pods/SBJson/README.md +++ b/Pods/SBJson/README.md @@ -1,29 +1,87 @@ -SBJson (aka json-framework) -=========================== - JSON (JavaScript Object Notation) is a light-weight data interchange format that's easy to read and write for humans and computers alike. -This library implements strict JSON parsing and generation in +This library implements chunk-based JSON parsing and generation in Objective-C. Features --------- - -* BSD license -* Super-simple high-level API: - * Call `[str JSONValue]` on any NSString instance to parse its JSON text - * Call `[obj JSONRepresentation]` on any NSArray or NSDictionary to return its JSON text -* Good balance between simplicity and flexibility provided by the *SBJsonParser* and *SBJsonWriter* classes -* Configurable recursion depth limit -* Garbage Collection -* Automatic Reference Counting (ARC) -* Optionally sort dictionary keys in JSON output -* Optional pretty-printing of JSON output +======== + +SBJson's number one feature is chunk-based operation. Feed the parser one or +more chunks of UTF8-encoded data and it will call a block you provide with each +root-level document or array; or optionally for each top-level entry in one (or +more) root-level array. See more in the [Version 4 API +docs](http://sbjson.org/api/4.0/Classes/SBJson4Parser.html). + +Other features: + +* Configurable recursion limit. For safety SBJson defaults to a max nesting + level of 32 for all input. This can be configured if necessary. +* The writer can optionally sort dictionary keys so output is consistent across writes. +* The writer can optionally create human-readable (indented) output. Links ===== * [GitHub project page](http://github.com/stig/json-framework) -* [Online API docs](http://stig.github.com/json-framework/api/3.0/) -* [Frequently Asked Questions](http://github.com/stig/json-framework/wiki/FrequentlyAskedQuestions) +* [Online API docs](http://sbjson.org/api/4.0) +* [SBJson tag on Stack Overflow](http://stackoverflow.com/questions/tagged/sbjson) + + +Installation +============ + +The simplest way to start using JSON in your application is to copy all +the source files (the contents of the `src/main/objc` folder) into your own +Xcode project. + +1. In the Finder, navigate into the `src/main/objc` folder. +2. Select all the files and drag-and-drop them into your Xcode project. +3. Tick the **Copy items into destination group's folder** option. +4. Use `#import "SBJson.h"` in your source files. + +That should be it. Now create that Twitter client! + +*If you're upgrading from a previous version, make sure you're deleting the +old SBJson classes first, moving all the files to Trash.* + + +Alternative Installation Instructions +===================================== + +* With Xcode 4's workspaces it has become much simpler to link to dependant +projects. The examples in the distribution link to the iOS library and Mac +framework, respectively. Des Hartman wrote [a blog post with step-by-step +instructions for iOS][link-ios]. This is the recommended way if you need to +make local changes to SBJson. +* You can also install SBJson using [CocoaPods](http://cocoapods.org). + +[link-ios]: http://deshartman.wordpress.com/2011/09/02/configuring-sbjson-framework-for-xcode-4-2/ + + +License +======= + +Copyright (C) 2007-2013 Stig Brautaset. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Pods/SBJson/SBJson.xcodeproj/project.pbxproj b/Pods/SBJson/SBJson.xcodeproj/project.pbxproj deleted file mode 100755 index f18d0ce..0000000 --- a/Pods/SBJson/SBJson.xcodeproj/project.pbxproj +++ /dev/null @@ -1,946 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 3BB5955C14EAA4B8001BE91E /* SortedFormatTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BB5955B14EAA4B8001BE91E /* SortedFormatTest.m */; }; - 3BB5955D14EAA4B8001BE91E /* SortedFormatTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BB5955B14EAA4B8001BE91E /* SortedFormatTest.m */; }; - BC12324B1391D5CC00131607 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = BC1232491391D5CC00131607 /* InfoPlist.strings */; }; - BC1232561391D5CC00131607 /* SBJson.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC12323D1391D5CC00131607 /* SBJson.framework */; }; - BC12325C1391D5CC00131607 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = BC12325A1391D5CC00131607 /* InfoPlist.strings */; }; - BC417FF413A1008F00C8BC49 /* ErrorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88522B1391D6DD00370E55 /* ErrorTest.m */; }; - BC417FF513A1008F00C8BC49 /* FormatTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88522C1391D6DD00370E55 /* FormatTest.m */; }; - BC417FF613A1008F00C8BC49 /* JsonCheckerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88522D1391D6DD00370E55 /* JsonCheckerTest.m */; }; - BC417FF813A1008F00C8BC49 /* JsonTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88522F1391D6DD00370E55 /* JsonTestCase.m */; }; - BC417FF913A1008F00C8BC49 /* ProxyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8852301391D6DD00370E55 /* ProxyTest.m */; }; - BC417FFA13A1008F00C8BC49 /* RoundTripTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8852311391D6DD00370E55 /* RoundTripTest.m */; }; - BC417FFB13A1008F00C8BC49 /* StreamParserIntegrationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8852971391D6DE00370E55 /* StreamParserIntegrationTest.m */; }; - BC417FFC13A1008F00C8BC49 /* WriterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8852981391D6DE00370E55 /* WriterTest.m */; }; - BC88513F1391D6CD00370E55 /* NSObject+SBJson.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851251391D6CD00370E55 /* NSObject+SBJson.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC8851401391D6CD00370E55 /* NSObject+SBJson.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851261391D6CD00370E55 /* NSObject+SBJson.m */; }; - BC8851411391D6CD00370E55 /* SBJson.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851271391D6CD00370E55 /* SBJson.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC8851421391D6CD00370E55 /* SBJsonParser.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851281391D6CD00370E55 /* SBJsonParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC8851431391D6CD00370E55 /* SBJsonParser.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851291391D6CD00370E55 /* SBJsonParser.m */; }; - BC8851441391D6CD00370E55 /* SBJsonStreamParser.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88512A1391D6CD00370E55 /* SBJsonStreamParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC8851451391D6CD00370E55 /* SBJsonStreamParser.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88512B1391D6CD00370E55 /* SBJsonStreamParser.m */; }; - BC8851461391D6CD00370E55 /* SBJsonStreamParserAccumulator.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88512C1391D6CD00370E55 /* SBJsonStreamParserAccumulator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC8851471391D6CD00370E55 /* SBJsonStreamParserAccumulator.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88512D1391D6CD00370E55 /* SBJsonStreamParserAccumulator.m */; }; - BC8851481391D6CD00370E55 /* SBJsonStreamParserAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88512E1391D6CD00370E55 /* SBJsonStreamParserAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC8851491391D6CD00370E55 /* SBJsonStreamParserAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88512F1391D6CD00370E55 /* SBJsonStreamParserAdapter.m */; }; - BC88514A1391D6CD00370E55 /* SBJsonStreamParserState.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851301391D6CD00370E55 /* SBJsonStreamParserState.h */; }; - BC88514B1391D6CD00370E55 /* SBJsonStreamParserState.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851311391D6CD00370E55 /* SBJsonStreamParserState.m */; }; - BC88514C1391D6CD00370E55 /* SBJsonStreamWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851321391D6CD00370E55 /* SBJsonStreamWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC88514D1391D6CD00370E55 /* SBJsonStreamWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851331391D6CD00370E55 /* SBJsonStreamWriter.m */; }; - BC88514E1391D6CD00370E55 /* SBJsonStreamWriterAccumulator.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851341391D6CD00370E55 /* SBJsonStreamWriterAccumulator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC88514F1391D6CD00370E55 /* SBJsonStreamWriterAccumulator.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851351391D6CD00370E55 /* SBJsonStreamWriterAccumulator.m */; }; - BC8851501391D6CD00370E55 /* SBJsonStreamWriterState.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851361391D6CD00370E55 /* SBJsonStreamWriterState.h */; }; - BC8851511391D6CD00370E55 /* SBJsonStreamWriterState.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851371391D6CD00370E55 /* SBJsonStreamWriterState.m */; }; - BC8851521391D6CD00370E55 /* SBJsonTokeniser.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851381391D6CD00370E55 /* SBJsonTokeniser.h */; }; - BC8851531391D6CD00370E55 /* SBJsonTokeniser.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851391391D6CD00370E55 /* SBJsonTokeniser.m */; }; - BC8851541391D6CD00370E55 /* SBJsonWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88513A1391D6CD00370E55 /* SBJsonWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC8851551391D6CD00370E55 /* SBJsonWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88513B1391D6CD00370E55 /* SBJsonWriter.m */; }; - BC8851561391D6CD00370E55 /* SBJsonUTF8Stream.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88513C1391D6CD00370E55 /* SBJsonUTF8Stream.h */; }; - BC8851571391D6CD00370E55 /* SBJsonUTF8Stream.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88513D1391D6CD00370E55 /* SBJsonUTF8Stream.m */; }; - BC8853271391D6DE00370E55 /* ErrorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88522B1391D6DD00370E55 /* ErrorTest.m */; }; - BC8853281391D6DE00370E55 /* FormatTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88522C1391D6DD00370E55 /* FormatTest.m */; }; - BC8853291391D6DE00370E55 /* JsonCheckerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88522D1391D6DD00370E55 /* JsonCheckerTest.m */; }; - BC88532A1391D6DE00370E55 /* JsonTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88522F1391D6DD00370E55 /* JsonTestCase.m */; }; - BC88532B1391D6DE00370E55 /* ProxyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8852301391D6DD00370E55 /* ProxyTest.m */; }; - BC88532C1391D6DE00370E55 /* RoundTripTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8852311391D6DD00370E55 /* RoundTripTest.m */; }; - BC8853911391D6DE00370E55 /* StreamParserIntegrationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8852971391D6DE00370E55 /* StreamParserIntegrationTest.m */; }; - BC8853921391D6DE00370E55 /* WriterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8852981391D6DE00370E55 /* WriterTest.m */; }; - BCADB7CE139210C90057A705 /* SBJson.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851271391D6CD00370E55 /* SBJson.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCADB7CF139210C90057A705 /* NSObject+SBJson.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851251391D6CD00370E55 /* NSObject+SBJson.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCADB7D0139210C90057A705 /* SBJsonParser.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851281391D6CD00370E55 /* SBJsonParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCADB7D1139210C90057A705 /* SBJsonStreamParser.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88512A1391D6CD00370E55 /* SBJsonStreamParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCADB7D2139210C90057A705 /* SBJsonStreamParserAccumulator.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88512C1391D6CD00370E55 /* SBJsonStreamParserAccumulator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCADB7D3139210C90057A705 /* SBJsonStreamParserAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88512E1391D6CD00370E55 /* SBJsonStreamParserAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCADB7D4139210C90057A705 /* SBJsonStreamParserState.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851301391D6CD00370E55 /* SBJsonStreamParserState.h */; }; - BCADB7D5139210C90057A705 /* SBJsonStreamWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851321391D6CD00370E55 /* SBJsonStreamWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCADB7D6139210C90057A705 /* SBJsonStreamWriterAccumulator.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851341391D6CD00370E55 /* SBJsonStreamWriterAccumulator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCADB7D7139210C90057A705 /* SBJsonStreamWriterState.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851361391D6CD00370E55 /* SBJsonStreamWriterState.h */; }; - BCADB7D8139210C90057A705 /* SBJsonTokeniser.h in Headers */ = {isa = PBXBuildFile; fileRef = BC8851381391D6CD00370E55 /* SBJsonTokeniser.h */; }; - BCADB7D9139210C90057A705 /* SBJsonWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88513A1391D6CD00370E55 /* SBJsonWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCADB7DA139210C90057A705 /* SBJsonUTF8Stream.h in Headers */ = {isa = PBXBuildFile; fileRef = BC88513C1391D6CD00370E55 /* SBJsonUTF8Stream.h */; }; - BCC2626313920EE8003D9994 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8853981391D74C00370E55 /* Foundation.framework */; }; - BCC2626413920F25003D9994 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8853981391D74C00370E55 /* Foundation.framework */; }; - BCC2626A13920FC7003D9994 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8853981391D74C00370E55 /* Foundation.framework */; }; - BCC2627613920FC7003D9994 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8853981391D74C00370E55 /* Foundation.framework */; }; - BCC2627B13920FC7003D9994 /* libsbjson-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BCC2626913920FC7003D9994 /* libsbjson-ios.a */; }; - BCC2628113920FC7003D9994 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = BCC2627F13920FC7003D9994 /* InfoPlist.strings */; }; - BCC2628D13921035003D9994 /* NSObject+SBJson.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851261391D6CD00370E55 /* NSObject+SBJson.m */; }; - BCC2628E13921035003D9994 /* SBJsonParser.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851291391D6CD00370E55 /* SBJsonParser.m */; }; - BCC2628F13921035003D9994 /* SBJsonStreamParser.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88512B1391D6CD00370E55 /* SBJsonStreamParser.m */; }; - BCC2629013921035003D9994 /* SBJsonStreamParserAccumulator.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88512D1391D6CD00370E55 /* SBJsonStreamParserAccumulator.m */; }; - BCC2629113921035003D9994 /* SBJsonStreamParserAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88512F1391D6CD00370E55 /* SBJsonStreamParserAdapter.m */; }; - BCC2629213921035003D9994 /* SBJsonStreamParserState.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851311391D6CD00370E55 /* SBJsonStreamParserState.m */; }; - BCC2629313921035003D9994 /* SBJsonStreamWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851331391D6CD00370E55 /* SBJsonStreamWriter.m */; }; - BCC2629413921035003D9994 /* SBJsonStreamWriterAccumulator.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851351391D6CD00370E55 /* SBJsonStreamWriterAccumulator.m */; }; - BCC2629513921035003D9994 /* SBJsonStreamWriterState.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851371391D6CD00370E55 /* SBJsonStreamWriterState.m */; }; - BCC2629613921035003D9994 /* SBJsonTokeniser.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8851391391D6CD00370E55 /* SBJsonTokeniser.m */; }; - BCC2629713921035003D9994 /* SBJsonWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88513B1391D6CD00370E55 /* SBJsonWriter.m */; }; - BCC2629813921035003D9994 /* SBJsonUTF8Stream.m in Sources */ = {isa = PBXBuildFile; fileRef = BC88513D1391D6CD00370E55 /* SBJsonUTF8Stream.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - BC1232541391D5CC00131607 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BC1232331391D5CC00131607 /* Project object */; - proxyType = 1; - remoteGlobalIDString = BC12323C1391D5CC00131607; - remoteInfo = SBJson; - }; - BCC2627913920FC7003D9994 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BC1232331391D5CC00131607 /* Project object */; - proxyType = 1; - remoteGlobalIDString = BCC2626813920FC7003D9994; - remoteInfo = "sbjson-ios"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 3BB5955B14EAA4B8001BE91E /* SortedFormatTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SortedFormatTest.m; sourceTree = ""; }; - BC12323D1391D5CC00131607 /* SBJson.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SBJson.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BC1232481391D5CC00131607 /* SBJson-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SBJson-Info.plist"; sourceTree = ""; }; - BC12324A1391D5CC00131607 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - BC12324C1391D5CC00131607 /* SBJson-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SBJson-Prefix.pch"; sourceTree = ""; }; - BC1232521391D5CC00131607 /* SBJsonTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SBJsonTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; - BC1232591391D5CC00131607 /* SBJsonTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SBJsonTests-Info.plist"; sourceTree = ""; }; - BC12325B1391D5CC00131607 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - BC12325D1391D5CC00131607 /* SBJsonTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SBJsonTests-Prefix.pch"; sourceTree = ""; }; - BC8851251391D6CD00370E55 /* NSObject+SBJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+SBJson.h"; sourceTree = ""; }; - BC8851261391D6CD00370E55 /* NSObject+SBJson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+SBJson.m"; sourceTree = ""; }; - BC8851271391D6CD00370E55 /* SBJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJson.h; sourceTree = ""; }; - BC8851281391D6CD00370E55 /* SBJsonParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonParser.h; sourceTree = ""; }; - BC8851291391D6CD00370E55 /* SBJsonParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonParser.m; sourceTree = ""; }; - BC88512A1391D6CD00370E55 /* SBJsonStreamParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonStreamParser.h; sourceTree = ""; }; - BC88512B1391D6CD00370E55 /* SBJsonStreamParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonStreamParser.m; sourceTree = ""; }; - BC88512C1391D6CD00370E55 /* SBJsonStreamParserAccumulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonStreamParserAccumulator.h; sourceTree = ""; }; - BC88512D1391D6CD00370E55 /* SBJsonStreamParserAccumulator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonStreamParserAccumulator.m; sourceTree = ""; }; - BC88512E1391D6CD00370E55 /* SBJsonStreamParserAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonStreamParserAdapter.h; sourceTree = ""; }; - BC88512F1391D6CD00370E55 /* SBJsonStreamParserAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonStreamParserAdapter.m; sourceTree = ""; }; - BC8851301391D6CD00370E55 /* SBJsonStreamParserState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonStreamParserState.h; sourceTree = ""; }; - BC8851311391D6CD00370E55 /* SBJsonStreamParserState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonStreamParserState.m; sourceTree = ""; }; - BC8851321391D6CD00370E55 /* SBJsonStreamWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonStreamWriter.h; sourceTree = ""; }; - BC8851331391D6CD00370E55 /* SBJsonStreamWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonStreamWriter.m; sourceTree = ""; }; - BC8851341391D6CD00370E55 /* SBJsonStreamWriterAccumulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonStreamWriterAccumulator.h; sourceTree = ""; }; - BC8851351391D6CD00370E55 /* SBJsonStreamWriterAccumulator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonStreamWriterAccumulator.m; sourceTree = ""; }; - BC8851361391D6CD00370E55 /* SBJsonStreamWriterState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonStreamWriterState.h; sourceTree = ""; }; - BC8851371391D6CD00370E55 /* SBJsonStreamWriterState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonStreamWriterState.m; sourceTree = ""; }; - BC8851381391D6CD00370E55 /* SBJsonTokeniser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonTokeniser.h; sourceTree = ""; }; - BC8851391391D6CD00370E55 /* SBJsonTokeniser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonTokeniser.m; sourceTree = ""; }; - BC88513A1391D6CD00370E55 /* SBJsonWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonWriter.h; sourceTree = ""; }; - BC88513B1391D6CD00370E55 /* SBJsonWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonWriter.m; sourceTree = ""; }; - BC88513C1391D6CD00370E55 /* SBJsonUTF8Stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonUTF8Stream.h; sourceTree = ""; }; - BC88513D1391D6CD00370E55 /* SBJsonUTF8Stream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SBJsonUTF8Stream.m; sourceTree = ""; }; - BC88522B1391D6DD00370E55 /* ErrorTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ErrorTest.m; sourceTree = ""; }; - BC88522C1391D6DD00370E55 /* FormatTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FormatTest.m; sourceTree = ""; }; - BC88522D1391D6DD00370E55 /* JsonCheckerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JsonCheckerTest.m; sourceTree = ""; }; - BC88522E1391D6DD00370E55 /* JsonTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JsonTestCase.h; sourceTree = ""; }; - BC88522F1391D6DD00370E55 /* JsonTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JsonTestCase.m; sourceTree = ""; }; - BC8852301391D6DD00370E55 /* ProxyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProxyTest.m; sourceTree = ""; }; - BC8852311391D6DD00370E55 /* RoundTripTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoundTripTest.m; sourceTree = ""; }; - BC8852971391D6DE00370E55 /* StreamParserIntegrationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StreamParserIntegrationTest.m; sourceTree = ""; }; - BC8852981391D6DE00370E55 /* WriterTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WriterTest.m; sourceTree = ""; }; - BC8853981391D74C00370E55 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - BCC2626913920FC7003D9994 /* libsbjson-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libsbjson-ios.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - BCC2626D13920FC7003D9994 /* sbjson-ios-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "sbjson-ios-Prefix.pch"; sourceTree = ""; }; - BCC2627313920FC7003D9994 /* sbjson-iosTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "sbjson-iosTests.octest"; sourceTree = BUILT_PRODUCTS_DIR; }; - BCC2627E13920FC7003D9994 /* sbjson-iosTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "sbjson-iosTests-Info.plist"; sourceTree = ""; }; - BCC2628013920FC7003D9994 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - BCC2628213920FC7003D9994 /* sbjson-iosTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "sbjson-iosTests-Prefix.pch"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - BC1232391391D5CC00131607 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BCC2626313920EE8003D9994 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BC12324E1391D5CC00131607 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BC1232561391D5CC00131607 /* SBJson.framework in Frameworks */, - BCC2626413920F25003D9994 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BCC2626613920FC7003D9994 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BCC2626A13920FC7003D9994 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BCC2626F13920FC7003D9994 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BCC2627613920FC7003D9994 /* Foundation.framework in Frameworks */, - BCC2627B13920FC7003D9994 /* libsbjson-ios.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - BC1232311391D5CC00131607 = { - isa = PBXGroup; - children = ( - BC8851231391D6CD00370E55 /* Classes */, - BC8851581391D6DD00370E55 /* Tests */, - BC1232461391D5CC00131607 /* SBJson */, - BC1232571391D5CC00131607 /* SBJsonTests */, - BCC2626B13920FC7003D9994 /* sbjson-ios */, - BCC2627C13920FC7003D9994 /* sbjson-iosTests */, - BC12323F1391D5CC00131607 /* Frameworks */, - BC12323E1391D5CC00131607 /* Products */, - ); - sourceTree = ""; - }; - BC12323E1391D5CC00131607 /* Products */ = { - isa = PBXGroup; - children = ( - BC12323D1391D5CC00131607 /* SBJson.framework */, - BC1232521391D5CC00131607 /* SBJsonTests.octest */, - BCC2626913920FC7003D9994 /* libsbjson-ios.a */, - BCC2627313920FC7003D9994 /* sbjson-iosTests.octest */, - ); - name = Products; - sourceTree = ""; - }; - BC12323F1391D5CC00131607 /* Frameworks */ = { - isa = PBXGroup; - children = ( - BC8853981391D74C00370E55 /* Foundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - BC1232461391D5CC00131607 /* SBJson */ = { - isa = PBXGroup; - children = ( - BC1232471391D5CC00131607 /* Supporting Files */, - ); - path = SBJson; - sourceTree = ""; - }; - BC1232471391D5CC00131607 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - BC1232481391D5CC00131607 /* SBJson-Info.plist */, - BC1232491391D5CC00131607 /* InfoPlist.strings */, - BC12324C1391D5CC00131607 /* SBJson-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - BC1232571391D5CC00131607 /* SBJsonTests */ = { - isa = PBXGroup; - children = ( - BC1232581391D5CC00131607 /* Supporting Files */, - ); - path = SBJsonTests; - sourceTree = ""; - }; - BC1232581391D5CC00131607 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - BC1232591391D5CC00131607 /* SBJsonTests-Info.plist */, - BC12325A1391D5CC00131607 /* InfoPlist.strings */, - BC12325D1391D5CC00131607 /* SBJsonTests-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - BC8851231391D6CD00370E55 /* Classes */ = { - isa = PBXGroup; - children = ( - BC8851271391D6CD00370E55 /* SBJson.h */, - BC8851251391D6CD00370E55 /* NSObject+SBJson.h */, - BC8851261391D6CD00370E55 /* NSObject+SBJson.m */, - BCADB7DD139213960057A705 /* Parser */, - BCADB7DE139213A10057A705 /* Writer */, - ); - path = Classes; - sourceTree = ""; - }; - BC8851581391D6DD00370E55 /* Tests */ = { - isa = PBXGroup; - children = ( - BC88522B1391D6DD00370E55 /* ErrorTest.m */, - BC88522C1391D6DD00370E55 /* FormatTest.m */, - BC88522D1391D6DD00370E55 /* JsonCheckerTest.m */, - BC88522E1391D6DD00370E55 /* JsonTestCase.h */, - BC88522F1391D6DD00370E55 /* JsonTestCase.m */, - BC8852301391D6DD00370E55 /* ProxyTest.m */, - BC8852311391D6DD00370E55 /* RoundTripTest.m */, - BC8852971391D6DE00370E55 /* StreamParserIntegrationTest.m */, - BC8852981391D6DE00370E55 /* WriterTest.m */, - 3BB5955B14EAA4B8001BE91E /* SortedFormatTest.m */, - ); - path = Tests; - sourceTree = ""; - }; - BCADB7DB139213450057A705 /* Private */ = { - isa = PBXGroup; - children = ( - BC8851361391D6CD00370E55 /* SBJsonStreamWriterState.h */, - BC8851371391D6CD00370E55 /* SBJsonStreamWriterState.m */, - ); - name = Private; - sourceTree = ""; - }; - BCADB7DD139213960057A705 /* Parser */ = { - isa = PBXGroup; - children = ( - BCADB7DF139213D70057A705 /* Private */, - BC8851281391D6CD00370E55 /* SBJsonParser.h */, - BC8851291391D6CD00370E55 /* SBJsonParser.m */, - BC88512A1391D6CD00370E55 /* SBJsonStreamParser.h */, - BC88512B1391D6CD00370E55 /* SBJsonStreamParser.m */, - BC88512C1391D6CD00370E55 /* SBJsonStreamParserAccumulator.h */, - BC88512D1391D6CD00370E55 /* SBJsonStreamParserAccumulator.m */, - BC88512E1391D6CD00370E55 /* SBJsonStreamParserAdapter.h */, - BC88512F1391D6CD00370E55 /* SBJsonStreamParserAdapter.m */, - ); - name = Parser; - sourceTree = ""; - }; - BCADB7DE139213A10057A705 /* Writer */ = { - isa = PBXGroup; - children = ( - BCADB7DB139213450057A705 /* Private */, - BC88513A1391D6CD00370E55 /* SBJsonWriter.h */, - BC88513B1391D6CD00370E55 /* SBJsonWriter.m */, - BC8851321391D6CD00370E55 /* SBJsonStreamWriter.h */, - BC8851331391D6CD00370E55 /* SBJsonStreamWriter.m */, - BC8851341391D6CD00370E55 /* SBJsonStreamWriterAccumulator.h */, - BC8851351391D6CD00370E55 /* SBJsonStreamWriterAccumulator.m */, - ); - name = Writer; - sourceTree = ""; - }; - BCADB7DF139213D70057A705 /* Private */ = { - isa = PBXGroup; - children = ( - BC8851301391D6CD00370E55 /* SBJsonStreamParserState.h */, - BC8851311391D6CD00370E55 /* SBJsonStreamParserState.m */, - BC8851381391D6CD00370E55 /* SBJsonTokeniser.h */, - BC8851391391D6CD00370E55 /* SBJsonTokeniser.m */, - BC88513C1391D6CD00370E55 /* SBJsonUTF8Stream.h */, - BC88513D1391D6CD00370E55 /* SBJsonUTF8Stream.m */, - ); - name = Private; - sourceTree = ""; - }; - BCC2626B13920FC7003D9994 /* sbjson-ios */ = { - isa = PBXGroup; - children = ( - BCC2626C13920FC7003D9994 /* Supporting Files */, - ); - path = "sbjson-ios"; - sourceTree = ""; - }; - BCC2626C13920FC7003D9994 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - BCC2626D13920FC7003D9994 /* sbjson-ios-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - BCC2627C13920FC7003D9994 /* sbjson-iosTests */ = { - isa = PBXGroup; - children = ( - BCC2627D13920FC7003D9994 /* Supporting Files */, - ); - path = "sbjson-iosTests"; - sourceTree = ""; - }; - BCC2627D13920FC7003D9994 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - BCC2627E13920FC7003D9994 /* sbjson-iosTests-Info.plist */, - BCC2627F13920FC7003D9994 /* InfoPlist.strings */, - BCC2628213920FC7003D9994 /* sbjson-iosTests-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - BC12323A1391D5CC00131607 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BC88513F1391D6CD00370E55 /* NSObject+SBJson.h in Headers */, - BC8851421391D6CD00370E55 /* SBJsonParser.h in Headers */, - BC8851441391D6CD00370E55 /* SBJsonStreamParser.h in Headers */, - BC8851461391D6CD00370E55 /* SBJsonStreamParserAccumulator.h in Headers */, - BC8851481391D6CD00370E55 /* SBJsonStreamParserAdapter.h in Headers */, - BC88514C1391D6CD00370E55 /* SBJsonStreamWriter.h in Headers */, - BC88514E1391D6CD00370E55 /* SBJsonStreamWriterAccumulator.h in Headers */, - BC8851541391D6CD00370E55 /* SBJsonWriter.h in Headers */, - BC8851411391D6CD00370E55 /* SBJson.h in Headers */, - BC88514A1391D6CD00370E55 /* SBJsonStreamParserState.h in Headers */, - BC8851501391D6CD00370E55 /* SBJsonStreamWriterState.h in Headers */, - BC8851521391D6CD00370E55 /* SBJsonTokeniser.h in Headers */, - BC8851561391D6CD00370E55 /* SBJsonUTF8Stream.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BCC2626713920FC7003D9994 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BCADB7CE139210C90057A705 /* SBJson.h in Headers */, - BCADB7D0139210C90057A705 /* SBJsonParser.h in Headers */, - BCADB7D9139210C90057A705 /* SBJsonWriter.h in Headers */, - BCADB7D1139210C90057A705 /* SBJsonStreamParser.h in Headers */, - BCADB7D3139210C90057A705 /* SBJsonStreamParserAdapter.h in Headers */, - BCADB7D5139210C90057A705 /* SBJsonStreamWriter.h in Headers */, - BCADB7CF139210C90057A705 /* NSObject+SBJson.h in Headers */, - BCADB7D2139210C90057A705 /* SBJsonStreamParserAccumulator.h in Headers */, - BCADB7D6139210C90057A705 /* SBJsonStreamWriterAccumulator.h in Headers */, - BCADB7D4139210C90057A705 /* SBJsonStreamParserState.h in Headers */, - BCADB7D7139210C90057A705 /* SBJsonStreamWriterState.h in Headers */, - BCADB7D8139210C90057A705 /* SBJsonTokeniser.h in Headers */, - BCADB7DA139210C90057A705 /* SBJsonUTF8Stream.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - BC12323C1391D5CC00131607 /* SBJson */ = { - isa = PBXNativeTarget; - buildConfigurationList = BC1232641391D5CC00131607 /* Build configuration list for PBXNativeTarget "SBJson" */; - buildPhases = ( - BC1232381391D5CC00131607 /* Sources */, - BC1232391391D5CC00131607 /* Frameworks */, - BC12323A1391D5CC00131607 /* Headers */, - BC12323B1391D5CC00131607 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SBJson; - productName = SBJson; - productReference = BC12323D1391D5CC00131607 /* SBJson.framework */; - productType = "com.apple.product-type.framework"; - }; - BC1232511391D5CC00131607 /* SBJsonTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = BC1232671391D5CC00131607 /* Build configuration list for PBXNativeTarget "SBJsonTests" */; - buildPhases = ( - BC12324D1391D5CC00131607 /* Sources */, - BC12324E1391D5CC00131607 /* Frameworks */, - BC12324F1391D5CC00131607 /* Resources */, - BC1232501391D5CC00131607 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - BC1232551391D5CC00131607 /* PBXTargetDependency */, - ); - name = SBJsonTests; - productName = SBJsonTests; - productReference = BC1232521391D5CC00131607 /* SBJsonTests.octest */; - productType = "com.apple.product-type.bundle"; - }; - BCC2626813920FC7003D9994 /* sbjson-ios */ = { - isa = PBXNativeTarget; - buildConfigurationList = BCC2628713920FC7003D9994 /* Build configuration list for PBXNativeTarget "sbjson-ios" */; - buildPhases = ( - BCC2626513920FC7003D9994 /* Sources */, - BCC2626613920FC7003D9994 /* Frameworks */, - BCC2626713920FC7003D9994 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "sbjson-ios"; - productName = "sbjson-ios"; - productReference = BCC2626913920FC7003D9994 /* libsbjson-ios.a */; - productType = "com.apple.product-type.library.static"; - }; - BCC2627213920FC7003D9994 /* sbjson-iosTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = BCC2628A13920FC7003D9994 /* Build configuration list for PBXNativeTarget "sbjson-iosTests" */; - buildPhases = ( - BCC2626E13920FC7003D9994 /* Sources */, - BCC2626F13920FC7003D9994 /* Frameworks */, - BCC2627013920FC7003D9994 /* Resources */, - BCC2627113920FC7003D9994 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - BCC2627A13920FC7003D9994 /* PBXTargetDependency */, - ); - name = "sbjson-iosTests"; - productName = "sbjson-iosTests"; - productReference = BCC2627313920FC7003D9994 /* sbjson-iosTests.octest */; - productType = "com.apple.product-type.bundle"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BC1232331391D5CC00131607 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0420; - ORGANIZATIONNAME = "Stig Brautaset"; - }; - buildConfigurationList = BC1232361391D5CC00131607 /* Build configuration list for PBXProject "SBJson" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = BC1232311391D5CC00131607; - productRefGroup = BC12323E1391D5CC00131607 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - BC12323C1391D5CC00131607 /* SBJson */, - BC1232511391D5CC00131607 /* SBJsonTests */, - BCC2626813920FC7003D9994 /* sbjson-ios */, - BCC2627213920FC7003D9994 /* sbjson-iosTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - BC12323B1391D5CC00131607 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC12324B1391D5CC00131607 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BC12324F1391D5CC00131607 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC12325C1391D5CC00131607 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BCC2627013920FC7003D9994 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BCC2628113920FC7003D9994 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - BC1232501391D5CC00131607 /* 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"; - }; - BCC2627113920FC7003D9994 /* 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 */ - BC1232381391D5CC00131607 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC8851401391D6CD00370E55 /* NSObject+SBJson.m in Sources */, - BC8851431391D6CD00370E55 /* SBJsonParser.m in Sources */, - BC8851451391D6CD00370E55 /* SBJsonStreamParser.m in Sources */, - BC8851471391D6CD00370E55 /* SBJsonStreamParserAccumulator.m in Sources */, - BC8851491391D6CD00370E55 /* SBJsonStreamParserAdapter.m in Sources */, - BC88514B1391D6CD00370E55 /* SBJsonStreamParserState.m in Sources */, - BC88514D1391D6CD00370E55 /* SBJsonStreamWriter.m in Sources */, - BC88514F1391D6CD00370E55 /* SBJsonStreamWriterAccumulator.m in Sources */, - BC8851511391D6CD00370E55 /* SBJsonStreamWriterState.m in Sources */, - BC8851531391D6CD00370E55 /* SBJsonTokeniser.m in Sources */, - BC8851551391D6CD00370E55 /* SBJsonWriter.m in Sources */, - BC8851571391D6CD00370E55 /* SBJsonUTF8Stream.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BC12324D1391D5CC00131607 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC8853271391D6DE00370E55 /* ErrorTest.m in Sources */, - BC8853281391D6DE00370E55 /* FormatTest.m in Sources */, - BC8853291391D6DE00370E55 /* JsonCheckerTest.m in Sources */, - BC88532A1391D6DE00370E55 /* JsonTestCase.m in Sources */, - BC88532B1391D6DE00370E55 /* ProxyTest.m in Sources */, - BC88532C1391D6DE00370E55 /* RoundTripTest.m in Sources */, - BC8853911391D6DE00370E55 /* StreamParserIntegrationTest.m in Sources */, - BC8853921391D6DE00370E55 /* WriterTest.m in Sources */, - 3BB5955C14EAA4B8001BE91E /* SortedFormatTest.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BCC2626513920FC7003D9994 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BCC2628D13921035003D9994 /* NSObject+SBJson.m in Sources */, - BCC2628E13921035003D9994 /* SBJsonParser.m in Sources */, - BCC2628F13921035003D9994 /* SBJsonStreamParser.m in Sources */, - BCC2629013921035003D9994 /* SBJsonStreamParserAccumulator.m in Sources */, - BCC2629113921035003D9994 /* SBJsonStreamParserAdapter.m in Sources */, - BCC2629213921035003D9994 /* SBJsonStreamParserState.m in Sources */, - BCC2629313921035003D9994 /* SBJsonStreamWriter.m in Sources */, - BCC2629413921035003D9994 /* SBJsonStreamWriterAccumulator.m in Sources */, - BCC2629513921035003D9994 /* SBJsonStreamWriterState.m in Sources */, - BCC2629613921035003D9994 /* SBJsonTokeniser.m in Sources */, - BCC2629713921035003D9994 /* SBJsonWriter.m in Sources */, - BCC2629813921035003D9994 /* SBJsonUTF8Stream.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BCC2626E13920FC7003D9994 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC417FF413A1008F00C8BC49 /* ErrorTest.m in Sources */, - BC417FF513A1008F00C8BC49 /* FormatTest.m in Sources */, - BC417FF613A1008F00C8BC49 /* JsonCheckerTest.m in Sources */, - BC417FF813A1008F00C8BC49 /* JsonTestCase.m in Sources */, - BC417FF913A1008F00C8BC49 /* ProxyTest.m in Sources */, - BC417FFA13A1008F00C8BC49 /* RoundTripTest.m in Sources */, - BC417FFB13A1008F00C8BC49 /* StreamParserIntegrationTest.m in Sources */, - BC417FFC13A1008F00C8BC49 /* WriterTest.m in Sources */, - 3BB5955D14EAA4B8001BE91E /* SortedFormatTest.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - BC1232551391D5CC00131607 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = BC12323C1391D5CC00131607 /* SBJson */; - targetProxy = BC1232541391D5CC00131607 /* PBXContainerItemProxy */; - }; - BCC2627A13920FC7003D9994 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = BCC2626813920FC7003D9994 /* sbjson-ios */; - targetProxy = BCC2627913920FC7003D9994 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - BC1232491391D5CC00131607 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - BC12324A1391D5CC00131607 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - BC12325A1391D5CC00131607 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - BC12325B1391D5CC00131607 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - BCC2627F13920FC7003D9994 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - BCC2628013920FC7003D9994 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - BC1232621391D5CC00131607 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(DEVELOPER_LIBRARY_DIR)/Frameworks", - ); - GCC_C_LANGUAGE_STANDARD = "compiler-default"; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREPROCESSOR_DEFINITIONS = DEBUG; - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = ""; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = ""; - ONLY_ACTIVE_ARCH = YES; - RUN_CLANG_STATIC_ANALYZER = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - BC1232631391D5CC00131607 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(DEVELOPER_LIBRARY_DIR)/Frameworks", - ); - GCC_C_LANGUAGE_STANDARD = "compiler-default"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_VERSION = ""; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = ""; - RUN_CLANG_STATIC_ANALYZER = YES; - SDKROOT = macosx; - }; - name = Release; - }; - BC1232651391D5CC00131607 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 36; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 36; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "SBJson/SBJson-Prefix.pch"; - INFOPLIST_FILE = "SBJson/SBJson-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - VERSIONING_SYSTEM = "apple-generic"; - WRAPPER_EXTENSION = framework; - }; - name = Debug; - }; - BC1232661391D5CC00131607 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 36; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 36; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "SBJson/SBJson-Prefix.pch"; - INFOPLIST_FILE = "SBJson/SBJson-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - VERSIONING_SYSTEM = "apple-generic"; - WRAPPER_EXTENSION = framework; - }; - name = Release; - }; - BC1232681391D5CC00131607 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - COPY_PHASE_STRIP = NO; - GCC_PREFIX_HEADER = "SBJsonTests/SBJsonTests-Prefix.pch"; - INFOPLIST_FILE = "SBJsonTests/SBJsonTests-Info.plist"; - OTHER_LDFLAGS = ( - "-framework", - SenTestingKit, - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = octest; - }; - name = Debug; - }; - BC1232691391D5CC00131607 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_PREFIX_HEADER = "SBJsonTests/SBJsonTests-Prefix.pch"; - INFOPLIST_FILE = "SBJsonTests/SBJsonTests-Info.plist"; - OTHER_LDFLAGS = ( - "-framework", - SenTestingKit, - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = octest; - }; - name = Release; - }; - BCC2628813920FC7003D9994 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DSTROOT = /tmp/sbjson_ios.dst; - GCC_PREFIX_HEADER = "sbjson-ios/sbjson-ios-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - include/, - "$(BUILT_PRODUCTS_DIR)/usr/local/lib/include/", - ); - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - ONLY_ACTIVE_ARCH = NO; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = include/SBJson/; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - BCC2628913920FC7003D9994 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DSTROOT = /tmp/sbjson_ios.dst; - GCC_PREFIX_HEADER = "sbjson-ios/sbjson-ios-Prefix.pch"; - HEADER_SEARCH_PATHS = "$(TARGET_BUILD_DIR)/include/"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PUBLIC_HEADERS_FOLDER_PATH = include/SBJson/; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - }; - name = Release; - }; - BCC2628B13920FC7003D9994 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(DEVELOPER_LIBRARY_DIR)/Frameworks", - ); - GCC_PREFIX_HEADER = "sbjson-iosTests/sbjson-iosTests-Prefix.pch"; - INFOPLIST_FILE = "sbjson-iosTests/sbjson-iosTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - OTHER_LDFLAGS = ( - "-framework", - SenTestingKit, - "-all_load", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - WRAPPER_EXTENSION = octest; - }; - name = Debug; - }; - BCC2628C13920FC7003D9994 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(DEVELOPER_LIBRARY_DIR)/Frameworks", - ); - GCC_PREFIX_HEADER = "sbjson-iosTests/sbjson-iosTests-Prefix.pch"; - INFOPLIST_FILE = "sbjson-iosTests/sbjson-iosTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 4.3; - OTHER_LDFLAGS = ( - "-framework", - SenTestingKit, - "-all_load", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - WRAPPER_EXTENSION = octest; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - BC1232361391D5CC00131607 /* Build configuration list for PBXProject "SBJson" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC1232621391D5CC00131607 /* Debug */, - BC1232631391D5CC00131607 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BC1232641391D5CC00131607 /* Build configuration list for PBXNativeTarget "SBJson" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC1232651391D5CC00131607 /* Debug */, - BC1232661391D5CC00131607 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BC1232671391D5CC00131607 /* Build configuration list for PBXNativeTarget "SBJsonTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BC1232681391D5CC00131607 /* Debug */, - BC1232691391D5CC00131607 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BCC2628713920FC7003D9994 /* Build configuration list for PBXNativeTarget "sbjson-ios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BCC2628813920FC7003D9994 /* Debug */, - BCC2628913920FC7003D9994 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BCC2628A13920FC7003D9994 /* Build configuration list for PBXNativeTarget "sbjson-iosTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BCC2628B13920FC7003D9994 /* Debug */, - BCC2628C13920FC7003D9994 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BC1232331391D5CC00131607 /* Project object */; -} diff --git a/Pods/SBJson/SBJson.xcworkspace/contents.xcworkspacedata b/Pods/SBJson/SBJson.xcworkspace/contents.xcworkspacedata deleted file mode 100755 index 98cfd74..0000000 --- a/Pods/SBJson/SBJson.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/Pods/SBJson/SBJson/SBJson-Info.plist b/Pods/SBJson/SBJson/SBJson-Info.plist deleted file mode 100755 index 5f89849..0000000 --- a/Pods/SBJson/SBJson/SBJson-Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - org.brautaset.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSHumanReadableCopyright - Copyright © 2011 Stig Brautaset. All rights reserved. - NSPrincipalClass - - - diff --git a/Pods/SBJson/SBJson/SBJson-Prefix.pch b/Pods/SBJson/SBJson/SBJson-Prefix.pch deleted file mode 100755 index 56b8bf3..0000000 --- a/Pods/SBJson/SBJson/SBJson-Prefix.pch +++ /dev/null @@ -1,7 +0,0 @@ -// -// Prefix header for all source files of the 'SBJson' target in the 'SBJson' project -// - -#ifdef __OBJC__ - #import -#endif diff --git a/Pods/SBJson/SBJson/en.lproj/InfoPlist.strings b/Pods/SBJson/SBJson/en.lproj/InfoPlist.strings deleted file mode 100755 index 477b28f..0000000 --- a/Pods/SBJson/SBJson/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Pods/SBJson/SBJsonTests/SBJsonTests-Info.plist b/Pods/SBJson/SBJsonTests/SBJsonTests-Info.plist deleted file mode 100755 index 9aad9ba..0000000 --- a/Pods/SBJson/SBJsonTests/SBJsonTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - org.brautaset.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 3.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - - diff --git a/Pods/SBJson/SBJsonTests/SBJsonTests-Prefix.pch b/Pods/SBJson/SBJsonTests/SBJsonTests-Prefix.pch deleted file mode 100755 index 289d1dc..0000000 --- a/Pods/SBJson/SBJsonTests/SBJsonTests-Prefix.pch +++ /dev/null @@ -1,8 +0,0 @@ -// -// Prefix header for all source files of the 'SBJsonTests' target in the 'SBJsonTests' project -// - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Pods/SBJson/SBJsonTests/en.lproj/InfoPlist.strings b/Pods/SBJson/SBJsonTests/en.lproj/InfoPlist.strings deleted file mode 100755 index 477b28f..0000000 --- a/Pods/SBJson/SBJsonTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Pods/SBJson/Tests/Data/comparatorsort/basic/input b/Pods/SBJson/Tests/Data/comparatorsort/basic/input deleted file mode 100755 index 2b65785..0000000 --- a/Pods/SBJson/Tests/Data/comparatorsort/basic/input +++ /dev/null @@ -1 +0,0 @@ -["one",2,{"foo":null,"Boo":false,"quux":true,"bar":[1, 2, []]},{}] diff --git a/Pods/SBJson/Tests/Data/comparatorsort/basic/output b/Pods/SBJson/Tests/Data/comparatorsort/basic/output deleted file mode 100755 index 60184b5..0000000 --- a/Pods/SBJson/Tests/Data/comparatorsort/basic/output +++ /dev/null @@ -1,17 +0,0 @@ -[ - "one", - 2, - { - "bar": [ - 1, - 2, - [ - ] - ], - "Boo": false, - "foo": null, - "quux": true - }, - { - } -] diff --git a/Pods/SBJson/Tests/Data/comparatorsort/json.org/a/input b/Pods/SBJson/Tests/Data/comparatorsort/json.org/a/input deleted file mode 100755 index c8f1d8c..0000000 --- a/Pods/SBJson/Tests/Data/comparatorsort/json.org/a/input +++ /dev/null @@ -1,22 +0,0 @@ -{ - "glossary": { - "title": "example glossary", - "GlossDiv": { - "title": "S", - "GlossList": { - "GlossEntry": { - "ID": "SGML", - "SortAs": "SGML", - "GlossTerm": "Standard Generalized Markup Language", - "Acronym": "SGML", - "Abbrev": "ISO 8879:1986", - "GlossDef": { - "para": "A meta-markup language, used to create markup languages such as DocBook.", - "GlossSeeAlso": ["GML", "XML"] - }, - "GlossSee": "markup" - } - } - } - } -} diff --git a/Pods/SBJson/Tests/Data/comparatorsort/json.org/a/output b/Pods/SBJson/Tests/Data/comparatorsort/json.org/a/output deleted file mode 100755 index db268bf..0000000 --- a/Pods/SBJson/Tests/Data/comparatorsort/json.org/a/output +++ /dev/null @@ -1,25 +0,0 @@ -{ - "glossary": { - "GlossDiv": { - "GlossList": { - "GlossEntry": { - "Abbrev": "ISO 8879:1986", - "Acronym": "SGML", - "GlossDef": { - "GlossSeeAlso": [ - "GML", - "XML" - ], - "para": "A meta-markup language, used to create markup languages such as DocBook." - }, - "GlossSee": "markup", - "GlossTerm": "Standard Generalized Markup Language", - "ID": "SGML", - "SortAs": "SGML" - } - }, - "title": "S" - }, - "title": "example glossary" - } -} diff --git a/Pods/SBJson/Tests/Data/comparatorsort/rfc4627/a/input b/Pods/SBJson/Tests/Data/comparatorsort/rfc4627/a/input deleted file mode 100755 index 8454dc2..0000000 --- a/Pods/SBJson/Tests/Data/comparatorsort/rfc4627/a/input +++ /dev/null @@ -1,13 +0,0 @@ - { - "Image": { - "Width": 800, - "Height": 600, - "Title": "View from 15th Floor", - "Thumbnail": { - "Url": "http://www.example.com/image/481989943", - "Height": 125, - "Width": "100" - }, - "IDs": [116, 943, 234, 38793] - } - } \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/comparatorsort/rfc4627/a/output b/Pods/SBJson/Tests/Data/comparatorsort/rfc4627/a/output deleted file mode 100755 index b668287..0000000 --- a/Pods/SBJson/Tests/Data/comparatorsort/rfc4627/a/output +++ /dev/null @@ -1,18 +0,0 @@ -{ - "Image": { - "Height": 600, - "IDs": [ - 116, - 943, - 234, - 38793 - ], - "Thumbnail": { - "Height": 125, - "Url": "http://www.example.com/image/481989943", - "Width": "100" - }, - "Title": "View from 15th Floor", - "Width": 800 - } -} diff --git a/Pods/SBJson/Tests/Data/format/basic/input b/Pods/SBJson/Tests/Data/format/basic/input deleted file mode 100755 index 2e69327..0000000 --- a/Pods/SBJson/Tests/Data/format/basic/input +++ /dev/null @@ -1 +0,0 @@ -["one",2,{"foo":null,"quux":true,"bar":[1, 2, []]},{}] diff --git a/Pods/SBJson/Tests/Data/format/basic/output b/Pods/SBJson/Tests/Data/format/basic/output deleted file mode 100755 index 7584dad..0000000 --- a/Pods/SBJson/Tests/Data/format/basic/output +++ /dev/null @@ -1,16 +0,0 @@ -[ - "one", - 2, - { - "bar": [ - 1, - 2, - [ - ] - ], - "foo": null, - "quux": true - }, - { - } -] diff --git a/Pods/SBJson/Tests/Data/format/json.org/README b/Pods/SBJson/Tests/Data/format/json.org/README deleted file mode 100755 index 5110cde..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/README +++ /dev/null @@ -1 +0,0 @@ -Source: http://json.org/example.html \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/format/json.org/a/input b/Pods/SBJson/Tests/Data/format/json.org/a/input deleted file mode 100755 index c8f1d8c..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/a/input +++ /dev/null @@ -1,22 +0,0 @@ -{ - "glossary": { - "title": "example glossary", - "GlossDiv": { - "title": "S", - "GlossList": { - "GlossEntry": { - "ID": "SGML", - "SortAs": "SGML", - "GlossTerm": "Standard Generalized Markup Language", - "Acronym": "SGML", - "Abbrev": "ISO 8879:1986", - "GlossDef": { - "para": "A meta-markup language, used to create markup languages such as DocBook.", - "GlossSeeAlso": ["GML", "XML"] - }, - "GlossSee": "markup" - } - } - } - } -} diff --git a/Pods/SBJson/Tests/Data/format/json.org/a/output b/Pods/SBJson/Tests/Data/format/json.org/a/output deleted file mode 100755 index db268bf..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/a/output +++ /dev/null @@ -1,25 +0,0 @@ -{ - "glossary": { - "GlossDiv": { - "GlossList": { - "GlossEntry": { - "Abbrev": "ISO 8879:1986", - "Acronym": "SGML", - "GlossDef": { - "GlossSeeAlso": [ - "GML", - "XML" - ], - "para": "A meta-markup language, used to create markup languages such as DocBook." - }, - "GlossSee": "markup", - "GlossTerm": "Standard Generalized Markup Language", - "ID": "SGML", - "SortAs": "SGML" - } - }, - "title": "S" - }, - "title": "example glossary" - } -} diff --git a/Pods/SBJson/Tests/Data/format/json.org/b/input b/Pods/SBJson/Tests/Data/format/json.org/b/input deleted file mode 100755 index 5600991..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/b/input +++ /dev/null @@ -1,11 +0,0 @@ -{"menu": { - "id": "file", - "value": "File", - "popup": { - "menuitem": [ - {"value": "New", "onclick": "CreateNewDoc()"}, - {"value": "Open", "onclick": "OpenDoc()"}, - {"value": "Close", "onclick": "CloseDoc()"} - ] - } -}} diff --git a/Pods/SBJson/Tests/Data/format/json.org/b/output b/Pods/SBJson/Tests/Data/format/json.org/b/output deleted file mode 100755 index 05af1d7..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/b/output +++ /dev/null @@ -1,22 +0,0 @@ -{ - "menu": { - "id": "file", - "popup": { - "menuitem": [ - { - "onclick": "CreateNewDoc()", - "value": "New" - }, - { - "onclick": "OpenDoc()", - "value": "Open" - }, - { - "onclick": "CloseDoc()", - "value": "Close" - } - ] - }, - "value": "File" - } -} diff --git a/Pods/SBJson/Tests/Data/format/json.org/c/input b/Pods/SBJson/Tests/Data/format/json.org/c/input deleted file mode 100755 index 9b820d8..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/c/input +++ /dev/null @@ -1,26 +0,0 @@ -{"widget": { - "debug": "on", - "window": { - "title": "Sample Konfabulator Widget", - "name": "main_window", - "width": 500, - "height": 500 - }, - "image": { - "src": "Images/Sun.png", - "name": "sun1", - "hOffset": 250, - "vOffset": 250, - "alignment": "center" - }, - "text": { - "data": "Click Here", - "size": 36, - "style": "bold", - "name": "text1", - "hOffset": 250, - "vOffset": 100, - "alignment": "center", - "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" - } -}} diff --git a/Pods/SBJson/Tests/Data/format/json.org/c/output b/Pods/SBJson/Tests/Data/format/json.org/c/output deleted file mode 100755 index 3b4c09e..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/c/output +++ /dev/null @@ -1,28 +0,0 @@ -{ - "widget": { - "debug": "on", - "image": { - "alignment": "center", - "hOffset": 250, - "name": "sun1", - "src": "Images/Sun.png", - "vOffset": 250 - }, - "text": { - "alignment": "center", - "data": "Click Here", - "hOffset": 250, - "name": "text1", - "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;", - "size": 36, - "style": "bold", - "vOffset": 100 - }, - "window": { - "height": 500, - "name": "main_window", - "title": "Sample Konfabulator Widget", - "width": 500 - } - } -} diff --git a/Pods/SBJson/Tests/Data/format/json.org/d/input b/Pods/SBJson/Tests/Data/format/json.org/d/input deleted file mode 100755 index d540b57..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/d/input +++ /dev/null @@ -1,88 +0,0 @@ -{"web-app": { - "servlet": [ - { - "servlet-name": "cofaxCDS", - "servlet-class": "org.cofax.cds.CDSServlet", - "init-param": { - "configGlossary:installationAt": "Philadelphia, PA", - "configGlossary:adminEmail": "ksm@pobox.com", - "configGlossary:poweredBy": "Cofax", - "configGlossary:poweredByIcon": "/images/cofax.gif", - "configGlossary:staticPath": "/content/static", - "templateProcessorClass": "org.cofax.WysiwygTemplate", - "templateLoaderClass": "org.cofax.FilesTemplateLoader", - "templatePath": "templates", - "templateOverridePath": "", - "defaultListTemplate": "listTemplate.htm", - "defaultFileTemplate": "articleTemplate.htm", - "useJSP": false, - "jspListTemplate": "listTemplate.jsp", - "jspFileTemplate": "articleTemplate.jsp", - "cachePackageTagsTrack": 200, - "cachePackageTagsStore": 200, - "cachePackageTagsRefresh": 60, - "cacheTemplatesTrack": 100, - "cacheTemplatesStore": 50, - "cacheTemplatesRefresh": 15, - "cachePagesTrack": 200, - "cachePagesStore": 100, - "cachePagesRefresh": 10, - "cachePagesDirtyRead": 10, - "searchEngineListTemplate": "forSearchEnginesList.htm", - "searchEngineFileTemplate": "forSearchEngines.htm", - "searchEngineRobotsDb": "WEB-INF/robots.db", - "useDataStore": true, - "dataStoreClass": "org.cofax.SqlDataStore", - "redirectionClass": "org.cofax.SqlRedirection", - "dataStoreName": "cofax", - "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver", - "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon", - "dataStoreUser": "sa", - "dataStorePassword": "dataStoreTestQuery", - "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';", - "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log", - "dataStoreInitConns": 10, - "dataStoreMaxConns": 100, - "dataStoreConnUsageLimit": 100, - "dataStoreLogLevel": "debug", - "maxUrlLength": 500}}, - { - "servlet-name": "cofaxEmail", - "servlet-class": "org.cofax.cds.EmailServlet", - "init-param": { - "mailHost": "mail1", - "mailHostOverride": "mail2"}}, - { - "servlet-name": "cofaxAdmin", - "servlet-class": "org.cofax.cds.AdminServlet"}, - - { - "servlet-name": "fileServlet", - "servlet-class": "org.cofax.cds.FileServlet"}, - { - "servlet-name": "cofaxTools", - "servlet-class": "org.cofax.cms.CofaxToolsServlet", - "init-param": { - "templatePath": "toolstemplates/", - "log": 1, - "logLocation": "/usr/local/tomcat/logs/CofaxTools.log", - "logMaxSize": "", - "dataLog": 1, - "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log", - "dataLogMaxSize": "", - "removePageCache": "/content/admin/remove?cache=pages&id=", - "removeTemplateCache": "/content/admin/remove?cache=templates&id=", - "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder", - "lookInContext": 1, - "adminGroupID": 4, - "betaServer": true}}], - "servlet-mapping": { - "cofaxCDS": "/", - "cofaxEmail": "/cofaxutil/aemail/*", - "cofaxAdmin": "/admin/*", - "fileServlet": "/static/*", - "cofaxTools": "/tools/*"}, - - "taglib": { - "taglib-uri": "cofax.tld", - "taglib-location": "/WEB-INF/tlds/cofax.tld"}}} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/format/json.org/d/output b/Pods/SBJson/Tests/Data/format/json.org/d/output deleted file mode 100755 index 538bba2..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/d/output +++ /dev/null @@ -1,100 +0,0 @@ -{ - "web-app": { - "servlet": [ - { - "init-param": { - "cachePackageTagsRefresh": 60, - "cachePackageTagsStore": 200, - "cachePackageTagsTrack": 200, - "cachePagesDirtyRead": 10, - "cachePagesRefresh": 10, - "cachePagesStore": 100, - "cachePagesTrack": 200, - "cacheTemplatesRefresh": 15, - "cacheTemplatesStore": 50, - "cacheTemplatesTrack": 100, - "configGlossary:adminEmail": "ksm@pobox.com", - "configGlossary:installationAt": "Philadelphia, PA", - "configGlossary:poweredBy": "Cofax", - "configGlossary:poweredByIcon": "/images/cofax.gif", - "configGlossary:staticPath": "/content/static", - "dataStoreClass": "org.cofax.SqlDataStore", - "dataStoreConnUsageLimit": 100, - "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver", - "dataStoreInitConns": 10, - "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log", - "dataStoreLogLevel": "debug", - "dataStoreMaxConns": 100, - "dataStoreName": "cofax", - "dataStorePassword": "dataStoreTestQuery", - "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';", - "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon", - "dataStoreUser": "sa", - "defaultFileTemplate": "articleTemplate.htm", - "defaultListTemplate": "listTemplate.htm", - "jspFileTemplate": "articleTemplate.jsp", - "jspListTemplate": "listTemplate.jsp", - "maxUrlLength": 500, - "redirectionClass": "org.cofax.SqlRedirection", - "searchEngineFileTemplate": "forSearchEngines.htm", - "searchEngineListTemplate": "forSearchEnginesList.htm", - "searchEngineRobotsDb": "WEB-INF/robots.db", - "templateLoaderClass": "org.cofax.FilesTemplateLoader", - "templateOverridePath": "", - "templatePath": "templates", - "templateProcessorClass": "org.cofax.WysiwygTemplate", - "useDataStore": true, - "useJSP": false - }, - "servlet-class": "org.cofax.cds.CDSServlet", - "servlet-name": "cofaxCDS" - }, - { - "init-param": { - "mailHost": "mail1", - "mailHostOverride": "mail2" - }, - "servlet-class": "org.cofax.cds.EmailServlet", - "servlet-name": "cofaxEmail" - }, - { - "servlet-class": "org.cofax.cds.AdminServlet", - "servlet-name": "cofaxAdmin" - }, - { - "servlet-class": "org.cofax.cds.FileServlet", - "servlet-name": "fileServlet" - }, - { - "init-param": { - "adminGroupID": 4, - "betaServer": true, - "dataLog": 1, - "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log", - "dataLogMaxSize": "", - "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder", - "log": 1, - "logLocation": "/usr/local/tomcat/logs/CofaxTools.log", - "logMaxSize": "", - "lookInContext": 1, - "removePageCache": "/content/admin/remove?cache=pages&id=", - "removeTemplateCache": "/content/admin/remove?cache=templates&id=", - "templatePath": "toolstemplates/" - }, - "servlet-class": "org.cofax.cms.CofaxToolsServlet", - "servlet-name": "cofaxTools" - } - ], - "servlet-mapping": { - "cofaxAdmin": "/admin/*", - "cofaxCDS": "/", - "cofaxEmail": "/cofaxutil/aemail/*", - "cofaxTools": "/tools/*", - "fileServlet": "/static/*" - }, - "taglib": { - "taglib-location": "/WEB-INF/tlds/cofax.tld", - "taglib-uri": "cofax.tld" - } - } -} diff --git a/Pods/SBJson/Tests/Data/format/json.org/e/input b/Pods/SBJson/Tests/Data/format/json.org/e/input deleted file mode 100755 index 49980ca..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/e/input +++ /dev/null @@ -1,27 +0,0 @@ -{"menu": { - "header": "SVG Viewer", - "items": [ - {"id": "Open"}, - {"id": "OpenNew", "label": "Open New"}, - null, - {"id": "ZoomIn", "label": "Zoom In"}, - {"id": "ZoomOut", "label": "Zoom Out"}, - {"id": "OriginalView", "label": "Original View"}, - null, - {"id": "Quality"}, - {"id": "Pause"}, - {"id": "Mute"}, - null, - {"id": "Find", "label": "Find..."}, - {"id": "FindAgain", "label": "Find Again"}, - {"id": "Copy"}, - {"id": "CopyAgain", "label": "Copy Again"}, - {"id": "CopySVG", "label": "Copy SVG"}, - {"id": "ViewSVG", "label": "View SVG"}, - {"id": "ViewSource", "label": "View Source"}, - {"id": "SaveAs", "label": "Save As"}, - null, - {"id": "Help"}, - {"id": "About", "label": "About Adobe CVG Viewer..."} - ] -}} diff --git a/Pods/SBJson/Tests/Data/format/json.org/e/output b/Pods/SBJson/Tests/Data/format/json.org/e/output deleted file mode 100755 index 114f890..0000000 --- a/Pods/SBJson/Tests/Data/format/json.org/e/output +++ /dev/null @@ -1,77 +0,0 @@ -{ - "menu": { - "header": "SVG Viewer", - "items": [ - { - "id": "Open" - }, - { - "id": "OpenNew", - "label": "Open New" - }, - null, - { - "id": "ZoomIn", - "label": "Zoom In" - }, - { - "id": "ZoomOut", - "label": "Zoom Out" - }, - { - "id": "OriginalView", - "label": "Original View" - }, - null, - { - "id": "Quality" - }, - { - "id": "Pause" - }, - { - "id": "Mute" - }, - null, - { - "id": "Find", - "label": "Find..." - }, - { - "id": "FindAgain", - "label": "Find Again" - }, - { - "id": "Copy" - }, - { - "id": "CopyAgain", - "label": "Copy Again" - }, - { - "id": "CopySVG", - "label": "Copy SVG" - }, - { - "id": "ViewSVG", - "label": "View SVG" - }, - { - "id": "ViewSource", - "label": "View Source" - }, - { - "id": "SaveAs", - "label": "Save As" - }, - null, - { - "id": "Help" - }, - { - "id": "About", - "label": "About Adobe CVG Viewer..." - } - ] - } -} diff --git a/Pods/SBJson/Tests/Data/format/rfc4627/README b/Pods/SBJson/Tests/Data/format/rfc4627/README deleted file mode 100755 index 2bbac38..0000000 --- a/Pods/SBJson/Tests/Data/format/rfc4627/README +++ /dev/null @@ -1 +0,0 @@ -Source: http://www.ietf.org/rfc/rfc4627.txt?number=4627 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/format/rfc4627/a/input b/Pods/SBJson/Tests/Data/format/rfc4627/a/input deleted file mode 100755 index 8454dc2..0000000 --- a/Pods/SBJson/Tests/Data/format/rfc4627/a/input +++ /dev/null @@ -1,13 +0,0 @@ - { - "Image": { - "Width": 800, - "Height": 600, - "Title": "View from 15th Floor", - "Thumbnail": { - "Url": "http://www.example.com/image/481989943", - "Height": 125, - "Width": "100" - }, - "IDs": [116, 943, 234, 38793] - } - } \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/format/rfc4627/a/output b/Pods/SBJson/Tests/Data/format/rfc4627/a/output deleted file mode 100755 index b668287..0000000 --- a/Pods/SBJson/Tests/Data/format/rfc4627/a/output +++ /dev/null @@ -1,18 +0,0 @@ -{ - "Image": { - "Height": 600, - "IDs": [ - 116, - 943, - 234, - 38793 - ], - "Thumbnail": { - "Height": 125, - "Url": "http://www.example.com/image/481989943", - "Width": "100" - }, - "Title": "View from 15th Floor", - "Width": 800 - } -} diff --git a/Pods/SBJson/Tests/Data/format/rfc4627/b/input b/Pods/SBJson/Tests/Data/format/rfc4627/b/input deleted file mode 100755 index 29cc776..0000000 --- a/Pods/SBJson/Tests/Data/format/rfc4627/b/input +++ /dev/null @@ -1,22 +0,0 @@ - [ - { - "precision": "zip", - "Latitude": 37.7668, - "Longitude": -122.3959, - "Address": "", - "City": "SAN FRANCISCO", - "State": "CA", - "Zip": "94107", - "Country": "US" - }, - { - "precision": "zip", - "Latitude": 37.371991, - "Longitude": -122.026020, - "Address": "", - "City": "SUNNYVALE", - "State": "CA", - "Zip": "94085", - "Country": "US" - } - ] diff --git a/Pods/SBJson/Tests/Data/format/rfc4627/b/output b/Pods/SBJson/Tests/Data/format/rfc4627/b/output deleted file mode 100755 index 42017b1..0000000 --- a/Pods/SBJson/Tests/Data/format/rfc4627/b/output +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "Address": "", - "City": "SAN FRANCISCO", - "Country": "US", - "Latitude": 37.7668, - "Longitude": -122.3959, - "State": "CA", - "Zip": "94107", - "precision": "zip" - }, - { - "Address": "", - "City": "SUNNYVALE", - "Country": "US", - "Latitude": 37.371991, - "Longitude": -122.02602, - "State": "CA", - "Zip": "94085", - "precision": "zip" - } -] diff --git a/Pods/SBJson/Tests/Data/invalid/array/eof-1/error b/Pods/SBJson/Tests/Data/invalid/array/eof-1/error deleted file mode 100755 index a3eac87..0000000 --- a/Pods/SBJson/Tests/Data/invalid/array/eof-1/error +++ /dev/null @@ -1 +0,0 @@ -Unexpected end of input diff --git a/Pods/SBJson/Tests/Data/invalid/array/eof-1/input b/Pods/SBJson/Tests/Data/invalid/array/eof-1/input deleted file mode 100755 index 558ed37..0000000 --- a/Pods/SBJson/Tests/Data/invalid/array/eof-1/input +++ /dev/null @@ -1 +0,0 @@ -[ diff --git a/Pods/SBJson/Tests/Data/invalid/array/eof-2/error b/Pods/SBJson/Tests/Data/invalid/array/eof-2/error deleted file mode 100755 index a3eac87..0000000 --- a/Pods/SBJson/Tests/Data/invalid/array/eof-2/error +++ /dev/null @@ -1 +0,0 @@ -Unexpected end of input diff --git a/Pods/SBJson/Tests/Data/invalid/array/eof-2/input b/Pods/SBJson/Tests/Data/invalid/array/eof-2/input deleted file mode 100755 index 7d85cb2..0000000 --- a/Pods/SBJson/Tests/Data/invalid/array/eof-2/input +++ /dev/null @@ -1 +0,0 @@ -[1 diff --git a/Pods/SBJson/Tests/Data/invalid/array/eof-3/error b/Pods/SBJson/Tests/Data/invalid/array/eof-3/error deleted file mode 100755 index a3eac87..0000000 --- a/Pods/SBJson/Tests/Data/invalid/array/eof-3/error +++ /dev/null @@ -1 +0,0 @@ -Unexpected end of input diff --git a/Pods/SBJson/Tests/Data/invalid/array/eof-3/input b/Pods/SBJson/Tests/Data/invalid/array/eof-3/input deleted file mode 100755 index 2534919..0000000 --- a/Pods/SBJson/Tests/Data/invalid/array/eof-3/input +++ /dev/null @@ -1 +0,0 @@ -[[] diff --git a/Pods/SBJson/Tests/Data/invalid/array/eof-4/error b/Pods/SBJson/Tests/Data/invalid/array/eof-4/error deleted file mode 100755 index a3eac87..0000000 --- a/Pods/SBJson/Tests/Data/invalid/array/eof-4/error +++ /dev/null @@ -1 +0,0 @@ -Unexpected end of input diff --git a/Pods/SBJson/Tests/Data/invalid/array/eof-4/input b/Pods/SBJson/Tests/Data/invalid/array/eof-4/input deleted file mode 100755 index f950969..0000000 --- a/Pods/SBJson/Tests/Data/invalid/array/eof-4/input +++ /dev/null @@ -1 +0,0 @@ -["a] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/invalid/boolean/false/error b/Pods/SBJson/Tests/Data/invalid/boolean/false/error deleted file mode 100755 index 06dfb06..0000000 --- a/Pods/SBJson/Tests/Data/invalid/boolean/false/error +++ /dev/null @@ -1 +0,0 @@ -Expected 'false' after initial 'f' diff --git a/Pods/SBJson/Tests/Data/invalid/boolean/false/input b/Pods/SBJson/Tests/Data/invalid/boolean/false/input deleted file mode 100755 index 5257238..0000000 --- a/Pods/SBJson/Tests/Data/invalid/boolean/false/input +++ /dev/null @@ -1 +0,0 @@ -[failing diff --git a/Pods/SBJson/Tests/Data/invalid/boolean/true/error b/Pods/SBJson/Tests/Data/invalid/boolean/true/error deleted file mode 100755 index 14ff3b0..0000000 --- a/Pods/SBJson/Tests/Data/invalid/boolean/true/error +++ /dev/null @@ -1 +0,0 @@ -Expected 'true' after initial 't' diff --git a/Pods/SBJson/Tests/Data/invalid/boolean/true/input b/Pods/SBJson/Tests/Data/invalid/boolean/true/input deleted file mode 100755 index 52b9bc2..0000000 --- a/Pods/SBJson/Tests/Data/invalid/boolean/true/input +++ /dev/null @@ -1 +0,0 @@ -[truth diff --git a/Pods/SBJson/Tests/Data/invalid/depth/error b/Pods/SBJson/Tests/Data/invalid/depth/error deleted file mode 100755 index 65cd336..0000000 --- a/Pods/SBJson/Tests/Data/invalid/depth/error +++ /dev/null @@ -1 +0,0 @@ -Input depth exceeds max depth of 4 diff --git a/Pods/SBJson/Tests/Data/invalid/depth/input b/Pods/SBJson/Tests/Data/invalid/depth/input deleted file mode 100755 index 8748994..0000000 --- a/Pods/SBJson/Tests/Data/invalid/depth/input +++ /dev/null @@ -1 +0,0 @@ -[{"foo":[{"bar":[ diff --git a/Pods/SBJson/Tests/Data/invalid/encoding/utf8/error b/Pods/SBJson/Tests/Data/invalid/encoding/utf8/error deleted file mode 100755 index 6dcfd89..0000000 --- a/Pods/SBJson/Tests/Data/invalid/encoding/utf8/error +++ /dev/null @@ -1 +0,0 @@ -Broken Unicode encoding diff --git a/Pods/SBJson/Tests/Data/invalid/encoding/utf8/input b/Pods/SBJson/Tests/Data/invalid/encoding/utf8/input deleted file mode 100755 index d1d4699..0000000 --- a/Pods/SBJson/Tests/Data/invalid/encoding/utf8/input +++ /dev/null @@ -1 +0,0 @@ -["UTF-8 decoder capability and stress test\n----------------------------------------\n\nMarkus Kuhn - 2003-02-19\n\nThis test file can help you examine, how your UTF-8 decoder handles\nvarious types of correct, malformed, or otherwise interesting UTF-8\nsequences. This file is not meant to be a conformance test. It does\nnot prescribes any particular outcome and therefore there is no way to\n\"pass\" or \"fail\" this test file, even though the texts suggests a\npreferable decoder behaviour at some places. The aim is instead to\nhelp you think about and test the behaviour of your UTF-8 on a\nsystematic collection of unusual inputs. Experience so far suggests\nthat most first-time authors of UTF-8 decoders find at least one\nserious problem in their decoder by using this file.\n\nThe test lines below cover boundary conditions, malformed UTF-8\nsequences as well as correctly encoded UTF-8 sequences of Unicode code\npoints that should never occur in a correct UTF-8 file.\n\nAccording to ISO 10646-1:2000, sections D.7 and 2.3c, a device\nreceiving UTF-8 shall interpret a \"malformed sequence in the same way\nthat it interprets a character that is outside the adopted subset\" and\n\"characters that are not within the adopted subset shall be indicated\nto the user\" by a receiving device. A quite commonly used approach in\nUTF-8 decoders is to replace any malformed UTF-8 sequence by a\nreplacement character (U+FFFD), which looks a bit like an inverted\nquestion mark, or a similar symbol. It might be a good idea to\nvisually distinguish a malformed UTF-8 sequence from a correctly\nencoded Unicode character that is just not available in the current\nfont but otherwise fully legal, even though ISO 10646-1 doesn't\nmandate this. In any case, just ignoring malformed sequences or\nunavailable characters does not conform to ISO 10646, will make\ndebugging more difficult, and can lead to user confusion.\n\nPlease check, whether a malformed UTF-8 sequence is (1) represented at\nall, (2) represented by exactly one single replacement character (or\nequivalent signal), and (3) the following quotation mark after an\nillegal UTF-8 sequence is correctly displayed, i.e. proper\nresynchronization takes place immageately after any malformed\nsequence. This file says \"THE END\" in the last line, so if you don't\nsee that, your decoder crashed somehow before, which should always be\ncause for concern.\n\nAll lines in this file are exactly 79 characters long (plus the line\nfeed). In addition, all lines end with \"|\", except for the two test\nlines 2.1.1 and 2.2.1, which contain non-printable ASCII controls\nU+0000 and U+007F. If you display this file with a fixed-width font,\nthese \"|\" characters should all line up in column 79 (right margin).\nThis allows you to test quickly, whether your UTF-8 decoder finds the\ncorrect number of characters in every line, that is whether each\nmalformed sequences is replaced by a single replacement character.\n\nNote that as an alternative to the notion of malformed sequence used\nNote that as an alternative to the notion of malformed sequence used\npreferable) solution to represent each individual byte of a malformed\nsequence by a replacement character. If you follow this strategy in\nyour decoder, then please ignore the \"|\" column.\n\n\nHere come the tests: |\n |\n1 Some correct UTF-8 text |\n1 Some correct UTF-8 text |\nYou should see the Greek word 'kosme': \"κόσμε\" |\n |\n2 Boundary condition test cases |\n |\n2.1 First possible sequence of a certain length |\n |\n2.1.1 1 byte (U-00000000): \"NUL\" \n2.1.2 2 bytes (U-00000080): \"€\" |\n2.1.3 3 bytes (U-00000800): \"à €\" |\n2.1.4 4 bytes (U-00010000): \"ð€€\" |\n2.1.5 5 bytes (U-00200000): \"øˆ€€€\" |\n2.1.6 6 bytes (U-04000000): \"ü„€€€€\" |\n |\n2.2 Last possible sequence of a certain length |\n |\n2.2.1 1 byte (U-0000007F): \"\" \n2.2.2 2 bytes (U-000007FF): \"ß¿\" |\n2.2.3 3 bytes (U-0000FFFF): \"ï¿¿\" |\n2.2.4 4 bytes (U-001FFFFF): \"÷¿¿¿\" |\n2.2.5 5 bytes (U-03FFFFFF): \"û¿¿¿¿\" |\n2.2.6 6 bytes (U-7FFFFFFF): \"ý¿¿¿¿¿\" |\n |\n2.3 Other boundary conditions |\n |\n2.3.1 U-0000D7FF = ed 9f bf = \"퟿\" |\n2.3.2 U-0000E000 = ee 80 80 = \"\" |\n2.3.3 U-0000FFFD = ef bf bd = \"�\" |\n2.3.4 U-0010FFFF = f4 8f bf bf = \"ô¿¿\" |\n2.3.5 U-00110000 = f4 90 80 80 = \"ô€€\" |\n |\n3 Malformed sequences |\n |\n3.1 Unexpected continuation bytes |\n |\nEach unexpected continuation byte should be separately signalled as a |\nmalformed sequence of its own. |\n |\n3.1.1 First continuation byte 0x80: \"€\" |\n3.1.2 Last continuation byte 0xbf: \"¿\" |\n |\n3.1.3 2 continuation bytes: \"€¿\" |\n3.1.4 3 continuation bytes: \"€¿€\" |\n3.1.5 4 continuation bytes: \"€¿€¿\" |\n3.1.6 5 continuation bytes: \"€¿€¿€\" |\n3.1.7 6 continuation bytes: \"€¿€¿€¿\" |\n3.1.8 7 continuation bytes: \"€¿€¿€¿€\" |\n |\n3.1.9 Sequence of all 64 possible continuation bytes (0x80-0xbf): |\n |\n \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ |\n ‘’“”•–—˜™š›œžŸ |\n  ¡¢£¤¥¦§¨©ª«¬­®¯ |\n °±²³´µ¶·¸¹º»¼½¾¿\" |\n |\n3.2 Lonely start characters |\n |\n3.2.1 All 32 first bytes of 2-byte sequences (0xc0-0xdf), |\n each followed by a space character: |\n |\n \"À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï |\n Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß \" |\n |\n3.2.2 All 16 first bytes of 3-byte sequences (0xe0-0xef), |\n each followed by a space character: |\n |\n \"à á â ã ä å æ ç è é ê ë ì í î ï \" |\n |\n3.2.3 All 8 first bytes of 4-byte sequences (0xf0-0xf7), |\n each followed by a space character: |\n |\n \"ð ñ ò ó ô õ ö ÷ \" |\n |\n3.2.4 All 4 first bytes of 5-byte sequences (0xf8-0xfb), |\n each followed by a space character: |\n |\n \"ø ù ú û \" |\n |\n3.2.5 All 2 first bytes of 6-byte sequences (0xfc-0xfd), |\n each followed by a space character: |\n |\n \"ü ý \" |\n |\n3.3 Sequences with last continuation byte missing |\n |\nAll bytes of an incomplete sequence should be signalled as a single |\nmalformed sequence, i.e., you should see only a single replacement |\ncharacter in each of the next 10 tests. (Characters as in section 2) |\n |\n3.3.1 2-byte sequence with last byte missing (U+0000): \"À\" |\n3.3.2 3-byte sequence with last byte missing (U+0000): \"à€\" |\n3.3.3 4-byte sequence with last byte missing (U+0000): \"ð€€\" |\n3.3.4 5-byte sequence with last byte missing (U+0000): \"ø€€€\" |\n3.3.5 6-byte sequence with last byte missing (U+0000): \"ü€€€€\" |\n3.3.6 2-byte sequence with last byte missing (U-000007FF): \"ß\" |\n3.3.7 3-byte sequence with last byte missing (U-0000FFFF): \"ï¿\" |\n3.3.8 4-byte sequence with last byte missing (U-001FFFFF): \"÷¿¿\" |\n3.3.9 5-byte sequence with last byte missing (U-03FFFFFF): \"û¿¿¿\" |\n3.3.10 6-byte sequence with last byte missing (U-7FFFFFFF): \"ý¿¿¿¿\" |\n |\n3.4 Concatenation of incomplete sequences |\n |\nAll the 10 sequences of 3.3 concatenated, you should see 10 malformed |\nsequences being signalled: |\n |\n \"Àà€ð€€ø€€€ü€€€€ßï¿÷¿¿û¿¿¿ý¿¿¿¿\" |\n |\n3.5 Impossible bytes |\n |\nThe following two bytes cannot appear in a correct UTF-8 string |\n |\n3.5.1 fe = \"þ\" |\n3.5.2 ff = \"ÿ\" |\n3.5.3 fe fe ff ff = \"þþÿÿ\" |\n |\n4 Overlong sequences |\n |\nThe following sequences are not malformed according to the letter of |\nthe Unicode 2.0 standard. However, they are longer then necessary and |\na correct UTF-8 encoder is not allowed to produce them. A \"safe UTF-8 |\ndecoder\" should reject them just like malformed sequences for two |\nreasons: (1) It helps to debug applications if overlong sequences are |\nnot treated as valid representations of characters, because this helps |\nto spot problems more quickly. (2) Overlong sequences provide |\nalternative representations of characters, that could maliciously be |\nused to bypass filters that check only for ASCII characters. For |\ninstance, a 2-byte encoded line feed (LF) would not be caught by a |\nline counter that counts only 0x0a bytes, but it would still be |\nprocessed as a line feed by an unsafe UTF-8 decoder later in the |\npipeline. From a security point of view, ASCII compatibility of UTF-8 |\nsequences means also, that ASCII characters are *only* allowed to be |\nrepresented by ASCII bytes in the range 0x00-0x7f. To ensure this |\naspect of ASCII compatibility, use only \"safe UTF-8 decoders\" that |\nreject overlong UTF-8 sequences for which a shorter encoding exists. |\n |\n4.1 Examples of an overlong ASCII character |\n |\nWith a safe UTF-8 decoder, all of the following five overlong |\nrepresentations of the ASCII character slash (\"/\") should be rejected |\nlike a malformed UTF-8 sequence, for instance by substituting it with |\na replacement character. If you see a slash below, you do not have a |\nsafe UTF-8 decoder! |\n |\n4.1.1 U+002F = c0 af = \"À¯\" |\n4.1.2 U+002F = e0 80 af = \"à€¯\" |\n4.1.3 U+002F = f0 80 80 af = \"ð€€¯\" |\n4.1.4 U+002F = f8 80 80 80 af = \"ø€€€¯\" |\n4.1.5 U+002F = fc 80 80 80 80 af = \"ü€€€€¯\" |\n |\n4.2 Maximum overlong sequences |\n |\nBelow you see the highest Unicode value that is still resulting in an |\noverlong sequence if represented with the given number of bytes. This |\nis a boundary test for safe UTF-8 decoders. All five characters should |\nbe rejected like malformed UTF-8 sequences. |\n |\n4.2.1 U-0000007F = c1 bf = \"Á¿\" |\n4.2.2 U-000007FF = e0 9f bf = \"àŸ¿\" |\n4.2.3 U-0000FFFF = f0 8f bf bf = \"ð¿¿\" |\n4.2.4 U-001FFFFF = f8 87 bf bf bf = \"ø‡¿¿¿\" |\n4.2.5 U-03FFFFFF = fc 83 bf bf bf bf = \"üƒ¿¿¿¿\" |\n |\n4.3 Overlong representation of the NUL character |\n |\nThe following five sequences should also be rejected like malformed |\nUTF-8 sequences and should not be treated like the ASCII NUL |\ncharacter. |\n |\n4.3.1 U+0000 = c0 80 = \"À€\" |\n4.3.2 U+0000 = e0 80 80 = \"à€€\" |\n4.3.3 U+0000 = f0 80 80 80 = \"ð€€€\" |\n4.3.4 U+0000 = f8 80 80 80 80 = \"ø€€€€\" |\n4.3.5 U+0000 = fc 80 80 80 80 80 = \"ü€€€€€\" |\n |\n5 Illegal code positions |\n |\nThe following UTF-8 sequences should be rejected like malformed |\nsequences, because they never represent valid ISO 10646 characters and |\na UTF-8 decoder that accepts them might introduce security problems |\ncomparable to overlong UTF-8 sequences. |\n |\n5.1 Single UTF-16 surrogates |\n |\n5.1.1 U+D800 = ed a0 80 = \"í €\" |\n5.1.2 U+DB7F = ed ad bf = \"í­¿\" |\n5.1.3 U+DB80 = ed ae 80 = \"í®€\" |\n5.1.4 U+DBFF = ed af bf = \"í¯¿\" |\n5.1.5 U+DC00 = ed b0 80 = \"í°€\" |\n5.1.6 U+DF80 = ed be 80 = \"í¾€\" |\n5.1.7 U+DFFF = ed bf bf = \"í¿¿\" |\n |\n5.2 Paired UTF-16 surrogates |\n |\n5.2.1 U+D800 U+DC00 = ed a0 80 ed b0 80 = \"𐀀\" |\n5.2.2 U+D800 U+DFFF = ed a0 80 ed bf bf = \"𐏿\" |\n5.2.3 U+DB7F U+DC00 = ed ad bf ed b0 80 = \"í­¿í°€\" |\n5.2.4 U+DB7F U+DFFF = ed ad bf ed bf bf = \"í­¿í¿¿\" |\n5.2.5 U+DB80 U+DC00 = ed ae 80 ed b0 80 = \"󰀀\" |\n5.2.6 U+DB80 U+DFFF = ed ae 80 ed bf bf = \"󰏿\" |\n5.2.7 U+DBFF U+DC00 = ed af bf ed b0 80 = \"𐏿\" |\n5.2.8 U+DBFF U+DFFF = ed af bf ed bf bf = \"􏿿\" |\n |\n5.3 Other illegal code positions |\n |\n5.3.1 U+FFFE = ef bf be = \"￾\" |\n5.3.2 U+FFFF = ef bf bf = \"ï¿¿\" |\n |\nTHE END |\n"] diff --git a/Pods/SBJson/Tests/Data/invalid/eof/error b/Pods/SBJson/Tests/Data/invalid/eof/error deleted file mode 100755 index a3eac87..0000000 --- a/Pods/SBJson/Tests/Data/invalid/eof/error +++ /dev/null @@ -1 +0,0 @@ -Unexpected end of input diff --git a/Pods/SBJson/Tests/Data/invalid/garbage/asterisk/error b/Pods/SBJson/Tests/Data/invalid/garbage/asterisk/error deleted file mode 100755 index 0d8f963..0000000 --- a/Pods/SBJson/Tests/Data/invalid/garbage/asterisk/error +++ /dev/null @@ -1 +0,0 @@ -Illegal start of token [*] diff --git a/Pods/SBJson/Tests/Data/invalid/garbage/asterisk/input b/Pods/SBJson/Tests/Data/invalid/garbage/asterisk/input deleted file mode 100755 index f6bcc5b..0000000 --- a/Pods/SBJson/Tests/Data/invalid/garbage/asterisk/input +++ /dev/null @@ -1 +0,0 @@ -[* diff --git a/Pods/SBJson/Tests/Data/invalid/garbage/single-quote/error b/Pods/SBJson/Tests/Data/invalid/garbage/single-quote/error deleted file mode 100755 index 3b20f63..0000000 --- a/Pods/SBJson/Tests/Data/invalid/garbage/single-quote/error +++ /dev/null @@ -1 +0,0 @@ -Illegal start of token ['] diff --git a/Pods/SBJson/Tests/Data/invalid/garbage/single-quote/input b/Pods/SBJson/Tests/Data/invalid/garbage/single-quote/input deleted file mode 100755 index f2dd4d2..0000000 --- a/Pods/SBJson/Tests/Data/invalid/garbage/single-quote/input +++ /dev/null @@ -1 +0,0 @@ -[' diff --git a/Pods/SBJson/Tests/Data/invalid/null/error b/Pods/SBJson/Tests/Data/invalid/null/error deleted file mode 100755 index 6f82085..0000000 --- a/Pods/SBJson/Tests/Data/invalid/null/error +++ /dev/null @@ -1 +0,0 @@ -Expected 'null' after initial 'n' diff --git a/Pods/SBJson/Tests/Data/invalid/null/input b/Pods/SBJson/Tests/Data/invalid/null/input deleted file mode 100755 index 4a04698..0000000 --- a/Pods/SBJson/Tests/Data/invalid/null/input +++ /dev/null @@ -1 +0,0 @@ -[nill diff --git a/Pods/SBJson/Tests/Data/invalid/number/leading-plus/error b/Pods/SBJson/Tests/Data/invalid/number/leading-plus/error deleted file mode 100755 index 0b00748..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/leading-plus/error +++ /dev/null @@ -1 +0,0 @@ -Leading + is illegal in number diff --git a/Pods/SBJson/Tests/Data/invalid/number/leading-plus/input b/Pods/SBJson/Tests/Data/invalid/number/leading-plus/input deleted file mode 100755 index 63cb3e7..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/leading-plus/input +++ /dev/null @@ -1 +0,0 @@ -[+1 diff --git a/Pods/SBJson/Tests/Data/invalid/number/leading-zero/error b/Pods/SBJson/Tests/Data/invalid/number/leading-zero/error deleted file mode 100755 index dd41a0c..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/leading-zero/error +++ /dev/null @@ -1 +0,0 @@ -Leading zero is illegal in number diff --git a/Pods/SBJson/Tests/Data/invalid/number/leading-zero/input b/Pods/SBJson/Tests/Data/invalid/number/leading-zero/input deleted file mode 100755 index 3a07129..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/leading-zero/input +++ /dev/null @@ -1 +0,0 @@ -[01 diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-decimal/error b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-decimal/error deleted file mode 100755 index 6c149d0..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-decimal/error +++ /dev/null @@ -1 +0,0 @@ -No digits after decimal point diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-decimal/input b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-decimal/input deleted file mode 100755 index 894f9db..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-decimal/input +++ /dev/null @@ -1 +0,0 @@ -[0. diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-1/error b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-1/error deleted file mode 100755 index 461d0d1..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-1/error +++ /dev/null @@ -1 +0,0 @@ -No digits in exponent diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-1/input b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-1/input deleted file mode 100755 index 5d5119b..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-1/input +++ /dev/null @@ -1 +0,0 @@ -[1e- diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-2/error b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-2/error deleted file mode 100755 index 461d0d1..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-2/error +++ /dev/null @@ -1 +0,0 @@ -No digits in exponent diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-2/input b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-2/input deleted file mode 100755 index d3a79c2..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-2/input +++ /dev/null @@ -1 +0,0 @@ -[1e diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-3/error b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-3/error deleted file mode 100755 index 461d0d1..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-3/error +++ /dev/null @@ -1 +0,0 @@ -No digits in exponent diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-3/input b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-3/input deleted file mode 100755 index 81bb4fc..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-exponent-3/input +++ /dev/null @@ -1 +0,0 @@ -[1e+ diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-minus/error b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-minus/error deleted file mode 100755 index 2b0eb1c..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-minus/error +++ /dev/null @@ -1 +0,0 @@ -No digits after initial minus diff --git a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-minus/input b/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-minus/input deleted file mode 100755 index 31a3b40..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/no-digits-after-minus/input +++ /dev/null @@ -1 +0,0 @@ -[- diff --git a/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-1/error b/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-1/error deleted file mode 100755 index 4406ef9..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-1/error +++ /dev/null @@ -1 +0,0 @@ -Exponent out of range diff --git a/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-1/input b/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-1/input deleted file mode 100755 index 71d2fc2..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-1/input +++ /dev/null @@ -1 +0,0 @@ -[1e128] diff --git a/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-2/error b/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-2/error deleted file mode 100755 index 4406ef9..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-2/error +++ /dev/null @@ -1 +0,0 @@ -Exponent out of range diff --git a/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-2/input b/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-2/input deleted file mode 100755 index b386b91..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/overflow-exponent-2/input +++ /dev/null @@ -1 +0,0 @@ -[1e-129] diff --git a/Pods/SBJson/Tests/Data/invalid/number/overflow-mantissa/error b/Pods/SBJson/Tests/Data/invalid/number/overflow-mantissa/error deleted file mode 100755 index 226a8a5..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/overflow-mantissa/error +++ /dev/null @@ -1 +0,0 @@ -Precision is too high diff --git a/Pods/SBJson/Tests/Data/invalid/number/overflow-mantissa/input b/Pods/SBJson/Tests/Data/invalid/number/overflow-mantissa/input deleted file mode 100755 index 8e6e809..0000000 --- a/Pods/SBJson/Tests/Data/invalid/number/overflow-mantissa/input +++ /dev/null @@ -1 +0,0 @@ -[123456789012345678901234567890123456789] diff --git a/Pods/SBJson/Tests/Data/invalid/object/eof-1/error b/Pods/SBJson/Tests/Data/invalid/object/eof-1/error deleted file mode 100755 index a3eac87..0000000 --- a/Pods/SBJson/Tests/Data/invalid/object/eof-1/error +++ /dev/null @@ -1 +0,0 @@ -Unexpected end of input diff --git a/Pods/SBJson/Tests/Data/invalid/object/eof-1/input b/Pods/SBJson/Tests/Data/invalid/object/eof-1/input deleted file mode 100755 index 98232c6..0000000 --- a/Pods/SBJson/Tests/Data/invalid/object/eof-1/input +++ /dev/null @@ -1 +0,0 @@ -{ diff --git a/Pods/SBJson/Tests/Data/invalid/object/eof-2/error b/Pods/SBJson/Tests/Data/invalid/object/eof-2/error deleted file mode 100755 index a3eac87..0000000 --- a/Pods/SBJson/Tests/Data/invalid/object/eof-2/error +++ /dev/null @@ -1 +0,0 @@ -Unexpected end of input diff --git a/Pods/SBJson/Tests/Data/invalid/object/eof-2/input b/Pods/SBJson/Tests/Data/invalid/object/eof-2/input deleted file mode 100755 index 107e626..0000000 --- a/Pods/SBJson/Tests/Data/invalid/object/eof-2/input +++ /dev/null @@ -1 +0,0 @@ -{"a" diff --git a/Pods/SBJson/Tests/Data/invalid/object/eof-3/error b/Pods/SBJson/Tests/Data/invalid/object/eof-3/error deleted file mode 100755 index a3eac87..0000000 --- a/Pods/SBJson/Tests/Data/invalid/object/eof-3/error +++ /dev/null @@ -1 +0,0 @@ -Unexpected end of input diff --git a/Pods/SBJson/Tests/Data/invalid/object/eof-3/input b/Pods/SBJson/Tests/Data/invalid/object/eof-3/input deleted file mode 100755 index f68f262..0000000 --- a/Pods/SBJson/Tests/Data/invalid/object/eof-3/input +++ /dev/null @@ -1 +0,0 @@ -{"a": diff --git a/Pods/SBJson/Tests/Data/invalid/object/eof-4/error b/Pods/SBJson/Tests/Data/invalid/object/eof-4/error deleted file mode 100755 index a3eac87..0000000 --- a/Pods/SBJson/Tests/Data/invalid/object/eof-4/error +++ /dev/null @@ -1 +0,0 @@ -Unexpected end of input diff --git a/Pods/SBJson/Tests/Data/invalid/object/eof-4/input b/Pods/SBJson/Tests/Data/invalid/object/eof-4/input deleted file mode 100755 index 8c3441c..0000000 --- a/Pods/SBJson/Tests/Data/invalid/object/eof-4/input +++ /dev/null @@ -1 +0,0 @@ -{"a":{} diff --git a/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/newline/error b/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/newline/error deleted file mode 100755 index fcf86fe..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/newline/error +++ /dev/null @@ -1 +0,0 @@ -Unescaped control character [0x0A] diff --git a/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/newline/input b/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/newline/input deleted file mode 100755 index 9b30aac..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/newline/input +++ /dev/null @@ -1,2 +0,0 @@ -[" - diff --git a/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/tab/error b/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/tab/error deleted file mode 100755 index b727ec3..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/tab/error +++ /dev/null @@ -1 +0,0 @@ -Unescaped control character [0x09] diff --git a/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/tab/input b/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/tab/input deleted file mode 100755 index ea5f696..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/ctrl-chars/tab/input +++ /dev/null @@ -1 +0,0 @@ -[" " diff --git a/Pods/SBJson/Tests/Data/invalid/string/invalid-hex-quad/error b/Pods/SBJson/Tests/Data/invalid/string/invalid-hex-quad/error deleted file mode 100755 index 6cc5878..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/invalid-hex-quad/error +++ /dev/null @@ -1 +0,0 @@ -Invalid hex quad diff --git a/Pods/SBJson/Tests/Data/invalid/string/invalid-hex-quad/input b/Pods/SBJson/Tests/Data/invalid/string/invalid-hex-quad/input deleted file mode 100755 index aa681fc..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/invalid-hex-quad/input +++ /dev/null @@ -1 +0,0 @@ -["\udefg diff --git a/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-high-surrogate/error b/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-high-surrogate/error deleted file mode 100755 index 4fe6471..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-high-surrogate/error +++ /dev/null @@ -1 +0,0 @@ -Invalid high character in surrogate pair diff --git a/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-high-surrogate/input b/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-high-surrogate/input deleted file mode 100755 index 4a1d124..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-high-surrogate/input +++ /dev/null @@ -1 +0,0 @@ -["\udd1ef diff --git a/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-low-surrogate/error b/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-low-surrogate/error deleted file mode 100755 index 0cb209f..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-low-surrogate/error +++ /dev/null @@ -1 +0,0 @@ -Invalid low character in surrogate pair diff --git a/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-low-surrogate/input b/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-low-surrogate/input deleted file mode 100755 index 9925021..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/unicode-invalid-low-surrogate/input +++ /dev/null @@ -1 +0,0 @@ -["\ud834\u001e diff --git a/Pods/SBJson/Tests/Data/invalid/string/unicode-missing-low-surrogate/error b/Pods/SBJson/Tests/Data/invalid/string/unicode-missing-low-surrogate/error deleted file mode 100755 index 9f36b78..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/unicode-missing-low-surrogate/error +++ /dev/null @@ -1 +0,0 @@ -Missing low character in surrogate pair diff --git a/Pods/SBJson/Tests/Data/invalid/string/unicode-missing-low-surrogate/input b/Pods/SBJson/Tests/Data/invalid/string/unicode-missing-low-surrogate/input deleted file mode 100755 index dbf75bd..0000000 --- a/Pods/SBJson/Tests/Data/invalid/string/unicode-missing-low-surrogate/input +++ /dev/null @@ -1 +0,0 @@ -["\ud834foobar diff --git a/Pods/SBJson/Tests/Data/jsonchecker/README b/Pods/SBJson/Tests/Data/jsonchecker/README deleted file mode 100755 index 425dc55..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/README +++ /dev/null @@ -1 +0,0 @@ -Source: http://json.org/JSON_checker/ \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail1.json b/Pods/SBJson/Tests/Data/jsonchecker/fail1.json deleted file mode 100755 index 6216b86..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail1.json +++ /dev/null @@ -1 +0,0 @@ -"A JSON payload should be an object or array, not a string." \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail10.json b/Pods/SBJson/Tests/Data/jsonchecker/fail10.json deleted file mode 100755 index 5d8c004..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail10.json +++ /dev/null @@ -1 +0,0 @@ -{"Extra value after close": true} "misplaced quoted value" \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail11.json b/Pods/SBJson/Tests/Data/jsonchecker/fail11.json deleted file mode 100755 index 76eb95b..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail11.json +++ /dev/null @@ -1 +0,0 @@ -{"Illegal expression": 1 + 2} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail12.json b/Pods/SBJson/Tests/Data/jsonchecker/fail12.json deleted file mode 100755 index 77580a4..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail12.json +++ /dev/null @@ -1 +0,0 @@ -{"Illegal invocation": alert()} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail13.json b/Pods/SBJson/Tests/Data/jsonchecker/fail13.json deleted file mode 100755 index 379406b..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail13.json +++ /dev/null @@ -1 +0,0 @@ -{"Numbers cannot have leading zeroes": 013} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail14.json b/Pods/SBJson/Tests/Data/jsonchecker/fail14.json deleted file mode 100755 index 0ed366b..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail14.json +++ /dev/null @@ -1 +0,0 @@ -{"Numbers cannot be hex": 0x14} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail15.json b/Pods/SBJson/Tests/Data/jsonchecker/fail15.json deleted file mode 100755 index fc8376b..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail15.json +++ /dev/null @@ -1 +0,0 @@ -["Illegal backslash escape: \x15"] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail16.json b/Pods/SBJson/Tests/Data/jsonchecker/fail16.json deleted file mode 100755 index 3fe21d4..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail16.json +++ /dev/null @@ -1 +0,0 @@ -[\naked] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail17.json b/Pods/SBJson/Tests/Data/jsonchecker/fail17.json deleted file mode 100755 index 62b9214..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail17.json +++ /dev/null @@ -1 +0,0 @@ -["Illegal backslash escape: \017"] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail18.json b/Pods/SBJson/Tests/Data/jsonchecker/fail18.json deleted file mode 100755 index edac927..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail18.json +++ /dev/null @@ -1 +0,0 @@ -[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail19.json b/Pods/SBJson/Tests/Data/jsonchecker/fail19.json deleted file mode 100755 index 3b9c46f..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail19.json +++ /dev/null @@ -1 +0,0 @@ -{"Missing colon" null} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail2.json b/Pods/SBJson/Tests/Data/jsonchecker/fail2.json deleted file mode 100755 index 6b7c11e..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail2.json +++ /dev/null @@ -1 +0,0 @@ -["Unclosed array" \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail20.json b/Pods/SBJson/Tests/Data/jsonchecker/fail20.json deleted file mode 100755 index 27c1af3..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail20.json +++ /dev/null @@ -1 +0,0 @@ -{"Double colon":: null} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail21.json b/Pods/SBJson/Tests/Data/jsonchecker/fail21.json deleted file mode 100755 index 6247457..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail21.json +++ /dev/null @@ -1 +0,0 @@ -{"Comma instead of colon", null} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail22.json b/Pods/SBJson/Tests/Data/jsonchecker/fail22.json deleted file mode 100755 index a775258..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail22.json +++ /dev/null @@ -1 +0,0 @@ -["Colon instead of comma": false] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail23.json b/Pods/SBJson/Tests/Data/jsonchecker/fail23.json deleted file mode 100755 index 494add1..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail23.json +++ /dev/null @@ -1 +0,0 @@ -["Bad value", truth] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail24.json b/Pods/SBJson/Tests/Data/jsonchecker/fail24.json deleted file mode 100755 index caff239..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail24.json +++ /dev/null @@ -1 +0,0 @@ -['single quote'] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail25.json b/Pods/SBJson/Tests/Data/jsonchecker/fail25.json deleted file mode 100755 index 8b7ad23..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail25.json +++ /dev/null @@ -1 +0,0 @@ -[" tab character in string "] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail26.json b/Pods/SBJson/Tests/Data/jsonchecker/fail26.json deleted file mode 100755 index 845d26a..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail26.json +++ /dev/null @@ -1 +0,0 @@ -["tab\ character\ in\ string\ "] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail27.json b/Pods/SBJson/Tests/Data/jsonchecker/fail27.json deleted file mode 100755 index 6b01a2c..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail27.json +++ /dev/null @@ -1,2 +0,0 @@ -["line -break"] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail28.json b/Pods/SBJson/Tests/Data/jsonchecker/fail28.json deleted file mode 100755 index 621a010..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail28.json +++ /dev/null @@ -1,2 +0,0 @@ -["line\ -break"] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail29.json b/Pods/SBJson/Tests/Data/jsonchecker/fail29.json deleted file mode 100755 index 47ec421..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail29.json +++ /dev/null @@ -1 +0,0 @@ -[0e] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail3.json b/Pods/SBJson/Tests/Data/jsonchecker/fail3.json deleted file mode 100755 index 168c81e..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail3.json +++ /dev/null @@ -1 +0,0 @@ -{unquoted_key: "keys must be quoted"} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail30.json b/Pods/SBJson/Tests/Data/jsonchecker/fail30.json deleted file mode 100755 index 8ab0bc4..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail30.json +++ /dev/null @@ -1 +0,0 @@ -[0e+] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail31.json b/Pods/SBJson/Tests/Data/jsonchecker/fail31.json deleted file mode 100755 index 1cce602..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail31.json +++ /dev/null @@ -1 +0,0 @@ -[0e+-1] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail32.json b/Pods/SBJson/Tests/Data/jsonchecker/fail32.json deleted file mode 100755 index 45cba73..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail32.json +++ /dev/null @@ -1 +0,0 @@ -{"Comma instead if closing brace": true, \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail33.json b/Pods/SBJson/Tests/Data/jsonchecker/fail33.json deleted file mode 100755 index ca5eb19..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail33.json +++ /dev/null @@ -1 +0,0 @@ -["mismatch"} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail4.json b/Pods/SBJson/Tests/Data/jsonchecker/fail4.json deleted file mode 100755 index 9de168b..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail4.json +++ /dev/null @@ -1 +0,0 @@ -["extra comma",] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail5.json b/Pods/SBJson/Tests/Data/jsonchecker/fail5.json deleted file mode 100755 index ddf3ce3..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail5.json +++ /dev/null @@ -1 +0,0 @@ -["double extra comma",,] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail6.json b/Pods/SBJson/Tests/Data/jsonchecker/fail6.json deleted file mode 100755 index ed91580..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail6.json +++ /dev/null @@ -1 +0,0 @@ -[ , "<-- missing value"] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail7.json b/Pods/SBJson/Tests/Data/jsonchecker/fail7.json deleted file mode 100755 index 8a96af3..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail7.json +++ /dev/null @@ -1 +0,0 @@ -["Comma after the close"], \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail8.json b/Pods/SBJson/Tests/Data/jsonchecker/fail8.json deleted file mode 100755 index b28479c..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail8.json +++ /dev/null @@ -1 +0,0 @@ -["Extra close"]] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/fail9.json b/Pods/SBJson/Tests/Data/jsonchecker/fail9.json deleted file mode 100755 index 5815574..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/fail9.json +++ /dev/null @@ -1 +0,0 @@ -{"Extra comma": true,} \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/pass1.json b/Pods/SBJson/Tests/Data/jsonchecker/pass1.json deleted file mode 100755 index 70e2685..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/pass1.json +++ /dev/null @@ -1,58 +0,0 @@ -[ - "JSON Test Pattern pass1", - {"object with 1 member":["array with 1 element"]}, - {}, - [], - -42, - true, - false, - null, - { - "integer": 1234567890, - "real": -9876.543210, - "e": 0.123456789e-12, - "E": 1.234567890E+34, - "": 23456789012E66, - "zero": 0, - "one": 1, - "space": " ", - "quote": "\"", - "backslash": "\\", - "controls": "\b\f\n\r\t", - "slash": "/ & \/", - "alpha": "abcdefghijklmnopqrstuvwyz", - "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ", - "digit": "0123456789", - "0123456789": "digit", - "special": "`1~!@#$%^&*()_+-={':[,]}|;.?", - "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A", - "true": true, - "false": false, - "null": null, - "array":[ ], - "object":{ }, - "address": "50 St. James Street", - "url": "http://www.JSON.org/", - "comment": "// /* */": " ", - " s p a c e d " :[1,2 , 3 - -, - -4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7], - "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}", - "quotes": "" \u0022 %22 0x22 034 "", - "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?" -: "A key can be any string" - }, - 0.5 ,98.6 -, -99.44 -, - -1066, -1e1, -0.1e1, -1e-1, -1e00,2e+00,2e-00 -,"rosebud"] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/pass2.json b/Pods/SBJson/Tests/Data/jsonchecker/pass2.json deleted file mode 100755 index d3c63c7..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/pass2.json +++ /dev/null @@ -1 +0,0 @@ -[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/jsonchecker/pass3.json b/Pods/SBJson/Tests/Data/jsonchecker/pass3.json deleted file mode 100755 index 4528d51..0000000 --- a/Pods/SBJson/Tests/Data/jsonchecker/pass3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "JSON Test Pattern pass3": { - "The outermost value": "must be an object or array.", - "In this test": "It is an object." - } -} diff --git a/Pods/SBJson/Tests/Data/valid/array/input b/Pods/SBJson/Tests/Data/valid/array/input deleted file mode 100755 index 15dd919..0000000 --- a/Pods/SBJson/Tests/Data/valid/array/input +++ /dev/null @@ -1,6 +0,0 @@ -[ -[], -["foo"], -["foo",["bar"]], -["foo",["bar",["quux"]]] -] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/valid/array/output b/Pods/SBJson/Tests/Data/valid/array/output deleted file mode 100755 index d3b834a..0000000 --- a/Pods/SBJson/Tests/Data/valid/array/output +++ /dev/null @@ -1 +0,0 @@ -[[],["foo"],["foo",["bar"]],["foo",["bar",["quux"]]]] diff --git a/Pods/SBJson/Tests/Data/valid/boolean/input b/Pods/SBJson/Tests/Data/valid/boolean/input deleted file mode 100755 index b29ad08..0000000 --- a/Pods/SBJson/Tests/Data/valid/boolean/input +++ /dev/null @@ -1 +0,0 @@ -[true,false] diff --git a/Pods/SBJson/Tests/Data/valid/boolean/output b/Pods/SBJson/Tests/Data/valid/boolean/output deleted file mode 100755 index b29ad08..0000000 --- a/Pods/SBJson/Tests/Data/valid/boolean/output +++ /dev/null @@ -1 +0,0 @@ -[true,false] diff --git a/Pods/SBJson/Tests/Data/valid/null/input b/Pods/SBJson/Tests/Data/valid/null/input deleted file mode 100755 index 62864b3..0000000 --- a/Pods/SBJson/Tests/Data/valid/null/input +++ /dev/null @@ -1 +0,0 @@ -[null] diff --git a/Pods/SBJson/Tests/Data/valid/null/output b/Pods/SBJson/Tests/Data/valid/null/output deleted file mode 100755 index 62864b3..0000000 --- a/Pods/SBJson/Tests/Data/valid/null/output +++ /dev/null @@ -1 +0,0 @@ -[null] diff --git a/Pods/SBJson/Tests/Data/valid/number/exponential/input b/Pods/SBJson/Tests/Data/valid/number/exponential/input deleted file mode 100755 index 8a605aa..0000000 --- a/Pods/SBJson/Tests/Data/valid/number/exponential/input +++ /dev/null @@ -1,8 +0,0 @@ -[ --333e-3, --333e1, --333e+3, -88.8e-2, -88.8e1, -88.8e+2 -] diff --git a/Pods/SBJson/Tests/Data/valid/number/exponential/output b/Pods/SBJson/Tests/Data/valid/number/exponential/output deleted file mode 100755 index 4409680..0000000 --- a/Pods/SBJson/Tests/Data/valid/number/exponential/output +++ /dev/null @@ -1 +0,0 @@ -[-0.333,-3330,-333000,0.888,888,8880] diff --git a/Pods/SBJson/Tests/Data/valid/number/float/input b/Pods/SBJson/Tests/Data/valid/number/float/input deleted file mode 100755 index 18477f8..0000000 --- a/Pods/SBJson/Tests/Data/valid/number/float/input +++ /dev/null @@ -1,6 +0,0 @@ -[ -0.0001, -2.5, -4.4, -99.99 -] diff --git a/Pods/SBJson/Tests/Data/valid/number/float/output b/Pods/SBJson/Tests/Data/valid/number/float/output deleted file mode 100755 index e3d998c..0000000 --- a/Pods/SBJson/Tests/Data/valid/number/float/output +++ /dev/null @@ -1 +0,0 @@ -[0.0001,2.5,4.4,99.99] diff --git a/Pods/SBJson/Tests/Data/valid/number/integer/input b/Pods/SBJson/Tests/Data/valid/number/integer/input deleted file mode 100755 index da08926..0000000 --- a/Pods/SBJson/Tests/Data/valid/number/integer/input +++ /dev/null @@ -1,8 +0,0 @@ -[ --98877665544332211009988776655443322110, --1, -0, --0, -1, -98877665544332211009988776655443322110 -] diff --git a/Pods/SBJson/Tests/Data/valid/number/integer/output b/Pods/SBJson/Tests/Data/valid/number/integer/output deleted file mode 100755 index a8e8e2b..0000000 --- a/Pods/SBJson/Tests/Data/valid/number/integer/output +++ /dev/null @@ -1 +0,0 @@ -[-98877665544332211009988776655443322110,-1,0,0,1,98877665544332211009988776655443322110] diff --git a/Pods/SBJson/Tests/Data/valid/object/input b/Pods/SBJson/Tests/Data/valid/object/input deleted file mode 100755 index aefce17..0000000 --- a/Pods/SBJson/Tests/Data/valid/object/input +++ /dev/null @@ -1,6 +0,0 @@ -[ -{}, -{"foo":"bar"}, -{"foo":{"bar":"quux"}}, -{"foo":{"bar":{"quux":{}}}} -] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/valid/object/output b/Pods/SBJson/Tests/Data/valid/object/output deleted file mode 100755 index 820cf08..0000000 --- a/Pods/SBJson/Tests/Data/valid/object/output +++ /dev/null @@ -1 +0,0 @@ -[{},{"foo":"bar"},{"foo":{"bar":"quux"}},{"foo":{"bar":{"quux":{}}}}] diff --git a/Pods/SBJson/Tests/Data/valid/string/ctrl-shorthand/input b/Pods/SBJson/Tests/Data/valid/string/ctrl-shorthand/input deleted file mode 100755 index a70593c..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/ctrl-shorthand/input +++ /dev/null @@ -1,8 +0,0 @@ -[ -"\b", -"\t", -"\n", -"\f", -"\r", -" " -] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/valid/string/ctrl-shorthand/output b/Pods/SBJson/Tests/Data/valid/string/ctrl-shorthand/output deleted file mode 100755 index 1f9f739..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/ctrl-shorthand/output +++ /dev/null @@ -1 +0,0 @@ -["\b","\t","\n","\f","\r"," "] diff --git a/Pods/SBJson/Tests/Data/valid/string/ctrl/input b/Pods/SBJson/Tests/Data/valid/string/ctrl/input deleted file mode 100755 index 61d5bf8..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/ctrl/input +++ /dev/null @@ -1,35 +0,0 @@ -[ -"\u0000", -"\u0001", -"\u0002", -"\u0003", -"\u0004", -"\u0005", -"\u0006", -"\u0007", -"\u0008", -"\u0009", -"\u000a", -"\u000b", -"\u000c", -"\u000d", -"\u000e", -"\u000f", -"\u0010", -"\u0011", -"\u0012", -"\u0013", -"\u0014", -"\u0015", -"\u0016", -"\u0017", -"\u0018", -"\u0019", -"\u001a", -"\u001b", -"\u001c", -"\u001d", -"\u001e", -"\u001f", -"\u0020" -] \ No newline at end of file diff --git a/Pods/SBJson/Tests/Data/valid/string/ctrl/output b/Pods/SBJson/Tests/Data/valid/string/ctrl/output deleted file mode 100755 index 556305b..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/ctrl/output +++ /dev/null @@ -1 +0,0 @@ -["\u0000","\u0001","\u0002","\u0003","\u0004","\u0005","\u0006","\u0007","\b","\t","\n","\u000b","\f","\r","\u000e","\u000f","\u0010","\u0011","\u0012","\u0013","\u0014","\u0015","\u0016","\u0017","\u0018","\u0019","\u001a","\u001b","\u001c","\u001d","\u001e","\u001f"," "] diff --git a/Pods/SBJson/Tests/Data/valid/string/escapes/input b/Pods/SBJson/Tests/Data/valid/string/escapes/input deleted file mode 100755 index be52c35..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/escapes/input +++ /dev/null @@ -1,18 +0,0 @@ -[ -"", -" spaces ", -"/", -"\\ \" \\ \"", -"foo\"", -"foo\"\"", -"foo\"\"bar", -"foo\"bar", -"foo\\", -"foo\\\\bar", -"foo\\bar", -"foobar", -"with internal spaces", -"/unescaped/slashes", -"\/escaped\/slashes", -"\\/test\\/path" -] diff --git a/Pods/SBJson/Tests/Data/valid/string/escapes/output b/Pods/SBJson/Tests/Data/valid/string/escapes/output deleted file mode 100755 index 8a9bdb9..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/escapes/output +++ /dev/null @@ -1 +0,0 @@ -[""," spaces ","/","\\ \" \\ \"","foo\"","foo\"\"","foo\"\"bar","foo\"bar","foo\\","foo\\\\bar","foo\\bar","foobar","with internal spaces","/unescaped/slashes","/escaped/slashes","\\/test\\/path"] diff --git a/Pods/SBJson/Tests/Data/valid/string/simple/input b/Pods/SBJson/Tests/Data/valid/string/simple/input deleted file mode 100755 index be52c35..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/simple/input +++ /dev/null @@ -1,18 +0,0 @@ -[ -"", -" spaces ", -"/", -"\\ \" \\ \"", -"foo\"", -"foo\"\"", -"foo\"\"bar", -"foo\"bar", -"foo\\", -"foo\\\\bar", -"foo\\bar", -"foobar", -"with internal spaces", -"/unescaped/slashes", -"\/escaped\/slashes", -"\\/test\\/path" -] diff --git a/Pods/SBJson/Tests/Data/valid/string/simple/output b/Pods/SBJson/Tests/Data/valid/string/simple/output deleted file mode 100755 index 8a9bdb9..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/simple/output +++ /dev/null @@ -1 +0,0 @@ -[""," spaces ","/","\\ \" \\ \"","foo\"","foo\"\"","foo\"\"bar","foo\"bar","foo\\","foo\\\\bar","foo\\bar","foobar","with internal spaces","/unescaped/slashes","/escaped/slashes","\\/test\\/path"] diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-captial-alpha/input b/Pods/SBJson/Tests/Data/valid/string/unicode-captial-alpha/input deleted file mode 100755 index bc0a97e..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-captial-alpha/input +++ /dev/null @@ -1,3 +0,0 @@ -{ -"MATHEMATICAL ITALIC CAPITAL ALPHA": "\uD835\uDEE2" -} diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-captial-alpha/output b/Pods/SBJson/Tests/Data/valid/string/unicode-captial-alpha/output deleted file mode 100755 index 8b0f178..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-captial-alpha/output +++ /dev/null @@ -1 +0,0 @@ -{"MATHEMATICAL ITALIC CAPITAL ALPHA":"ð›¢"} diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge-and-42/input b/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge-and-42/input deleted file mode 100755 index 1b6924c..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge-and-42/input +++ /dev/null @@ -1,3 +0,0 @@ -{ -"e-acute and greater-than-or-equal-to, and 42": "42\u00e942\u226542" -} diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge-and-42/output b/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge-and-42/output deleted file mode 100755 index b4bcf07..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge-and-42/output +++ /dev/null @@ -1 +0,0 @@ -{"e-acute and greater-than-or-equal-to, and 42":"42é42≥42"} diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge/input b/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge/input deleted file mode 100755 index 88ae48c..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge/input +++ /dev/null @@ -1,3 +0,0 @@ -{ -"e-acute and greater-than-or-equal-to": "\u00e9\u2265" -} diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge/output b/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge/output deleted file mode 100755 index f34f372..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute-and-ge/output +++ /dev/null @@ -1 +0,0 @@ -{"e-acute and greater-than-or-equal-to":"é≥"} diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute/input b/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute/input deleted file mode 100755 index a6046ad..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute/input +++ /dev/null @@ -1,3 +0,0 @@ -{ -"e-acute with upper-case hex":"\u00E9" -} diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute/output b/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute/output deleted file mode 100755 index 408fb16..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-e-acute/output +++ /dev/null @@ -1 +0,0 @@ -{"e-acute with upper-case hex":"é"} diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-g-clef/input b/Pods/SBJson/Tests/Data/valid/string/unicode-g-clef/input deleted file mode 100755 index fb51fae..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-g-clef/input +++ /dev/null @@ -1,3 +0,0 @@ -{ -"MUSICAL SYMBOL G CLEF": "\uD834\uDD1E" -} diff --git a/Pods/SBJson/Tests/Data/valid/string/unicode-g-clef/output b/Pods/SBJson/Tests/Data/valid/string/unicode-g-clef/output deleted file mode 100755 index 1a6869a..0000000 --- a/Pods/SBJson/Tests/Data/valid/string/unicode-g-clef/output +++ /dev/null @@ -1 +0,0 @@ -{"MUSICAL SYMBOL G CLEF":"ð„ž"} diff --git a/Pods/SBJson/Tests/ErrorTest.m b/Pods/SBJson/Tests/ErrorTest.m deleted file mode 100755 index 210d6e9..0000000 --- a/Pods/SBJson/Tests/ErrorTest.m +++ /dev/null @@ -1,160 +0,0 @@ -/* - Copyright (C) 2007-2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - */ - - -#import "JsonTestCase.h" - - -#define SBAssertStringContains(e, s) \ -STAssertTrue([e rangeOfString:s].location != NSNotFound, @"%@ vs %@", e, s) - -@interface ErrorTest : JsonTestCase -@end - -@implementation ErrorTest - -- (void)setUp { - [super setUp]; - parser.maxDepth = 4u; - writer.maxDepth = 4u; -} - -- (NSString*)otherFileName { - return @"error"; -} - -- (void)testData { - [self foreachTestInSuite:@"Tests/Data/invalid" apply:^(NSString *inpath, NSString *errpath) { - NSData *input = [NSData dataWithContentsOfFile:inpath options:0 error:nil]; - STAssertNotNil(input, inpath); - - NSString *error = [NSString stringWithContentsOfFile:errpath encoding:NSUTF8StringEncoding error:nil]; - STAssertNotNil(error, errpath); - - error = [error stringByReplacingOccurrencesOfString:@"\n" withString:@""]; - - STAssertNil([parser objectWithData:input], inpath); - STAssertEqualObjects(parser.error, error, @"%@: %@", inpath, input); - - }]; - - STAssertEquals(count, (NSUInteger)31, nil); -} - -- (void)testWriteRecursion { - // create a challenge! - NSMutableArray *a1 = [NSMutableArray array]; - NSMutableArray *a2 = [NSMutableArray arrayWithObject:a1]; - [a1 addObject:a2]; - - STAssertNil([writer stringWithObject:a1], nil); - STAssertEqualObjects(writer.error, @"Nested too deep", writer.error); -} - - -- (void)testUnsupportedObject { - - STAssertNil([writer stringWithObject:[NSData data]], nil); - STAssertNotNil(writer.error, nil); -} - -- (void)testNonStringDictionaryKey { - NSArray *keys = [NSArray arrayWithObjects:[NSNull null], - [NSNumber numberWithInt:1], - [NSArray array], - [NSDictionary dictionary], - nil]; - - for (id key in keys) { - NSDictionary *object = [NSDictionary dictionaryWithObject:@"1" forKey:key]; - STAssertEqualObjects([writer stringWithObject:object], nil, nil); - STAssertNotNil(writer.error, nil); - } -} - - -- (void)testScalar { - NSArray *fragments = [NSArray arrayWithObjects:@"foo", @"", [NSNull null], [NSNumber numberWithInt:1], [NSNumber numberWithBool:YES], nil]; - for (NSUInteger i = 0; i < [fragments count]; i++) { - NSString *fragment = [fragments objectAtIndex:i]; - - // We don't check the convenience category here, like we do for parsing, - // because the category is explicitly on the NSArray and NSDictionary objects. - // STAssertNil([fragment JSONRepresentation], nil); - - STAssertNil([writer stringWithObject:fragment], @"%@", fragment); - SBAssertStringContains(parser.error, @"Not valid type for JSON"); - } -} - -- (void)testInfinity { - NSArray *obj = [NSArray arrayWithObject:[NSNumber numberWithDouble:INFINITY]]; - STAssertNil([writer stringWithObject:obj], @"%@", obj); - SBAssertStringContains(parser.error, @"Infinity is not a valid number in JSON"); -} - -- (void)testNegativeInfinity { - NSArray *obj = [NSArray arrayWithObject:[NSNumber numberWithDouble:-INFINITY]]; - - STAssertNil([writer stringWithObject:obj], nil); - SBAssertStringContains(parser.error, @"Infinity is not a valid number in JSON"); -} - -- (void)testNaN { - NSArray *obj = [NSArray arrayWithObject:[NSDecimalNumber notANumber]]; - - STAssertNil([writer stringWithObject:obj], nil); - SBAssertStringContains(parser.error, @"NaN is not a valid number in JSON"); -} - -- (void)testNil { - STAssertNil([parser objectWithString:nil], nil); - STAssertEqualObjects(parser.error, @"Input was 'nil'", nil); - - STAssertNil([writer stringWithObject:nil], nil); - SBAssertStringContains(parser.error, @"Input was 'nil'"); - -} - -- (void)testWriteDepth { - writer.maxDepth = 2; - - NSArray *a1 = [NSArray array]; - NSArray *a2 = [NSArray arrayWithObject:a1]; - STAssertNotNil([writer stringWithObject:a2], nil); - - NSArray *a3 = [NSArray arrayWithObject:a2]; - STAssertNil([writer stringWithObject:a3], nil); - STAssertEqualObjects(writer.error, @"Nested too deep", writer.error); -} - -@end diff --git a/Pods/SBJson/Tests/FormatTest.m b/Pods/SBJson/Tests/FormatTest.m deleted file mode 100755 index e322472..0000000 --- a/Pods/SBJson/Tests/FormatTest.m +++ /dev/null @@ -1,92 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - */ - - -#import "JsonTestCase.h" - -@interface FormatTest : JsonTestCase -@end - -@implementation FormatTest - -- (void)setUp { - [super setUp]; - writer.humanReadable = YES; - writer.sortKeys = YES; -} - - -- (void)testString { - [self foreachTestInSuite:@"Tests/Data/format" apply:^(NSString *inpath, NSString *outpath) { - NSError *error = nil; - NSString *input = [NSString stringWithContentsOfFile:inpath encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(input, @"%@ - %@", inpath, error); - - NSString *output = [NSString stringWithContentsOfFile:outpath encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(output, @"%@ - %@", outpath, error); - - id object = [parser objectWithString:input]; - STAssertNotNil(object, nil); - - NSString *json = [writer stringWithObject:object]; - STAssertNotNil(json, nil); - - json = [json stringByAppendingString:@"\n"]; - STAssertEqualObjects(json, output, nil); - }]; - - STAssertEquals(count, (NSUInteger)8, nil); -} - -- (void)testData { - [self foreachTestInSuite:@"Tests/Data/format" apply:^(NSString *inpath, NSString *outpath) { - NSError *error = nil; - NSData *input = [NSData dataWithContentsOfFile:inpath]; - STAssertNotNil(input, @"%@ - %@", inpath, error); - - id object = [parser objectWithData:input]; - STAssertNotNil(object, nil); - - NSData *json = [writer dataWithObject:object]; - STAssertNotNil(json, nil); - - NSData *output = [NSData dataWithContentsOfFile:outpath]; - STAssertNotNil(output, @"%@ - %@", outpath, error); - - output = [NSData dataWithBytes:output.bytes length:output.length-1]; - STAssertEqualObjects(json, output, nil); - }]; - - STAssertEquals(count, (NSUInteger)8, nil); -} - -@end diff --git a/Pods/SBJson/Tests/JsonCheckerTest.m b/Pods/SBJson/Tests/JsonCheckerTest.m deleted file mode 100755 index f441bd2..0000000 --- a/Pods/SBJson/Tests/JsonCheckerTest.m +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - */ - - -#import "JsonTestCase.h" - -@interface JsonCheckerTest : JsonTestCase -@end - -@implementation JsonCheckerTest - -- (void)setUp { - [super setUp]; - parser.maxDepth = 19; -} - -- (void)foreachFilePrefixedBy:(NSString*)prefix inSuite:(NSString*)suite apply:(void(^)(NSString*))block { - NSString *file; - NSDirectoryEnumerator* enumerator = [[NSFileManager defaultManager] enumeratorAtPath:suite]; - while ((file = [enumerator nextObject])) { - if (![file hasPrefix:prefix]) - continue; - - NSString *path = [suite stringByAppendingPathComponent:file]; - if ([[NSFileManager defaultManager] isReadableFileAtPath:path]) { - block(path); - count++; - } - } -} - -- (void)testPass { - [self foreachFilePrefixedBy:@"pass" inSuite:@"Tests/Data/jsonchecker" apply:^(NSString* path) { - NSError *error = nil; - NSString *input = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(input, @"%@ - %@", path, error); - - id object = [parser objectWithString:input]; - STAssertNotNil(object, path); - STAssertNil(parser.error, path); - - }]; - STAssertEquals(count, (NSUInteger)3, nil); -} - -- (void)testFail { - [self foreachFilePrefixedBy:@"fail" inSuite:@"Tests/Data/jsonchecker" apply:^(NSString* path) { - NSError *error = nil; - NSString *input = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(input, @"%@ - %@", path, error); - - STAssertNil([parser objectWithString:input], @"%@ - %@", input, path); - STAssertNotNil(parser.error, @"%@ at %@", input, path); - }]; - - STAssertEquals(count, (NSUInteger)33, nil); -} - -@end diff --git a/Pods/SBJson/Tests/JsonTestCase.h b/Pods/SBJson/Tests/JsonTestCase.h deleted file mode 100755 index 94944c8..0000000 --- a/Pods/SBJson/Tests/JsonTestCase.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - */ - - -#import - -@interface JsonTestCase : SenTestCase { - SBJsonWriter * writer; - SBJsonParser * parser; - NSUInteger count; -} - -- (NSString*)otherFileName; - -- (void) foreachTestInSuite: (NSString*) suite apply: (void (^)(NSString *, NSString *)) block ; - -@end diff --git a/Pods/SBJson/Tests/JsonTestCase.m b/Pods/SBJson/Tests/JsonTestCase.m deleted file mode 100755 index fc206b1..0000000 --- a/Pods/SBJson/Tests/JsonTestCase.m +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - */ - -#import "JsonTestCase.h" - - -@implementation JsonTestCase - -- (void)setUp { - count = 0; - parser = [[SBJsonParser alloc] init]; - writer = [[SBJsonWriter alloc] init]; -} - -- (NSString*)otherFileName { - return @"output"; -} - -- (void)foreachTestInSuite:(NSString*)suite apply:(void(^)(NSString*, NSString*))block { - NSString *file; - NSDirectoryEnumerator* enumerator = [[NSFileManager defaultManager] enumeratorAtPath:suite]; - while ((file = [enumerator nextObject])) { - NSString *path = [suite stringByAppendingPathComponent:file]; - NSString *inpath = [path stringByAppendingPathComponent:@"input"]; - - if ([[NSFileManager defaultManager] isReadableFileAtPath:inpath]) { - NSString *outpath = [path stringByAppendingPathComponent:[self otherFileName]]; - STAssertTrue([[NSFileManager defaultManager] isReadableFileAtPath:outpath], nil); - block(inpath, outpath); - count++; - } - } -} -@end diff --git a/Pods/SBJson/Tests/ProxyTest.m b/Pods/SBJson/Tests/ProxyTest.m deleted file mode 100755 index 6412889..0000000 --- a/Pods/SBJson/Tests/ProxyTest.m +++ /dev/null @@ -1,108 +0,0 @@ -/* - Copyright (C) 2009-2010 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import -#import - -#pragma mark Helper objects - -@interface True : NSObject -@end - -@implementation True -- (id)proxyForJson { - return [NSNumber numberWithBool:YES]; -} -@end - -@interface False : NSObject -@end - -@implementation False -- (id)proxyForJson { - return [NSNumber numberWithBool:NO]; -} -@end - -@interface Bool : NSObject -@end - -@implementation Bool -- (id)proxyForJson { - return [NSArray arrayWithObjects:[True new], [False new], nil]; -} -@end - -@implementation NSDate (Private) -- (id)proxyForJson { - return [NSArray arrayWithObject:[self description]]; -} -@end - -#pragma mark Tests - -@interface ProxyTest : SenTestCase { - SBJsonWriter * writer; -} -@end - - -@implementation ProxyTest - -- (void)setUp { - writer = [SBJsonWriter new]; -} - -- (void)testUnsupportedWithoutProxy { - STAssertNil([writer stringWithObject:[NSArray arrayWithObject:[NSObject new]]], nil); - STAssertEqualObjects(writer.error, @"JSON serialisation not supported for NSObject", nil); -} - -- (void)testUnsupportedWithProxy { - STAssertEqualObjects([writer stringWithObject:[NSArray arrayWithObject:[True new]]], @"[true]", nil); -} - -- (void)testUnsupportedWithProxyWithoutWrapper { - STAssertNil([writer stringWithObject:[True new]], nil); -} - -- (void)testUnsupportedWithNestedProxy { - STAssertEqualObjects([writer stringWithObject:[NSArray arrayWithObject:[Bool new]]], @"[[true,false]]", nil); -} - -- (void)testUnsupportedWithProxyAsCategory { - STAssertNotNil([writer stringWithObject:[NSArray arrayWithObject:[NSDate date]]], nil); -} - -- (void)testUnsupportedWithProxyAsCategoryWithoutWrapper { - STAssertNotNil([writer stringWithObject:[NSDate date]], nil); -} - - -@end diff --git a/Pods/SBJson/Tests/RoundTripTest.m b/Pods/SBJson/Tests/RoundTripTest.m deleted file mode 100755 index 228a857..0000000 --- a/Pods/SBJson/Tests/RoundTripTest.m +++ /dev/null @@ -1,131 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - */ - - -#import "JsonTestCase.h" - -@interface RoundTripTest : JsonTestCase -@end - -@implementation RoundTripTest - -- (void)testString { - [self foreachTestInSuite:@"Tests/Data/valid" apply:^(NSString *inpath, NSString *outpath) { - NSError *error = nil; - NSString *input = [NSString stringWithContentsOfFile:inpath encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(input, @"%@ - %@", inpath, error); - - NSString *output = [NSString stringWithContentsOfFile:outpath encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(output, @"%@ - %@", outpath, error); - - id object = [parser objectWithString:input]; - STAssertNotNil(object, parser.error); - - NSString *json = [writer stringWithObject:object]; - STAssertNotNil(json, writer.error); - - json = [json stringByAppendingString:@"\n"]; - STAssertEqualObjects(json, output, @"%@ vs %@", json, output); - }]; - - STAssertEquals(count, (NSUInteger)16, nil); -} - - -- (void)testData { - [self foreachTestInSuite:@"Tests/Data/valid" apply:^(NSString *inpath, NSString *outpath) { - NSError *error = nil; - NSData *input = [NSData dataWithContentsOfFile:inpath]; - STAssertNotNil(input, @"%@ - %@", inpath, error); - - id object = [parser objectWithData:input]; - STAssertNotNil(object, nil); - - NSData *json = [writer dataWithObject:object]; - STAssertNotNil(json, nil); - - NSData *output = [NSData dataWithContentsOfFile:outpath]; - STAssertNotNil(output, @"%@ - %@", outpath, error); - - output = [NSData dataWithBytes:output.bytes length:output.length-1]; - STAssertEqualObjects(json, output, nil); - }]; - - STAssertEquals(count, (NSUInteger)16, nil); -} - - -- (void)testStringCategory { - [self foreachTestInSuite:@"Tests/Data/valid" apply:^(NSString *inpath, NSString *outpath) { - NSError *error = nil; - NSString *input = [NSString stringWithContentsOfFile:inpath encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(input, @"%@ - %@", inpath, error); - - NSString *output = [NSString stringWithContentsOfFile:outpath encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(output, @"%@ - %@", outpath, error); - - id object = [input JSONValue]; - STAssertNotNil(object, nil); - - NSString *json = [object JSONRepresentation]; - STAssertNotNil(json, nil); - - json = [json stringByAppendingString:@"\n"]; - STAssertEqualObjects(json, output, nil); - }]; - - STAssertEquals(count, (NSUInteger)16, nil); -} - -- (void)testDataCategory { - [self foreachTestInSuite:@"Tests/Data/valid" apply:^(NSString *inpath, NSString *outpath) { - NSError *error = nil; - NSData *input = [NSData dataWithContentsOfFile:inpath]; - STAssertNotNil(input, @"%@ - %@", inpath, error); - - NSString *output = [NSString stringWithContentsOfFile:outpath encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(output, @"%@ - %@", outpath, error); - - id object = [input JSONValue]; - STAssertNotNil(object, nil); - - NSString *json = [object JSONRepresentation]; - STAssertNotNil(json, nil); - - json = [json stringByAppendingString:@"\n"]; - STAssertEqualObjects(json, output, nil); - }]; - - STAssertEquals(count, (NSUInteger)16, nil); -} - -@end diff --git a/Pods/SBJson/Tests/SortedFormatTest.m b/Pods/SBJson/Tests/SortedFormatTest.m deleted file mode 100755 index 5ebcbeb..0000000 --- a/Pods/SBJson/Tests/SortedFormatTest.m +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright (C) 2011 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - */ - -#import "JsonTestCase.h" - -@interface SortedFormatTest : JsonTestCase -@end - -@implementation SortedFormatTest - -- (void)setUp { - [super setUp]; - writer.humanReadable = YES; - writer.sortKeys = YES; - writer.sortKeysComparator = ^(id obj1, id obj2) { - return [obj1 compare:obj2 options:NSCaseInsensitiveSearch|NSLiteralSearch]; - }; -} - -- (void)testString { - [self foreachTestInSuite:@"Tests/Data/comparatorsort" apply:^(NSString *inpath, NSString *outpath) { - NSError *error = nil; - NSString *input = [NSString stringWithContentsOfFile:inpath encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(input, @"%@ - %@", inpath, error); - - NSString *output = [NSString stringWithContentsOfFile:outpath encoding:NSUTF8StringEncoding error:&error]; - STAssertNotNil(output, @"%@ - %@", outpath, error); - - id object = [parser objectWithString:input]; - STAssertNotNil(object, nil); - - NSString *json = [writer stringWithObject:object]; - STAssertNotNil(json, nil); - - json = [json stringByAppendingString:@"\n"]; - STAssertEqualObjects(json, output, nil); - }]; - - STAssertEquals(count, (NSUInteger)3, nil); -} - -- (void)testData { - [self foreachTestInSuite:@"Tests/Data/comparatorsort" apply:^(NSString *inpath, NSString *outpath) { - NSError *error = nil; - NSData *input = [NSData dataWithContentsOfFile:inpath]; - STAssertNotNil(input, @"%@ - %@", inpath, error); - - id object = [parser objectWithData:input]; - STAssertNotNil(object, nil); - - NSData *json = [writer dataWithObject:object]; - STAssertNotNil(json, nil); - - NSData *output = [NSData dataWithContentsOfFile:outpath]; - STAssertNotNil(output, @"%@ - %@", outpath, error); - - output = [NSData dataWithBytes:output.bytes length:output.length-1]; - STAssertEqualObjects(json, output, nil); - }]; - - STAssertEquals(count, (NSUInteger)3, nil); -} - -@end diff --git a/Pods/SBJson/Tests/Stream/xaa b/Pods/SBJson/Tests/Stream/xaa deleted file mode 100755 index de13ad9..0000000 --- a/Pods/SBJson/Tests/Stream/xaa +++ /dev/null @@ -1 +0,0 @@ -{"coordinates":null,"text":":) Our secret weapon is no alternative. Golda Meir","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.socialoomph.com\" rel=\"nofollow\"\u003ESocialOomph\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:21 +0000 2010","truncated":false,"id_str":"12411897663979520","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"Young and Energetic. I just sold my first house and will be posting Tweets about my new career as a house flipper","listed_count":49,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/38409971\/problemsolver.jpg","profile_background_color":"C0DEED" \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xab b/Pods/SBJson/Tests/Stream/xab deleted file mode 100755 index 44c8b0d..0000000 --- a/Pods/SBJson/Tests/Stream/xab +++ /dev/null @@ -1,2 +0,0 @@ -,"location":"Ontario Canada","profile_use_background_image":true,"profile_text_color":"4d1c12","followers_count":7991,"statuses_count":41594,"time_zone":"Quito","created_at":"Sun Sep 20 20:32:38 +0000 2009","friends_count":8789,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/426248904\/homes_normal.jpg","notifications":null,"profile_link_color":"055673","url":"http:\/\/www.the-problemsolver.com","name":"We Flip","id_str":"75869159","favourites_count":0,"screen_name":"house_flipper","id":75869159,"contributors_enabled":false,"lang":"en","utc_offset":-18000,"profile_sidebar_fill_color":"c1a38c"},"id":12411897663979520,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"RT @therealdjrell click (retweet) if you still up","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[3,17],"name":"Dj Rell OF BBC","screen_name":"therealdjrell","id_str":"180669193","id":180669193}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"co \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xac b/Pods/SBJson/Tests/Stream/xac deleted file mode 100755 index e760491..0000000 --- a/Pods/SBJson/Tests/Stream/xac +++ /dev/null @@ -1 +0,0 @@ -ntributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.htc.com\" rel=\"nofollow\"\u003E HTC Peep\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:21 +0000 2010","truncated":false,"id_str":"12411897680764928","user":{"following":null,"listed_count":4,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/179020444\/Picnik_collage.jpg","profile_sidebar_border_color":"3d3739","profile_use_background_image":true,"description":"BABY KNOWS WHAT SHE WANTS & ALWAYS GETS IT. :) ArizonaStateUni (DowntownPHX) '14 * 18 YrOld * Chicago is Home * FOLLOW ME & I'LL FOLLOW YOU! :) #TEAMLAKERS","statuses_count":2206,"time_zone":"Arizona","friends_count":115,"profile_background_color":"0f0604","location":"N 33\u00b027' 0'' \/ W 112\u00b04' 0''","profile_text_color":"66585a","followers_count":120,"contributors_enabled":false,"created_at":"Tue Apr 07 01:55:15 +0000 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xad b/Pods/SBJson/Tests/Stream/xad deleted file mode 100755 index 12c7952..0000000 --- a/Pods/SBJson/Tests/Stream/xad +++ /dev/null @@ -1,2 +0,0 @@ -2009","protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1182977830\/FB1_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"cf1919","url":"http:\/\/www.facebook.com\/profile.php?id=610064376","name":"Shayla Brown","id_str":"29351068","favourites_count":16,"screen_name":"BabyistheDream4","id":29351068,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":-25200,"profile_sidebar_fill_color":"ffffff"},"id":12411897680764928,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"THT..boseenn..(\u02c7_\u02c7'!l)\u200b\u200e ..","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/blackberry.com\/twitter\" rel=\"nofollow\"\u003ETwitter for BlackBerry\u00ae\u003C\/a\u003E","retweeted":false,"ge \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xae b/Pods/SBJson/Tests/Stream/xae deleted file mode 100755 index 8b8cecd..0000000 --- a/Pods/SBJson/Tests/Stream/xae +++ /dev/null @@ -1 +0,0 @@ -o":null,"created_at":"Wed Dec 08 07:43:21 +0000 2010","truncated":false,"id_str":"12411897668177920","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"eb1a44","show_all_inline_media":false,"geo_enabled":false,"description":"\u2661 Simple and nice Lady \u2661..\u263a ","listed_count":3,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_background_color":"e01660","location":"\u00dcT: -6.171394,106.868656","profile_use_background_image":true,"profile_text_color":"333333","followers_count":205,"statuses_count":6045,"time_zone":"Pacific Time (US & Canada)","created_at":"Thu Oct 29 06:35:04 +0000 2009","friends_count":232,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1145910676\/Picture_202584_normal.jpg","notifications":null,"profile_link_color":"CC3366","url":"http:\/\/null","name":"dila Zitria yuzar","id_str":"86008365","favourites_count":17 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xaf b/Pods/SBJson/Tests/Stream/xaf deleted file mode 100755 index 6f06fcb..0000000 --- a/Pods/SBJson/Tests/Stream/xaf +++ /dev/null @@ -1,2 +0,0 @@ -,"screen_name":"dilaZitria","id":86008365,"contributors_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"e61e89"},"id":12411897668177920,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u6628\u591c\u3001\u6b53\u9001\u8fce\u4f1a\u306e\u4e8c\u6b21\u4f1a\u306e\u30b9\u30ca\u30c3\u30af\u306750\u66f2\u304f\u3089\u3044\u4e00\u4eba\u3067\u6c38\u9060\u306b\u6b4c\u3063\u3066\u305f\u3089\u3057\u3044www\u3042\u307e\u308a\u899a\u3048\u3066\u306a\u3044\u3093\u3060\u304c\u3001\u78ba\u304b\u306b\u5589\u306f\u75db\u3044\u306e\u3067\u3042\u308b\u3002","entities":{"hashtags":[],"urls":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.movatwi.jp\" rel=\"nofollow\"\u003Ewww.movatwi.jp\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:21 +0000 2010","truncated":false," \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xag b/Pods/SBJson/Tests/Stream/xag deleted file mode 100755 index a4aac62..0000000 --- a/Pods/SBJson/Tests/Stream/xag +++ /dev/null @@ -1 +0,0 @@ -id_str":"12411897668182016","user":{"following":null,"listed_count":12,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/92964430\/0287.jpg","profile_sidebar_border_color":"a8c7f7","profile_use_background_image":true,"description":"\u30f2\u30bf\u5c5e\u6027\u306f\u25cf\u25cf\u25cf\u25cf\u25cf(\u4eee\uff09\r\n\u5168\u529b\u8150\u6d3b\u52d5\u4e2d\uff01\uff01\r\n\u4e2d\u91ce\u8150\u5973\u30b7\u30b9\u30bf\u30fc\u30ba\u30fb\u8150\u7537\u587e\u306b\u6367\u3052\u308b\u30ed\u30fc\u30de\u30fc\u30f3\u30fc\u30b9\u3063\uff01","statuses_count":5862,"time_zone":"Tokyo","friends_count":314,"profile_background_color":"022330","location":"\u306a\u306b\u308f\uff01\u306a\u306b\u308f\uff01","profile_text_color":"333333","followers_count":245,"contributors_enabled":false,"created_at":"Tue Aug 11 08:24:20 +0000 2009","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/574158539\/roreapple_normal.jpg","follow_request_sent":null,"verified":false, \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xah b/Pods/SBJson/Tests/Stream/xah deleted file mode 100755 index 362f1d5..0000000 --- a/Pods/SBJson/Tests/Stream/xah +++ /dev/null @@ -1,2 +0,0 @@ -"notifications":null,"profile_link_color":"0084B4","url":"http:\/\/ameblo.jp\/roreapple\/","name":"\u30ed\u30ec\u308a\u3093\u3054","id_str":"64662506","favourites_count":42,"screen_name":"roreapple","id":64662506,"show_all_inline_media":false,"lang":"ja","geo_enabled":false,"utc_offset":32400,"profile_sidebar_fill_color":"C0DFEC"},"id":12411897668182016,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Gaaa RT @nisa_sukin: Menanti gaunku... Muat gak yah,, hiks","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[8,19],"name":"Masitoh Hairunisa","screen_name":"nisa_sukin","id_str":"29117556","id":29117556}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.ubertwitter.com\/bb\/download.php\" rel=\"nofollow\"\u003E\u00dcberTwitter\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +000 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xai b/Pods/SBJson/Tests/Stream/xai deleted file mode 100755 index ce7d9a2..0000000 --- a/Pods/SBJson/Tests/Stream/xai +++ /dev/null @@ -1 +0,0 @@ -0 2010","truncated":false,"id_str":"12411901849903104","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"Happy wifey ;)","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291661299\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"Here,there n everywhere","profile_use_background_image":true,"profile_text_color":"333333","followers_count":26,"statuses_count":255,"time_zone":null,"created_at":"Fri May 15 07:33:06 +0000 2009","friends_count":68,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1166898498\/209967688_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Dian Supramanik","id_str":"40197229","favourites_count":0,"screen_name":"supramanik","id":40197229,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_colo \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xaj b/Pods/SBJson/Tests/Stream/xaj deleted file mode 100755 index 5cdddd9..0000000 --- a/Pods/SBJson/Tests/Stream/xaj +++ /dev/null @@ -1,2 +0,0 @@ -r":"DDEEF6"},"id":12411901849903104,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@FatboyRoberts Christ! I almost thought you were spam! My brain is melting, so I'll have to look at that tomorrow. Now: Brain death.","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,14],"name":"Fatboy Roberts","screen_name":"FatboyRoberts","id_str":"20921327","id":20921327}]},"in_reply_to_screen_name":"FatboyRoberts","in_reply_to_status_id_str":"12362450682773504","place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":12362450682773504,"in_reply_to_user_id_str":"20921327","source":"\u003Ca href=\"http:\/\/www.tweetdeck.com\" rel=\"nofollow\"\u003ETweetDeck\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +0000 2010","truncated":false,"id_str":"12411901837320192","user":{"following":null,"listed_count":35,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme9\/bg \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xak b/Pods/SBJson/Tests/Stream/xak deleted file mode 100755 index a09ddeb..0000000 --- a/Pods/SBJson/Tests/Stream/xak +++ /dev/null @@ -1,2 +0,0 @@ -.gif","profile_sidebar_border_color":"ffffff","profile_use_background_image":false,"description":"Bad motherfucker, game journalist, taller than your boyfriend.","statuses_count":10032,"time_zone":"Pacific Time (US & Canada)","friends_count":148,"profile_background_color":"545454","location":"Portland, Oregon","profile_text_color":"878787","followers_count":716,"contributors_enabled":false,"created_at":"Thu Feb 07 02:55:38 +0000 2008","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/688559405\/twinklestarsprites_normal.png","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"ad0000","url":"http:\/\/nex.vox.com\/","name":"Earnest Cavalli","id_str":"13189102","favourites_count":0,"screen_name":"ecavalli","id":13189102,"show_all_inline_media":true,"lang":"en","geo_enabled":true,"utc_offset":-28800,"profile_sidebar_fill_color":"1c1c1c"},"id":12411901837320192,"in_reply_to_user_id":20921327,"favorited":false} -{"coordinates":null,"text":"@crumpitout s \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xal b/Pods/SBJson/Tests/Stream/xal deleted file mode 100755 index d3ab6f6..0000000 --- a/Pods/SBJson/Tests/Stream/xal +++ /dev/null @@ -1 +0,0 @@ -hane.. we miss you with alesana\u00a1\u00a1 \ncome to mexico please :]\nwe love u :]\nxoxo","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[0,11],"name":"Shane Crump","screen_name":"crumpitout","id_str":"145315047","id":145315047}]},"in_reply_to_screen_name":"crumpitout","in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":"145315047","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +0000 2010","truncated":false,"id_str":"12411901854093312","user":{"following":null,"listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/149753364\/2mbdax.jpg","profile_sidebar_border_color":"ff00ff","profile_use_background_image":true,"description":"","statuses_count":338,"time_zone":"Mexico City","friends_count":114,"profile_background_color":"f50af5","location":"mexico, city","profile_text_color":"f009d5","followers_count" \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xam b/Pods/SBJson/Tests/Stream/xam deleted file mode 100755 index 7ab9697..0000000 --- a/Pods/SBJson/Tests/Stream/xam +++ /dev/null @@ -1,2 +0,0 @@ -:31,"contributors_enabled":false,"created_at":"Sat Aug 29 23:25:10 +0000 2009","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1126473913\/48906_1376585645_7669_q_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"de13f0","url":"http:\/\/www.facebook.com\/profile.php?id=1376585645","name":"jezz sandoval","id_str":"69990626","favourites_count":0,"screen_name":"jezz_sandoval","id":69990626,"show_all_inline_media":true,"lang":"es","geo_enabled":false,"utc_offset":-21600,"profile_sidebar_fill_color":"08fc08"},"id":12411901854093312,"in_reply_to_user_id":145315047,"favorited":false} -{"coordinates":null,"text":"A new franchised business is opened every 8 minutes of every business day....Read more facts at http:\/\/ow.ly\/2ktXb","entities":{"urls":[{"expanded_url":null,"indices":[96,114],"url":"http:\/\/ow.ly\/2ktXb"}],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contribut \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xan b/Pods/SBJson/Tests/Stream/xan deleted file mode 100755 index be0c908..0000000 --- a/Pods/SBJson/Tests/Stream/xan +++ /dev/null @@ -1 +0,0 @@ -ors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/socialcreeper.com\" rel=\"nofollow\"\u003ESocialcreeper\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +0000 2010","truncated":false,"id_str":"12411901854097408","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"5ED4DC","show_all_inline_media":false,"geo_enabled":false,"description":"No charge consulting services be your own boss work from home recession, proof businesses, available financing. our role is to help you and give you the best","listed_count":15,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1289607957\/images\/themes\/theme4\/bg.gif","profile_background_color":"0099B9","location":"new jersey","profile_use_background_image":true,"profile_text_color":"3C3940","followers_count":1918,"statuses_count":8216,"time_zone":"Eastern Time (US & Canada)","created_at \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xao b/Pods/SBJson/Tests/Stream/xao deleted file mode 100755 index 328f27f..0000000 --- a/Pods/SBJson/Tests/Stream/xao +++ /dev/null @@ -1,2 +0,0 @@ -":"Wed Aug 04 08:30:19 +0000 2010","friends_count":2110,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1097183072\/franchise_normal.jpg","notifications":null,"profile_link_color":"0099B9","url":"http:\/\/www.facebook.com\/pages\/Advantage-Franchise-Consulting\/132423546795977?v=app_4949752878 ","name":"franchiseconsutling","id_str":"174584532","favourites_count":0,"screen_name":"consultingfree","id":174584532,"contributors_enabled":false,"lang":"en","utc_offset":-18000,"profile_sidebar_fill_color":"95E8EC"},"id":12411901854097408,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"La cruda es como la risa !","entities":{"hashtags":[],"urls":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +0000 2010","truncated":false,"id_str":"12 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xap b/Pods/SBJson/Tests/Stream/xap deleted file mode 100755 index 1bb58e7..0000000 --- a/Pods/SBJson/Tests/Stream/xap +++ /dev/null @@ -1 +0,0 @@ -411901875060736","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"La felicidad no es un estado de \u00e1nimo,sino una DECISI\u00d3N!","listed_count":1,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/163795950\/cover.jpg","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":73,"statuses_count":1019,"time_zone":"Guadalajara","created_at":"Sun May 02 00:25:43 +0000 2010","friends_count":211,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1151825365\/40766_10150244183920072_565820071_14195871_5748381_n_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"karmen beltr\u00e1n ","id_str":"139233639","favourites_count":2,"screen_name":"ka_beltran","id":139233639,"contributors_enabled":false," \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xaq b/Pods/SBJson/Tests/Stream/xaq deleted file mode 100755 index 400133d..0000000 --- a/Pods/SBJson/Tests/Stream/xaq +++ /dev/null @@ -1,2 +0,0 @@ -lang":"es","utc_offset":-21600,"profile_sidebar_fill_color":"DDEEF6"},"id":12411901875060736,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u30d5\u30a9\u30ed\u30fc\u3057\u3066\u306d(^-^)\/ #followmejp #sougofollow #followdaibosyu \uff8a\uff9f\uff81\uff9d\uff7a \uff8a\uff9f\uff81\uff7d\uff9b \u7af6\u99ac \uff9b\uff84 \uff85\uff9d\uff8a\uff9e\uff70\uff7d\uff9e 1643128","entities":{"urls":[],"user_mentions":[],"hashtags":[{"text":"followmejp","indices":[14,25]},{"text":"sougofollow","indices":[26,38]},{"text":"followdaibosyu","indices":[39,54]}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.movatwi.jp\" rel=\"nofollow\"\u003Ewww.movatwi.jp\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906056790016","user":{"follow_request_sent":null,"followin \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xar b/Pods/SBJson/Tests/Stream/xar deleted file mode 100755 index 8df82f1..0000000 --- a/Pods/SBJson/Tests/Stream/xar +++ /dev/null @@ -1,2 +0,0 @@ -g":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"","listed_count":7,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291163542\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":1371,"statuses_count":5503,"time_zone":"Hawaii","created_at":"Thu Jul 29 13:53:49 +0000 2010","friends_count":1278,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1094558749\/_____normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"\u30e1\u30b0\u30df","id_str":"172346562","favourites_count":0,"screen_name":"megumi2258","id":172346562,"contributors_enabled":false,"lang":"ja","utc_offset":-36000,"profile_sidebar_fill_color":"DDEEF6"},"id":12411906056790016,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Rant Forum: Sp \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xas b/Pods/SBJson/Tests/Stream/xas deleted file mode 100755 index fe7684d..0000000 --- a/Pods/SBJson/Tests/Stream/xas +++ /dev/null @@ -1 +0,0 @@ -ike on \"HOT BED OF FOOTBALL.........MOST KNOWLEDGABLE SUPPORTERS BLAH BLAH BLAH!\" http:\/\/bit.ly\/hF9G1y #mufc #manutd","entities":{"hashtags":[{"text":"mufc","indices":[120,125]},{"text":"manutd","indices":[126,133]}],"urls":[{"expanded_url":null,"indices":[99,119],"url":"http:\/\/bit.ly\/hF9G1y"}],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/twitterfeed.com\" rel=\"nofollow\"\u003Etwitterfeed\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906035818496","user":{"following":null,"listed_count":31,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/151777477\/twitter-background.png","profile_sidebar_border_color":"990000","profile_use_background_image":true,"description":"Forum of the Uni \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xat b/Pods/SBJson/Tests/Stream/xat deleted file mode 100755 index 829b9b5..0000000 --- a/Pods/SBJson/Tests/Stream/xat +++ /dev/null @@ -1,2 +0,0 @@ -ted Rant blog visit www.unitedrant.co.uk\/forum for lively discussion.","statuses_count":6688,"time_zone":"London","friends_count":837,"profile_background_color":"000000","location":"Old Trafford","profile_text_color":"000000","followers_count":290,"contributors_enabled":false,"created_at":"Thu Jul 22 11:37:05 +0000 2010","protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1128154622\/twitter_new_badge_forum_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"ccb100","url":"http:\/\/www.unitedrant.co.uk\/forum","name":"United Rant Forum","id_str":"169458574","favourites_count":0,"screen_name":"rant_forum","id":169458574,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":0,"profile_sidebar_fill_color":"e00700"},"id":12411906035818496,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Don't waste her time, if you still want to play around let her go. Its only fair. #MessageToMyBoys","entities \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xau b/Pods/SBJson/Tests/Stream/xau deleted file mode 100755 index ed4a919..0000000 --- a/Pods/SBJson/Tests/Stream/xau +++ /dev/null @@ -1 +0,0 @@ -":{"hashtags":[{"text":"MessageToMyBoys","indices":[82,98]}],"urls":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906069368832","user":{"following":null,"listed_count":2,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/177052687\/3235134362_c0f681f914_o.jpg","profile_sidebar_border_color":"C0DEED","profile_use_background_image":true,"description":"I am an enigma, wrapped in a sesame and nestled in a riddle of some mystery.","statuses_count":5795,"time_zone":"Pretoria","friends_count":207,"profile_background_color":"C0DEED","location":"\u00dcT: -26.193627,28.041314","profile_text_color":"333333","followers_count":275,"contributors_enabled":false,"created_at":"Fri May 01 06:55:0 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xav b/Pods/SBJson/Tests/Stream/xav deleted file mode 100755 index 8b20e96..0000000 --- a/Pods/SBJson/Tests/Stream/xav +++ /dev/null @@ -1,2 +0,0 @@ -3 +0000 2009","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1183768439\/DSC06923_normal.JPG","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0084B4","url":"http:\/\/www.mspmc.co.za","name":"Mafedi Selepe","id_str":"36901018","favourites_count":0,"screen_name":"MafediSelepe","id":36901018,"show_all_inline_media":false,"lang":"en","geo_enabled":true,"utc_offset":7200,"profile_sidebar_fill_color":"DDEEF6"},"id":12411906069368832,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Ada setan. *katanyasih. RT @PROMOTEfor: #tanyaremaja (jaman sd) hal apa yg membuat km takut ke toilet sendirian ?","entities":{"urls":[],"hashtags":[{"text":"tanyaremaja","indices":[40,52]}],"user_mentions":[{"indices":[27,38],"name":"Hendra J.P.","screen_name":"PROMOTEfor","id_str":"112023841","id":112023841}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xaw b/Pods/SBJson/Tests/Stream/xaw deleted file mode 100755 index 2aa8c1a..0000000 --- a/Pods/SBJson/Tests/Stream/xaw +++ /dev/null @@ -1 +0,0 @@ -_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.ubertwitter.com\/bb\/download.php\" rel=\"nofollow\"\u003E\u00dcberTwitter\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906052587520","user":{"following":null,"listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/107674614\/1237098635915429223StudioFibonacci_Cartoon_Hillside_with_Butterfly_and_Flowers.svg.hi","profile_sidebar_border_color":"e61739","profile_use_background_image":true,"description":"229EB3B1 :)))\r\ni'm a big fans of @xtianbautista . \r\nAn ordinary girl with a big dreams. you will confuse if you know who really i am. ","statuses_count":2529,"time_zone":"Pacific Time (US & Canada)","friends_count":56,"profile_background_color":"B2DFDA","location":"Canada. \u00dcT: -6.224251,106.9222","profile_text_color":"e61010","followers_count":69,"contributors_enabled":fals \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xax b/Pods/SBJson/Tests/Stream/xax deleted file mode 100755 index 26cd19a..0000000 --- a/Pods/SBJson/Tests/Stream/xax +++ /dev/null @@ -1,2 +0,0 @@ -e,"created_at":"Tue Feb 23 09:35:19 +0000 2010","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1174458315\/ajeng_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"1ce1e8","url":null,"name":"Ajeng Lintang","id_str":"116697581","favourites_count":0,"screen_name":"AjengLD","id":116697581,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":-28800,"profile_sidebar_fill_color":"e08db3"},"id":12411906052587520,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u958b\u62d3\u9ad8\u6821\u306e\u6821\u6b4c\u304c\u9244\u8155\u30a2\u30c8\u30e0\u3060\u3063\u305f\u4ef6","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":fa \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xay b/Pods/SBJson/Tests/Stream/xay deleted file mode 100755 index 9758387..0000000 --- a/Pods/SBJson/Tests/Stream/xay +++ /dev/null @@ -1 +0,0 @@ -lse,"id_str":"12411906035818497","user":{"following":null,"listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/166881635\/sas.png","profile_sidebar_border_color":"C0DEED","profile_use_background_image":true,"description":"\u30d7\u30ed\u30b9\u30d4\u3067\u81ea\u5206\u4f5c\u3063\u305f\u3089\u5929\u72d7\u4e26\u307f\u306e\u8d70\u529b\u306b\u306a\u3063\u305f\u30fb\u30fb\u30fb\u308f\u3051\u3067\u3082\u306a\u304b\u3063\u305f\u30fb\u30fb\u30fb\u3068\u304b\u8a00\u3063\u3066\u4f5c\u308a\u76f4\u3057\u305f\u3089\u672c\u5f53\u306b\u5929\u72d7\u306b\u306a\u3063\u305f","statuses_count":1324,"time_zone":"Osaka","friends_count":24,"profile_background_color":"C0DEED","location":"\u65e7\u5730\u7344\u8857\u9053\u5165\u308a\u53e3\u4ed8\u8fd1","profile_text_color":"333333","followers_count":18,"contributors_enabled":false,"created_at":"Sat Oct 30 08:39:38 +0000 2010","protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1179158108\/ \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xaz b/Pods/SBJson/Tests/Stream/xaz deleted file mode 100755 index aa71f6f..0000000 --- a/Pods/SBJson/Tests/Stream/xaz +++ /dev/null @@ -1,2 +0,0 @@ -52_normal.png","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0084B4","url":null,"name":"\u53e4\u660e\u5730\u60a0\u99ac","id_str":"209976874","favourites_count":7,"screen_name":"Komeiji88","id":209976874,"show_all_inline_media":false,"lang":"ja","geo_enabled":true,"utc_offset":32400,"profile_sidebar_fill_color":"DDEEF6"},"id":12411906035818497,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@KOOL_GANG \uc0b4\uc544\ub098\ub77c \uc6b0\ub9ac \uc5d0\uc774\uc2a4.","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,10],"name":"Kool Gang","screen_name":"KOOL_GANG","id_str":"173724958","id":173724958}]},"in_reply_to_screen_name":"KOOL_GANG","in_reply_to_status_id_str":"12410887285506048","place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":12410887285506048,"in_reply_to_user_id_str":"173724958","source":"\u003Ca href=\"http:\/\/twtkr.com\" rel=\"nofollow\"\u003Etwtkr\u003C\/a\u003E","retweeted":false,"geo":null \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xba b/Pods/SBJson/Tests/Stream/xba deleted file mode 100755 index 661d420..0000000 --- a/Pods/SBJson/Tests/Stream/xba +++ /dev/null @@ -1 +0,0 @@ -,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906052591616","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"","listed_count":1,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"\uc5f0\ud76c\uc8fc\ubbfc","profile_use_background_image":true,"profile_text_color":"333333","followers_count":34,"statuses_count":416,"time_zone":"Hawaii","created_at":"Thu Aug 19 06:08:37 +0000 2010","friends_count":36,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1106972912\/aa_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"dub&beard","id_str":"180269638","favourites_count":1,"screen_name":"yaguwang","id":180269638,"contributors_enabled":false,"lang":"en","utc_offset":-36000,"profil \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbb b/Pods/SBJson/Tests/Stream/xbb deleted file mode 100755 index 6c439e5..0000000 --- a/Pods/SBJson/Tests/Stream/xbb +++ /dev/null @@ -1,2 +0,0 @@ -e_sidebar_fill_color":"DDEEF6"},"id":12411906052591616,"in_reply_to_user_id":173724958,"favorited":false} -{"coordinates":null,"text":"RT @Ricki_MINAJ: @TeemFollowBack @1109_2904 #teamfollowback twitter famous boy>>> @Ricki_MINAJ <<<","entities":{"urls":[],"hashtags":[{"text":"teamfollowback","indices":[44,59]}],"user_mentions":[{"indices":[3,15],"name":"Ricky Johnson","screen_name":"Ricki_MINAJ","id_str":"51198602","id":51198602},{"indices":[17,32],"name":"Teem Follow Back","screen_name":"TeemFollowBack","id_str":"185188539","id":185188539},{"indices":[33,43],"name":"Aprilian Angel","screen_name":"1109_2904","id_str":"92217048","id":92217048},{"indices":[91,103],"name":"Ricky Johnson","screen_name":"Ricki_MINAJ","id_str":"51198602","id":51198602}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/seesmic.com\/app\" rel=\"nofollow\ \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbc b/Pods/SBJson/Tests/Stream/xbc deleted file mode 100755 index ed7c101..0000000 --- a/Pods/SBJson/Tests/Stream/xbc +++ /dev/null @@ -1 +0,0 @@ -"\u003ESeesmic Web\u003C\/a\u003E","retweeted_status":{"coordinates":null,"text":"@TeemFollowBack @1109_2904 #teamfollowback twitter famous boy>>> @Ricki_MINAJ <<<","entities":{"urls":[],"hashtags":[{"text":"teamfollowback","indices":[27,42]}],"user_mentions":[{"indices":[0,15],"name":"Teem Follow Back","screen_name":"TeemFollowBack","id_str":"185188539","id":185188539},{"indices":[16,26],"name":"Aprilian Angel","screen_name":"1109_2904","id_str":"92217048","id":92217048},{"indices":[74,86],"name":"Ricky Johnson","screen_name":"Ricki_MINAJ","id_str":"51198602","id":51198602}]},"in_reply_to_screen_name":"TeemFollowBack","in_reply_to_status_id_str":"12405913709191168","place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":12405913709191168,"in_reply_to_user_id_str":"185188539","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:04 +0000 2010","truncated":false,"id_str":"12411825870077952","user":{"follow_request_sent":null,"following":null,"verifie \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbd b/Pods/SBJson/Tests/Stream/xbd deleted file mode 100755 index 1a709bd..0000000 --- a/Pods/SBJson/Tests/Stream/xbd +++ /dev/null @@ -1 +0,0 @@ -d":false,"profile_sidebar_border_color":"65B0DA","show_all_inline_media":false,"geo_enabled":false,"description":"I LOVE SWEET BABY JESUS..FASHION IS MY LIFE..MUSIC IS NEXT..THEN FOOD, LOL MY LIFE IS MY BRAND,SO I DRESS LIKE IT!!","listed_count":18,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/20055732\/a2f270d4e7d605ac34e48d0fc454b_3701.jpg","profile_background_color":"642D8B","location":"NEW YORK RIHANNA WORLD","profile_use_background_image":true,"profile_text_color":"3D1957","followers_count":1822,"statuses_count":12985,"time_zone":"Mountain Time (US & Canada)","created_at":"Fri Jun 26 19:51:29 +0000 2009","friends_count":1990,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1170133326\/jess_and_ricki_normal.jpg","notifications":null,"profile_link_color":"FF0000","url":"http:\/\/www.blogtv.com\/People\/koolzone","name":"Ricky Johnson","id_str":"51198602","favourites_count":6,"screen_name":"Ricki_MINAJ","id":5119 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbe b/Pods/SBJson/Tests/Stream/xbe deleted file mode 100755 index ba04816..0000000 --- a/Pods/SBJson/Tests/Stream/xbe +++ /dev/null @@ -1 +0,0 @@ -8602,"contributors_enabled":false,"lang":"en","utc_offset":-25200,"profile_sidebar_fill_color":"7AC3EE"},"id":12411825870077952,"in_reply_to_user_id":185188539,"favorited":false},"retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906035810304","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"3fdbe3","show_all_inline_media":false,"geo_enabled":true,"description":"\u2665 I am 12 years old \u2665 Simple \u2665 Cool Guy \u2665 Stitch \u2665 Sanurians \u2665 Tasya \u2665 Boys \u2665 Follow me and I will folback, Just Mention Me \u2665 Aprilian Angel \u2665","listed_count":16,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/169085711\/4___.jpg","profile_background_color":"25646b","location":"Jakarta","profile_use_background_image":false,"profile_text_color":"2579b0","followers_count":613,"statuses_count":9079,"time_zone":"Jakarta","created_at": \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbf b/Pods/SBJson/Tests/Stream/xbf deleted file mode 100755 index 7f8c5be..0000000 --- a/Pods/SBJson/Tests/Stream/xbf +++ /dev/null @@ -1,2 +0,0 @@ -"Tue Nov 24 06:49:28 +0000 2009","friends_count":563,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1161334751\/75785_1659322691840_1500333081_1624686_3546893_n_normal.jpg","notifications":null,"profile_link_color":"40b892","url":null,"name":"Aprilian Angel","id_str":"92217048","favourites_count":27,"screen_name":"1109_2904","id":92217048,"contributors_enabled":false,"lang":"en","utc_offset":25200,"profile_sidebar_fill_color":"c3e1e3"},"id":12411906035810304,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@naxvee ohhhh I DOOO :D","entities":{"urls":[],"user_mentions":[{"indices":[0,7],"name":"nax vee","screen_name":"naxvee","id_str":"22720749","id":22720749}],"hashtags":[]},"in_reply_to_screen_name":"naxvee","in_reply_to_status_id_str":"12411850935242752","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411850935242752,"in_reply_to_user_id_str":"22720749","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 0 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbg b/Pods/SBJson/Tests/Stream/xbg deleted file mode 100755 index 6ff206a..0000000 --- a/Pods/SBJson/Tests/Stream/xbg +++ /dev/null @@ -1 +0,0 @@ -7:43:24 +0000 2010","truncated":false,"id_str":"12411910238502912","user":{"contributors_enabled":false,"following":null,"follow_request_sent":null,"verified":false,"profile_sidebar_border_color":"efff12","show_all_inline_media":false,"geo_enabled":false,"description":"i like to ponder. that is all.","profile_background_color":"760dff","location":"Straya","listed_count":5,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/124352628\/5576399.jpg","profile_text_color":"121eff","followers_count":145,"profile_use_background_image":true,"created_at":"Sun Feb 14 01:15:20 +0000 2010","protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1185036286\/Untitled_normal.png","statuses_count":3899,"notifications":null,"time_zone":"Hawaii","friends_count":146,"profile_link_color":"00ff00","url":"http:\/\/www.formspring.me\/lizzwilko","name":"I\u2665JohnnyDepp","id_str":"114068978","favourites_count":164,"screen_name":"TheLizzyEnd","id":114 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbh b/Pods/SBJson/Tests/Stream/xbh deleted file mode 100755 index 8776208..0000000 --- a/Pods/SBJson/Tests/Stream/xbh +++ /dev/null @@ -1,2 +0,0 @@ -068978,"lang":"en","utc_offset":-36000,"profile_sidebar_fill_color":"ff0558"},"id":12411910238502912,"in_reply_to_user_id":22720749,"favorited":false} -{"coordinates":null,"text":"#Nighttweeters hmu DM or txt <3","entities":{"urls":[],"hashtags":[{"text":"Nighttweeters","indices":[0,14]}],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910242705408","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"Mexican|19|Raves|Electro,Dubstep,Trance|drinking|Working|Down To Earth|Straight Out|Girls|:) Txting|Webcam|Snakebites|\r\nSingle|Follow me & Ill Follow you :)","listed_count":5,"profile_background_tile":true,"profile_backgrou \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbi b/Pods/SBJson/Tests/Stream/xbi deleted file mode 100755 index f76ff60..0000000 --- a/Pods/SBJson/Tests/Stream/xbi +++ /dev/null @@ -1,2 +0,0 @@ -nd_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/130349966\/4638030806_55122db25e_o.jpg","profile_background_color":"C0DEED","location":"Fontana, Ca","profile_use_background_image":true,"profile_text_color":"333333","followers_count":250,"statuses_count":4189,"time_zone":"Alaska","created_at":"Tue Aug 03 05:28:53 +0000 2010","friends_count":463,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1184365797\/gothamcity-189-of-294_normal.png","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/www.myspace.com\/fourlokoking","name":"Juan Felix","id_str":"174137258","favourites_count":0,"screen_name":"Lostboyyyy","id":174137258,"contributors_enabled":false,"lang":"en","utc_offset":-32400,"profile_sidebar_fill_color":"DDEEF6"},"id":12411910242705408,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@amaeletronica D'Baginyus : S.A.K.I.T LOL --> RT oliiind: Hooo eksssss RT WilliamWilz: oliiind engga jelek :b http:\/\/boo.lol.vc\/lL \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbj b/Pods/SBJson/Tests/Stream/xbj deleted file mode 100755 index 725acc2..0000000 --- a/Pods/SBJson/Tests/Stream/xbj +++ /dev/null @@ -1 +0,0 @@ -fE8","entities":{"urls":[{"expanded_url":null,"indices":[114,137],"url":"http:\/\/boo.lol.vc\/lLfE8"}],"hashtags":[],"user_mentions":[{"indices":[0,14],"name":"anderson avila","screen_name":"amaeletronica","id_str":"73257249","id":73257249}]},"in_reply_to_screen_name":"amaeletronica","in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":"73257249","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910242697216","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":null,"listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":null,"profile_use_background_image":true,"profile_text_color":"333333","follo \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbk b/Pods/SBJson/Tests/Stream/xbk deleted file mode 100755 index 3adbd2d..0000000 --- a/Pods/SBJson/Tests/Stream/xbk +++ /dev/null @@ -1,2 +0,0 @@ -wers_count":4,"statuses_count":378,"time_zone":null,"created_at":"Sun Dec 05 17:31:14 +0000 2010","friends_count":0,"protected":false,"profile_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/default_profile_2_normal.png","notifications":null,"profile_link_color":"0084B4","url":null,"name":"irene aguilera","id_str":"223191796","favourites_count":0,"screen_name":"bunndeknalifa","id":223191796,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"DDEEF6"},"id":12411910242697216,"in_reply_to_user_id":73257249,"favorited":false} -{"coordinates":null,"text":"Haha ejiyek lia mainannya gombal sekarang hahaRT @_ameliahudayana: yoiii RT @vanyaau: Rerun extravaganza","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[49,65],"name":"Amelia Hudayana","screen_name":"_ameliahudayana","id_str":"162588680","id":162588680},{"indices":[76,84],"name":"vanya Beti La Venus","screen_name":"vanyaau","id_str":"65334621","id":65334621}]},"in_reply_to_screen_name":null,"in_reply \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbl b/Pods/SBJson/Tests/Stream/xbl deleted file mode 100755 index ba7e2fd..0000000 --- a/Pods/SBJson/Tests/Stream/xbl +++ /dev/null @@ -1 +0,0 @@ -_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"https:\/\/dabr.mobi\" rel=\"nofollow\"\u003EE = mc\u00b2\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910238511104","user":{"following":null,"listed_count":8,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/62088481\/cup_cakes.JPG","profile_sidebar_border_color":"7e3091","profile_use_background_image":true,"description":"260695, 15th, FH, ALFAJAR JHS, MUHAMMADIYAH SHS, #THRH's HEART, A PART OF X.3, jazz addict, #AnakGalau\u2665 beti la gondrong venus GREET: vanyaau@hot xoxo :*","statuses_count":10309,"time_zone":"Pacific Time (US & Canada)","friends_count":287,"profile_background_color":"fa197e","location":"Planet venus~ fairy world","profile_text_color":"e8099a","followers_count":255,"contributors_enabled":fals \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbm b/Pods/SBJson/Tests/Stream/xbm deleted file mode 100755 index a63813e..0000000 --- a/Pods/SBJson/Tests/Stream/xbm +++ /dev/null @@ -1,2 +0,0 @@ -e,"created_at":"Thu Aug 13 10:32:49 +0000 2009","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1176654063\/vanyac_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"7135cc","url":"http:\/\/vanyaau.blogspot.com","name":"vanya Beti La Venus","id_str":"65334621","favourites_count":104,"screen_name":"vanyaau","id":65334621,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":-28800,"profile_sidebar_fill_color":"d880f5"},"id":12411910238511104,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Orange Soda.","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910255288320","user":{"following":nul \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbn b/Pods/SBJson/Tests/Stream/xbn deleted file mode 100755 index e49ed4d..0000000 --- a/Pods/SBJson/Tests/Stream/xbn +++ /dev/null @@ -1 +0,0 @@ -l,"listed_count":23,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/179350469\/PacManTee.jpg","profile_sidebar_border_color":"badcad","profile_use_background_image":true,"description":"Deadly Robot love Owner. Lifestyle Blogger. Designer. Poet. Collector. Grandson.","statuses_count":56123,"time_zone":"Eastern Time (US & Canada)","friends_count":196,"profile_background_color":"919191","location":"Atlanta","profile_text_color":"333333","followers_count":716,"contributors_enabled":false,"created_at":"Mon May 04 22:27:05 +0000 2009","protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1180397702\/KevinDRL_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0a0a0a","url":"http:\/\/www.deadlyrobotlove.com\/","name":"K\u2665vin, The Robot.","id_str":"37777826","favourites_count":4,"screen_name":"deadlyrobotlove","id":37777826,"show_all_inline_media":false,"lang":"en","geo_enabled": \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbo b/Pods/SBJson/Tests/Stream/xbo deleted file mode 100755 index 5ca1c07..0000000 --- a/Pods/SBJson/Tests/Stream/xbo +++ /dev/null @@ -1,2 +0,0 @@ -false,"utc_offset":-18000,"profile_sidebar_fill_color":"686e6e"},"id":12411910255288320,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@chiru_hms DMCSjp RT denamamoto: I'd swim across the world for you... lol joking, there are sharks in there. http:\/\/zry.m2r.ru\/HPOon","entities":{"urls":[{"expanded_url":null,"indices":[109,132],"url":"http:\/\/zry.m2r.ru\/HPOon"}],"user_mentions":[{"indices":[0,10],"name":"chiru","screen_name":"chiru_hms","id_str":"114779568","id":114779568}],"hashtags":[]},"in_reply_to_screen_name":"chiru_hms","in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":"114779568","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910259474432","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbp b/Pods/SBJson/Tests/Stream/xbp deleted file mode 100755 index 99d1b9d..0000000 --- a/Pods/SBJson/Tests/Stream/xbp +++ /dev/null @@ -1,2 +0,0 @@ -":"","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":9,"statuses_count":575,"time_zone":null,"created_at":"Sun Dec 05 17:14:25 +0000 2010","friends_count":0,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1183205820\/twitterProfilePhoto_normal.jpg_normal.146","notifications":null,"profile_link_color":"0084B4","url":null,"name":"shanel thornton","id_str":"223186483","favourites_count":0,"screen_name":"frn_JBiebtrBR","id":223186483,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"DDEEF6"},"id":12411910259474432,"in_reply_to_user_id":114779568,"favorited":false} -{"coordinates":null,"text":"\u039a\u03b1\u03bb\u03b7\u03bc\u03b5\u03c1\u03b1 \u03ba\u03b1\u03b9 \u03c5\u03c0\u03bf\u03bc\u03bf\u03bd\u03b7! \u039f\u03c \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbq b/Pods/SBJson/Tests/Stream/xbq deleted file mode 100755 index 8fe2dc8..0000000 --- a/Pods/SBJson/Tests/Stream/xbq +++ /dev/null @@ -1 +0,0 @@ -3\u03bf\u03b9 \u03b5\u03b9\u03c3\u03c4\u03b5 \u03ba\u03bf\u03bd\u03c4\u03b1 \u03bc\u03b7\u03bd \u03c0\u03b1\u03c1\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03bf\u03ba\u03b9\u03bd\u03b7\u03c4\u03bf, \u03c0\u03bf\u03b4\u03b9\u03b1 \u03b7 \u03c0\u03bf\u03b4\u03b7\u03bb\u03b1\u03c4\u03bf..!","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/twitter.com\/\" rel=\"nofollow\"\u003ETwitter for iPhone\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910234308608","user":{"following":null,"listed_count":10,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/167969569\/bodypaint_floyd.jpg","profile_sidebar_border_color":"829D5E","profile_use_background_image":true,"description":" \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbr b/Pods/SBJson/Tests/Stream/xbr deleted file mode 100755 index a45fa41..0000000 --- a/Pods/SBJson/Tests/Stream/xbr +++ /dev/null @@ -1,2 +0,0 @@ -Summer Dream!","statuses_count":1932,"time_zone":"Athens","friends_count":240,"profile_background_color":"352726","location":"Currently Lost","profile_text_color":"3E4415","followers_count":235,"contributors_enabled":false,"created_at":"Thu Oct 28 22:40:07 +0000 2010","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1154617775\/IMG_3032_normal.JPG","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0c1bc7","url":null,"name":"Psychophski","id_str":"209295433","favourites_count":33,"screen_name":"Psychophski","id":209295433,"show_all_inline_media":false,"lang":"en","geo_enabled":true,"utc_offset":7200,"profile_sidebar_fill_color":"336bcc"},"id":12411910234308608,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":{"coordinates":[0,0],"type":"Point"},"text":"to protest or not to protest...that is the question!","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":n \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbs b/Pods/SBJson/Tests/Stream/xbs deleted file mode 100755 index 4a1eb7b..0000000 --- a/Pods/SBJson/Tests/Stream/xbs +++ /dev/null @@ -1 +0,0 @@ -ull,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.tweetdeck.com\" rel=\"nofollow\"\u003ETweetDeck\u003C\/a\u003E","retweeted":false,"geo":{"coordinates":[0,0],"type":"Point"},"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910251085824","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"aef5fa","show_all_inline_media":false,"geo_enabled":true,"description":"you'll never regret giving it your best, so go on and do it. ","listed_count":1,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291750721\/images\/themes\/theme1\/bg.png","profile_background_color":"214542","location":"Washington","profile_use_background_image":true,"profile_text_color":"739e9f","followers_count":32,"statuses_count":516,"time_zone":null,"created_at":"Wed Sep 15 06:21:58 +0000 2010","friends_count":85,"protected":false,"profile_ \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbt b/Pods/SBJson/Tests/Stream/xbt deleted file mode 100755 index ab3682a..0000000 --- a/Pods/SBJson/Tests/Stream/xbt +++ /dev/null @@ -1,2 +0,0 @@ -image_url":"http:\/\/a2.twimg.com\/profile_images\/1155612338\/26_normal.jpg","notifications":null,"profile_link_color":"b4d9ad","url":null,"name":"Sarah Jane Burns","id_str":"190941250","favourites_count":0,"screen_name":"sarahjb93","id":190941250,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"3b615d"},"id":12411910251085824,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@soyFayo me puse peor hoy esta semana quiero recuperarme para que no se me complique u.u","entities":{"urls":[],"user_mentions":[{"indices":[0,8],"name":"Fayo","screen_name":"soyFayo","id_str":"72220601","id":72220601}],"hashtags":[]},"in_reply_to_screen_name":"soyFayo","in_reply_to_status_id_str":"12411227426787328","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411227426787328,"in_reply_to_user_id_str":"72220601","source":"\u003Ca href=\"http:\/\/twittme.mobi\" rel=\"nofollow\"\u003Etwittme.mobi\u003C\/a\u003E","retweeted":false,"geo":null," \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbu b/Pods/SBJson/Tests/Stream/xbu deleted file mode 100755 index 78fd96f..0000000 --- a/Pods/SBJson/Tests/Stream/xbu +++ /dev/null @@ -1 +0,0 @@ -created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910230118400","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"fff8ad","show_all_inline_media":false,"geo_enabled":false,"description":"ESCRITORAILUSTRADORA, CARTONISTA,FISICA-MATEMATICAS,futura vulcanologa. Y ENAMORADA D LA VIDA Y SOY 100%UNAM Hija adoptiva de @marinataibo3 y @monicamateosV","listed_count":158,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/137229680\/Fenix_ohen_small.jpg","profile_background_color":"FFF04D","location":"estado de Ebriedad M\u00e9xico ","profile_use_background_image":true,"profile_text_color":"333333","followers_count":2066,"statuses_count":60566,"time_zone":"Mexico City","created_at":"Sun Nov 15 02:51:14 +0000 2009","friends_count":1890,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1184479641\/imagesCANA8G7F_normal.jpg","notifications":null,"profile_l \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbv b/Pods/SBJson/Tests/Stream/xbv deleted file mode 100755 index bf2cee6..0000000 --- a/Pods/SBJson/Tests/Stream/xbv +++ /dev/null @@ -1,2 +0,0 @@ -ink_color":"0099CC","url":"http:\/\/cienciasartes.blogspot.com\/ ","name":"Luc\u00edaVillarrealLuna","id_str":"90079038","favourites_count":39,"screen_name":"pokemonera","id":90079038,"contributors_enabled":false,"lang":"es","utc_offset":-21600,"profile_sidebar_fill_color":"f6ffd1"},"id":12411910230118400,"in_reply_to_user_id":72220601,"favorited":false} -{"coordinates":null,"text":"@bonita_Niyah she gotta txt & tell kuz she dnt have a fb she da shy type so idk but she gon have 2 tell soon or lata","entities":{"urls":[],"user_mentions":[{"indices":[0,13],"name":"\ue32d. . . \ue144","screen_name":"bonita_Niyah","id_str":"123750163","id":123750163}],"hashtags":[]},"in_reply_to_screen_name":"bonita_Niyah","in_reply_to_status_id_str":"12408747867508737","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12408747867508737,"in_reply_to_user_id_str":"123750163","source":"\u003Ca href=\"http:\/\/www.ubertwitter.com\/bb\/download.php\" rel=\"nofollow\"\u003E\u00dcberTwitter\u003C\/a\u003E","re \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbw b/Pods/SBJson/Tests/Stream/xbw deleted file mode 100755 index e52236a..0000000 --- a/Pods/SBJson/Tests/Stream/xbw +++ /dev/null @@ -1 +0,0 @@ -tweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910255284224","user":{"contributors_enabled":false,"following":null,"follow_request_sent":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":true,"description":"I'M A DAUGHTER..A BESTFRIEND..A FRIEND..A SISTER..A COUSIN..A AUNTIE..A FIGHTER..A LOVER..A SINNER..A SAINT..I WILL TELL YOU 1 THING IM NOT A DOORMAT.. ","profile_background_color":"C0DEED","location":"Nwk NJ","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme1\/bg.png","profile_text_color":"333333","followers_count":30,"profile_use_background_image":true,"created_at":"Fri Aug 13 03:42:52 +0000 2010","protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1101800168\/x2_24cd30d_normal.jpg","statuses_count":715,"notifications":null,"time_zone":"Eastern Time (US & Canada)","friends_count \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbx b/Pods/SBJson/Tests/Stream/xbx deleted file mode 100755 index 7b5a8cf..0000000 --- a/Pods/SBJson/Tests/Stream/xbx +++ /dev/null @@ -1,2 +0,0 @@ -":157,"profile_link_color":"0084B4","url":null,"name":"Iesha Bankston","id_str":"177814999","favourites_count":0,"screen_name":"Pretty_Esh_B","id":177814999,"lang":"en","utc_offset":-18000,"profile_sidebar_fill_color":"DDEEF6"},"id":12411910255284224,"in_reply_to_user_id":123750163,"favorited":false} -{"coordinates":null,"text":"galau ga enek tebengan hahaha RT @ridowidi: galau kok jek ttp twitteranRT @anityaardiyani: nambah2i galauku wae RT... http:\/\/mtw.tl\/lf6idh","entities":{"urls":[{"expanded_url":null,"indices":[118,138],"url":"http:\/\/mtw.tl\/lf6idh"}],"hashtags":[],"user_mentions":[{"indices":[33,42],"name":"ridho widi","screen_name":"ridowidi","id_str":"216939950","id":216939950},{"indices":[74,89],"name":"anitya ardiyani p","screen_name":"anityaardiyani","id_str":"77723022","id":77723022}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/ \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xby b/Pods/SBJson/Tests/Stream/xby deleted file mode 100755 index c686945..0000000 --- a/Pods/SBJson/Tests/Stream/xby +++ /dev/null @@ -1 +0,0 @@ -m.tweete.net\" rel=\"nofollow\"\u003Em.tweete.net\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914441195520","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":true,"geo_enabled":true,"description":"","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/176784334\/Shichibukai.jpg","profile_background_color":"C0DEED","location":"Indonesia","profile_use_background_image":true,"profile_text_color":"333333","followers_count":32,"statuses_count":433,"time_zone":"Jakarta","created_at":"Tue Nov 02 11:14:29 +0000 2010","friends_count":53,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1179237591\/Image026_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Irwan Syah","id_str":"211117875","favourites_count":0,"screen_name":" \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xbz b/Pods/SBJson/Tests/Stream/xbz deleted file mode 100755 index 41ecb83..0000000 --- a/Pods/SBJson/Tests/Stream/xbz +++ /dev/null @@ -1,2 +0,0 @@ -irwan_akt","id":211117875,"contributors_enabled":false,"lang":"en","utc_offset":25200,"profile_sidebar_fill_color":"DDEEF6"},"id":12411914441195520,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@nanafatemn7 \u77e5\u3089\u306d\u3048\u3088\uff57\uff57\uff57\u3044\u3044\u3058\u3083\u3093\u3002\u544a\u3063\u3061\u3083\u3048\uff01","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,12],"name":"\u306a\u306a\u30d5\u30a7\u30a4! \u795d\uff01\u5948\u3005\u3055\u3093\u7d05\u767d\u51fa\u5834\uff01","screen_name":"nanafatemn7","id_str":"155566960","id":155566960}]},"in_reply_to_screen_name":"nanafatemn7","in_reply_to_status_id_str":"12411662476775424","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411662476775424,"in_reply_to_user_id_str":"155566960","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914445393920","user":{"follow_request_sent":null,"following":null,"verified":f \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xca b/Pods/SBJson/Tests/Stream/xca deleted file mode 100755 index b058410..0000000 --- a/Pods/SBJson/Tests/Stream/xca +++ /dev/null @@ -1 +0,0 @@ -alse,"profile_sidebar_border_color":"FFFFFF","show_all_inline_media":false,"geo_enabled":false,"description":"\u5909\u614b\u3067\u3059\u3002\u53d6\u308a\u6562\u3048\u305a\u9a12\u3044\u3067\u308b\u91ce\u90ce\u3067\u3059\u3002\u4e2d\uff13\u3002\u6b63\u76f4\u3001\u30a8\u30ed\u3044\u306e\u306f\u4ed5\u65b9\u306a\u3044\u3068\u601d\u3063\u3066\u307e\u3059\u3002\r\n\r\n\uff12\u6b21\u5143\u306f\u305d\u308c\u306a\u308a\u306b\u306f\u7406\u89e3\u51fa\u6765\u307e\u3059\u304c\u2026\r\n\r\n\u30dd\u30b1\u30e2\u30f3\u3084\u3063\u3066\u307e\u3059\r\n\r\n\r\n\u75db\u3044\u3067\u3059\u3051\u308c\u3069\r\n\r\n\u3088\u308d\u3057\u304f\u304a\u9858\u3044\u3057\u307e\u3059(\u7206)","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/124093074\/bg.jpg","profile_background_color":"000000","location":"\u30a8\u30f3\u30b8\u30e5\u30b7\u30c6\u30a3","profile_use_background_image":true,"profile_text_color":"b344b3","followers_count":24,"statuses_count":1547,"time_z \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcb b/Pods/SBJson/Tests/Stream/xcb deleted file mode 100755 index 030a981..0000000 --- a/Pods/SBJson/Tests/Stream/xcb +++ /dev/null @@ -1,2 +0,0 @@ -one":"Osaka","created_at":"Fri Mar 19 08:48:17 +0000 2010","friends_count":55,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1182098397\/100813_1246340001_normal.jpg","notifications":null,"profile_link_color":"CC3300","url":null,"name":"\u30b7\u30fc\u30c9\u6a29\u0444","id_str":"124404959","favourites_count":2,"screen_name":"Sheadken","id":124404959,"contributors_enabled":false,"lang":"ja","utc_offset":32400,"profile_sidebar_fill_color":"F7DA93"},"id":12411914445393920,"in_reply_to_user_id":155566960,"favorited":false} -{"coordinates":null,"text":"\u7720\u3044\u30fb\u30fb\u30fb","entities":{"urls":[],"user_mentions":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914437009408","user":{"follow_request_sent":null,"foll \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcc b/Pods/SBJson/Tests/Stream/xcc deleted file mode 100755 index 49da381..0000000 --- a/Pods/SBJson/Tests/Stream/xcc +++ /dev/null @@ -1 +0,0 @@ -owing":null,"verified":false,"profile_sidebar_border_color":"ffcb47","show_all_inline_media":false,"geo_enabled":false,"description":"WORKING\u3001\u30dc\u30ab\u30ed\u3001\u30dc\u30fc\u30dc\u30dc\u3001DRRR\u597d\u304d\u3067\u3059\uff57(\u00b4\u03c9\uff40)","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/179023784\/14533769_p9.png","profile_background_color":"ffd4ff","location":"\u5922\u306e\u4e2d\u266c","profile_use_background_image":true,"profile_text_color":"089629","followers_count":15,"statuses_count":465,"time_zone":"Hawaii","created_at":"Wed Oct 27 11:15:34 +0000 2010","friends_count":38,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1161025943\/magnet_normal.jpg","notifications":null,"profile_link_color":"ff2499","url":"http:\/\/ameblo.jp\/work-ing\/","name":"\u5922\u65e5\u8a18\u266a","id_str":"208488936","favourites_count":0,"screen_name":"yumenonikki327","id":208488936,"contributors_enable \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcd b/Pods/SBJson/Tests/Stream/xcd deleted file mode 100755 index 6b2c31d..0000000 --- a/Pods/SBJson/Tests/Stream/xcd +++ /dev/null @@ -1,2 +0,0 @@ -d":false,"lang":"ja","utc_offset":-36000,"profile_sidebar_fill_color":"fdff82"},"id":12411914437009408,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"14.79 euro valt nog wel mee voor 8 dagen tijd","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.tweetdeck.com\" rel=\"nofollow\"\u003ETweetDeck\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914457980928","user":{"following":null,"listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme5\/bg.gif","profile_sidebar_border_color":"829D5E","profile_use_background_image":true,"description":"- -","statuses_count":3291,"time_zone":"Amsterdam","friends_count":71,"profile \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xce b/Pods/SBJson/Tests/Stream/xce deleted file mode 100755 index fd7e417..0000000 --- a/Pods/SBJson/Tests/Stream/xce +++ /dev/null @@ -1,2 +0,0 @@ -_background_color":"352726","location":"Vlaardingen","profile_text_color":"3E4415","followers_count":67,"contributors_enabled":false,"created_at":"Mon Nov 23 07:34:26 +0000 2009","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1160466321\/Foto0850_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"D02B55","url":"http:\/\/www.priscillaa15.hyves.nl","name":"Priscilla v Vliet","id_str":"91959124","favourites_count":1,"screen_name":"xpriscil","id":91959124,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":3600,"profile_sidebar_fill_color":"99CC33"},"id":12411914457980928,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Is This A Serious Question? -___- (iamskippytv) RT @JBooqiie_DEC20 @iamSkippyTV what's ya oovoo","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[51,66],"name":"Joshua && Yhu ?!","screen_name":"JBooqiie_DEC20","id_str":"89241118","id":89241118},{"indices": \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcf b/Pods/SBJson/Tests/Stream/xcf deleted file mode 100755 index abefbbc..0000000 --- a/Pods/SBJson/Tests/Stream/xcf +++ /dev/null @@ -1 +0,0 @@ -[67,79],"name":"Skippy MaKenzi","screen_name":"iamSkippyTV","id_str":"30615809","id":30615809}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003EMobile Web\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914453782528","user":{"following":null,"listed_count":22,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/178920818\/iamskippytv.jpg","profile_sidebar_border_color":"eeeeee","profile_use_background_image":true,"description":"Youtube Video Blogger, Twitter Addict, Socialist, SKIPPY \u2665's BOYS! #TeamTaurus \u2649","statuses_count":36360,"time_zone":"Central Time (US & Canada)","friends_count":97,"profile_background_color":"3b3c3d","location":"CottenCandy & Rainbow Field" \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcg b/Pods/SBJson/Tests/Stream/xcg deleted file mode 100755 index f96a5f4..0000000 --- a/Pods/SBJson/Tests/Stream/xcg +++ /dev/null @@ -1,2 +0,0 @@ -,"profile_text_color":"121112","followers_count":471,"contributors_enabled":false,"created_at":"Sun Apr 12 06:41:34 +0000 2009","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1183274157\/IMG00169-20101205-0211_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"889494","url":"http:\/\/itsmyurls.com\/skippy","name":"Skippy MaKenzi","id_str":"30615809","favourites_count":117,"screen_name":"iamSkippyTV","id":30615809,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":-21600,"profile_sidebar_fill_color":"efefef"},"id":12411914453782528,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"nyasar gak yak?","entities":{"urls":[],"user_mentions":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/202.153.132.152\" rel=\"nof \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xch b/Pods/SBJson/Tests/Stream/xch deleted file mode 100755 index eeaa8e9..0000000 --- a/Pods/SBJson/Tests/Stream/xch +++ /dev/null @@ -1 +0,0 @@ -ollow\"\u003EHP_Esia\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914428616705","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"be my self :)","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291064993\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":31,"statuses_count":875,"time_zone":"Pacific Time (US & Canada)","created_at":"Tue Sep 21 08:36:25 +0000 2010","friends_count":19,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1161524757\/IMG8943A_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Nnisa Lutfi Zuldah","id_str":"193220237","favourites_count":1,"screen_name":"zuld \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xci b/Pods/SBJson/Tests/Stream/xci deleted file mode 100755 index b79bacc..0000000 --- a/Pods/SBJson/Tests/Stream/xci +++ /dev/null @@ -1,2 +0,0 @@ -annisa","id":193220237,"contributors_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"DDEEF6"},"id":12411914428616705,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@bayfm78 \u3046\u3093\u3001\u307e\u3041\u305d\u3046\u89e3\u91c8\u3059\u308b\u306a\u3089\u305d\u308c\u3067\u3082\u3044\u3044\u3093\u3058\u3083\u306a\u3044\u3002","entities":{"urls":[],"user_mentions":[{"indices":[0,8],"name":"\u304b\u305a\u304f\u3093\u3001\u3075\u3049\u3048\u3070","screen_name":"bayfm78","id_str":"21861792","id":21861792}],"hashtags":[]},"in_reply_to_screen_name":"bayfm78","in_reply_to_status_id_str":"12409691430715392","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12409691430715392,"in_reply_to_user_id_str":"21861792","source":"\u003Ca href=\"http:\/\/twtr.jp\" rel=\"nofollow\"\u003EKeitai Web\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914449588224","user":{"follow_re \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcj b/Pods/SBJson/Tests/Stream/xcj deleted file mode 100755 index 9245d71..0000000 --- a/Pods/SBJson/Tests/Stream/xcj +++ /dev/null @@ -1 +0,0 @@ -quest_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"NAME:FENNEL SP:\u5341\u6bb5 ID:6294-9963 mixi\u30fbpixiv:\u5efb\u7409 mixi\u306f\u97f3\u30b2\u30fc\u30de\u30fc\u3057\u304b\u627f\u8a8d\u3057\u307e\u305b\u3093","listed_count":3,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291661299\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":32,"statuses_count":760,"time_zone":"Tokyo","created_at":"Tue Feb 02 13:38:00 +0000 2010","friends_count":27,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1174879155\/101116_1351_01000100010002_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"\u3075\u3047\u3093\u306d\u308b","id_str":"110701310","favourites_count":0,"screen_name":"fennel62949963","id":110701 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xck b/Pods/SBJson/Tests/Stream/xck deleted file mode 100755 index b1d2a5e..0000000 --- a/Pods/SBJson/Tests/Stream/xck +++ /dev/null @@ -1,2 +0,0 @@ -310,"contributors_enabled":false,"lang":"ja","utc_offset":32400,"profile_sidebar_fill_color":"DDEEF6"},"id":12411914449588224,"in_reply_to_user_id":21861792,"favorited":false} -{"coordinates":null,"text":"RT @mrkie: RT @divamayday: 3daagse staking tnt is begonnen #geenrekeningen","entities":{"urls":[],"hashtags":[{"text":"geenrekeningen","indices":[59,74]}],"user_mentions":[{"indices":[3,9],"name":"Marky Mark","screen_name":"mrkie","id_str":"26185044","id":26185044},{"indices":[14,25],"name":"mayday","screen_name":"divamayday","id_str":"47942511","id":47942511}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":1,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted_status":{"coordinates":null,"text":"RT @divamayday: 3daagse staking tnt is begonnen #geenrekeningen","entities":{"urls":[],"hashtags":[{"text":"geenrekeningen","indices":[48,63]}],"user_mentions":[{"indices":[3,14],"name":"mayday","screen_name":"divamay \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcl b/Pods/SBJson/Tests/Stream/xcl deleted file mode 100755 index a11528d..0000000 --- a/Pods/SBJson/Tests/Stream/xcl +++ /dev/null @@ -1 +0,0 @@ -day","id_str":"47942511","id":47942511}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":1,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/motionobj.com\/simplytweet\" rel=\"nofollow\"\u003ESimplyTweet\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 05:09:22 +0000 2010","truncated":false,"id_str":"12373147395301376","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"BDDCAD","show_all_inline_media":true,"geo_enabled":false,"description":"Bodybuilding by obsession, Hairstylist by profession..... | '78 | iPhone | iMac | Las Vegas | Uncle | Brother | Son | Frienemy |","listed_count":2,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290123564\/images\/themes\/theme16\/bg.gif","profile_background_color":"9AE4E8","location":"South Holland, Netherlands","profile_use_background_image":true,"profi \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcm b/Pods/SBJson/Tests/Stream/xcm deleted file mode 100755 index 1ac8e78..0000000 --- a/Pods/SBJson/Tests/Stream/xcm +++ /dev/null @@ -1 +0,0 @@ -le_text_color":"333333","followers_count":152,"statuses_count":13146,"time_zone":"Amsterdam","created_at":"Tue Mar 24 05:30:55 +0000 2009","friends_count":146,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1160078091\/IMG_0008_normal.JPG","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Marky Mark","id_str":"26185044","favourites_count":176,"screen_name":"mrkie","id":26185044,"contributors_enabled":false,"lang":"en","utc_offset":3600,"profile_sidebar_fill_color":"DDFFCC"},"id":12373147395301376,"in_reply_to_user_id":null,"favorited":false},"retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914445398016","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_image \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcn b/Pods/SBJson/Tests/Stream/xcn deleted file mode 100755 index 4cbd3be..0000000 --- a/Pods/SBJson/Tests/Stream/xcn +++ /dev/null @@ -1,2 +0,0 @@ -s\/127910069\/mooi.jpg","profile_background_color":"C0DEED","location":"Alphen aan den Rijn","profile_use_background_image":true,"profile_text_color":"333333","followers_count":14,"statuses_count":647,"time_zone":null,"created_at":"Thu Jun 10 10:59:43 +0000 2010","friends_count":26,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/976722090\/KepCom-1412_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/sbarlingen.hyves.nl","name":"Sigrid van Barlingen","id_str":"154100166","favourites_count":0,"screen_name":"sbarlingen","id":154100166,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"DDEEF6"},"id":12411914445398016,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"semangatttt,,,semngarr...","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xco b/Pods/SBJson/Tests/Stream/xco deleted file mode 100755 index fcbcc8b..0000000 --- a/Pods/SBJson/Tests/Stream/xco +++ /dev/null @@ -1 +0,0 @@ -_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918614532097","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"085982","show_all_inline_media":false,"geo_enabled":false,"description":"nice girl :D","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/178686370\/25390_1148602295676_1846165700_287303_5835946_n.jpg","profile_background_color":"004a82","location":"","profile_use_background_image":true,"profile_text_color":"095aab","followers_count":63,"statuses_count":859,"time_zone":"Alaska","created_at":"Tue Oct 12 12:39:08 +0000 2010","friends_count":281,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1182960469\/k_normal.jpg","notifications":null,"profile_link_color":"17a1eb","url":null,"name":"Reski Amelia","id_str":"201698354","favourites_count":1,"s \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcp b/Pods/SBJson/Tests/Stream/xcp deleted file mode 100755 index a8c1ab8..0000000 --- a/Pods/SBJson/Tests/Stream/xcp +++ /dev/null @@ -1,2 +0,0 @@ -creen_name":"kikotkikota","id":201698354,"contributors_enabled":false,"lang":"en","utc_offset":-32400,"profile_sidebar_fill_color":"6b1b10"},"id":12411918614532097,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u30de\u30b8\u9b3c\u755c RT @321waltz: 5\u6708\u304c\u30aa\u30fc\u30e9\u30b9\u306a\u306e\u306b\u6765\u9031\u672b\u307e\u3067\u306b\u632f\u308a\u8fbc\u307e\u305b\u308b\u4e8b\u52d9\u6240\u30de\u30b8\u9b3c\u755c \uff1eP\u69d8\u30bd\u30ed\u30b3\u30f3","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[8,17],"name":"\u4e00\u4e8c\u4e09\uff08\u308f\u308b\u3064\uff09","screen_name":"321waltz","id_str":"67910402","id":67910402}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/tabtter.jp\" rel=\"nofollow\"\u003E\u30bf\u30d6\u30c3\u30bf\u30fc\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 0 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcq b/Pods/SBJson/Tests/Stream/xcq deleted file mode 100755 index f69d0ab..0000000 --- a/Pods/SBJson/Tests/Stream/xcq +++ /dev/null @@ -1 +0,0 @@ -7:43:26 +0000 2010","truncated":false,"id_str":"12411918614532096","user":{"following":null,"listed_count":16,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/160986641\/tumblr_l9vvhnwKu81qc006io1_500.jpg","profile_sidebar_border_color":"5ED4DC","profile_use_background_image":true,"description":"R23*U\u597d\u304d\uff9b\uff78\uff9d\u62c5*NSKD\u306f\u9752\u6625*\uff7c\uff79\uff9e\u3082\u597d\u304d\uff7c\uff9e\uff6c\uff9d*\u3084\u3076\u3072\u304b\u306f\u6b63\u7fa9*\u4f0a\u91ce\u5c3e\u541b\u306f\u7652\u3057*not\u4e8b\u52d9\u6240\u62c5\/\u9ebb\u91cc\u5b50\u69d8\u795e\u63a8\u3057*\uff82\uff72\uff9d\uff80\uff9c\uff70\u63a8\u3057\/\u6c34\u6a39\u5948\u3005\u69d8\u656c\u611b\/\uff8c\uff6b\uff9b\uff70\uff65\uff98\uff91\uff65RT\uff65\uff98\uff8c\uff9f\u306f\u304a\u6c17\u8efd\u306b\uff65\u4f46\u3057\u304b\u306a\u308a\uff73\uff7b\uff9e\uff72\u306e\u3067\u8981\u6ce8\u610f\/\u4e3b\u306b\u5e73\u65e5\u663c\u9593\u306b\u6d3b\u52d5\/\u5fc5\u8981\u306b\u5fdc\u3058\u3 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcr b/Pods/SBJson/Tests/Stream/xcr deleted file mode 100755 index 50743f9..0000000 --- a/Pods/SBJson/Tests/Stream/xcr +++ /dev/null @@ -1,2 +0,0 @@ -066\uff8c\uff9e\uff9b\uff6f\uff78\u3057\u305f\u308a\u3057\u307e\u3059\/\u88cf\u8d64\u2192jasmine_yellow","statuses_count":16955,"time_zone":"Tokyo","friends_count":97,"profile_background_color":"0099B9","location":"\u307b\u307c\u795e\u5948\u5ddd","profile_text_color":"3C3940","followers_count":196,"contributors_enabled":false,"created_at":"Tue Mar 24 08:10:51 +0000 2009","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1180674943\/imageCASN4VYP_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"00a3b8","url":null,"name":"\u3042\u3063\u304d\u30fc\u306a(\uff65\uff40-\u00b4)","id_str":"26199234","favourites_count":1131,"screen_name":"kmdakn","id":26199234,"show_all_inline_media":false,"lang":"ja","geo_enabled":false,"utc_offset":32400,"profile_sidebar_fill_color":"95E8EC"},"id":12411918614532096,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"pending intan maharani RT @soalCERITA: Nama Gebetan-mu Sewaktu SD? # \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcs b/Pods/SBJson/Tests/Stream/xcs deleted file mode 100755 index a6e6df0..0000000 --- a/Pods/SBJson/Tests/Stream/xcs +++ /dev/null @@ -1 +0,0 @@ -MasaSekolah :)","entities":{"urls":[],"hashtags":[{"text":"MasaSekolah","indices":[67,79]}],"user_mentions":[{"indices":[26,37],"name":"Soal Cerita","screen_name":"soalCERITA","id_str":"186345369","id":186345369}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/m.tweete.net\" rel=\"nofollow\"\u003Em.tweete.net\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918635499520","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":true,"description":"i share my voice for my band @DestinyOfFuture | i share my life for allah swt | i share my heart for my 7","listed_count":2,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xct b/Pods/SBJson/Tests/Stream/xct deleted file mode 100755 index d79bf34..0000000 --- a/Pods/SBJson/Tests/Stream/xct +++ /dev/null @@ -1,2 +0,0 @@ -\/theme1\/bg.png","profile_background_color":"C0DEED","location":"Pondok Gede,jakarta timur","profile_use_background_image":true,"profile_text_color":"333333","followers_count":328,"statuses_count":17575,"time_zone":"Pacific Time (US & Canada)","created_at":"Mon Aug 03 06:08:46 +0000 2009","friends_count":310,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1156247995\/DiasDOF_normal.JPG","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/www.myspace.com\/537395778","name":"Diaz Putra Pratama","id_str":"62451320","favourites_count":38,"screen_name":"Diassaurus","id":62451320,"contributors_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"DDEEF6"},"id":12411918635499520,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"haduh bsk bhs.inggris sama ips lagi","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_ \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcu b/Pods/SBJson/Tests/Stream/xcu deleted file mode 100755 index 95f26ce..0000000 --- a/Pods/SBJson/Tests/Stream/xcu +++ /dev/null @@ -1 +0,0 @@ -count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918639693824","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"eb387a","show_all_inline_media":false,"geo_enabled":true,"description":"just a little boy who growing up","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/132078393\/Conan8.jpg","profile_background_color":"f5f8fa","location":"Pamulang, Indonesia","profile_use_background_image":true,"profile_text_color":"c74052","followers_count":36,"statuses_count":60,"time_zone":"Pacific Time (US & Canada)","created_at":"Sat Aug 07 05:52:21 +0000 2010","friends_count":61,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1097481287\/IMG1441A_normal.jpg","notifications":null,"profile_link_color":"a3e1f7","url":null,"na \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcv b/Pods/SBJson/Tests/Stream/xcv deleted file mode 100755 index 1de4786..0000000 --- a/Pods/SBJson/Tests/Stream/xcv +++ /dev/null @@ -1,2 +0,0 @@ -me":"Taufik Wicak","id_str":"175652995","favourites_count":0,"screen_name":"taufikwicak","id":175652995,"contributors_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"fcfeff"},"id":12411918639693824,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"LOL I THOUGHT U WANTED BIGGIE BACK RT @ChinkyEyedButta: #lemmeguess @YungBossez denying my baby??? Smh","entities":{"urls":[],"hashtags":[{"text":"lemmeguess","indices":[56,67]}],"user_mentions":[{"indices":[38,54],"name":"Piggy!","screen_name":"ChinkyEyedButta","id_str":"28321072","id":28321072},{"indices":[68,79],"name":"LARRY LIVE","screen_name":"YungBossez","id_str":"79103494","id":79103494}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.echofon.com\/\" rel=\"nofollow\"\u003EEchofon\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcw b/Pods/SBJson/Tests/Stream/xcw deleted file mode 100755 index b6ec0d8..0000000 --- a/Pods/SBJson/Tests/Stream/xcw +++ /dev/null @@ -1 +0,0 @@ - Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918652276736","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"BOSSNATION!!! THINK LIKE A BOSS.. MOVE LIKE A BOSS.. BECOME A BOSS!! WE MOVIN!!!! KIK: YungBossElz","listed_count":31,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/136340262\/IMG_0011_1_.JPG","profile_background_color":"C0DEED","location":"NYC","profile_use_background_image":true,"profile_text_color":"333333","followers_count":1450,"statuses_count":43647,"time_zone":"Quito","created_at":"Fri Oct 02 05:23:49 +0000 2009","friends_count":740,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1184354137\/YungBossez_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/www.apple.com","name":"LARRY LIVE","id_str":"79103494","favourites_count":18,"scree \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcx b/Pods/SBJson/Tests/Stream/xcx deleted file mode 100755 index 8cf181a..0000000 --- a/Pods/SBJson/Tests/Stream/xcx +++ /dev/null @@ -1,2 +0,0 @@ -n_name":"YungBossez","id":79103494,"contributors_enabled":false,"lang":"en","utc_offset":-18000,"profile_sidebar_fill_color":"DDEEF6"},"id":12411918652276736,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@renzoom \u3044\u3084\u3001\u540c\u3058\u9ad8\u6821\u306a\u3089\u5802\u3005\u3068\u300c\u5148\u8f29\u300d\u3068\u547c\u3079\u308b\u6a29\u5229\u7372\u5f97\u3067\u3059\u3088!?\u6749\u7530\u2026\u5148\u8f29\u2026\u30db\u30ef\u30a2\u30a2\u30a2\u30a1\u30a1\u30a1\u30a2\u30a2\uff1c\u25cf\uff1e\/\/\/\/\uff1c\u25cf\uff1e\u306a\u3093\u306a\u3093\u3067\u3059\u304b\u604b\u30b7\u30e5\u30df\u306a\u3093\u3067\u3059\u304b\u3068\u304d\u3081\u304d\u30e1\u30e2\u30ea\u30a2\u30ebin\u5c0f\u5ddd\uff01\uff01\uff01\u653b\u7565\u30ad\u30e3\u30e9\u2192\u6749\u7530\u5148\u8f29Only","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[0,8],"name":"\u30ec\u30f3\u30ba\u30a3\u30fc","screen_name":"renzoom","id_str":"80027788","id":80027788}]},"in_reply_to_screen_name":"renzoom","in_reply_to_status_id_ \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcy b/Pods/SBJson/Tests/Stream/xcy deleted file mode 100755 index b678694..0000000 --- a/Pods/SBJson/Tests/Stream/xcy +++ /dev/null @@ -1 +0,0 @@ -str":"12386429707485184","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12386429707485184,"in_reply_to_user_id_str":"80027788","source":"\u003Ca href=\"http:\/\/twtr.jp\" rel=\"nofollow\"\u003EKeitai Web\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918631309312","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"\u3054\u98ef\u306e\u4e8b\u3070\u3063\u304b\u8003\u3048\u3066\u307e\u3059\u3002\u6f2b\u753b\u30fb\u30a2\u30cb\u30e1\u95a2\u9023\u306e\u30c4\u30a4\u30fc\u30c8\u591a\u3044\u3067\u3059\u3002","listed_count":1,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":23,"stat \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xcz b/Pods/SBJson/Tests/Stream/xcz deleted file mode 100755 index 0b26355..0000000 --- a/Pods/SBJson/Tests/Stream/xcz +++ /dev/null @@ -1,2 +0,0 @@ -uses_count":315,"time_zone":"Tokyo","created_at":"Thu Oct 21 00:46:18 +0000 2010","friends_count":41,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1149146122\/DVC00089_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"\u30d2\u30c3\u30dd\u30ed\u7cfb\u30cb\u30e3\u30dd\u30fc\u30f3","id_str":"205496590","favourites_count":1,"screen_name":"OpporeGassen","id":205496590,"contributors_enabled":false,"lang":"ja","utc_offset":32400,"profile_sidebar_fill_color":"DDEEF6"},"id":12411918631309312,"in_reply_to_user_id":80027788,"favorited":false} -{"coordinates":null,"text":"\u7d20\u4eba\u767a\u8a00ww RT @AsrA924: \u300c\u98a8\u6708\u3055\u3093\u3001\u76ee\u7acb\u3064\u5ba3\u4f1d\u8003\u3048\u3066\uff01\u300d\u300c\u306f\u3044\uff1f\uff01\u300d\u300c\u3060\u304b\u3089\u3070\u3070\u30fc\u3093\u3068\u76ee\u7acb\u3063\u3061\u3083\u3046\u5ba3\u4f1d\uff01\u300d\u300c\u5bfe\u8c61\u306f\u2026\u300d\u300c\u307f\u3093\u306a\uff01\uff01\u300d\u300c\u307f\u3093\u306a\u306 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xda b/Pods/SBJson/Tests/Stream/xda deleted file mode 100755 index 8eae8bd..0000000 --- a/Pods/SBJson/Tests/Stream/xda +++ /dev/null @@ -1 +0,0 @@ -3\u3066\u8a00\u308f\u308c\u307e\u3057\u3066\u3082\u2026\u300d\u300c\u76ee\u7acb\u3064\u5ba3\u4f1d\u306f\u8ab0\u306b\u3068\u3063\u3066\u3082\u76ee\u7acb\u3064\u3067\u3057\u3087\uff01\uff01\u300d\u2026\u3060\u3081\u3060\u3053\u308a\u3083\u3002","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[10,18],"name":"\u98a8\u6708\u3042\u3059\u3089","screen_name":"AsrA924","id_str":"112167510","id":112167510}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.echofon.com\/\" rel=\"nofollow\"\u003EEchofon\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918614528000","user":{"following":null,"listed_count":13,"profile_background_tile":true,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme14\/bg.gif","profile_sidebar_border_color" \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdb b/Pods/SBJson/Tests/Stream/xdb deleted file mode 100755 index 8be15d9..0000000 --- a/Pods/SBJson/Tests/Stream/xdb +++ /dev/null @@ -1 +0,0 @@ -:"eeeeee","profile_use_background_image":true,"description":"1983.07.04 \u55b6\u696d\u3002\u793e\u4f1a\u306e\u53b3\u3057\u3055\u3092\u52c9\u5f37\u4e2d\u3067\u3059\u3002\u9031\u672b\u306f\u611b\u8eca\u306e\u30ed\u30fc\u30c9\u30ec\u30fc\u30b5\u30fc\u3067\u30b5\u30a4\u30af\u30ea\u30f3\u30b0\uff01\u91ce\u7403\u3001\u5343\u8449\u30ed\u30c3\u30c6\u3001\u30c0\u30fc\u30c4\u3001\u97f3\u697d\u3001\u6620\u753b\u3001\u65c5\u884c\u3001\u81ea\u8ee2\u8eca\u65c5\u884c\u597d\u304d\u3067\u3059\u3002\u3088\u308d\u3057\u304f\u304a\u9858\u3044\u3057\u307e\u3059\u3002\u3042\u3063\u3001\u30c1\u30e7\u30c3\u30d1\u30fc\u597d\u304d\u3067\u3059\uff01","statuses_count":2392,"time_zone":"Tokyo","friends_count":483,"profile_background_color":"131516","location":"\u5343\u8449\u770c\u5e02\u5ddd\u5e02\u5999\u5178","profile_text_color":"333333","followers_count":291,"contributors_enabled":false,"created_at":"Mon Dec 21 10:04:09 +0000 2009","protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1183120212\/fukkyman_normal \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdc b/Pods/SBJson/Tests/Stream/xdc deleted file mode 100755 index cc46a96..0000000 --- a/Pods/SBJson/Tests/Stream/xdc +++ /dev/null @@ -1,2 +0,0 @@ -.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"009999","url":null,"name":"\u3075\u3063\u304d\u30fc\u30de\u30f3","id_str":"98340517","favourites_count":32,"screen_name":"fukkyman","id":98340517,"show_all_inline_media":false,"lang":"ja","geo_enabled":true,"utc_offset":32400,"profile_sidebar_fill_color":"efefef"},"id":12411918614528000,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@lengraciazz99 zz","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,14],"name":"Hellena Gracia \uff61\u25d5\u203f\u25d5\uff61","screen_name":"lengraciazz99","id_str":"127160903","id":127160903}]},"in_reply_to_screen_name":"lengraciazz99","in_reply_to_status_id_str":"12411745138122752","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411745138122752,"in_reply_to_user_id_str":"127160903","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"124119186480906 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdd b/Pods/SBJson/Tests/Stream/xdd deleted file mode 100755 index 8f71d1b..0000000 --- a/Pods/SBJson/Tests/Stream/xdd +++ /dev/null @@ -1 +0,0 @@ -24","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":true,"description":"hello , my name is john James Apillio , i like playing piano , i want to be a princepiano .. wkwk .. i'm single .. chatolic .. ","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/176397228\/edit.JPG","profile_background_color":"C0DEED","location":"jakarta","profile_use_background_image":true,"profile_text_color":"333333","followers_count":55,"statuses_count":1882,"time_zone":"Pacific Time (US & Canada)","created_at":"Mon Oct 11 09:01:29 +0000 2010","friends_count":144,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1174624371\/ME_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Frank james Aprillio","id_str":"201190413","favourites_count":3,"screen_name":"frankyakob","id":201190413,"contributors \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xde b/Pods/SBJson/Tests/Stream/xde deleted file mode 100755 index 0752ded..0000000 --- a/Pods/SBJson/Tests/Stream/xde +++ /dev/null @@ -1,2 +0,0 @@ -_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"DDEEF6"},"id":12411918648090624,"in_reply_to_user_id":127160903,"favorited":false} -{"coordinates":null,"text":"mboh, aku wez mari nde kmpus, tp te jln2 sek aku mbek nevi santi, hehe RT @dindalovelove @dindydind gak enak tahh ... heh mole jam piro awak","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[74,88],"name":"winda hermawan ","screen_name":"dindalovelove","id_str":"93166570","id":93166570},{"indices":[89,99],"name":"Indri Rahmawati","screen_name":"dindydind","id_str":"77725423","id":77725423}]},"in_reply_to_screen_name":"dindalovelove","in_reply_to_status_id_str":"12411470138580992","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411470138580992,"in_reply_to_user_id_str":"93166570","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922821419009","user":{"follow_request_sent":null,"following":null,"verified":fal \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdf b/Pods/SBJson/Tests/Stream/xdf deleted file mode 100755 index aada9f9..0000000 --- a/Pods/SBJson/Tests/Stream/xdf +++ /dev/null @@ -1 +0,0 @@ -se,"profile_sidebar_border_color":"ffffff","show_all_inline_media":false,"geo_enabled":true,"description":"luv my family sooo much","listed_count":3,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/130377756\/twittmn.jpg","profile_background_color":"ec7b3e","location":"Malang, Indonesia","profile_use_background_image":true,"profile_text_color":"030303","followers_count":99,"statuses_count":1744,"time_zone":"Jakarta","created_at":"Sun Sep 27 12:31:59 +0000 2009","friends_count":93,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1139037997\/36174_1534584098950_1665256568_1290462_4376492_n_normal.jpg","notifications":null,"profile_link_color":"07545e","url":null,"name":"Indri Rahmawati","id_str":"77725423","favourites_count":4,"screen_name":"dindydind","id":77725423,"contributors_enabled":false,"lang":"en","utc_offset":25200,"profile_sidebar_fill_color":"ec7b3e"},"id":12411922821419009,"in_reply_to_user_id":93166570,"f \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdg b/Pods/SBJson/Tests/Stream/xdg deleted file mode 100755 index 5c0dece..0000000 --- a/Pods/SBJson/Tests/Stream/xdg +++ /dev/null @@ -1,2 +0,0 @@ -avorited":false} -{"coordinates":null,"text":"@AThousandFall conan para presidente de la rep\u00fablica","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,14],"name":"A Thousand Fall","screen_name":"AThousandFall","id_str":"108740471","id":108740471}]},"in_reply_to_screen_name":"AThousandFall","in_reply_to_status_id_str":"12391305862713344","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12391305862713344,"in_reply_to_user_id_str":"108740471","source":"\u003Ca href=\"http:\/\/www.echofon.com\/\" rel=\"nofollow\"\u003EEchofon\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922821419008","user":{"following":null,"listed_count":3,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/178454607\/Gambit.jpg","profile_sidebar_border_color":"eeeeee","profile_use_background_image":true,"description":"","statuses_count":8135,"time_zone":null," \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdh b/Pods/SBJson/Tests/Stream/xdh deleted file mode 100755 index ae0894c..0000000 --- a/Pods/SBJson/Tests/Stream/xdh +++ /dev/null @@ -1,2 +0,0 @@ -friends_count":591,"profile_background_color":"131516","location":"El Paso Tx","profile_text_color":"333333","followers_count":250,"contributors_enabled":false,"created_at":"Tue Jun 02 22:52:44 +0000 2009","protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1180820352\/KingEly_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"009999","url":"http:\/\/facebook.com\/elycharlescarrasco","name":"Ely","id_str":"44230583","favourites_count":0,"screen_name":"KingEly","id":44230583,"show_all_inline_media":false,"lang":"en","geo_enabled":true,"utc_offset":null,"profile_sidebar_fill_color":"efefef"},"id":12411922821419008,"in_reply_to_user_id":108740471,"favorited":false} -{"coordinates":null,"text":"Rated on LUUUX http:\/\/bit.ly\/eyvcXO","entities":{"hashtags":[],"urls":[{"expanded_url":null,"indices":[15,35],"url":"http:\/\/bit.ly\/eyvcXO"}],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contr \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdi b/Pods/SBJson/Tests/Stream/xdi deleted file mode 100755 index 9b4c2b8..0000000 --- a/Pods/SBJson/Tests/Stream/xdi +++ /dev/null @@ -1 +0,0 @@ -ibutors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.luuux.com\" rel=\"nofollow\"\u003Eluuux_app\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922834006016","user":{"following":null,"listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_sidebar_border_color":"C0DEED","profile_use_background_image":true,"description":null,"statuses_count":8135,"time_zone":null,"friends_count":0,"profile_background_color":"C0DEED","location":null,"profile_text_color":"333333","followers_count":85,"contributors_enabled":false,"created_at":"Tue Sep 07 04:32:28 +0000 2010","protected":false,"profile_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/default_profile_0_normal.png","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0084B4 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdj b/Pods/SBJson/Tests/Stream/xdj deleted file mode 100755 index 9b830c9..0000000 --- a/Pods/SBJson/Tests/Stream/xdj +++ /dev/null @@ -1,2 +0,0 @@ -","url":null,"name":"Lili","id_str":"187793438","favourites_count":0,"screen_name":"Dulceamor510","id":187793438,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":null,"profile_sidebar_fill_color":"DDEEF6"},"id":12411922834006016,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u3080\u3001\u307f\u304f\u3057\u30fc\u3068\u3044\u3048\u3070\u3001\u304a\u663c\u9803\u306b\u4e45\u3005\u306b\u30c1\u30a7\u30c3\u30af\u3057\u305f\u3089\u3001\u306a\u3093\u304b\u300c\u30a2\u30a4\u30c9\u30eb\u3000\u516c\u5f0f\u30a2\u30ab\u30a6\u30f3\u30c8\u300d\u306a\u4eba\u304b\u3089\u8db3\u8de1\u304c\u3064\u3044\u3066\u305f\u3002\u3000\u306a\u306b\u304c\u3069\u3046\u306a\u3063\u3066\u50d5\u306e\u3068\u3053\u306b\u304d\u305f\u306e\u3084\u3089\u3002\u624b\u5f53\u305f\u308a\u6b21\u7b2c\u304b\u3002","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id" \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdk b/Pods/SBJson/Tests/Stream/xdk deleted file mode 100755 index f294098..0000000 --- a/Pods/SBJson/Tests/Stream/xdk +++ /dev/null @@ -1 +0,0 @@ -:null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922825613312","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"65B0DA","show_all_inline_media":false,"geo_enabled":false,"description":"\u30d5\u30a1\u30df\u30ea\u30fc\u30b9\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u7247\u65b9\u3002\u8a9e\u308a\u3060\u3057\u305f\u3089\u6b62\u307e\u3089\u306a\u3044\u305c\u266a\u3000\u30b2\u30fc\u30e0\u30fb\u30de\u30f3\u30ac\u30fb\u6620\u753b\u597d\u304d\u3067\u611a\u75f4\u3063\u305f\u30fc\uff08\uff1f\uff09\u57fa\u672c\u3001\u7d61\u3093\u3067\u4e0b\u3055\u3063\u305f\u3089\u30d5\u30a9\u30ed\u30fc\u3057\u307e\u3059\u3002\u767a\u8a00\u6570\u304c\u7570\u5e38\u3060\u3068\u826f\u304f\u8a00\u308f\u308c\u308b\u306e\u3067\u30d5\u30a9\u30ed\u30fc\u306f\u8a08\u753b\u7684\u306b\u2026\/360:KLINK2007\/PS3:KLINK2008\u203b2009\u5e7410\u670812\u65e5\u304b\u3089\u59cb\u3081\u307e\u3057\u305f", \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdl b/Pods/SBJson/Tests/Stream/xdl deleted file mode 100755 index 3835495..0000000 --- a/Pods/SBJson/Tests/Stream/xdl +++ /dev/null @@ -1,2 +0,0 @@ -"listed_count":76,"profile_background_tile":true,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291064993\/images\/themes\/theme10\/bg.gif","profile_background_color":"642D8B","location":"OITA CITY","profile_use_background_image":true,"profile_text_color":"5386b0","followers_count":594,"statuses_count":57250,"time_zone":"Osaka","created_at":"Mon Oct 12 03:37:07 +0000 2009","friends_count":363,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1135752368\/00141_03_12_13-19_11_16_normal.jpg","notifications":null,"profile_link_color":"FF0000","url":null,"name":"KLINK_JP","id_str":"81753861","favourites_count":352,"screen_name":"KLINK_JP","id":81753861,"contributors_enabled":false,"lang":"ja","utc_offset":32400,"profile_sidebar_fill_color":"642d8b"},"id":12411922825613312,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u3059\u3066\u304d\u306a\u51fa\u4f1a\u3044\u3068\u7d50\u5a5a\u7d39\u4ecb\u306f\u697d\u5929\u30b0\u30eb\u30fc\u30d7\u306e\u300c\u30aa \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdm b/Pods/SBJson/Tests/Stream/xdm deleted file mode 100755 index 630e8d4..0000000 --- a/Pods/SBJson/Tests/Stream/xdm +++ /dev/null @@ -1 +0,0 @@ -\u30fc\u30cd\u30c3\u30c8\u300d\u3067\u266a \u4eca\u306a\u3089\u5165\u4f1a\u306710,000\u30dd\u30a4\u30f3\u30c8\u30d7\u30ec\u30bc\u30f3\u30c8\u4e2d\uff01\u307e\u305a\u306f\u3001\u201d\u7406\u60f3\u306e\u304a\u76f8\u624b\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u201d\u3092GET\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u300e\u30aa\u30fc\u30cd\u30c3\u30c8\u300f\u3092\u898b\u308b [\u697d\u5929] http:\/\/a.r10.to\/hBhJuv #sougofollow","entities":{"hashtags":[{"text":"sougofollow","indices":[121,133]}],"urls":[{"expanded_url":null,"indices":[98,120],"url":"http:\/\/a.r10.to\/hBhJuv"}],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.vector.co.jp\/soft\/winnt\/net\/se483196.html\" rel=\"nofollow\"\u003ETWEET command\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"1241192 \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdn b/Pods/SBJson/Tests/Stream/xdn deleted file mode 100755 index b86dda4..0000000 --- a/Pods/SBJson/Tests/Stream/xdn +++ /dev/null @@ -1 +0,0 @@ -2813026304","user":{"following":null,"listed_count":26,"profile_background_tile":true,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme11\/bg.gif","profile_sidebar_border_color":"CC3366","profile_use_background_image":true,"description":"\u3088\u308d\u3057\u304f\u304a\u9858\u3044\u3057\u307e\u3059\u2764","statuses_count":10429,"time_zone":"Tokyo","friends_count":2893,"profile_background_color":"FF6699","location":"\u4e09\u91cd","profile_text_color":"362720","followers_count":2830,"contributors_enabled":false,"created_at":"Sun Jun 20 02:54:09 +0000 2010","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1134806221\/__10_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"B40B43","url":null,"name":"\u3042\u3044\u306e","id_str":"157527482","favourites_count":0,"screen_name":"aino_kis","id":157527482,"show_all_inline_media":false,"lang":"ja","geo_enabled":false,"utc_offset":32400,"profile_sidebar_fi \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdo b/Pods/SBJson/Tests/Stream/xdo deleted file mode 100755 index 1438201..0000000 --- a/Pods/SBJson/Tests/Stream/xdo +++ /dev/null @@ -1,2 +0,0 @@ -ll_color":"E5507E"},"id":12411922813026304,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"RT @duck_of_d00m: \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0436\u0435\u043d\u0449\u0438\u043d\u044b \u0432 \u0441\u0435\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0438\u0448\u0443\u0442 \u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u0430 \u043c\u0443\u0436\u0447\u0438\u043d\u044b \u043e\u0431 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c.","entities":{"user_mentions":[{"indices":[3,16],"name":"Mitya Voskresensky","screen_name":"duck_of_d00m","id_str":"19416850","id":19416850}],"urls":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdp b/Pods/SBJson/Tests/Stream/xdp deleted file mode 100755 index d7ae820..0000000 --- a/Pods/SBJson/Tests/Stream/xdp +++ /dev/null @@ -1 +0,0 @@ -,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted_status":{"coordinates":null,"text":"\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0436\u0435\u043d\u0449\u0438\u043d\u044b \u0432 \u0441\u0435\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0438\u0448\u0443\u0442 \u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u0430 \u043c\u0443\u0436\u0447\u0438\u043d\u044b \u043e\u0431 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c.","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":7,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"https:\/\/chrome.google.com\/extensions \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdq b/Pods/SBJson/Tests/Stream/xdq deleted file mode 100755 index e560ec4..0000000 --- a/Pods/SBJson/Tests/Stream/xdq +++ /dev/null @@ -1 +0,0 @@ -\/detail\/encaiiljifbdbjlphpgpiimidegddhic\" rel=\"nofollow\"\u003EChromed Bird\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Tue Dec 07 18:45:38 +0000 2010","truncated":false,"id_str":"12216177023520768","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"\u0421\u0442\u0440\u0430\u0442\u0435\u0433 \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u043c\u0435\u0434\u0438\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 Red Keds, \u043f\u0438\u0448\u0443 \u043e \u0440\u0435\u043a\u043b\u0430\u043c\u0435, \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u044b\u0445 \u0448\u0442\u0443\u043a\u0430\u0445. \u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u044e\u0434\u0430 \u0432\u0430\u0448\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b http:\/\/www.formspring.me\/duckofd00m ","listed_count":131,"profil \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdr b/Pods/SBJson/Tests/Stream/xdr deleted file mode 100755 index 138dda1..0000000 --- a/Pods/SBJson/Tests/Stream/xdr +++ /dev/null @@ -1 +0,0 @@ -e_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"Russia, Moscow","profile_use_background_image":true,"profile_text_color":"333333","followers_count":1471,"statuses_count":6946,"time_zone":"Moscow","created_at":"Fri Jan 23 22:07:58 +0000 2009","friends_count":72,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1031969395\/duck_digital_duck_normal.png","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/duckofdoom.ru","name":"Mitya Voskresensky","id_str":"19416850","favourites_count":0,"screen_name":"duck_of_d00m","id":19416850,"contributors_enabled":false,"lang":"en","utc_offset":10800,"profile_sidebar_fill_color":"DDEEF6"},"id":12216177023520768,"in_reply_to_user_id":null,"favorited":false},"retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922808840192","user":{"follow_request_sent":nul \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xds b/Pods/SBJson/Tests/Stream/xds deleted file mode 100755 index 087b80f..0000000 --- a/Pods/SBJson/Tests/Stream/xds +++ /dev/null @@ -1,2 +0,0 @@ -l,"following":null,"verified":false,"profile_sidebar_border_color":"CC3366","show_all_inline_media":false,"geo_enabled":false,"description":"","listed_count":16,"profile_background_tile":true,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme11\/bg.gif","profile_background_color":"FF6699","location":"\u0421\u0430\u0440\u0430\u0442\u043e\u0432 ","profile_use_background_image":true,"profile_text_color":"362720","followers_count":87,"statuses_count":519,"time_zone":null,"created_at":"Fri Sep 18 17:59:18 +0000 2009","friends_count":53,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1104098446\/IMG_3584_normal.JPG","notifications":null,"profile_link_color":"B40B43","url":null,"name":"Olga Semina","id_str":"75342779","favourites_count":0,"screen_name":"callmelili","id":75342779,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"E5507E"},"id":12411922808840192,"in_reply_to_user_id":null,"favorited":false} -{"c \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdt b/Pods/SBJson/Tests/Stream/xdt deleted file mode 100755 index 9920161..0000000 --- a/Pods/SBJson/Tests/Stream/xdt +++ /dev/null @@ -1 +0,0 @@ -oordinates":null,"text":"The Art of Corking Wine http:\/\/bit.ly\/11gGbb #winemaking","entities":{"urls":[{"expanded_url":null,"indices":[24,44],"url":"http:\/\/bit.ly\/11gGbb"}],"user_mentions":[],"hashtags":[{"text":"winemaking","indices":[45,56]}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.ajaymatharu.com\/\" rel=\"nofollow\"\u003ETweet Old Post\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:28 +0000 2010","truncated":false,"id_str":"12411927032504320","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"BDDCAD","show_all_inline_media":false,"geo_enabled":false,"description":"Wine Creator is all about the wonderfully awesome hobby of making wine at home - something I've done personally for over 15 years and love sharing with others!","listed_count":307,"profil \ No newline at end of file diff --git a/Pods/SBJson/Tests/Stream/xdu b/Pods/SBJson/Tests/Stream/xdu deleted file mode 100755 index 387365f..0000000 --- a/Pods/SBJson/Tests/Stream/xdu +++ /dev/null @@ -1 +0,0 @@ -e_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/7784250\/wine-bottles-free.jpg","profile_background_color":"9AE4E8","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":15657,"statuses_count":2191,"time_zone":"Central Time (US & Canada)","created_at":"Tue Apr 07 01:37:29 +0000 2009","friends_count":17140,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/126970064\/redWine_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/winecreator.com","name":"Wine Creator","id_str":"29347169","favourites_count":1,"screen_name":"winecreator","id":29347169,"contributors_enabled":false,"lang":"en","utc_offset":-21600,"profile_sidebar_fill_color":"DDFFCC"},"id":12411927032504320,"in_reply_to_user_id":null,"favorited":false} diff --git a/Pods/SBJson/Tests/Stream/xxx b/Pods/SBJson/Tests/Stream/xxx deleted file mode 100755 index 2df77f6..0000000 --- a/Pods/SBJson/Tests/Stream/xxx +++ /dev/null @@ -1,49 +0,0 @@ -{"coordinates":null,"text":":) Our secret weapon is no alternative. Golda Meir","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.socialoomph.com\" rel=\"nofollow\"\u003ESocialOomph\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:21 +0000 2010","truncated":false,"id_str":"12411897663979520","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"Young and Energetic. I just sold my first house and will be posting Tweets about my new career as a house flipper","listed_count":49,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/38409971\/problemsolver.jpg","profile_background_color":"C0DEED","location":"Ontario Canada","profile_use_background_image":true,"profile_text_color":"4d1c12","followers_count":7991,"statuses_count":41594,"time_zone":"Quito","created_at":"Sun Sep 20 20:32:38 +0000 2009","friends_count":8789,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/426248904\/homes_normal.jpg","notifications":null,"profile_link_color":"055673","url":"http:\/\/www.the-problemsolver.com","name":"We Flip","id_str":"75869159","favourites_count":0,"screen_name":"house_flipper","id":75869159,"contributors_enabled":false,"lang":"en","utc_offset":-18000,"profile_sidebar_fill_color":"c1a38c"},"id":12411897663979520,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"RT @therealdjrell click (retweet) if you still up","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[3,17],"name":"Dj Rell OF BBC","screen_name":"therealdjrell","id_str":"180669193","id":180669193}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.htc.com\" rel=\"nofollow\"\u003E HTC Peep\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:21 +0000 2010","truncated":false,"id_str":"12411897680764928","user":{"following":null,"listed_count":4,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/179020444\/Picnik_collage.jpg","profile_sidebar_border_color":"3d3739","profile_use_background_image":true,"description":"BABY KNOWS WHAT SHE WANTS & ALWAYS GETS IT. :) ArizonaStateUni (DowntownPHX) '14 * 18 YrOld * Chicago is Home * FOLLOW ME & I'LL FOLLOW YOU! :) #TEAMLAKERS","statuses_count":2206,"time_zone":"Arizona","friends_count":115,"profile_background_color":"0f0604","location":"N 33\u00b027' 0'' \/ W 112\u00b04' 0''","profile_text_color":"66585a","followers_count":120,"contributors_enabled":false,"created_at":"Tue Apr 07 01:55:15 +0000 2009","protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1182977830\/FB1_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"cf1919","url":"http:\/\/www.facebook.com\/profile.php?id=610064376","name":"Shayla Brown","id_str":"29351068","favourites_count":16,"screen_name":"BabyistheDream4","id":29351068,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":-25200,"profile_sidebar_fill_color":"ffffff"},"id":12411897680764928,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"THT..boseenn..(\u02c7_\u02c7'!l)\u200b\u200e ..","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/blackberry.com\/twitter\" rel=\"nofollow\"\u003ETwitter for BlackBerry\u00ae\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:21 +0000 2010","truncated":false,"id_str":"12411897668177920","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"eb1a44","show_all_inline_media":false,"geo_enabled":false,"description":"\u2661 Simple and nice Lady \u2661..\u263a ","listed_count":3,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_background_color":"e01660","location":"\u00dcT: -6.171394,106.868656","profile_use_background_image":true,"profile_text_color":"333333","followers_count":205,"statuses_count":6045,"time_zone":"Pacific Time (US & Canada)","created_at":"Thu Oct 29 06:35:04 +0000 2009","friends_count":232,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1145910676\/Picture_202584_normal.jpg","notifications":null,"profile_link_color":"CC3366","url":"http:\/\/null","name":"dila Zitria yuzar","id_str":"86008365","favourites_count":17,"screen_name":"dilaZitria","id":86008365,"contributors_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"e61e89"},"id":12411897668177920,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u6628\u591c\u3001\u6b53\u9001\u8fce\u4f1a\u306e\u4e8c\u6b21\u4f1a\u306e\u30b9\u30ca\u30c3\u30af\u306750\u66f2\u304f\u3089\u3044\u4e00\u4eba\u3067\u6c38\u9060\u306b\u6b4c\u3063\u3066\u305f\u3089\u3057\u3044www\u3042\u307e\u308a\u899a\u3048\u3066\u306a\u3044\u3093\u3060\u304c\u3001\u78ba\u304b\u306b\u5589\u306f\u75db\u3044\u306e\u3067\u3042\u308b\u3002","entities":{"hashtags":[],"urls":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.movatwi.jp\" rel=\"nofollow\"\u003Ewww.movatwi.jp\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:21 +0000 2010","truncated":false,"id_str":"12411897668182016","user":{"following":null,"listed_count":12,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/92964430\/0287.jpg","profile_sidebar_border_color":"a8c7f7","profile_use_background_image":true,"description":"\u30f2\u30bf\u5c5e\u6027\u306f\u25cf\u25cf\u25cf\u25cf\u25cf(\u4eee\uff09\r\n\u5168\u529b\u8150\u6d3b\u52d5\u4e2d\uff01\uff01\r\n\u4e2d\u91ce\u8150\u5973\u30b7\u30b9\u30bf\u30fc\u30ba\u30fb\u8150\u7537\u587e\u306b\u6367\u3052\u308b\u30ed\u30fc\u30de\u30fc\u30f3\u30fc\u30b9\u3063\uff01","statuses_count":5862,"time_zone":"Tokyo","friends_count":314,"profile_background_color":"022330","location":"\u306a\u306b\u308f\uff01\u306a\u306b\u308f\uff01","profile_text_color":"333333","followers_count":245,"contributors_enabled":false,"created_at":"Tue Aug 11 08:24:20 +0000 2009","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/574158539\/roreapple_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0084B4","url":"http:\/\/ameblo.jp\/roreapple\/","name":"\u30ed\u30ec\u308a\u3093\u3054","id_str":"64662506","favourites_count":42,"screen_name":"roreapple","id":64662506,"show_all_inline_media":false,"lang":"ja","geo_enabled":false,"utc_offset":32400,"profile_sidebar_fill_color":"C0DFEC"},"id":12411897668182016,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Gaaa RT @nisa_sukin: Menanti gaunku... Muat gak yah,, hiks","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[8,19],"name":"Masitoh Hairunisa","screen_name":"nisa_sukin","id_str":"29117556","id":29117556}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.ubertwitter.com\/bb\/download.php\" rel=\"nofollow\"\u003E\u00dcberTwitter\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +0000 2010","truncated":false,"id_str":"12411901849903104","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"Happy wifey ;)","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291661299\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"Here,there n everywhere","profile_use_background_image":true,"profile_text_color":"333333","followers_count":26,"statuses_count":255,"time_zone":null,"created_at":"Fri May 15 07:33:06 +0000 2009","friends_count":68,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1166898498\/209967688_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Dian Supramanik","id_str":"40197229","favourites_count":0,"screen_name":"supramanik","id":40197229,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"DDEEF6"},"id":12411901849903104,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@FatboyRoberts Christ! I almost thought you were spam! My brain is melting, so I'll have to look at that tomorrow. Now: Brain death.","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,14],"name":"Fatboy Roberts","screen_name":"FatboyRoberts","id_str":"20921327","id":20921327}]},"in_reply_to_screen_name":"FatboyRoberts","in_reply_to_status_id_str":"12362450682773504","place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":12362450682773504,"in_reply_to_user_id_str":"20921327","source":"\u003Ca href=\"http:\/\/www.tweetdeck.com\" rel=\"nofollow\"\u003ETweetDeck\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +0000 2010","truncated":false,"id_str":"12411901837320192","user":{"following":null,"listed_count":35,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme9\/bg.gif","profile_sidebar_border_color":"ffffff","profile_use_background_image":false,"description":"Bad motherfucker, game journalist, taller than your boyfriend.","statuses_count":10032,"time_zone":"Pacific Time (US & Canada)","friends_count":148,"profile_background_color":"545454","location":"Portland, Oregon","profile_text_color":"878787","followers_count":716,"contributors_enabled":false,"created_at":"Thu Feb 07 02:55:38 +0000 2008","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/688559405\/twinklestarsprites_normal.png","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"ad0000","url":"http:\/\/nex.vox.com\/","name":"Earnest Cavalli","id_str":"13189102","favourites_count":0,"screen_name":"ecavalli","id":13189102,"show_all_inline_media":true,"lang":"en","geo_enabled":true,"utc_offset":-28800,"profile_sidebar_fill_color":"1c1c1c"},"id":12411901837320192,"in_reply_to_user_id":20921327,"favorited":false} -{"coordinates":null,"text":"@crumpitout shane.. we miss you with alesana\u00a1\u00a1 \ncome to mexico please :]\nwe love u :]\nxoxo","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[0,11],"name":"Shane Crump","screen_name":"crumpitout","id_str":"145315047","id":145315047}]},"in_reply_to_screen_name":"crumpitout","in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":"145315047","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +0000 2010","truncated":false,"id_str":"12411901854093312","user":{"following":null,"listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/149753364\/2mbdax.jpg","profile_sidebar_border_color":"ff00ff","profile_use_background_image":true,"description":"","statuses_count":338,"time_zone":"Mexico City","friends_count":114,"profile_background_color":"f50af5","location":"mexico, city","profile_text_color":"f009d5","followers_count":31,"contributors_enabled":false,"created_at":"Sat Aug 29 23:25:10 +0000 2009","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1126473913\/48906_1376585645_7669_q_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"de13f0","url":"http:\/\/www.facebook.com\/profile.php?id=1376585645","name":"jezz sandoval","id_str":"69990626","favourites_count":0,"screen_name":"jezz_sandoval","id":69990626,"show_all_inline_media":true,"lang":"es","geo_enabled":false,"utc_offset":-21600,"profile_sidebar_fill_color":"08fc08"},"id":12411901854093312,"in_reply_to_user_id":145315047,"favorited":false} -{"coordinates":null,"text":"A new franchised business is opened every 8 minutes of every business day....Read more facts at http:\/\/ow.ly\/2ktXb","entities":{"urls":[{"expanded_url":null,"indices":[96,114],"url":"http:\/\/ow.ly\/2ktXb"}],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/socialcreeper.com\" rel=\"nofollow\"\u003ESocialcreeper\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +0000 2010","truncated":false,"id_str":"12411901854097408","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"5ED4DC","show_all_inline_media":false,"geo_enabled":false,"description":"No charge consulting services be your own boss work from home recession, proof businesses, available financing. our role is to help you and give you the best","listed_count":15,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1289607957\/images\/themes\/theme4\/bg.gif","profile_background_color":"0099B9","location":"new jersey","profile_use_background_image":true,"profile_text_color":"3C3940","followers_count":1918,"statuses_count":8216,"time_zone":"Eastern Time (US & Canada)","created_at":"Wed Aug 04 08:30:19 +0000 2010","friends_count":2110,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1097183072\/franchise_normal.jpg","notifications":null,"profile_link_color":"0099B9","url":"http:\/\/www.facebook.com\/pages\/Advantage-Franchise-Consulting\/132423546795977?v=app_4949752878 ","name":"franchiseconsutling","id_str":"174584532","favourites_count":0,"screen_name":"consultingfree","id":174584532,"contributors_enabled":false,"lang":"en","utc_offset":-18000,"profile_sidebar_fill_color":"95E8EC"},"id":12411901854097408,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"La cruda es como la risa !","entities":{"hashtags":[],"urls":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:22 +0000 2010","truncated":false,"id_str":"12411901875060736","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"La felicidad no es un estado de \u00e1nimo,sino una DECISI\u00d3N!","listed_count":1,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/163795950\/cover.jpg","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":73,"statuses_count":1019,"time_zone":"Guadalajara","created_at":"Sun May 02 00:25:43 +0000 2010","friends_count":211,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1151825365\/40766_10150244183920072_565820071_14195871_5748381_n_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"karmen beltr\u00e1n ","id_str":"139233639","favourites_count":2,"screen_name":"ka_beltran","id":139233639,"contributors_enabled":false,"lang":"es","utc_offset":-21600,"profile_sidebar_fill_color":"DDEEF6"},"id":12411901875060736,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u30d5\u30a9\u30ed\u30fc\u3057\u3066\u306d(^-^)\/ #followmejp #sougofollow #followdaibosyu \uff8a\uff9f\uff81\uff9d\uff7a \uff8a\uff9f\uff81\uff7d\uff9b \u7af6\u99ac \uff9b\uff84 \uff85\uff9d\uff8a\uff9e\uff70\uff7d\uff9e 1643128","entities":{"urls":[],"user_mentions":[],"hashtags":[{"text":"followmejp","indices":[14,25]},{"text":"sougofollow","indices":[26,38]},{"text":"followdaibosyu","indices":[39,54]}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.movatwi.jp\" rel=\"nofollow\"\u003Ewww.movatwi.jp\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906056790016","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"","listed_count":7,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291163542\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":1371,"statuses_count":5503,"time_zone":"Hawaii","created_at":"Thu Jul 29 13:53:49 +0000 2010","friends_count":1278,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1094558749\/_____normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"\u30e1\u30b0\u30df","id_str":"172346562","favourites_count":0,"screen_name":"megumi2258","id":172346562,"contributors_enabled":false,"lang":"ja","utc_offset":-36000,"profile_sidebar_fill_color":"DDEEF6"},"id":12411906056790016,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Rant Forum: Spike on \"HOT BED OF FOOTBALL.........MOST KNOWLEDGABLE SUPPORTERS BLAH BLAH BLAH!\" http:\/\/bit.ly\/hF9G1y #mufc #manutd","entities":{"hashtags":[{"text":"mufc","indices":[120,125]},{"text":"manutd","indices":[126,133]}],"urls":[{"expanded_url":null,"indices":[99,119],"url":"http:\/\/bit.ly\/hF9G1y"}],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/twitterfeed.com\" rel=\"nofollow\"\u003Etwitterfeed\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906035818496","user":{"following":null,"listed_count":31,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/151777477\/twitter-background.png","profile_sidebar_border_color":"990000","profile_use_background_image":true,"description":"Forum of the United Rant blog visit www.unitedrant.co.uk\/forum for lively discussion.","statuses_count":6688,"time_zone":"London","friends_count":837,"profile_background_color":"000000","location":"Old Trafford","profile_text_color":"000000","followers_count":290,"contributors_enabled":false,"created_at":"Thu Jul 22 11:37:05 +0000 2010","protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1128154622\/twitter_new_badge_forum_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"ccb100","url":"http:\/\/www.unitedrant.co.uk\/forum","name":"United Rant Forum","id_str":"169458574","favourites_count":0,"screen_name":"rant_forum","id":169458574,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":0,"profile_sidebar_fill_color":"e00700"},"id":12411906035818496,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Don't waste her time, if you still want to play around let her go. Its only fair. #MessageToMyBoys","entities":{"hashtags":[{"text":"MessageToMyBoys","indices":[82,98]}],"urls":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906069368832","user":{"following":null,"listed_count":2,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/177052687\/3235134362_c0f681f914_o.jpg","profile_sidebar_border_color":"C0DEED","profile_use_background_image":true,"description":"I am an enigma, wrapped in a sesame and nestled in a riddle of some mystery.","statuses_count":5795,"time_zone":"Pretoria","friends_count":207,"profile_background_color":"C0DEED","location":"\u00dcT: -26.193627,28.041314","profile_text_color":"333333","followers_count":275,"contributors_enabled":false,"created_at":"Fri May 01 06:55:03 +0000 2009","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1183768439\/DSC06923_normal.JPG","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0084B4","url":"http:\/\/www.mspmc.co.za","name":"Mafedi Selepe","id_str":"36901018","favourites_count":0,"screen_name":"MafediSelepe","id":36901018,"show_all_inline_media":false,"lang":"en","geo_enabled":true,"utc_offset":7200,"profile_sidebar_fill_color":"DDEEF6"},"id":12411906069368832,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Ada setan. *katanyasih. RT @PROMOTEfor: #tanyaremaja (jaman sd) hal apa yg membuat km takut ke toilet sendirian ?","entities":{"urls":[],"hashtags":[{"text":"tanyaremaja","indices":[40,52]}],"user_mentions":[{"indices":[27,38],"name":"Hendra J.P.","screen_name":"PROMOTEfor","id_str":"112023841","id":112023841}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.ubertwitter.com\/bb\/download.php\" rel=\"nofollow\"\u003E\u00dcberTwitter\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906052587520","user":{"following":null,"listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/107674614\/1237098635915429223StudioFibonacci_Cartoon_Hillside_with_Butterfly_and_Flowers.svg.hi","profile_sidebar_border_color":"e61739","profile_use_background_image":true,"description":"229EB3B1 :)))\r\ni'm a big fans of @xtianbautista . \r\nAn ordinary girl with a big dreams. you will confuse if you know who really i am. ","statuses_count":2529,"time_zone":"Pacific Time (US & Canada)","friends_count":56,"profile_background_color":"B2DFDA","location":"Canada. \u00dcT: -6.224251,106.9222","profile_text_color":"e61010","followers_count":69,"contributors_enabled":false,"created_at":"Tue Feb 23 09:35:19 +0000 2010","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1174458315\/ajeng_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"1ce1e8","url":null,"name":"Ajeng Lintang","id_str":"116697581","favourites_count":0,"screen_name":"AjengLD","id":116697581,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":-28800,"profile_sidebar_fill_color":"e08db3"},"id":12411906052587520,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u958b\u62d3\u9ad8\u6821\u306e\u6821\u6b4c\u304c\u9244\u8155\u30a2\u30c8\u30e0\u3060\u3063\u305f\u4ef6","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906035818497","user":{"following":null,"listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/166881635\/sas.png","profile_sidebar_border_color":"C0DEED","profile_use_background_image":true,"description":"\u30d7\u30ed\u30b9\u30d4\u3067\u81ea\u5206\u4f5c\u3063\u305f\u3089\u5929\u72d7\u4e26\u307f\u306e\u8d70\u529b\u306b\u306a\u3063\u305f\u30fb\u30fb\u30fb\u308f\u3051\u3067\u3082\u306a\u304b\u3063\u305f\u30fb\u30fb\u30fb\u3068\u304b\u8a00\u3063\u3066\u4f5c\u308a\u76f4\u3057\u305f\u3089\u672c\u5f53\u306b\u5929\u72d7\u306b\u306a\u3063\u305f","statuses_count":1324,"time_zone":"Osaka","friends_count":24,"profile_background_color":"C0DEED","location":"\u65e7\u5730\u7344\u8857\u9053\u5165\u308a\u53e3\u4ed8\u8fd1","profile_text_color":"333333","followers_count":18,"contributors_enabled":false,"created_at":"Sat Oct 30 08:39:38 +0000 2010","protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1179158108\/52_normal.png","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0084B4","url":null,"name":"\u53e4\u660e\u5730\u60a0\u99ac","id_str":"209976874","favourites_count":7,"screen_name":"Komeiji88","id":209976874,"show_all_inline_media":false,"lang":"ja","geo_enabled":true,"utc_offset":32400,"profile_sidebar_fill_color":"DDEEF6"},"id":12411906035818497,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@KOOL_GANG \uc0b4\uc544\ub098\ub77c \uc6b0\ub9ac \uc5d0\uc774\uc2a4.","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,10],"name":"Kool Gang","screen_name":"KOOL_GANG","id_str":"173724958","id":173724958}]},"in_reply_to_screen_name":"KOOL_GANG","in_reply_to_status_id_str":"12410887285506048","place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":12410887285506048,"in_reply_to_user_id_str":"173724958","source":"\u003Ca href=\"http:\/\/twtkr.com\" rel=\"nofollow\"\u003Etwtkr\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906052591616","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"","listed_count":1,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"\uc5f0\ud76c\uc8fc\ubbfc","profile_use_background_image":true,"profile_text_color":"333333","followers_count":34,"statuses_count":416,"time_zone":"Hawaii","created_at":"Thu Aug 19 06:08:37 +0000 2010","friends_count":36,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1106972912\/aa_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"dub&beard","id_str":"180269638","favourites_count":1,"screen_name":"yaguwang","id":180269638,"contributors_enabled":false,"lang":"en","utc_offset":-36000,"profile_sidebar_fill_color":"DDEEF6"},"id":12411906052591616,"in_reply_to_user_id":173724958,"favorited":false} -{"coordinates":null,"text":"RT @Ricki_MINAJ: @TeemFollowBack @1109_2904 #teamfollowback twitter famous boy>>> @Ricki_MINAJ <<<","entities":{"urls":[],"hashtags":[{"text":"teamfollowback","indices":[44,59]}],"user_mentions":[{"indices":[3,15],"name":"Ricky Johnson","screen_name":"Ricki_MINAJ","id_str":"51198602","id":51198602},{"indices":[17,32],"name":"Teem Follow Back","screen_name":"TeemFollowBack","id_str":"185188539","id":185188539},{"indices":[33,43],"name":"Aprilian Angel","screen_name":"1109_2904","id_str":"92217048","id":92217048},{"indices":[91,103],"name":"Ricky Johnson","screen_name":"Ricki_MINAJ","id_str":"51198602","id":51198602}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/seesmic.com\/app\" rel=\"nofollow\"\u003ESeesmic Web\u003C\/a\u003E","retweeted_status":{"coordinates":null,"text":"@TeemFollowBack @1109_2904 #teamfollowback twitter famous boy>>> @Ricki_MINAJ <<<","entities":{"urls":[],"hashtags":[{"text":"teamfollowback","indices":[27,42]}],"user_mentions":[{"indices":[0,15],"name":"Teem Follow Back","screen_name":"TeemFollowBack","id_str":"185188539","id":185188539},{"indices":[16,26],"name":"Aprilian Angel","screen_name":"1109_2904","id_str":"92217048","id":92217048},{"indices":[74,86],"name":"Ricky Johnson","screen_name":"Ricki_MINAJ","id_str":"51198602","id":51198602}]},"in_reply_to_screen_name":"TeemFollowBack","in_reply_to_status_id_str":"12405913709191168","place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":12405913709191168,"in_reply_to_user_id_str":"185188539","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:04 +0000 2010","truncated":false,"id_str":"12411825870077952","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"65B0DA","show_all_inline_media":false,"geo_enabled":false,"description":"I LOVE SWEET BABY JESUS..FASHION IS MY LIFE..MUSIC IS NEXT..THEN FOOD, LOL MY LIFE IS MY BRAND,SO I DRESS LIKE IT!!","listed_count":18,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/20055732\/a2f270d4e7d605ac34e48d0fc454b_3701.jpg","profile_background_color":"642D8B","location":"NEW YORK RIHANNA WORLD","profile_use_background_image":true,"profile_text_color":"3D1957","followers_count":1822,"statuses_count":12985,"time_zone":"Mountain Time (US & Canada)","created_at":"Fri Jun 26 19:51:29 +0000 2009","friends_count":1990,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1170133326\/jess_and_ricki_normal.jpg","notifications":null,"profile_link_color":"FF0000","url":"http:\/\/www.blogtv.com\/People\/koolzone","name":"Ricky Johnson","id_str":"51198602","favourites_count":6,"screen_name":"Ricki_MINAJ","id":51198602,"contributors_enabled":false,"lang":"en","utc_offset":-25200,"profile_sidebar_fill_color":"7AC3EE"},"id":12411825870077952,"in_reply_to_user_id":185188539,"favorited":false},"retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:23 +0000 2010","truncated":false,"id_str":"12411906035810304","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"3fdbe3","show_all_inline_media":false,"geo_enabled":true,"description":"\u2665 I am 12 years old \u2665 Simple \u2665 Cool Guy \u2665 Stitch \u2665 Sanurians \u2665 Tasya \u2665 Boys \u2665 Follow me and I will folback, Just Mention Me \u2665 Aprilian Angel \u2665","listed_count":16,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/169085711\/4___.jpg","profile_background_color":"25646b","location":"Jakarta","profile_use_background_image":false,"profile_text_color":"2579b0","followers_count":613,"statuses_count":9079,"time_zone":"Jakarta","created_at":"Tue Nov 24 06:49:28 +0000 2009","friends_count":563,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1161334751\/75785_1659322691840_1500333081_1624686_3546893_n_normal.jpg","notifications":null,"profile_link_color":"40b892","url":null,"name":"Aprilian Angel","id_str":"92217048","favourites_count":27,"screen_name":"1109_2904","id":92217048,"contributors_enabled":false,"lang":"en","utc_offset":25200,"profile_sidebar_fill_color":"c3e1e3"},"id":12411906035810304,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@naxvee ohhhh I DOOO :D","entities":{"urls":[],"user_mentions":[{"indices":[0,7],"name":"nax vee","screen_name":"naxvee","id_str":"22720749","id":22720749}],"hashtags":[]},"in_reply_to_screen_name":"naxvee","in_reply_to_status_id_str":"12411850935242752","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411850935242752,"in_reply_to_user_id_str":"22720749","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910238502912","user":{"contributors_enabled":false,"following":null,"follow_request_sent":null,"verified":false,"profile_sidebar_border_color":"efff12","show_all_inline_media":false,"geo_enabled":false,"description":"i like to ponder. that is all.","profile_background_color":"760dff","location":"Straya","listed_count":5,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/124352628\/5576399.jpg","profile_text_color":"121eff","followers_count":145,"profile_use_background_image":true,"created_at":"Sun Feb 14 01:15:20 +0000 2010","protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1185036286\/Untitled_normal.png","statuses_count":3899,"notifications":null,"time_zone":"Hawaii","friends_count":146,"profile_link_color":"00ff00","url":"http:\/\/www.formspring.me\/lizzwilko","name":"I\u2665JohnnyDepp","id_str":"114068978","favourites_count":164,"screen_name":"TheLizzyEnd","id":114068978,"lang":"en","utc_offset":-36000,"profile_sidebar_fill_color":"ff0558"},"id":12411910238502912,"in_reply_to_user_id":22720749,"favorited":false} -{"coordinates":null,"text":"#Nighttweeters hmu DM or txt <3","entities":{"urls":[],"hashtags":[{"text":"Nighttweeters","indices":[0,14]}],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910242705408","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"Mexican|19|Raves|Electro,Dubstep,Trance|drinking|Working|Down To Earth|Straight Out|Girls|:) Txting|Webcam|Snakebites|\r\nSingle|Follow me & Ill Follow you :)","listed_count":5,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/130349966\/4638030806_55122db25e_o.jpg","profile_background_color":"C0DEED","location":"Fontana, Ca","profile_use_background_image":true,"profile_text_color":"333333","followers_count":250,"statuses_count":4189,"time_zone":"Alaska","created_at":"Tue Aug 03 05:28:53 +0000 2010","friends_count":463,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1184365797\/gothamcity-189-of-294_normal.png","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/www.myspace.com\/fourlokoking","name":"Juan Felix","id_str":"174137258","favourites_count":0,"screen_name":"Lostboyyyy","id":174137258,"contributors_enabled":false,"lang":"en","utc_offset":-32400,"profile_sidebar_fill_color":"DDEEF6"},"id":12411910242705408,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@amaeletronica D'Baginyus : S.A.K.I.T LOL --> RT oliiind: Hooo eksssss RT WilliamWilz: oliiind engga jelek :b http:\/\/boo.lol.vc\/lLfE8","entities":{"urls":[{"expanded_url":null,"indices":[114,137],"url":"http:\/\/boo.lol.vc\/lLfE8"}],"hashtags":[],"user_mentions":[{"indices":[0,14],"name":"anderson avila","screen_name":"amaeletronica","id_str":"73257249","id":73257249}]},"in_reply_to_screen_name":"amaeletronica","in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":"73257249","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910242697216","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":null,"listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":null,"profile_use_background_image":true,"profile_text_color":"333333","followers_count":4,"statuses_count":378,"time_zone":null,"created_at":"Sun Dec 05 17:31:14 +0000 2010","friends_count":0,"protected":false,"profile_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/default_profile_2_normal.png","notifications":null,"profile_link_color":"0084B4","url":null,"name":"irene aguilera","id_str":"223191796","favourites_count":0,"screen_name":"bunndeknalifa","id":223191796,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"DDEEF6"},"id":12411910242697216,"in_reply_to_user_id":73257249,"favorited":false} -{"coordinates":null,"text":"Haha ejiyek lia mainannya gombal sekarang hahaRT @_ameliahudayana: yoiii RT @vanyaau: Rerun extravaganza","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[49,65],"name":"Amelia Hudayana","screen_name":"_ameliahudayana","id_str":"162588680","id":162588680},{"indices":[76,84],"name":"vanya Beti La Venus","screen_name":"vanyaau","id_str":"65334621","id":65334621}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"https:\/\/dabr.mobi\" rel=\"nofollow\"\u003EE = mc\u00b2\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910238511104","user":{"following":null,"listed_count":8,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/62088481\/cup_cakes.JPG","profile_sidebar_border_color":"7e3091","profile_use_background_image":true,"description":"260695, 15th, FH, ALFAJAR JHS, MUHAMMADIYAH SHS, #THRH's HEART, A PART OF X.3, jazz addict, #AnakGalau\u2665 beti la gondrong venus GREET: vanyaau@hot xoxo :*","statuses_count":10309,"time_zone":"Pacific Time (US & Canada)","friends_count":287,"profile_background_color":"fa197e","location":"Planet venus~ fairy world","profile_text_color":"e8099a","followers_count":255,"contributors_enabled":false,"created_at":"Thu Aug 13 10:32:49 +0000 2009","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1176654063\/vanyac_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"7135cc","url":"http:\/\/vanyaau.blogspot.com","name":"vanya Beti La Venus","id_str":"65334621","favourites_count":104,"screen_name":"vanyaau","id":65334621,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":-28800,"profile_sidebar_fill_color":"d880f5"},"id":12411910238511104,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Orange Soda.","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910255288320","user":{"following":null,"listed_count":23,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/179350469\/PacManTee.jpg","profile_sidebar_border_color":"badcad","profile_use_background_image":true,"description":"Deadly Robot love Owner. Lifestyle Blogger. Designer. Poet. Collector. Grandson.","statuses_count":56123,"time_zone":"Eastern Time (US & Canada)","friends_count":196,"profile_background_color":"919191","location":"Atlanta","profile_text_color":"333333","followers_count":716,"contributors_enabled":false,"created_at":"Mon May 04 22:27:05 +0000 2009","protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1180397702\/KevinDRL_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0a0a0a","url":"http:\/\/www.deadlyrobotlove.com\/","name":"K\u2665vin, The Robot.","id_str":"37777826","favourites_count":4,"screen_name":"deadlyrobotlove","id":37777826,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":-18000,"profile_sidebar_fill_color":"686e6e"},"id":12411910255288320,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@chiru_hms DMCSjp RT denamamoto: I'd swim across the world for you... lol joking, there are sharks in there. http:\/\/zry.m2r.ru\/HPOon","entities":{"urls":[{"expanded_url":null,"indices":[109,132],"url":"http:\/\/zry.m2r.ru\/HPOon"}],"user_mentions":[{"indices":[0,10],"name":"chiru","screen_name":"chiru_hms","id_str":"114779568","id":114779568}],"hashtags":[]},"in_reply_to_screen_name":"chiru_hms","in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":"114779568","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910259474432","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":9,"statuses_count":575,"time_zone":null,"created_at":"Sun Dec 05 17:14:25 +0000 2010","friends_count":0,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1183205820\/twitterProfilePhoto_normal.jpg_normal.146","notifications":null,"profile_link_color":"0084B4","url":null,"name":"shanel thornton","id_str":"223186483","favourites_count":0,"screen_name":"frn_JBiebtrBR","id":223186483,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"DDEEF6"},"id":12411910259474432,"in_reply_to_user_id":114779568,"favorited":false} -{"coordinates":null,"text":"\u039a\u03b1\u03bb\u03b7\u03bc\u03b5\u03c1\u03b1 \u03ba\u03b1\u03b9 \u03c5\u03c0\u03bf\u03bc\u03bf\u03bd\u03b7! \u039f\u03c3\u03bf\u03b9 \u03b5\u03b9\u03c3\u03c4\u03b5 \u03ba\u03bf\u03bd\u03c4\u03b1 \u03bc\u03b7\u03bd \u03c0\u03b1\u03c1\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03bf\u03ba\u03b9\u03bd\u03b7\u03c4\u03bf, \u03c0\u03bf\u03b4\u03b9\u03b1 \u03b7 \u03c0\u03bf\u03b4\u03b7\u03bb\u03b1\u03c4\u03bf..!","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/twitter.com\/\" rel=\"nofollow\"\u003ETwitter for iPhone\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910234308608","user":{"following":null,"listed_count":10,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/167969569\/bodypaint_floyd.jpg","profile_sidebar_border_color":"829D5E","profile_use_background_image":true,"description":"Summer Dream!","statuses_count":1932,"time_zone":"Athens","friends_count":240,"profile_background_color":"352726","location":"Currently Lost","profile_text_color":"3E4415","followers_count":235,"contributors_enabled":false,"created_at":"Thu Oct 28 22:40:07 +0000 2010","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1154617775\/IMG_3032_normal.JPG","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0c1bc7","url":null,"name":"Psychophski","id_str":"209295433","favourites_count":33,"screen_name":"Psychophski","id":209295433,"show_all_inline_media":false,"lang":"en","geo_enabled":true,"utc_offset":7200,"profile_sidebar_fill_color":"336bcc"},"id":12411910234308608,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":{"coordinates":[0,0],"type":"Point"},"text":"to protest or not to protest...that is the question!","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.tweetdeck.com\" rel=\"nofollow\"\u003ETweetDeck\u003C\/a\u003E","retweeted":false,"geo":{"coordinates":[0,0],"type":"Point"},"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910251085824","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"aef5fa","show_all_inline_media":false,"geo_enabled":true,"description":"you'll never regret giving it your best, so go on and do it. ","listed_count":1,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291750721\/images\/themes\/theme1\/bg.png","profile_background_color":"214542","location":"Washington","profile_use_background_image":true,"profile_text_color":"739e9f","followers_count":32,"statuses_count":516,"time_zone":null,"created_at":"Wed Sep 15 06:21:58 +0000 2010","friends_count":85,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1155612338\/26_normal.jpg","notifications":null,"profile_link_color":"b4d9ad","url":null,"name":"Sarah Jane Burns","id_str":"190941250","favourites_count":0,"screen_name":"sarahjb93","id":190941250,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"3b615d"},"id":12411910251085824,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@soyFayo me puse peor hoy esta semana quiero recuperarme para que no se me complique u.u","entities":{"urls":[],"user_mentions":[{"indices":[0,8],"name":"Fayo","screen_name":"soyFayo","id_str":"72220601","id":72220601}],"hashtags":[]},"in_reply_to_screen_name":"soyFayo","in_reply_to_status_id_str":"12411227426787328","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411227426787328,"in_reply_to_user_id_str":"72220601","source":"\u003Ca href=\"http:\/\/twittme.mobi\" rel=\"nofollow\"\u003Etwittme.mobi\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910230118400","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"fff8ad","show_all_inline_media":false,"geo_enabled":false,"description":"ESCRITORAILUSTRADORA, CARTONISTA,FISICA-MATEMATICAS,futura vulcanologa. Y ENAMORADA D LA VIDA Y SOY 100%UNAM Hija adoptiva de @marinataibo3 y @monicamateosV","listed_count":158,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/137229680\/Fenix_ohen_small.jpg","profile_background_color":"FFF04D","location":"estado de Ebriedad M\u00e9xico ","profile_use_background_image":true,"profile_text_color":"333333","followers_count":2066,"statuses_count":60566,"time_zone":"Mexico City","created_at":"Sun Nov 15 02:51:14 +0000 2009","friends_count":1890,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1184479641\/imagesCANA8G7F_normal.jpg","notifications":null,"profile_link_color":"0099CC","url":"http:\/\/cienciasartes.blogspot.com\/ ","name":"Luc\u00edaVillarrealLuna","id_str":"90079038","favourites_count":39,"screen_name":"pokemonera","id":90079038,"contributors_enabled":false,"lang":"es","utc_offset":-21600,"profile_sidebar_fill_color":"f6ffd1"},"id":12411910230118400,"in_reply_to_user_id":72220601,"favorited":false} -{"coordinates":null,"text":"@bonita_Niyah she gotta txt & tell kuz she dnt have a fb she da shy type so idk but she gon have 2 tell soon or lata","entities":{"urls":[],"user_mentions":[{"indices":[0,13],"name":"\ue32d. . . \ue144","screen_name":"bonita_Niyah","id_str":"123750163","id":123750163}],"hashtags":[]},"in_reply_to_screen_name":"bonita_Niyah","in_reply_to_status_id_str":"12408747867508737","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12408747867508737,"in_reply_to_user_id_str":"123750163","source":"\u003Ca href=\"http:\/\/www.ubertwitter.com\/bb\/download.php\" rel=\"nofollow\"\u003E\u00dcberTwitter\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:24 +0000 2010","truncated":false,"id_str":"12411910255284224","user":{"contributors_enabled":false,"following":null,"follow_request_sent":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":true,"description":"I'M A DAUGHTER..A BESTFRIEND..A FRIEND..A SISTER..A COUSIN..A AUNTIE..A FIGHTER..A LOVER..A SINNER..A SAINT..I WILL TELL YOU 1 THING IM NOT A DOORMAT.. ","profile_background_color":"C0DEED","location":"Nwk NJ","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme1\/bg.png","profile_text_color":"333333","followers_count":30,"profile_use_background_image":true,"created_at":"Fri Aug 13 03:42:52 +0000 2010","protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1101800168\/x2_24cd30d_normal.jpg","statuses_count":715,"notifications":null,"time_zone":"Eastern Time (US & Canada)","friends_count":157,"profile_link_color":"0084B4","url":null,"name":"Iesha Bankston","id_str":"177814999","favourites_count":0,"screen_name":"Pretty_Esh_B","id":177814999,"lang":"en","utc_offset":-18000,"profile_sidebar_fill_color":"DDEEF6"},"id":12411910255284224,"in_reply_to_user_id":123750163,"favorited":false} -{"coordinates":null,"text":"galau ga enek tebengan hahaha RT @ridowidi: galau kok jek ttp twitteranRT @anityaardiyani: nambah2i galauku wae RT... http:\/\/mtw.tl\/lf6idh","entities":{"urls":[{"expanded_url":null,"indices":[118,138],"url":"http:\/\/mtw.tl\/lf6idh"}],"hashtags":[],"user_mentions":[{"indices":[33,42],"name":"ridho widi","screen_name":"ridowidi","id_str":"216939950","id":216939950},{"indices":[74,89],"name":"anitya ardiyani p","screen_name":"anityaardiyani","id_str":"77723022","id":77723022}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/m.tweete.net\" rel=\"nofollow\"\u003Em.tweete.net\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914441195520","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":true,"geo_enabled":true,"description":"","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/176784334\/Shichibukai.jpg","profile_background_color":"C0DEED","location":"Indonesia","profile_use_background_image":true,"profile_text_color":"333333","followers_count":32,"statuses_count":433,"time_zone":"Jakarta","created_at":"Tue Nov 02 11:14:29 +0000 2010","friends_count":53,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1179237591\/Image026_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Irwan Syah","id_str":"211117875","favourites_count":0,"screen_name":"irwan_akt","id":211117875,"contributors_enabled":false,"lang":"en","utc_offset":25200,"profile_sidebar_fill_color":"DDEEF6"},"id":12411914441195520,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@nanafatemn7 \u77e5\u3089\u306d\u3048\u3088\uff57\uff57\uff57\u3044\u3044\u3058\u3083\u3093\u3002\u544a\u3063\u3061\u3083\u3048\uff01","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,12],"name":"\u306a\u306a\u30d5\u30a7\u30a4! \u795d\uff01\u5948\u3005\u3055\u3093\u7d05\u767d\u51fa\u5834\uff01","screen_name":"nanafatemn7","id_str":"155566960","id":155566960}]},"in_reply_to_screen_name":"nanafatemn7","in_reply_to_status_id_str":"12411662476775424","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411662476775424,"in_reply_to_user_id_str":"155566960","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914445393920","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"FFFFFF","show_all_inline_media":false,"geo_enabled":false,"description":"\u5909\u614b\u3067\u3059\u3002\u53d6\u308a\u6562\u3048\u305a\u9a12\u3044\u3067\u308b\u91ce\u90ce\u3067\u3059\u3002\u4e2d\uff13\u3002\u6b63\u76f4\u3001\u30a8\u30ed\u3044\u306e\u306f\u4ed5\u65b9\u306a\u3044\u3068\u601d\u3063\u3066\u307e\u3059\u3002\r\n\r\n\uff12\u6b21\u5143\u306f\u305d\u308c\u306a\u308a\u306b\u306f\u7406\u89e3\u51fa\u6765\u307e\u3059\u304c\u2026\r\n\r\n\u30dd\u30b1\u30e2\u30f3\u3084\u3063\u3066\u307e\u3059\r\n\r\n\r\n\u75db\u3044\u3067\u3059\u3051\u308c\u3069\r\n\r\n\u3088\u308d\u3057\u304f\u304a\u9858\u3044\u3057\u307e\u3059(\u7206)","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/124093074\/bg.jpg","profile_background_color":"000000","location":"\u30a8\u30f3\u30b8\u30e5\u30b7\u30c6\u30a3","profile_use_background_image":true,"profile_text_color":"b344b3","followers_count":24,"statuses_count":1547,"time_zone":"Osaka","created_at":"Fri Mar 19 08:48:17 +0000 2010","friends_count":55,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1182098397\/100813_1246340001_normal.jpg","notifications":null,"profile_link_color":"CC3300","url":null,"name":"\u30b7\u30fc\u30c9\u6a29\u0444","id_str":"124404959","favourites_count":2,"screen_name":"Sheadken","id":124404959,"contributors_enabled":false,"lang":"ja","utc_offset":32400,"profile_sidebar_fill_color":"F7DA93"},"id":12411914445393920,"in_reply_to_user_id":155566960,"favorited":false} -{"coordinates":null,"text":"\u7720\u3044\u30fb\u30fb\u30fb","entities":{"urls":[],"user_mentions":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914437009408","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"ffcb47","show_all_inline_media":false,"geo_enabled":false,"description":"WORKING\u3001\u30dc\u30ab\u30ed\u3001\u30dc\u30fc\u30dc\u30dc\u3001DRRR\u597d\u304d\u3067\u3059\uff57(\u00b4\u03c9\uff40)","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/179023784\/14533769_p9.png","profile_background_color":"ffd4ff","location":"\u5922\u306e\u4e2d\u266c","profile_use_background_image":true,"profile_text_color":"089629","followers_count":15,"statuses_count":465,"time_zone":"Hawaii","created_at":"Wed Oct 27 11:15:34 +0000 2010","friends_count":38,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1161025943\/magnet_normal.jpg","notifications":null,"profile_link_color":"ff2499","url":"http:\/\/ameblo.jp\/work-ing\/","name":"\u5922\u65e5\u8a18\u266a","id_str":"208488936","favourites_count":0,"screen_name":"yumenonikki327","id":208488936,"contributors_enabled":false,"lang":"ja","utc_offset":-36000,"profile_sidebar_fill_color":"fdff82"},"id":12411914437009408,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"14.79 euro valt nog wel mee voor 8 dagen tijd","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.tweetdeck.com\" rel=\"nofollow\"\u003ETweetDeck\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914457980928","user":{"following":null,"listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme5\/bg.gif","profile_sidebar_border_color":"829D5E","profile_use_background_image":true,"description":"- -","statuses_count":3291,"time_zone":"Amsterdam","friends_count":71,"profile_background_color":"352726","location":"Vlaardingen","profile_text_color":"3E4415","followers_count":67,"contributors_enabled":false,"created_at":"Mon Nov 23 07:34:26 +0000 2009","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1160466321\/Foto0850_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"D02B55","url":"http:\/\/www.priscillaa15.hyves.nl","name":"Priscilla v Vliet","id_str":"91959124","favourites_count":1,"screen_name":"xpriscil","id":91959124,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":3600,"profile_sidebar_fill_color":"99CC33"},"id":12411914457980928,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"Is This A Serious Question? -___- (iamskippytv) RT @JBooqiie_DEC20 @iamSkippyTV what's ya oovoo","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[51,66],"name":"Joshua && Yhu ?!","screen_name":"JBooqiie_DEC20","id_str":"89241118","id":89241118},{"indices":[67,79],"name":"Skippy MaKenzi","screen_name":"iamSkippyTV","id_str":"30615809","id":30615809}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003EMobile Web\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914453782528","user":{"following":null,"listed_count":22,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/178920818\/iamskippytv.jpg","profile_sidebar_border_color":"eeeeee","profile_use_background_image":true,"description":"Youtube Video Blogger, Twitter Addict, Socialist, SKIPPY \u2665's BOYS! #TeamTaurus \u2649","statuses_count":36360,"time_zone":"Central Time (US & Canada)","friends_count":97,"profile_background_color":"3b3c3d","location":"CottenCandy & Rainbow Field","profile_text_color":"121112","followers_count":471,"contributors_enabled":false,"created_at":"Sun Apr 12 06:41:34 +0000 2009","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1183274157\/IMG00169-20101205-0211_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"889494","url":"http:\/\/itsmyurls.com\/skippy","name":"Skippy MaKenzi","id_str":"30615809","favourites_count":117,"screen_name":"iamSkippyTV","id":30615809,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":-21600,"profile_sidebar_fill_color":"efefef"},"id":12411914453782528,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"nyasar gak yak?","entities":{"urls":[],"user_mentions":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/202.153.132.152\" rel=\"nofollow\"\u003EHP_Esia\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914428616705","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"be my self :)","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291064993\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":31,"statuses_count":875,"time_zone":"Pacific Time (US & Canada)","created_at":"Tue Sep 21 08:36:25 +0000 2010","friends_count":19,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1161524757\/IMG8943A_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Nnisa Lutfi Zuldah","id_str":"193220237","favourites_count":1,"screen_name":"zuldannisa","id":193220237,"contributors_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"DDEEF6"},"id":12411914428616705,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@bayfm78 \u3046\u3093\u3001\u307e\u3041\u305d\u3046\u89e3\u91c8\u3059\u308b\u306a\u3089\u305d\u308c\u3067\u3082\u3044\u3044\u3093\u3058\u3083\u306a\u3044\u3002","entities":{"urls":[],"user_mentions":[{"indices":[0,8],"name":"\u304b\u305a\u304f\u3093\u3001\u3075\u3049\u3048\u3070","screen_name":"bayfm78","id_str":"21861792","id":21861792}],"hashtags":[]},"in_reply_to_screen_name":"bayfm78","in_reply_to_status_id_str":"12409691430715392","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12409691430715392,"in_reply_to_user_id_str":"21861792","source":"\u003Ca href=\"http:\/\/twtr.jp\" rel=\"nofollow\"\u003EKeitai Web\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914449588224","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"NAME:FENNEL SP:\u5341\u6bb5 ID:6294-9963 mixi\u30fbpixiv:\u5efb\u7409 mixi\u306f\u97f3\u30b2\u30fc\u30de\u30fc\u3057\u304b\u627f\u8a8d\u3057\u307e\u305b\u3093","listed_count":3,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291661299\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":32,"statuses_count":760,"time_zone":"Tokyo","created_at":"Tue Feb 02 13:38:00 +0000 2010","friends_count":27,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1174879155\/101116_1351_01000100010002_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"\u3075\u3047\u3093\u306d\u308b","id_str":"110701310","favourites_count":0,"screen_name":"fennel62949963","id":110701310,"contributors_enabled":false,"lang":"ja","utc_offset":32400,"profile_sidebar_fill_color":"DDEEF6"},"id":12411914449588224,"in_reply_to_user_id":21861792,"favorited":false} -{"coordinates":null,"text":"RT @mrkie: RT @divamayday: 3daagse staking tnt is begonnen #geenrekeningen","entities":{"urls":[],"hashtags":[{"text":"geenrekeningen","indices":[59,74]}],"user_mentions":[{"indices":[3,9],"name":"Marky Mark","screen_name":"mrkie","id_str":"26185044","id":26185044},{"indices":[14,25],"name":"mayday","screen_name":"divamayday","id_str":"47942511","id":47942511}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":1,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted_status":{"coordinates":null,"text":"RT @divamayday: 3daagse staking tnt is begonnen #geenrekeningen","entities":{"urls":[],"hashtags":[{"text":"geenrekeningen","indices":[48,63]}],"user_mentions":[{"indices":[3,14],"name":"mayday","screen_name":"divamayday","id_str":"47942511","id":47942511}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":1,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/motionobj.com\/simplytweet\" rel=\"nofollow\"\u003ESimplyTweet\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 05:09:22 +0000 2010","truncated":false,"id_str":"12373147395301376","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"BDDCAD","show_all_inline_media":true,"geo_enabled":false,"description":"Bodybuilding by obsession, Hairstylist by profession..... | '78 | iPhone | iMac | Las Vegas | Uncle | Brother | Son | Frienemy |","listed_count":2,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290123564\/images\/themes\/theme16\/bg.gif","profile_background_color":"9AE4E8","location":"South Holland, Netherlands","profile_use_background_image":true,"profile_text_color":"333333","followers_count":152,"statuses_count":13146,"time_zone":"Amsterdam","created_at":"Tue Mar 24 05:30:55 +0000 2009","friends_count":146,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1160078091\/IMG_0008_normal.JPG","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Marky Mark","id_str":"26185044","favourites_count":176,"screen_name":"mrkie","id":26185044,"contributors_enabled":false,"lang":"en","utc_offset":3600,"profile_sidebar_fill_color":"DDFFCC"},"id":12373147395301376,"in_reply_to_user_id":null,"favorited":false},"retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:25 +0000 2010","truncated":false,"id_str":"12411914445398016","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"","listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/127910069\/mooi.jpg","profile_background_color":"C0DEED","location":"Alphen aan den Rijn","profile_use_background_image":true,"profile_text_color":"333333","followers_count":14,"statuses_count":647,"time_zone":null,"created_at":"Thu Jun 10 10:59:43 +0000 2010","friends_count":26,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/976722090\/KepCom-1412_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/sbarlingen.hyves.nl","name":"Sigrid van Barlingen","id_str":"154100166","favourites_count":0,"screen_name":"sbarlingen","id":154100166,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"DDEEF6"},"id":12411914445398016,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"semangatttt,,,semngarr...","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918614532097","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"085982","show_all_inline_media":false,"geo_enabled":false,"description":"nice girl :D","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/178686370\/25390_1148602295676_1846165700_287303_5835946_n.jpg","profile_background_color":"004a82","location":"","profile_use_background_image":true,"profile_text_color":"095aab","followers_count":63,"statuses_count":859,"time_zone":"Alaska","created_at":"Tue Oct 12 12:39:08 +0000 2010","friends_count":281,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1182960469\/k_normal.jpg","notifications":null,"profile_link_color":"17a1eb","url":null,"name":"Reski Amelia","id_str":"201698354","favourites_count":1,"screen_name":"kikotkikota","id":201698354,"contributors_enabled":false,"lang":"en","utc_offset":-32400,"profile_sidebar_fill_color":"6b1b10"},"id":12411918614532097,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u30de\u30b8\u9b3c\u755c RT @321waltz: 5\u6708\u304c\u30aa\u30fc\u30e9\u30b9\u306a\u306e\u306b\u6765\u9031\u672b\u307e\u3067\u306b\u632f\u308a\u8fbc\u307e\u305b\u308b\u4e8b\u52d9\u6240\u30de\u30b8\u9b3c\u755c \uff1eP\u69d8\u30bd\u30ed\u30b3\u30f3","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[8,17],"name":"\u4e00\u4e8c\u4e09\uff08\u308f\u308b\u3064\uff09","screen_name":"321waltz","id_str":"67910402","id":67910402}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/tabtter.jp\" rel=\"nofollow\"\u003E\u30bf\u30d6\u30c3\u30bf\u30fc\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918614532096","user":{"following":null,"listed_count":16,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/160986641\/tumblr_l9vvhnwKu81qc006io1_500.jpg","profile_sidebar_border_color":"5ED4DC","profile_use_background_image":true,"description":"R23*U\u597d\u304d\uff9b\uff78\uff9d\u62c5*NSKD\u306f\u9752\u6625*\uff7c\uff79\uff9e\u3082\u597d\u304d\uff7c\uff9e\uff6c\uff9d*\u3084\u3076\u3072\u304b\u306f\u6b63\u7fa9*\u4f0a\u91ce\u5c3e\u541b\u306f\u7652\u3057*not\u4e8b\u52d9\u6240\u62c5\/\u9ebb\u91cc\u5b50\u69d8\u795e\u63a8\u3057*\uff82\uff72\uff9d\uff80\uff9c\uff70\u63a8\u3057\/\u6c34\u6a39\u5948\u3005\u69d8\u656c\u611b\/\uff8c\uff6b\uff9b\uff70\uff65\uff98\uff91\uff65RT\uff65\uff98\uff8c\uff9f\u306f\u304a\u6c17\u8efd\u306b\uff65\u4f46\u3057\u304b\u306a\u308a\uff73\uff7b\uff9e\uff72\u306e\u3067\u8981\u6ce8\u610f\/\u4e3b\u306b\u5e73\u65e5\u663c\u9593\u306b\u6d3b\u52d5\/\u5fc5\u8981\u306b\u5fdc\u3058\u3066\uff8c\uff9e\uff9b\uff6f\uff78\u3057\u305f\u308a\u3057\u307e\u3059\/\u88cf\u8d64\u2192jasmine_yellow","statuses_count":16955,"time_zone":"Tokyo","friends_count":97,"profile_background_color":"0099B9","location":"\u307b\u307c\u795e\u5948\u5ddd","profile_text_color":"3C3940","followers_count":196,"contributors_enabled":false,"created_at":"Tue Mar 24 08:10:51 +0000 2009","protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1180674943\/imageCASN4VYP_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"00a3b8","url":null,"name":"\u3042\u3063\u304d\u30fc\u306a(\uff65\uff40-\u00b4)","id_str":"26199234","favourites_count":1131,"screen_name":"kmdakn","id":26199234,"show_all_inline_media":false,"lang":"ja","geo_enabled":false,"utc_offset":32400,"profile_sidebar_fill_color":"95E8EC"},"id":12411918614532096,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"pending intan maharani RT @soalCERITA: Nama Gebetan-mu Sewaktu SD? #MasaSekolah :)","entities":{"urls":[],"hashtags":[{"text":"MasaSekolah","indices":[67,79]}],"user_mentions":[{"indices":[26,37],"name":"Soal Cerita","screen_name":"soalCERITA","id_str":"186345369","id":186345369}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/m.tweete.net\" rel=\"nofollow\"\u003Em.tweete.net\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918635499520","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":true,"description":"i share my voice for my band @DestinyOfFuture | i share my life for allah swt | i share my heart for my 7","listed_count":2,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"Pondok Gede,jakarta timur","profile_use_background_image":true,"profile_text_color":"333333","followers_count":328,"statuses_count":17575,"time_zone":"Pacific Time (US & Canada)","created_at":"Mon Aug 03 06:08:46 +0000 2009","friends_count":310,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1156247995\/DiasDOF_normal.JPG","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/www.myspace.com\/537395778","name":"Diaz Putra Pratama","id_str":"62451320","favourites_count":38,"screen_name":"Diassaurus","id":62451320,"contributors_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"DDEEF6"},"id":12411918635499520,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"haduh bsk bhs.inggris sama ips lagi","entities":{"urls":[],"hashtags":[],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918639693824","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"eb387a","show_all_inline_media":false,"geo_enabled":true,"description":"just a little boy who growing up","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/132078393\/Conan8.jpg","profile_background_color":"f5f8fa","location":"Pamulang, Indonesia","profile_use_background_image":true,"profile_text_color":"c74052","followers_count":36,"statuses_count":60,"time_zone":"Pacific Time (US & Canada)","created_at":"Sat Aug 07 05:52:21 +0000 2010","friends_count":61,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1097481287\/IMG1441A_normal.jpg","notifications":null,"profile_link_color":"a3e1f7","url":null,"name":"Taufik Wicak","id_str":"175652995","favourites_count":0,"screen_name":"taufikwicak","id":175652995,"contributors_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"fcfeff"},"id":12411918639693824,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"LOL I THOUGHT U WANTED BIGGIE BACK RT @ChinkyEyedButta: #lemmeguess @YungBossez denying my baby??? Smh","entities":{"urls":[],"hashtags":[{"text":"lemmeguess","indices":[56,67]}],"user_mentions":[{"indices":[38,54],"name":"Piggy!","screen_name":"ChinkyEyedButta","id_str":"28321072","id":28321072},{"indices":[68,79],"name":"LARRY LIVE","screen_name":"YungBossez","id_str":"79103494","id":79103494}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.echofon.com\/\" rel=\"nofollow\"\u003EEchofon\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918652276736","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"BOSSNATION!!! THINK LIKE A BOSS.. MOVE LIKE A BOSS.. BECOME A BOSS!! WE MOVIN!!!! KIK: YungBossElz","listed_count":31,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/136340262\/IMG_0011_1_.JPG","profile_background_color":"C0DEED","location":"NYC","profile_use_background_image":true,"profile_text_color":"333333","followers_count":1450,"statuses_count":43647,"time_zone":"Quito","created_at":"Fri Oct 02 05:23:49 +0000 2009","friends_count":740,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1184354137\/YungBossez_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/www.apple.com","name":"LARRY LIVE","id_str":"79103494","favourites_count":18,"screen_name":"YungBossez","id":79103494,"contributors_enabled":false,"lang":"en","utc_offset":-18000,"profile_sidebar_fill_color":"DDEEF6"},"id":12411918652276736,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@renzoom \u3044\u3084\u3001\u540c\u3058\u9ad8\u6821\u306a\u3089\u5802\u3005\u3068\u300c\u5148\u8f29\u300d\u3068\u547c\u3079\u308b\u6a29\u5229\u7372\u5f97\u3067\u3059\u3088!?\u6749\u7530\u2026\u5148\u8f29\u2026\u30db\u30ef\u30a2\u30a2\u30a2\u30a1\u30a1\u30a1\u30a2\u30a2\uff1c\u25cf\uff1e\/\/\/\/\uff1c\u25cf\uff1e\u306a\u3093\u306a\u3093\u3067\u3059\u304b\u604b\u30b7\u30e5\u30df\u306a\u3093\u3067\u3059\u304b\u3068\u304d\u3081\u304d\u30e1\u30e2\u30ea\u30a2\u30ebin\u5c0f\u5ddd\uff01\uff01\uff01\u653b\u7565\u30ad\u30e3\u30e9\u2192\u6749\u7530\u5148\u8f29Only","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[0,8],"name":"\u30ec\u30f3\u30ba\u30a3\u30fc","screen_name":"renzoom","id_str":"80027788","id":80027788}]},"in_reply_to_screen_name":"renzoom","in_reply_to_status_id_str":"12386429707485184","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12386429707485184,"in_reply_to_user_id_str":"80027788","source":"\u003Ca href=\"http:\/\/twtr.jp\" rel=\"nofollow\"\u003EKeitai Web\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918631309312","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"\u3054\u98ef\u306e\u4e8b\u3070\u3063\u304b\u8003\u3048\u3066\u307e\u3059\u3002\u6f2b\u753b\u30fb\u30a2\u30cb\u30e1\u95a2\u9023\u306e\u30c4\u30a4\u30fc\u30c8\u591a\u3044\u3067\u3059\u3002","listed_count":1,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":23,"statuses_count":315,"time_zone":"Tokyo","created_at":"Thu Oct 21 00:46:18 +0000 2010","friends_count":41,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1149146122\/DVC00089_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"\u30d2\u30c3\u30dd\u30ed\u7cfb\u30cb\u30e3\u30dd\u30fc\u30f3","id_str":"205496590","favourites_count":1,"screen_name":"OpporeGassen","id":205496590,"contributors_enabled":false,"lang":"ja","utc_offset":32400,"profile_sidebar_fill_color":"DDEEF6"},"id":12411918631309312,"in_reply_to_user_id":80027788,"favorited":false} -{"coordinates":null,"text":"\u7d20\u4eba\u767a\u8a00ww RT @AsrA924: \u300c\u98a8\u6708\u3055\u3093\u3001\u76ee\u7acb\u3064\u5ba3\u4f1d\u8003\u3048\u3066\uff01\u300d\u300c\u306f\u3044\uff1f\uff01\u300d\u300c\u3060\u304b\u3089\u3070\u3070\u30fc\u3093\u3068\u76ee\u7acb\u3063\u3061\u3083\u3046\u5ba3\u4f1d\uff01\u300d\u300c\u5bfe\u8c61\u306f\u2026\u300d\u300c\u307f\u3093\u306a\uff01\uff01\u300d\u300c\u307f\u3093\u306a\u3063\u3066\u8a00\u308f\u308c\u307e\u3057\u3066\u3082\u2026\u300d\u300c\u76ee\u7acb\u3064\u5ba3\u4f1d\u306f\u8ab0\u306b\u3068\u3063\u3066\u3082\u76ee\u7acb\u3064\u3067\u3057\u3087\uff01\uff01\u300d\u2026\u3060\u3081\u3060\u3053\u308a\u3083\u3002","entities":{"hashtags":[],"urls":[],"user_mentions":[{"indices":[10,18],"name":"\u98a8\u6708\u3042\u3059\u3089","screen_name":"AsrA924","id_str":"112167510","id":112167510}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.echofon.com\/\" rel=\"nofollow\"\u003EEchofon\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918614528000","user":{"following":null,"listed_count":13,"profile_background_tile":true,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme14\/bg.gif","profile_sidebar_border_color":"eeeeee","profile_use_background_image":true,"description":"1983.07.04 \u55b6\u696d\u3002\u793e\u4f1a\u306e\u53b3\u3057\u3055\u3092\u52c9\u5f37\u4e2d\u3067\u3059\u3002\u9031\u672b\u306f\u611b\u8eca\u306e\u30ed\u30fc\u30c9\u30ec\u30fc\u30b5\u30fc\u3067\u30b5\u30a4\u30af\u30ea\u30f3\u30b0\uff01\u91ce\u7403\u3001\u5343\u8449\u30ed\u30c3\u30c6\u3001\u30c0\u30fc\u30c4\u3001\u97f3\u697d\u3001\u6620\u753b\u3001\u65c5\u884c\u3001\u81ea\u8ee2\u8eca\u65c5\u884c\u597d\u304d\u3067\u3059\u3002\u3088\u308d\u3057\u304f\u304a\u9858\u3044\u3057\u307e\u3059\u3002\u3042\u3063\u3001\u30c1\u30e7\u30c3\u30d1\u30fc\u597d\u304d\u3067\u3059\uff01","statuses_count":2392,"time_zone":"Tokyo","friends_count":483,"profile_background_color":"131516","location":"\u5343\u8449\u770c\u5e02\u5ddd\u5e02\u5999\u5178","profile_text_color":"333333","followers_count":291,"contributors_enabled":false,"created_at":"Mon Dec 21 10:04:09 +0000 2009","protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1183120212\/fukkyman_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"009999","url":null,"name":"\u3075\u3063\u304d\u30fc\u30de\u30f3","id_str":"98340517","favourites_count":32,"screen_name":"fukkyman","id":98340517,"show_all_inline_media":false,"lang":"ja","geo_enabled":true,"utc_offset":32400,"profile_sidebar_fill_color":"efefef"},"id":12411918614528000,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"@lengraciazz99 zz","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,14],"name":"Hellena Gracia \uff61\u25d5\u203f\u25d5\uff61","screen_name":"lengraciazz99","id_str":"127160903","id":127160903}]},"in_reply_to_screen_name":"lengraciazz99","in_reply_to_status_id_str":"12411745138122752","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411745138122752,"in_reply_to_user_id_str":"127160903","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:26 +0000 2010","truncated":false,"id_str":"12411918648090624","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":true,"description":"hello , my name is john James Apillio , i like playing piano , i want to be a princepiano .. wkwk .. i'm single .. chatolic .. ","listed_count":0,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/176397228\/edit.JPG","profile_background_color":"C0DEED","location":"jakarta","profile_use_background_image":true,"profile_text_color":"333333","followers_count":55,"statuses_count":1882,"time_zone":"Pacific Time (US & Canada)","created_at":"Mon Oct 11 09:01:29 +0000 2010","friends_count":144,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1174624371\/ME_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":null,"name":"Frank james Aprillio","id_str":"201190413","favourites_count":3,"screen_name":"frankyakob","id":201190413,"contributors_enabled":false,"lang":"en","utc_offset":-28800,"profile_sidebar_fill_color":"DDEEF6"},"id":12411918648090624,"in_reply_to_user_id":127160903,"favorited":false} -{"coordinates":null,"text":"mboh, aku wez mari nde kmpus, tp te jln2 sek aku mbek nevi santi, hehe RT @dindalovelove @dindydind gak enak tahh ... heh mole jam piro awak","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[74,88],"name":"winda hermawan ","screen_name":"dindalovelove","id_str":"93166570","id":93166570},{"indices":[89,99],"name":"Indri Rahmawati","screen_name":"dindydind","id_str":"77725423","id":77725423}]},"in_reply_to_screen_name":"dindalovelove","in_reply_to_status_id_str":"12411470138580992","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12411470138580992,"in_reply_to_user_id_str":"93166570","source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922821419009","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"ffffff","show_all_inline_media":false,"geo_enabled":true,"description":"luv my family sooo much","listed_count":3,"profile_background_tile":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/130377756\/twittmn.jpg","profile_background_color":"ec7b3e","location":"Malang, Indonesia","profile_use_background_image":true,"profile_text_color":"030303","followers_count":99,"statuses_count":1744,"time_zone":"Jakarta","created_at":"Sun Sep 27 12:31:59 +0000 2009","friends_count":93,"protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1139037997\/36174_1534584098950_1665256568_1290462_4376492_n_normal.jpg","notifications":null,"profile_link_color":"07545e","url":null,"name":"Indri Rahmawati","id_str":"77725423","favourites_count":4,"screen_name":"dindydind","id":77725423,"contributors_enabled":false,"lang":"en","utc_offset":25200,"profile_sidebar_fill_color":"ec7b3e"},"id":12411922821419009,"in_reply_to_user_id":93166570,"favorited":false} -{"coordinates":null,"text":"@AThousandFall conan para presidente de la rep\u00fablica","entities":{"urls":[],"hashtags":[],"user_mentions":[{"indices":[0,14],"name":"A Thousand Fall","screen_name":"AThousandFall","id_str":"108740471","id":108740471}]},"in_reply_to_screen_name":"AThousandFall","in_reply_to_status_id_str":"12391305862713344","place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":12391305862713344,"in_reply_to_user_id_str":"108740471","source":"\u003Ca href=\"http:\/\/www.echofon.com\/\" rel=\"nofollow\"\u003EEchofon\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922821419008","user":{"following":null,"listed_count":3,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/178454607\/Gambit.jpg","profile_sidebar_border_color":"eeeeee","profile_use_background_image":true,"description":"","statuses_count":8135,"time_zone":null,"friends_count":591,"profile_background_color":"131516","location":"El Paso Tx","profile_text_color":"333333","followers_count":250,"contributors_enabled":false,"created_at":"Tue Jun 02 22:52:44 +0000 2009","protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1180820352\/KingEly_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"009999","url":"http:\/\/facebook.com\/elycharlescarrasco","name":"Ely","id_str":"44230583","favourites_count":0,"screen_name":"KingEly","id":44230583,"show_all_inline_media":false,"lang":"en","geo_enabled":true,"utc_offset":null,"profile_sidebar_fill_color":"efefef"},"id":12411922821419008,"in_reply_to_user_id":108740471,"favorited":false} -{"coordinates":null,"text":"Rated on LUUUX http:\/\/bit.ly\/eyvcXO","entities":{"hashtags":[],"urls":[{"expanded_url":null,"indices":[15,35],"url":"http:\/\/bit.ly\/eyvcXO"}],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.luuux.com\" rel=\"nofollow\"\u003Eluuux_app\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922834006016","user":{"following":null,"listed_count":0,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_sidebar_border_color":"C0DEED","profile_use_background_image":true,"description":null,"statuses_count":8135,"time_zone":null,"friends_count":0,"profile_background_color":"C0DEED","location":null,"profile_text_color":"333333","followers_count":85,"contributors_enabled":false,"created_at":"Tue Sep 07 04:32:28 +0000 2010","protected":false,"profile_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/default_profile_0_normal.png","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"0084B4","url":null,"name":"Lili","id_str":"187793438","favourites_count":0,"screen_name":"Dulceamor510","id":187793438,"show_all_inline_media":false,"lang":"en","geo_enabled":false,"utc_offset":null,"profile_sidebar_fill_color":"DDEEF6"},"id":12411922834006016,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u3080\u3001\u307f\u304f\u3057\u30fc\u3068\u3044\u3048\u3070\u3001\u304a\u663c\u9803\u306b\u4e45\u3005\u306b\u30c1\u30a7\u30c3\u30af\u3057\u305f\u3089\u3001\u306a\u3093\u304b\u300c\u30a2\u30a4\u30c9\u30eb\u3000\u516c\u5f0f\u30a2\u30ab\u30a6\u30f3\u30c8\u300d\u306a\u4eba\u304b\u3089\u8db3\u8de1\u304c\u3064\u3044\u3066\u305f\u3002\u3000\u306a\u306b\u304c\u3069\u3046\u306a\u3063\u3066\u50d5\u306e\u3068\u3053\u306b\u304d\u305f\u306e\u3084\u3089\u3002\u624b\u5f53\u305f\u308a\u6b21\u7b2c\u304b\u3002","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":0,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922825613312","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"65B0DA","show_all_inline_media":false,"geo_enabled":false,"description":"\u30d5\u30a1\u30df\u30ea\u30fc\u30b9\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u7247\u65b9\u3002\u8a9e\u308a\u3060\u3057\u305f\u3089\u6b62\u307e\u3089\u306a\u3044\u305c\u266a\u3000\u30b2\u30fc\u30e0\u30fb\u30de\u30f3\u30ac\u30fb\u6620\u753b\u597d\u304d\u3067\u611a\u75f4\u3063\u305f\u30fc\uff08\uff1f\uff09\u57fa\u672c\u3001\u7d61\u3093\u3067\u4e0b\u3055\u3063\u305f\u3089\u30d5\u30a9\u30ed\u30fc\u3057\u307e\u3059\u3002\u767a\u8a00\u6570\u304c\u7570\u5e38\u3060\u3068\u826f\u304f\u8a00\u308f\u308c\u308b\u306e\u3067\u30d5\u30a9\u30ed\u30fc\u306f\u8a08\u753b\u7684\u306b\u2026\/360:KLINK2007\/PS3:KLINK2008\u203b2009\u5e7410\u670812\u65e5\u304b\u3089\u59cb\u3081\u307e\u3057\u305f","listed_count":76,"profile_background_tile":true,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291064993\/images\/themes\/theme10\/bg.gif","profile_background_color":"642D8B","location":"OITA CITY","profile_use_background_image":true,"profile_text_color":"5386b0","followers_count":594,"statuses_count":57250,"time_zone":"Osaka","created_at":"Mon Oct 12 03:37:07 +0000 2009","friends_count":363,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1135752368\/00141_03_12_13-19_11_16_normal.jpg","notifications":null,"profile_link_color":"FF0000","url":null,"name":"KLINK_JP","id_str":"81753861","favourites_count":352,"screen_name":"KLINK_JP","id":81753861,"contributors_enabled":false,"lang":"ja","utc_offset":32400,"profile_sidebar_fill_color":"642d8b"},"id":12411922825613312,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"\u3059\u3066\u304d\u306a\u51fa\u4f1a\u3044\u3068\u7d50\u5a5a\u7d39\u4ecb\u306f\u697d\u5929\u30b0\u30eb\u30fc\u30d7\u306e\u300c\u30aa\u30fc\u30cd\u30c3\u30c8\u300d\u3067\u266a \u4eca\u306a\u3089\u5165\u4f1a\u306710,000\u30dd\u30a4\u30f3\u30c8\u30d7\u30ec\u30bc\u30f3\u30c8\u4e2d\uff01\u307e\u305a\u306f\u3001\u201d\u7406\u60f3\u306e\u304a\u76f8\u624b\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u201d\u3092GET\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u300e\u30aa\u30fc\u30cd\u30c3\u30c8\u300f\u3092\u898b\u308b [\u697d\u5929] http:\/\/a.r10.to\/hBhJuv #sougofollow","entities":{"hashtags":[{"text":"sougofollow","indices":[121,133]}],"urls":[{"expanded_url":null,"indices":[98,120],"url":"http:\/\/a.r10.to\/hBhJuv"}],"user_mentions":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.vector.co.jp\/soft\/winnt\/net\/se483196.html\" rel=\"nofollow\"\u003ETWEET command\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922813026304","user":{"following":null,"listed_count":26,"profile_background_tile":true,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme11\/bg.gif","profile_sidebar_border_color":"CC3366","profile_use_background_image":true,"description":"\u3088\u308d\u3057\u304f\u304a\u9858\u3044\u3057\u307e\u3059\u2764","statuses_count":10429,"time_zone":"Tokyo","friends_count":2893,"profile_background_color":"FF6699","location":"\u4e09\u91cd","profile_text_color":"362720","followers_count":2830,"contributors_enabled":false,"created_at":"Sun Jun 20 02:54:09 +0000 2010","protected":false,"profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1134806221\/__10_normal.jpg","follow_request_sent":null,"verified":false,"notifications":null,"profile_link_color":"B40B43","url":null,"name":"\u3042\u3044\u306e","id_str":"157527482","favourites_count":0,"screen_name":"aino_kis","id":157527482,"show_all_inline_media":false,"lang":"ja","geo_enabled":false,"utc_offset":32400,"profile_sidebar_fill_color":"E5507E"},"id":12411922813026304,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"RT @duck_of_d00m: \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0436\u0435\u043d\u0449\u0438\u043d\u044b \u0432 \u0441\u0435\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0438\u0448\u0443\u0442 \u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u0430 \u043c\u0443\u0436\u0447\u0438\u043d\u044b \u043e\u0431 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c.","entities":{"user_mentions":[{"indices":[3,16],"name":"Mitya Voskresensky","screen_name":"duck_of_d00m","id_str":"19416850","id":19416850}],"urls":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"web","retweeted_status":{"coordinates":null,"text":"\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0436\u0435\u043d\u0449\u0438\u043d\u044b \u0432 \u0441\u0435\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0438\u0448\u0443\u0442 \u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432, \u0430 \u043c\u0443\u0436\u0447\u0438\u043d\u044b \u043e\u0431 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c.","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":7,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"https:\/\/chrome.google.com\/extensions\/detail\/encaiiljifbdbjlphpgpiimidegddhic\" rel=\"nofollow\"\u003EChromed Bird\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Tue Dec 07 18:45:38 +0000 2010","truncated":false,"id_str":"12216177023520768","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"C0DEED","show_all_inline_media":false,"geo_enabled":false,"description":"\u0421\u0442\u0440\u0430\u0442\u0435\u0433 \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u043c\u0435\u0434\u0438\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 Red Keds, \u043f\u0438\u0448\u0443 \u043e \u0440\u0435\u043a\u043b\u0430\u043c\u0435, \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043d\u044b\u0445 \u0448\u0442\u0443\u043a\u0430\u0445. \u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u044e\u0434\u0430 \u0432\u0430\u0448\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b http:\/\/www.formspring.me\/duckofd00m ","listed_count":131,"profile_background_tile":false,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1290538325\/images\/themes\/theme1\/bg.png","profile_background_color":"C0DEED","location":"Russia, Moscow","profile_use_background_image":true,"profile_text_color":"333333","followers_count":1471,"statuses_count":6946,"time_zone":"Moscow","created_at":"Fri Jan 23 22:07:58 +0000 2009","friends_count":72,"protected":false,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1031969395\/duck_digital_duck_normal.png","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/duckofdoom.ru","name":"Mitya Voskresensky","id_str":"19416850","favourites_count":0,"screen_name":"duck_of_d00m","id":19416850,"contributors_enabled":false,"lang":"en","utc_offset":10800,"profile_sidebar_fill_color":"DDEEF6"},"id":12216177023520768,"in_reply_to_user_id":null,"favorited":false},"retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:27 +0000 2010","truncated":false,"id_str":"12411922808840192","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"CC3366","show_all_inline_media":false,"geo_enabled":false,"description":"","listed_count":16,"profile_background_tile":true,"profile_background_image_url":"http:\/\/s.twimg.com\/a\/1291318259\/images\/themes\/theme11\/bg.gif","profile_background_color":"FF6699","location":"\u0421\u0430\u0440\u0430\u0442\u043e\u0432 ","profile_use_background_image":true,"profile_text_color":"362720","followers_count":87,"statuses_count":519,"time_zone":null,"created_at":"Fri Sep 18 17:59:18 +0000 2009","friends_count":53,"protected":false,"profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1104098446\/IMG_3584_normal.JPG","notifications":null,"profile_link_color":"B40B43","url":null,"name":"Olga Semina","id_str":"75342779","favourites_count":0,"screen_name":"callmelili","id":75342779,"contributors_enabled":false,"lang":"en","utc_offset":null,"profile_sidebar_fill_color":"E5507E"},"id":12411922808840192,"in_reply_to_user_id":null,"favorited":false} -{"coordinates":null,"text":"The Art of Corking Wine http:\/\/bit.ly\/11gGbb #winemaking","entities":{"urls":[{"expanded_url":null,"indices":[24,44],"url":"http:\/\/bit.ly\/11gGbb"}],"user_mentions":[],"hashtags":[{"text":"winemaking","indices":[45,56]}]},"in_reply_to_screen_name":null,"in_reply_to_status_id_str":null,"place":null,"contributors":null,"retweet_count":null,"in_reply_to_status_id":null,"in_reply_to_user_id_str":null,"source":"\u003Ca href=\"http:\/\/www.ajaymatharu.com\/\" rel=\"nofollow\"\u003ETweet Old Post\u003C\/a\u003E","retweeted":false,"geo":null,"created_at":"Wed Dec 08 07:43:28 +0000 2010","truncated":false,"id_str":"12411927032504320","user":{"follow_request_sent":null,"following":null,"verified":false,"profile_sidebar_border_color":"BDDCAD","show_all_inline_media":false,"geo_enabled":false,"description":"Wine Creator is all about the wonderfully awesome hobby of making wine at home - something I've done personally for over 15 years and love sharing with others!","listed_count":307,"profile_background_tile":true,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/7784250\/wine-bottles-free.jpg","profile_background_color":"9AE4E8","location":"","profile_use_background_image":true,"profile_text_color":"333333","followers_count":15657,"statuses_count":2191,"time_zone":"Central Time (US & Canada)","created_at":"Tue Apr 07 01:37:29 +0000 2009","friends_count":17140,"protected":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/126970064\/redWine_normal.jpg","notifications":null,"profile_link_color":"0084B4","url":"http:\/\/winecreator.com","name":"Wine Creator","id_str":"29347169","favourites_count":1,"screen_name":"winecreator","id":29347169,"contributors_enabled":false,"lang":"en","utc_offset":-21600,"profile_sidebar_fill_color":"DDFFCC"},"id":12411927032504320,"in_reply_to_user_id":null,"favorited":false} diff --git a/Pods/SBJson/Tests/StreamParserIntegrationTest.m b/Pods/SBJson/Tests/StreamParserIntegrationTest.m deleted file mode 100755 index 7a4cc1a..0000000 --- a/Pods/SBJson/Tests/StreamParserIntegrationTest.m +++ /dev/null @@ -1,125 +0,0 @@ -/* - Copyright (c) 2010, Stig Brautaset. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the the author nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -#import -#import - -@interface StreamParserIntegrationTest : SenTestCase < SBJsonStreamParserAdapterDelegate> { - SBJsonStreamParser *parser; - SBJsonStreamParserAdapter *adapter; - NSUInteger arrayCount, objectCount; - NSDirectoryEnumerator *files; - NSString *path; -} -@end - -@implementation StreamParserIntegrationTest - -- (void)setUp { - adapter = [SBJsonStreamParserAdapter new]; - adapter.delegate = self; - - parser = [SBJsonStreamParser new]; - parser.delegate = adapter; - parser.supportMultipleDocuments = YES; - - arrayCount = objectCount = 0u; - - path = @"Tests/Stream"; - files = [[NSFileManager defaultManager] enumeratorAtPath:path]; - -} - -- (void)parser:(SBJsonStreamParser *)parser foundArray:(NSArray *)array { - arrayCount++; -} - -- (void)parser:(SBJsonStreamParser *)parser foundObject:(NSDictionary *)dict { - objectCount++; -} - -/* - This test reads a 100k chunk of data downloaded from - http://stream.twitter.com/1/statuses/sample.json - and split into 1k files. It simulates streaming by parsing - this data incrementally. - */ -- (void)testMultipleDocuments { - NSString *fileName; - while ((fileName = [files nextObject])) { - NSString *file = [path stringByAppendingPathComponent:fileName]; - NSLog(@"Parsing file: %@", file); - - NSData *data = [NSData dataWithContentsOfMappedFile:file]; - STAssertNotNil(data, nil); - - STAssertEquals([parser parse:data], SBJsonStreamParserWaitingForData, @"%@ - %@", file, parser.error); - } - STAssertEquals(arrayCount, (NSUInteger)0, nil); - STAssertEquals(objectCount, (NSUInteger)98, nil); -} - -- (void)parseArrayOfObjects { - [parser parse:[NSData dataWithBytes:"[" length:1]]; - for (int i = 1;; i++) { - char *utf8 = "{\"foo\":[],\"bar\":[]}"; - [parser parse:[NSData dataWithBytes:utf8 length:strlen(utf8)]]; - if (i == 100) - break; - [parser parse:[NSData dataWithBytes:"," length:1]]; - } - [parser parse:[NSData dataWithBytes:"]" length:1]]; -} - -- (void)testSingleArray { - [self parseArrayOfObjects]; - STAssertEquals(arrayCount, (NSUInteger)1, nil); - STAssertEquals(objectCount, (NSUInteger)0, nil); -} - -- (void)testSkipArray { - adapter.levelsToSkip = 1; - [self parseArrayOfObjects]; - STAssertEquals(arrayCount, (NSUInteger)0, nil); - STAssertEquals(objectCount, (NSUInteger)100, nil); -} - -- (void)testSkipArrayAndObject { - adapter.levelsToSkip = 2; - [self parseArrayOfObjects]; - STAssertEquals(arrayCount, (NSUInteger)200, nil); - STAssertEquals(objectCount, (NSUInteger)0, nil); -} - - -@end \ No newline at end of file diff --git a/Pods/SBJson/Tests/WriterTest.m b/Pods/SBJson/Tests/WriterTest.m deleted file mode 100755 index 4616d7e..0000000 --- a/Pods/SBJson/Tests/WriterTest.m +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright (C) 2010 Stig Brautaset. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of the author nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -#import -#import - -@interface WriterTest : SenTestCase { - SBJsonWriter * writer; -} -@end - -@implementation WriterTest - -- (void)setUp { - writer = [SBJsonWriter new]; -} - -- (void)testInfinity { - STAssertEqualObjects(@"[0]", [writer stringWithObject:[NSArray arrayWithObject:[NSNumber numberWithDouble:0.0]]], nil); - STAssertEqualObjects(@"[-0]", [writer stringWithObject:[NSArray arrayWithObject:[NSNumber numberWithDouble:-0.0]]], nil); - - STAssertEqualObjects(@"[0]", [writer stringWithObject:[NSArray arrayWithObject:[NSNumber numberWithFloat:(float)0.0]]], nil); - STAssertEqualObjects(@"[-0]", [writer stringWithObject:[NSArray arrayWithObject:[NSNumber numberWithFloat:(float)-0.0]]], nil); - - STAssertEqualObjects(@"[0]", [writer stringWithObject:[NSArray arrayWithObject:[NSNumber numberWithInt:0]]], nil); - STAssertEqualObjects(@"[0]", [writer stringWithObject:[NSArray arrayWithObject:[NSNumber numberWithInt:-0]]], nil); - - STAssertEqualObjects(@"[0]", [writer stringWithObject:[NSArray arrayWithObject:[NSDecimalNumber numberWithDouble:0]]], nil); - STAssertEqualObjects(@"[0]", [writer stringWithObject:[NSArray arrayWithObject:[NSDecimalNumber numberWithDouble:-0]]], nil); - - STAssertEqualObjects(@"[0]", [writer stringWithObject:[NSArray arrayWithObject:[NSDecimalNumber numberWithFloat:0]]], nil); - STAssertEqualObjects(@"[0]", [writer stringWithObject:[NSArray arrayWithObject:[NSDecimalNumber numberWithFloat:-0]]], nil); -} - -- (void)testTimeInterval { - NSTimeInterval interval = 319670801.45073098; // seconds since epoc - NSNumber *number = [NSNumber numberWithDouble:interval]; - NSArray *array = [NSArray arrayWithObject:number]; - - STAssertEqualObjects(@"[319670801.45073098]", [writer stringWithObject:array], nil); -} - - -- (void)testWriteToStream { - SBJsonStreamWriter *streamWriter = [[SBJsonStreamWriter alloc] init]; - - STAssertTrue([streamWriter writeArray:[NSArray array]], nil); - - STAssertFalse([streamWriter writeArray:[NSArray array]], nil); - STAssertEqualObjects(streamWriter.error, @"Stream is closed", nil); -} - -@end diff --git a/Pods/SBJson/sbjson-ios/sbjson-ios-Prefix.pch b/Pods/SBJson/sbjson-ios/sbjson-ios-Prefix.pch deleted file mode 100755 index f78b76b..0000000 --- a/Pods/SBJson/sbjson-ios/sbjson-ios-Prefix.pch +++ /dev/null @@ -1,7 +0,0 @@ -// -// Prefix header for all source files of the 'sbjson-ios' target in the 'sbjson-ios' project -// - -#ifdef __OBJC__ - #import -#endif diff --git a/Pods/SBJson/sbjson-iosTests/en.lproj/InfoPlist.strings b/Pods/SBJson/sbjson-iosTests/en.lproj/InfoPlist.strings deleted file mode 100755 index 477b28f..0000000 --- a/Pods/SBJson/sbjson-iosTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Pods/SBJson/sbjson-iosTests/sbjson-iosTests-Info.plist b/Pods/SBJson/sbjson-iosTests/sbjson-iosTests-Info.plist deleted file mode 100755 index 9aad9ba..0000000 --- a/Pods/SBJson/sbjson-iosTests/sbjson-iosTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - org.brautaset.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 3.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - - diff --git a/Pods/SBJson/sbjson-iosTests/sbjson-iosTests-Prefix.pch b/Pods/SBJson/sbjson-iosTests/sbjson-iosTests-Prefix.pch deleted file mode 100755 index 9c4d5b1..0000000 --- a/Pods/SBJson/sbjson-iosTests/sbjson-iosTests-Prefix.pch +++ /dev/null @@ -1,8 +0,0 @@ -// -// Prefix header for all source files of the 'sbjson-iosTests' target in the 'sbjson-iosTests' project -// - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Pods/SBJson/src/main/objc/SBJson4.h b/Pods/SBJson/src/main/objc/SBJson4.h new file mode 100644 index 0000000..f996ed4 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4.h @@ -0,0 +1,35 @@ +/* + Copyright (C) 2009-2011 Stig Brautaset. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "SBJson4Writer.h" +#import "SBJson4StreamParser.h" +#import "SBJson4Parser.h" +#import "SBJson4StreamWriter.h" +#import "SBJson4StreamTokeniser.h" + diff --git a/Pods/SBJson/src/main/objc/SBJson4Parser.h b/Pods/SBJson/src/main/objc/SBJson4Parser.h new file mode 100644 index 0000000..e865d2e --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4Parser.h @@ -0,0 +1,249 @@ +/* + Copyright (c) 2010-2013, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import +#import "SBJson4StreamParser.h" + +/** + Block called when the parser has parsed an item. This could be once + for each root document parsed, or once for each unwrapped root array element. + + @param item contains the parsed item. + @param stop set to YES if you want the parser to stop + */ +typedef void (^SBJson4ValueBlock)(id item, BOOL* stop); + +/** + Block called if an error occurs. + @param error the error. + */ +typedef void (^SBJson4ErrorBlock)(NSError* error); + +/** + Block used to process parsed tokens as they are encountered. You can use this + to transform strings containing dates into NSDate, for example. + @param item the parsed token + @param path the JSON Path of the token + */ +typedef id (^SBJson4ProcessBlock)(id item, NSString* path); + + +/** + Parse one or more chunks of JSON data. + + Using this class directly you can reduce the apparent latency for each + download/parse cycle of documents over a slow connection. You can start + parsing *and return chunks of the parsed document* before the entire + document is downloaded. + + Using this class is also useful to parse huge documents on disk + bit by bit so you don't have to keep them all in memory. + + JSON is mapped to Objective-C types in the following way: + + - null -> NSNull + - string -> NSString + - array -> NSMutableArray + - object -> NSMutableDictionary + - true -> NSNumber's -numberWithBool:YES + - false -> NSNumber's -numberWithBool:NO + - number -> NSNumber + + Since Objective-C doesn't have a dedicated class for boolean values, + these turns into NSNumber instances. However, since these are + initialised with the -initWithBool: method they round-trip back to JSON + properly. In other words, they won't silently suddenly become 0 or 1; + they'll be represented as 'true' and 'false' again. + + Integers are parsed into either a `long long` or `unsigned long long` + type if they fit, else a `double` is used. All real & exponential numbers + are represented using a `double`. Previous versions of this library used + an NSDecimalNumber in some cases, but this is no longer the case. + + The default behaviour is that your passed-in block is only called once the + entire input is parsed. If you set supportManyDocuments to YES and your input + contains multiple (whitespace limited) JSON documents your block will be called + for each document: + + SBJson4ValueBlock block = ^(id v, BOOL *stop) { + NSLog(@"Found: %@", @([v isKindOfClass:[NSArray class]])); + }; + SBJson4ErrorBlock eh = ^(NSError* err) { + NSLog(@"OOPS: %@", err); + } + + id parser = [SBJson4Parser parserWithBlock:block + manyDocuments:YES + rootArrayItems:NO + errorHandler:eh]; + + // Note that this input contains multiple top-level JSON documents + NSData *json = [@"[]{}[]{}" dataWithEncoding:NSUTF8StringEncoding]; + [parser parse:data]; + + The above example will print: + + - Found: YES + - Found: NO + - Found: YES + - Found: NO + + Often you won't have control over the input you're parsing, so can't make use + of this feature. But, all is not lost: if you are parsing a long array you can + get the same effect by setting rootArrayItems to YES: + + id parser = [SBJson4Parser parserWithBlock:block + manyDocuments:NO + rootArrayItems:YES + errorHandler:eh]; + + // Note that this input contains A SINGLE top-level document + NSData *json = [@"[[],{},[],{}]" dataWithEncoding:NSUTF8StringEncoding]; + [parser parse:data]; + + @note Stream based parsing does mean that you lose some of the correctness + verification you would have with a parser that considered the entire input + before returning an answer. It is technically possible to have some parts + of a document returned *as if they were correct* but then encounter an error + in a later part of the document. You should keep this in mind when + considering whether it would suit your application. + + +*/ +@interface SBJson4Parser : NSObject + +/** + Create a JSON Parser. + + This can be used to create a parser that accepts only one document, or one that parses + many documents any + + @param block Called for each element. Set *stop to `YES` if you have seen + enough and would like to skip the rest of the elements. + + @param allowMultiRoot Indicate that you are expecting multiple whitespace-separated + JSON documents, similar to what Twitter uses. + + @param unwrapRootArray If set the parser will pretend an root array does not exist + and the enumerator block will be called once for each item in it. This option + does nothing if the the JSON has an object at its root. + + @param eh Called if the parser encounters an error. + + @see -unwrapRootArrayParserWithBlock:errorHandler: + @see -multiRootParserWithBlock:errorHandler: + @see -initWithBlock:processBlock:multiRoot:unwrapRootArray:maxDepth:errorHandler: + + */ ++ (id)parserWithBlock:(SBJson4ValueBlock)block + allowMultiRoot:(BOOL)allowMultiRoot + unwrapRootArray:(BOOL)unwrapRootArray + errorHandler:(SBJson4ErrorBlock)eh; + + +/** + Create a JSON Parser that parses multiple whitespace separated documents. + This is useful for something like twitter's feed, which gives you one JSON + document per line. + + @param block Called for each element. Set *stop to `YES` if you have seen + enough and would like to skip the rest of the elements. + + @param eh Called if the parser encounters an error. + + @see +unwrapRootArrayParserWithBlock:errorHandler: + @see +parserWithBlock:allowMultiRoot:unwrapRootArray:errorHandler: + @see -initWithBlock:processBlock:multiRoot:unwrapRootArray:maxDepth:errorHandler: + */ ++ (id)multiRootParserWithBlock:(SBJson4ValueBlock)block + errorHandler:(SBJson4ErrorBlock)eh; + +/** + Create a JSON Parser that parses a huge array and calls for the value block for + each element in the outermost array. + + @param block Called for each element. Set *stop to `YES` if you have seen + enough and would like to skip the rest of the elements. + + @param eh Called if the parser encounters an error. + + @see +multiRootParserWithBlock:errorHandler: + @see +parserWithBlock:allowMultiRoot:unwrapRootArray:errorHandler: + @see -initWithBlock:processBlock:multiRoot:unwrapRootArray:maxDepth:errorHandler: + */ ++ (id)unwrapRootArrayParserWithBlock:(SBJson4ValueBlock)block + errorHandler:(SBJson4ErrorBlock)eh; + +/** + Create a JSON Parser. + + @param block Called for each element. Set *stop to `YES` if you have seen + enough and would like to skip the rest of the elements. + + @param processBlock A block that allows you to process individual values before being + returned. + + @param multiRoot Indicate that you are expecting multiple whitespace-separated + JSON documents, similar to what Twitter uses. + + @param unwrapRootArray If set the parser will pretend an root array does not exist + and the enumerator block will be called once for each item in it. This option + does nothing if the the JSON has an object at its root. + + @param maxDepth The max recursion depth of the parser. Defaults to 32. + + @param eh Called if the parser encounters an error. + + */ +- (id)initWithBlock:(SBJson4ValueBlock)block + processBlock:(SBJson4ProcessBlock)processBlock + multiRoot:(BOOL)multiRoot + unwrapRootArray:(BOOL)unwrapRootArray + maxDepth:(NSUInteger)maxDepth + errorHandler:(SBJson4ErrorBlock)eh; + +/** + Parse some JSON + + The JSON is assumed to be UTF8 encoded. This can be a full JSON document, or a part of one. + + @param data An NSData object containing the next chunk of JSON + + @return + - SBJson4ParserComplete if a full document was found + - SBJson4ParserWaitingForData if a partial document was found and more data is required to complete it + - SBJson4ParserError if an error occured. + + */ +- (SBJson4ParserStatus)parse:(NSData*)data; + +@end diff --git a/Pods/SBJson/src/main/objc/SBJson4Parser.m b/Pods/SBJson/src/main/objc/SBJson4Parser.m new file mode 100644 index 0000000..ec877a8 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4Parser.m @@ -0,0 +1,292 @@ +/* + Copyright (c) 2010-2013, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !__has_feature(objc_arc) +#error "This source file must be compiled with ARC enabled!" +#endif + +#import "SBJson4Parser.h" + +@interface SBJson4Parser () + +- (void)pop; +- (void)parser:(SBJson4StreamParser *)parser found:(id)obj; + +@end + +typedef enum { + SBJson4ChunkNone, + SBJson4ChunkArray, + SBJson4ChunkObject, +} SBJson4ChunkType; + +@implementation SBJson4Parser { + SBJson4StreamParser *_parser; + NSUInteger depth; + NSMutableArray *array; + NSMutableDictionary *dict; + NSMutableArray *keyStack; + NSMutableArray *stack; + NSMutableArray *path; + SBJson4ProcessBlock processBlock; + SBJson4ErrorBlock errorHandler; + SBJson4ValueBlock valueBlock; + SBJson4ChunkType currentType; + BOOL supportManyDocuments; + BOOL supportPartialDocuments; + NSUInteger _maxDepth; +} + +#pragma mark Housekeeping + +- (id)init { + @throw @"Not Implemented"; +} + ++ (id)multiRootParserWithBlock:(SBJson4ValueBlock)block errorHandler:(SBJson4ErrorBlock)eh { + return [self parserWithBlock:block + allowMultiRoot:YES + unwrapRootArray:NO + errorHandler:eh]; +} + ++ (id)unwrapRootArrayParserWithBlock:(SBJson4ValueBlock)block errorHandler:(SBJson4ErrorBlock)eh { + return [self parserWithBlock:block + allowMultiRoot:NO + unwrapRootArray:YES + errorHandler:eh]; +} + ++ (id)parserWithBlock:(SBJson4ValueBlock)block + allowMultiRoot:(BOOL)allowMultiRoot + unwrapRootArray:(BOOL)unwrapRootArray + errorHandler:(SBJson4ErrorBlock)eh { + + return [[self alloc] initWithBlock:block + processBlock:nil + multiRoot:allowMultiRoot + unwrapRootArray:unwrapRootArray + maxDepth:32 + errorHandler:eh]; +} + +- (id)initWithBlock:(SBJson4ValueBlock)block + processBlock:(SBJson4ProcessBlock)initialProcessBlock + multiRoot:(BOOL)multiRoot + unwrapRootArray:(BOOL)unwrapRootArray + maxDepth:(NSUInteger)maxDepth + errorHandler:(SBJson4ErrorBlock)eh { + + self = [super init]; + if (self) { + _parser = [[SBJson4StreamParser alloc] init]; + _parser.delegate = self; + + supportManyDocuments = multiRoot; + supportPartialDocuments = unwrapRootArray; + + valueBlock = block; + keyStack = [[NSMutableArray alloc] initWithCapacity:32]; + stack = [[NSMutableArray alloc] initWithCapacity:32]; + if (initialProcessBlock) + path = [[NSMutableArray alloc] initWithCapacity:32]; + processBlock = initialProcessBlock; + errorHandler = eh ? eh : ^(NSError*err) { NSLog(@"%@", err); }; + currentType = SBJson4ChunkNone; + _maxDepth = maxDepth; + } + return self; +} + + +#pragma mark Private methods + +- (void)pop { + [stack removeLastObject]; + array = nil; + dict = nil; + currentType = SBJson4ChunkNone; + + id value = [stack lastObject]; + + if ([value isKindOfClass:[NSArray class]]) { + array = value; + currentType = SBJson4ChunkArray; + } else if ([value isKindOfClass:[NSDictionary class]]) { + dict = value; + currentType = SBJson4ChunkObject; + } +} + +- (void)parser:(SBJson4StreamParser *)parser found:(id)obj { + [self parserFound:obj isValue:NO ]; +} + +- (void)parserFound:(id)obj isValue:(BOOL)isValue { + NSParameterAssert(obj); + + if(processBlock&&path) { + if(isValue) { + obj = processBlock(obj,[NSString stringWithFormat:@"%@.%@",[self pathString],[keyStack lastObject]]); + } + else { + [path removeLastObject]; + } + } + + switch (currentType) { + case SBJson4ChunkArray: + [array addObject:obj]; + break; + + case SBJson4ChunkObject: + NSParameterAssert(keyStack.count); + [dict setObject:obj forKey:[keyStack lastObject]]; + [keyStack removeLastObject]; + break; + + case SBJson4ChunkNone: { + __block BOOL stop = NO; + valueBlock(obj, &stop); + if (stop) [_parser stop]; + } + break; + + default: + break; + } +} + + +#pragma mark Delegate methods + +- (void)parserFoundObjectStart { + ++depth; + if (depth > _maxDepth) + [self maxDepthError]; + + if (path) + [self addToPath]; + dict = [NSMutableDictionary new]; + [stack addObject:dict]; + currentType = SBJson4ChunkObject; +} + +- (void)parserFoundObjectKey:(NSString *)key_ { + [keyStack addObject:key_]; +} + +- (void)parserFoundObjectEnd { + depth--; + id value = dict; + [self pop]; + [self parser:_parser found:value]; +} + +- (void)parserFoundArrayStart { + depth++; + if (depth > _maxDepth) + [self maxDepthError]; + + if (depth > 1 || !supportPartialDocuments) { + if(path) + [self addToPath]; + array = [NSMutableArray new]; + [stack addObject:array]; + currentType = SBJson4ChunkArray; + } +} + +- (void)parserFoundArrayEnd { + depth--; + if (depth > 1 || !supportPartialDocuments) { + id value = array; + [self pop]; + [self parser:_parser found:value]; + } +} + +- (void)maxDepthError { + id ui = @{ NSLocalizedDescriptionKey: [NSString stringWithFormat:@"Input depth exceeds max depth of %lu", (unsigned long)_maxDepth]}; + errorHandler([NSError errorWithDomain:@"org.sbjson.parser" code:3 userInfo:ui]); + [_parser stop]; +} + +- (void)parserFoundBoolean:(BOOL)x { + [self parserFound:[NSNumber numberWithBool:x] isValue:YES ]; +} + +- (void)parserFoundNull { + [self parserFound:[NSNull null] isValue:YES ]; +} + +- (void)parserFoundNumber:(NSNumber *)num { + [self parserFound:num isValue:YES ]; +} + +- (void)parserFoundString:(NSString *)string { + [self parserFound:string isValue:YES ]; +} + +- (void)parserFoundError:(NSError *)err { + errorHandler(err); +} + +- (void)addToPath { + if([path count]==0) + [path addObject:@"$"]; + else if([[stack lastObject] isKindOfClass:[NSArray class]]) + [path addObject:@([[stack lastObject] count])]; + else + [path addObject:[keyStack lastObject]]; +} + +- (NSString *)pathString { + NSMutableString *pathString = [NSMutableString stringWithString:@"$"]; + for(NSUInteger i=1;i<[path count];i++) { + if([[path objectAtIndex:i] isKindOfClass:[NSNumber class]]) + [pathString appendString:[NSString stringWithFormat:@"[%@]",[path objectAtIndex:i]]]; + else + [pathString appendString:[NSString stringWithFormat:@".%@",[path objectAtIndex:i]]]; + } + return pathString; +} + +- (BOOL)parserShouldSupportManyDocuments { + return supportManyDocuments; +} + +- (SBJson4ParserStatus)parse:(NSData *)data { + return [_parser parse:data]; +} + +@end diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamParser.h b/Pods/SBJson/src/main/objc/SBJson4StreamParser.h new file mode 100644 index 0000000..6c9ab8b --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamParser.h @@ -0,0 +1,132 @@ +/* + Copyright (c) 2010-2013, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +@class SBJson4StreamParser; +@class SBJson4StreamParserState; + +typedef enum { + SBJson4ParserComplete, + SBJson4ParserStopped, + SBJson4ParserWaitingForData, + SBJson4ParserError, +} SBJson4ParserStatus; + + +/** + Delegate for interacting directly with the low-level parser + + You will most likely find it much more convenient to use the SBJson4Parser instead. + */ +@protocol SBJson4StreamParserDelegate < NSObject > + +/// Called when object start is found +- (void)parserFoundObjectStart; + +/// Called when object key is found +- (void)parserFoundObjectKey:(NSString *)key; + +/// Called when object end is found +- (void)parserFoundObjectEnd; + +/// Called when array start is found +- (void)parserFoundArrayStart; + +/// Called when array end is found +- (void)parserFoundArrayEnd; + +/// Called when a boolean value is found +- (void)parserFoundBoolean:(BOOL)x; + +/// Called when a null value is found +- (void)parserFoundNull; + +/// Called when a number is found +- (void)parserFoundNumber:(NSNumber *)num; + +/// Called when a string is found +- (void)parserFoundString:(NSString *)string; + +/// Called when an error occurs +- (void)parserFoundError:(NSError *)err; + +@optional + +/// Called to determine whether to allow multiple whitespace-separated documents +- (BOOL)parserShouldSupportManyDocuments; + +@end + +/** + Low-level Stream parser + + You most likely want to use the SBJson4Parser instead, but if you + really need low-level access to tokens one-by-one you can use this class. + */ +@interface SBJson4StreamParser : NSObject + +@property (nonatomic, weak) SBJson4StreamParserState *state; // Private +@property (nonatomic, readonly, strong) NSMutableArray *stateStack; // Private + +/** + Delegate to receive messages + + The object set here receives a series of messages as the parser breaks down the JSON stream + into valid tokens. + + Usually this should be an instance of SBJson4Parser, but you can + substitute your own implementation of the SBJson4StreamParserDelegate protocol if you need to. + */ +@property (nonatomic, weak) id delegate; + +/** + Parse some JSON + + The JSON is assumed to be UTF8 encoded. This can be a full JSON document, or a part of one. + + @param data An NSData object containing the next chunk of JSON + + @return + - SBJson4ParserComplete if a full document was found + - SBJson4ParserWaitingForData if a partial document was found and more data is required to complete it + - SBJson4ParserError if an error occured. + + */ +- (SBJson4ParserStatus)parse:(NSData*)data; + +/** + Call this to cause parsing to stop. + */ +- (void)stop; + +@end diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamParser.m b/Pods/SBJson/src/main/objc/SBJson4StreamParser.m new file mode 100644 index 0000000..59b66e1 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamParser.m @@ -0,0 +1,327 @@ +/* + Copyright (c) 2010, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !__has_feature(objc_arc) +#error "This source file must be compiled with ARC enabled!" +#endif + +#import "SBJson4StreamParser.h" +#import "SBJson4StreamTokeniser.h" +#import "SBJson4StreamParserState.h" + +#define SBStringIsSurrogateHighCharacter(character) ((character >= 0xD800UL) && (character <= 0xDBFFUL)) + +@implementation SBJson4StreamParser { + SBJson4StreamTokeniser *tokeniser; + BOOL stopped; +} + +#pragma mark Housekeeping + +- (id)init { + self = [super init]; + if (self) { + _stateStack = [[NSMutableArray alloc] initWithCapacity:32]; + _state = [SBJson4StreamParserStateStart sharedInstance]; + tokeniser = [[SBJson4StreamTokeniser alloc] init]; + } + return self; +} + + +#pragma mark Methods + +- (NSString*)tokenName:(sbjson4_token_t)token { + switch (token) { + case sbjson4_token_array_open: + return @"start of array"; + break; + + case sbjson4_token_array_close: + return @"end of array"; + break; + + case sbjson4_token_integer: + case sbjson4_token_real: + return @"number"; + break; + + case sbjson4_token_string: + case sbjson4_token_encoded: + return @"string"; + break; + + case sbjson4_token_bool: + return @"boolean"; + break; + + case sbjson4_token_null: + return @"null"; + break; + + case sbjson4_token_entry_sep: + return @"key-value separator"; + break; + + case sbjson4_token_value_sep: + return @"value separator"; + break; + + case sbjson4_token_object_open: + return @"start of object"; + break; + + case sbjson4_token_object_close: + return @"end of object"; + break; + + case sbjson4_token_eof: + case sbjson4_token_error: + break; + } + NSAssert(NO, @"Should not get here"); + return @""; +} + +- (void)handleObjectStart { + [_delegate parserFoundObjectStart]; + [_stateStack addObject:_state]; + _state = [SBJson4StreamParserStateObjectStart sharedInstance]; +} + +- (void)handleObjectEnd: (sbjson4_token_t) tok { + _state = [_stateStack lastObject]; + [_stateStack removeLastObject]; + [_state parser:self shouldTransitionTo:tok]; + [_delegate parserFoundObjectEnd]; +} + +- (void)handleArrayStart { + [_delegate parserFoundArrayStart]; + [_stateStack addObject:_state]; + _state = [SBJson4StreamParserStateArrayStart sharedInstance]; +} + +- (void)handleArrayEnd: (sbjson4_token_t) tok { + _state = [_stateStack lastObject]; + [_stateStack removeLastObject]; + [_state parser:self shouldTransitionTo:tok]; + [_delegate parserFoundArrayEnd]; +} + +- (void) handleTokenNotExpectedHere: (sbjson4_token_t) tok { + NSString *tokenName = [self tokenName:tok]; + NSString *stateName = [_state name]; + + _state = [SBJson4StreamParserStateError sharedInstance]; + id ui = @{ NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Token '%@' not expected %@", tokenName, stateName]}; + [_delegate parserFoundError:[NSError errorWithDomain:@"org.sbjson.parser" code:2 userInfo:ui]]; +} + +- (SBJson4ParserStatus)parse:(NSData *)data_ { + @autoreleasepool { + [tokeniser appendData:data_]; + + for (;;) { + + if (stopped) + return SBJson4ParserStopped; + + if ([_state isError]) + return SBJson4ParserError; + + char *token; + NSUInteger token_len; + sbjson4_token_t tok = [tokeniser getToken:&token length:&token_len]; + + switch (tok) { + case sbjson4_token_eof: + return [_state parserShouldReturn:self]; + break; + + case sbjson4_token_error: + _state = [SBJson4StreamParserStateError sharedInstance]; + [_delegate parserFoundError:[NSError errorWithDomain:@"org.sbjson.parser" code:3 + userInfo:@{NSLocalizedDescriptionKey : tokeniser.error}]]; + return SBJson4ParserError; + break; + + default: + + if (![_state parser:self shouldAcceptToken:tok]) { + [self handleTokenNotExpectedHere: tok]; + return SBJson4ParserError; + } + + switch (tok) { + case sbjson4_token_object_open: + [self handleObjectStart]; + break; + + case sbjson4_token_object_close: + [self handleObjectEnd: tok]; + break; + + case sbjson4_token_array_open: + [self handleArrayStart]; + break; + + case sbjson4_token_array_close: + [self handleArrayEnd: tok]; + break; + + case sbjson4_token_value_sep: + case sbjson4_token_entry_sep: + [_state parser:self shouldTransitionTo:tok]; + break; + + case sbjson4_token_bool: + [_delegate parserFoundBoolean:token[0] == 't']; + [_state parser:self shouldTransitionTo:tok]; + break; + + + case sbjson4_token_null: + [_delegate parserFoundNull]; + [_state parser:self shouldTransitionTo:tok]; + break; + + case sbjson4_token_integer: { + const int UNSIGNED_LONG_LONG_MAX_DIGITS = 20; + if (token_len <= UNSIGNED_LONG_LONG_MAX_DIGITS) { + if (*token == '-') + [_delegate parserFoundNumber:@(strtoll(token, NULL, 10))]; + else + [_delegate parserFoundNumber:@(strtoull(token, NULL, 10))]; + + [_state parser:self shouldTransitionTo:tok]; + break; + } + } + // FALLTHROUGH + + case sbjson4_token_real: { + [_delegate parserFoundNumber:@(strtod(token, NULL))]; + [_state parser:self shouldTransitionTo:tok]; + break; + } + + case sbjson4_token_string: { + NSString *string = [[NSString alloc] initWithBytes:token length:token_len encoding:NSUTF8StringEncoding]; + if ([_state needKey]) + [_delegate parserFoundObjectKey:string]; + else + [_delegate parserFoundString:string]; + [_state parser:self shouldTransitionTo:tok]; + break; + } + + case sbjson4_token_encoded: { + NSString *string = [self decodeStringToken:token length:token_len]; + if ([_state needKey]) + [_delegate parserFoundObjectKey:string]; + else + [_delegate parserFoundString:string]; + [_state parser:self shouldTransitionTo:tok]; + break; + } + + default: + break; + } + break; + } + } + return SBJson4ParserComplete; + } +} + +- (unichar)decodeHexQuad:(char *)quad { + unichar ch = 0; + for (NSUInteger i = 0; i < 4; i++) { + int c = quad[i]; + ch *= 16; + switch (c) { + case '0' ... '9': ch += c - '0'; break; + case 'a' ... 'f': ch += 10 + c - 'a'; break; + case 'A' ... 'F': ch += 10 + c - 'A'; break; + default: @throw @"FUT FUT FUT"; + } + } + return ch; +} + +- (NSString*)decodeStringToken:(char*)bytes length:(NSUInteger)len { + NSMutableData *buf = [NSMutableData dataWithCapacity:len]; + for (NSUInteger i = 0; i < len;) { + switch ((unsigned char)bytes[i]) { + case '\\': { + switch ((unsigned char)bytes[++i]) { + case '"': [buf appendBytes:"\"" length:1]; i++; break; + case '/': [buf appendBytes:"/" length:1]; i++; break; + case '\\': [buf appendBytes:"\\" length:1]; i++; break; + case 'b': [buf appendBytes:"\b" length:1]; i++; break; + case 'f': [buf appendBytes:"\f" length:1]; i++; break; + case 'n': [buf appendBytes:"\n" length:1]; i++; break; + case 'r': [buf appendBytes:"\r" length:1]; i++; break; + case 't': [buf appendBytes:"\t" length:1]; i++; break; + case 'u': { + unichar hi = [self decodeHexQuad:bytes + i + 1]; + i += 5; + if (SBStringIsSurrogateHighCharacter(hi)) { + // Skip past \u that we know is there.. + unichar lo = [self decodeHexQuad:bytes + i + 2]; + i += 6; + [buf appendData:[[NSString stringWithFormat:@"%C%C", hi, lo] dataUsingEncoding:NSUTF8StringEncoding]]; + } else { + [buf appendData:[[NSString stringWithFormat:@"%C", hi] dataUsingEncoding:NSUTF8StringEncoding]]; + } + break; + } + default: @throw @"FUT FUT FUT"; + } + break; + } + default: + [buf appendBytes:bytes + i length:1]; + i++; + break; + } + } + return [[NSString alloc] initWithData:buf encoding:NSUTF8StringEncoding]; +} + +- (void)stop { + stopped = YES; +} + +@end diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamParserState.h b/Pods/SBJson/src/main/objc/SBJson4StreamParserState.h new file mode 100644 index 0000000..d602fcd --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamParserState.h @@ -0,0 +1,82 @@ +/* + Copyright (c) 2010, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +#import "SBJson4StreamTokeniser.h" +#import "SBJson4StreamParser.h" + +@interface SBJson4StreamParserState : NSObject ++ (id)sharedInstance; + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token; +- (SBJson4ParserStatus)parserShouldReturn:(SBJson4StreamParser *)parser; +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok; +- (BOOL)needKey; +- (BOOL)isError; + +- (NSString*)name; + +@end + +@interface SBJson4StreamParserStateStart : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateComplete : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateError : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateObjectStart : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateObjectGotKey : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateObjectSeparator : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateObjectGotValue : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateObjectNeedKey : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateArrayStart : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateArrayGotValue : SBJson4StreamParserState +@end + +@interface SBJson4StreamParserStateArrayNeedValue : SBJson4StreamParserState +@end diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamParserState.m b/Pods/SBJson/src/main/objc/SBJson4StreamParserState.m new file mode 100644 index 0000000..d791e54 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamParserState.m @@ -0,0 +1,364 @@ +/* + Copyright (c) 2010-2013, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !__has_feature(objc_arc) +#error "This source file must be compiled with ARC enabled!" +#endif + +#import "SBJson4StreamParserState.h" + +#define SINGLETON \ ++ (id)sharedInstance { \ + static id state = nil; \ + if (!state) { \ + @synchronized(self) { \ + if (!state) state = [[self alloc] init]; \ + } \ + } \ + return state; \ +} + +@implementation SBJson4StreamParserState + ++ (id)sharedInstance { return nil; } + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + return NO; +} + +- (SBJson4ParserStatus)parserShouldReturn:(SBJson4StreamParser *)parser { + return SBJson4ParserWaitingForData; +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok {} + +- (BOOL)needKey { + return NO; +} + +- (NSString*)name { + return @""; +} + +- (BOOL)isError { + return NO; +} + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateStart + +SINGLETON + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + return token == sbjson4_token_array_open || token == sbjson4_token_object_open; +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok { + + SBJson4StreamParserState *state = nil; + switch (tok) { + case sbjson4_token_array_open: + state = [SBJson4StreamParserStateArrayStart sharedInstance]; + break; + + case sbjson4_token_object_open: + state = [SBJson4StreamParserStateObjectStart sharedInstance]; + break; + + case sbjson4_token_array_close: + case sbjson4_token_object_close: + if ([parser.delegate respondsToSelector:@selector(parserShouldSupportManyDocuments)] && [parser.delegate parserShouldSupportManyDocuments]) + state = parser.state; + else + state = [SBJson4StreamParserStateComplete sharedInstance]; + break; + + case sbjson4_token_eof: + return; + + default: + state = [SBJson4StreamParserStateError sharedInstance]; + break; + } + + + parser.state = state; +} + +- (NSString*)name { return @"before outer-most array or object"; } + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateComplete + +SINGLETON + +- (NSString*)name { return @"after outer-most array or object"; } + +- (SBJson4ParserStatus)parserShouldReturn:(SBJson4StreamParser *)parser { + return SBJson4ParserComplete; +} + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateError + +SINGLETON + +- (NSString*)name { return @"in error"; } + +- (SBJson4ParserStatus)parserShouldReturn:(SBJson4StreamParser *)parser { + return SBJson4ParserError; +} + +- (BOOL)isError { + return YES; +} + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateObjectStart + +SINGLETON + +- (NSString*)name { return @"at beginning of object"; } + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + switch (token) { + case sbjson4_token_object_close: + case sbjson4_token_string: + case sbjson4_token_encoded: + return YES; + break; + default: + return NO; + break; + } +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok { + parser.state = [SBJson4StreamParserStateObjectGotKey sharedInstance]; +} + +- (BOOL)needKey { + return YES; +} + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateObjectGotKey + +SINGLETON + +- (NSString*)name { return @"after object key"; } + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + return token == sbjson4_token_entry_sep; +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok { + parser.state = [SBJson4StreamParserStateObjectSeparator sharedInstance]; +} + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateObjectSeparator + +SINGLETON + +- (NSString*)name { return @"as object value"; } + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + switch (token) { + case sbjson4_token_object_open: + case sbjson4_token_array_open: + case sbjson4_token_bool: + case sbjson4_token_null: + case sbjson4_token_integer: + case sbjson4_token_real: + case sbjson4_token_string: + case sbjson4_token_encoded: + return YES; + break; + + default: + return NO; + break; + } +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok { + parser.state = [SBJson4StreamParserStateObjectGotValue sharedInstance]; +} + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateObjectGotValue + +SINGLETON + +- (NSString*)name { return @"after object value"; } + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + switch (token) { + case sbjson4_token_object_close: + case sbjson4_token_value_sep: + return YES; + break; + default: + return NO; + break; + } +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok { + parser.state = [SBJson4StreamParserStateObjectNeedKey sharedInstance]; +} + + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateObjectNeedKey + +SINGLETON + +- (NSString*)name { return @"in place of object key"; } + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + return sbjson4_token_string == token || sbjson4_token_encoded == token; +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok { + parser.state = [SBJson4StreamParserStateObjectGotKey sharedInstance]; +} + +- (BOOL)needKey { + return YES; +} + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateArrayStart + +SINGLETON + +- (NSString*)name { return @"at array start"; } + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + switch (token) { + case sbjson4_token_object_close: + case sbjson4_token_entry_sep: + case sbjson4_token_value_sep: + return NO; + break; + + default: + return YES; + break; + } +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok { + parser.state = [SBJson4StreamParserStateArrayGotValue sharedInstance]; +} + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateArrayGotValue + +SINGLETON + +- (NSString*)name { return @"after array value"; } + + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + return token == sbjson4_token_array_close || token == sbjson4_token_value_sep; +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok { + if (tok == sbjson4_token_value_sep) + parser.state = [SBJson4StreamParserStateArrayNeedValue sharedInstance]; +} + +@end + +#pragma mark - + +@implementation SBJson4StreamParserStateArrayNeedValue + +SINGLETON + +- (NSString*)name { return @"as array value"; } + + +- (BOOL)parser:(SBJson4StreamParser *)parser shouldAcceptToken:(sbjson4_token_t)token { + switch (token) { + case sbjson4_token_array_close: + case sbjson4_token_entry_sep: + case sbjson4_token_object_close: + case sbjson4_token_value_sep: + return NO; + break; + + default: + return YES; + break; + } +} + +- (void)parser:(SBJson4StreamParser *)parser shouldTransitionTo:(sbjson4_token_t)tok { + parser.state = [SBJson4StreamParserStateArrayGotValue sharedInstance]; +} + +@end + diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamTokeniser.h b/Pods/SBJson/src/main/objc/SBJson4StreamTokeniser.h new file mode 100644 index 0000000..518b0f2 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamTokeniser.h @@ -0,0 +1,40 @@ +// +// Created by SuperPappi on 09/01/2013. +// +// To change the template use AppCode | Preferences | File Templates. +// + +#import + +typedef enum { + sbjson4_token_error = -1, + sbjson4_token_eof, + + sbjson4_token_array_open, + sbjson4_token_array_close, + sbjson4_token_value_sep, + + sbjson4_token_object_open, + sbjson4_token_object_close, + sbjson4_token_entry_sep, + + sbjson4_token_bool, + sbjson4_token_null, + + sbjson4_token_integer, + sbjson4_token_real, + + sbjson4_token_string, + sbjson4_token_encoded, +} sbjson4_token_t; + + +@interface SBJson4StreamTokeniser : NSObject + +@property (nonatomic, readonly, copy) NSString *error; + +- (void)appendData:(NSData*)data_; +- (sbjson4_token_t)getToken:(char**)tok length:(NSUInteger*)len; + +@end + diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamTokeniser.m b/Pods/SBJson/src/main/objc/SBJson4StreamTokeniser.m new file mode 100644 index 0000000..e9fee37 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamTokeniser.m @@ -0,0 +1,397 @@ +// +// Created by SuperPappi on 09/01/2013. +// +// To change the template use AppCode | Preferences | File Templates. +// + + +#import "SBJson4StreamTokeniser.h" + +#define SBStringIsIllegalSurrogateHighCharacter(character) (((character) >= 0xD800UL) && ((character) <= 0xDFFFUL)) +#define SBStringIsSurrogateLowCharacter(character) ((character >= 0xDC00UL) && (character <= 0xDFFFUL)) +#define SBStringIsSurrogateHighCharacter(character) ((character >= 0xD800UL) && (character <= 0xDBFFUL)) + +@implementation SBJson4StreamTokeniser { + NSMutableData *data; + const char *bytes; + NSUInteger index; + NSUInteger offset; +} + +- (void)setError:(NSString *)error { + _error = [NSString stringWithFormat:@"%@ at index %lu", error, (unsigned long)(offset + index)]; +} + +- (void)appendData:(NSData *)data_ { + if (!data) { + data = [data_ mutableCopy]; + + } else if (index) { + // Discard data we've already parsed + [data replaceBytesInRange:NSMakeRange(0, index) withBytes:"" length:0]; + [data appendData:data_]; + + // Add to the offset for reporting + offset += index; + + // Reset index to point to current position + index = 0u; + + } + else { + [data appendData:data_]; + } + + bytes = [data bytes]; +} + +- (void)skipWhitespace { + while (index < data.length) { + switch (bytes[index]) { + case ' ': + case '\t': + case '\r': + case '\n': + index++; + break; + default: + return; + } + } +} + +- (BOOL)getUnichar:(unichar *)ch { + if ([self haveRemainingCharacters:1]) { + *ch = (unichar) bytes[index]; + return YES; + } + return NO; +} + +- (BOOL)haveOneMoreCharacter { + return [self haveRemainingCharacters:1]; +} + +- (BOOL)haveRemainingCharacters:(NSUInteger)length { + return data.length - index >= length; +} + +- (sbjson4_token_t)match:(char *)str retval:(sbjson4_token_t)tok token:(char **)token length:(NSUInteger *)length { + NSUInteger len = strlen(str); + if ([self haveRemainingCharacters:len]) { + if (!memcmp(bytes + index, str, len)) { + *token = str; + *length = len; + index += len; + return tok; + } + [self setError: [NSString stringWithFormat:@"Expected '%s' after initial '%.1s'", str, str]]; + return sbjson4_token_error; + } + + return sbjson4_token_eof; +} + +- (BOOL)decodeHexQuad:(unichar*)quad { + unichar tmp = 0; + + for (int i = 0; i < 4; i++, index++) { + unichar c = bytes[index]; + tmp *= 16; + switch (c) { + case '0' ... '9': + tmp += c - '0'; + break; + + case 'a' ... 'f': + tmp += 10 + c - 'a'; + break; + + case 'A' ... 'F': + tmp += 10 + c - 'A'; + break; + + default: + return NO; + } + } + *quad = tmp; + return YES; +} + +- (sbjson4_token_t)getStringToken:(char **)token length:(NSUInteger *)length { + + // Skip initial " + index++; + + NSUInteger string_start = index; + sbjson4_token_t tok = sbjson4_token_string; + + for (;;) { + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + + switch (bytes[index]) { + case 0 ... 0x1F: + [self setError:[NSString stringWithFormat:@"Unescaped control character [0x%0.2X] in string", bytes[index]]]; + return sbjson4_token_error; + + case '"': + *token = (char *)(bytes + string_start); + *length = index - string_start; + index++; + return tok; + + case '\\': + tok = sbjson4_token_encoded; + index++; + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + + if (bytes[index] == 'u') { + index++; + if (![self haveRemainingCharacters:4]) + return sbjson4_token_eof; + + unichar hi; + if (![self decodeHexQuad:&hi]) { + [self setError:@"Invalid hex quad"]; + return sbjson4_token_error; + } + + if (SBStringIsSurrogateHighCharacter(hi)) { + if (![self haveRemainingCharacters:6]) + return sbjson4_token_eof; + + unichar lo; + if (bytes[index++] != '\\' || bytes[index++] != 'u' || ![self decodeHexQuad:&lo]) { + [self setError:@"Missing low character in surrogate pair"]; + return sbjson4_token_error; + } + + if (!SBStringIsSurrogateLowCharacter(lo)) { + [self setError:@"Invalid low character in surrogate pair"]; + return sbjson4_token_error; + } + + } else if (SBStringIsIllegalSurrogateHighCharacter(hi)) { + [self setError:@"Invalid high character in surrogate pair"]; + return sbjson4_token_error; + + } + + + } else { + switch (bytes[index]) { + case '\\': + case '/': + case '"': + case 'b': + case 'n': + case 'r': + case 't': + case 'f': + index++; + break; + + default: + [self setError:[NSString stringWithFormat:@"Illegal escape character [%x]", bytes[index]]]; + return sbjson4_token_error; + } + } + + break; + + default: + index++; + break; + } + } + + @throw @"FUT FUT FUT"; +} + +- (sbjson4_token_t)getNumberToken:(char **)token length:(NSUInteger *)length { + NSUInteger num_start = index; + if (bytes[index] == '-') { + index++; + + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + } + + sbjson4_token_t tok = sbjson4_token_integer; + if (bytes[index] == '0') { + index++; + + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + + if (isdigit(bytes[index])) { + [self setError:@"Leading zero is illegal in number"]; + return sbjson4_token_error; + } + } + + while (isdigit(bytes[index])) { + index++; + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + } + + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + + + if (bytes[index] == '.') { + index++; + tok = sbjson4_token_real; + + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + + NSUInteger frac_start = index; + while (isdigit(bytes[index])) { + index++; + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + } + + if (frac_start == index) { + [self setError:@"No digits after decimal point"]; + return sbjson4_token_error; + } + } + + if (bytes[index] == 'e' || bytes[index] == 'E') { + index++; + tok = sbjson4_token_real; + + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + + if (bytes[index] == '-' || bytes[index] == '+') { + index++; + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + } + + NSUInteger exp_start = index; + while (isdigit(bytes[index])) { + index++; + if (![self haveOneMoreCharacter]) + return sbjson4_token_eof; + } + + if (exp_start == index) { + [self setError:@"No digits in exponent"]; + return sbjson4_token_error; + } + + } + + if (num_start + 1 == index && bytes[num_start] == '-') { + [self setError:@"No digits after initial minus"]; + return sbjson4_token_error; + } + + *token = (char *)(bytes + num_start); + *length = index - num_start; + return tok; +} + + +- (sbjson4_token_t)getToken:(char **)token length:(NSUInteger *)length { + [self skipWhitespace]; + NSUInteger copyOfIndex = index; + + unichar ch; + if (![self getUnichar:&ch]) + return sbjson4_token_eof; + + sbjson4_token_t tok; + switch (ch) { + case '{': { + index++; + tok = sbjson4_token_object_open; + break; + } + case '}': { + index++; + tok = sbjson4_token_object_close; + break; + + } + case '[': { + index++; + tok = sbjson4_token_array_open; + break; + + } + case ']': { + index++; + tok = sbjson4_token_array_close; + break; + + } + case 't': { + tok = [self match:"true" retval:sbjson4_token_bool token:token length:length]; + break; + + } + case 'f': { + tok = [self match:"false" retval:sbjson4_token_bool token:token length:length]; + break; + + } + case 'n': { + tok = [self match:"null" retval:sbjson4_token_null token:token length:length]; + break; + + } + case ',': { + index++; + tok = sbjson4_token_value_sep; + break; + + } + case ':': { + index++; + tok = sbjson4_token_entry_sep; + break; + + } + case '"': { + tok = [self getStringToken:token length:length]; + break; + + } + case '-': + case '0' ... '9': { + tok = [self getNumberToken:token length:length]; + break; + + } + case '+': { + self.error = @"Leading + is illegal in number"; + tok = sbjson4_token_error; + break; + + } + default: { + self.error = [NSString stringWithFormat:@"Illegal start of token [%c]", ch]; + tok = sbjson4_token_error; + break; + } + } + + if (tok == sbjson4_token_eof) { + // We ran out of bytes before we could finish parsing the current token. + // Back up to the start & wait for more data. + index = copyOfIndex; + } + + return tok; +} + +@end diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamWriter.h b/Pods/SBJson/src/main/objc/SBJson4StreamWriter.h new file mode 100644 index 0000000..65e5410 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamWriter.h @@ -0,0 +1,210 @@ +/* + Copyright (c) 2010, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +/// Enable JSON writing for non-native objects +@interface NSObject (SBProxyForJson) + +/** + Allows generation of JSON for otherwise unsupported classes. + + If you have a custom class that you want to create a JSON representation + for you can implement this method in your class. It should return a + representation of your object defined in terms of objects that can be + translated into JSON. For example, a Person object might implement it like this: + + - (id)proxyForJson { + return [NSDictionary dictionaryWithObjectsAndKeys: + name, @"name", + phone, @"phone", + email, @"email", + nil]; + } + + */ +- (id)proxyForJson; + +@end + +@class SBJson4StreamWriter; + +@protocol SBJson4StreamWriterDelegate + +- (void)writer:(SBJson4StreamWriter *)writer appendBytes:(const void *)bytes length:(NSUInteger)length; + +@end + +@class SBJson4StreamWriterState; + +/** + The Stream Writer class. + + Accepts a stream of messages and writes JSON of these to its delegate object. + + This class provides a range of high-, mid- and low-level methods. You can mix + and match calls to these. For example, you may want to call -writeArrayOpen + to start an array and then repeatedly call -writeObject: with various objects + before finishing off with a -writeArrayClose call. + + Objective-C types are mapped to JSON types in the following way: + + - NSNull -> null + - NSString -> string + - NSArray -> array + - NSDictionary -> object + - NSNumber's -initWithBool:YES -> true + - NSNumber's -initWithBool:NO -> false + - NSNumber -> number + + NSNumber instances created with the -numberWithBool: method are + converted into the JSON boolean "true" and "false" values, and vice + versa. Any other NSNumber instances are converted to a JSON number the + way you would expect. + + @warning: In JSON the keys of an object must be strings. NSDictionary + keys need not be, but attempting to convert an NSDictionary with + non-string keys into JSON will throw an exception.* + + */ + +@interface SBJson4StreamWriter : NSObject { + NSMutableDictionary *cache; +} + +@property (nonatomic, weak) SBJson4StreamWriterState *state; // Internal +@property (nonatomic, readonly, strong) NSMutableArray *stateStack; // Internal + +/** + delegate to receive JSON output + Delegate that will receive messages with output. + */ +@property (nonatomic, weak) id delegate; + +/** + The maximum recursing depth. + + Defaults to 512. If the input is nested deeper than this the input will be deemed to be + malicious and the parser returns nil, signalling an error. ("Nested too deep".) You can + turn off this security feature by setting the maxDepth value to 0. + */ +@property(nonatomic) NSUInteger maxDepth; + +/** + Whether we are generating human-readable (multiline) JSON. + + Set whether or not to generate human-readable JSON. The default is NO, which produces + JSON without any whitespace between tokens. If set to YES, generates human-readable + JSON with linebreaks after each array value and dictionary key/value pair, indented two + spaces per nesting level. + */ +@property(nonatomic) BOOL humanReadable; + +/** + Whether or not to sort the dictionary keys in the output. + + If this is set to YES, the dictionary keys in the JSON output will be in sorted order. + (This is useful if you need to compare two structures, for example.) The default is NO. + */ +@property(nonatomic) BOOL sortKeys; + +/** + An optional comparator to be used if sortKeys is YES. + + If this is nil, sorting will be done via @selector(compare:). + */ +@property (nonatomic, copy) NSComparator sortKeysComparator; + +/// Contains the error description after an error has occured. +@property (nonatomic, copy) NSString *error; + +/** + Write an NSDictionary to the JSON stream. + @return YES if successful, or NO on failure + */ +- (BOOL)writeObject:(NSDictionary*)dict; + +/** + Write an NSArray to the JSON stream. + @return YES if successful, or NO on failure + */ +- (BOOL)writeArray:(NSArray *)array; + +/** + Start writing an Object to the stream + @return YES if successful, or NO on failure +*/ +- (BOOL)writeObjectOpen; + +/** + Close the current object being written + @return YES if successful, or NO on failure +*/ +- (BOOL)writeObjectClose; + +/** Start writing an Array to the stream + @return YES if successful, or NO on failure +*/ +- (BOOL)writeArrayOpen; + +/** Close the current Array being written + @return YES if successful, or NO on failure +*/ +- (BOOL)writeArrayClose; + +/** Write a null to the stream + @return YES if successful, or NO on failure +*/ +- (BOOL)writeNull; + +/** Write a boolean to the stream + @return YES if successful, or NO on failure +*/ +- (BOOL)writeBool:(BOOL)x; + +/** Write a Number to the stream + @return YES if successful, or NO on failure +*/ +- (BOOL)writeNumber:(NSNumber*)n; + +/** Write a String to the stream + @return YES if successful, or NO on failure +*/ +- (BOOL)writeString:(NSString*)s; + +@end + +@interface SBJson4StreamWriter (Private) +- (BOOL)writeValue:(id)v; +- (void)appendBytes:(const void *)bytes length:(NSUInteger)length; +@end + diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamWriter.m b/Pods/SBJson/src/main/objc/SBJson4StreamWriter.m new file mode 100644 index 0000000..6cbc520 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamWriter.m @@ -0,0 +1,357 @@ +/* + Copyright (c) 2010, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !__has_feature(objc_arc) +#error "This source file must be compiled with ARC enabled!" +#endif + +#import "SBJson4StreamWriter.h" +#import "SBJson4StreamWriterState.h" + +static NSNumber *kTrue; +static NSNumber *kFalse; +static NSNumber *kPositiveInfinity; +static NSNumber *kNegativeInfinity; + + +@implementation SBJson4StreamWriter + ++ (void)initialize { + kPositiveInfinity = [NSNumber numberWithDouble:+HUGE_VAL]; + kNegativeInfinity = [NSNumber numberWithDouble:-HUGE_VAL]; + kTrue = [NSNumber numberWithBool:YES]; + kFalse = [NSNumber numberWithBool:NO]; +} + +#pragma mark Housekeeping + +- (id)init { + self = [super init]; + if (self) { + _maxDepth = 32u; + _stateStack = [[NSMutableArray alloc] initWithCapacity:_maxDepth]; + _state = [SBJson4StreamWriterStateStart sharedInstance]; + cache = [[NSMutableDictionary alloc] initWithCapacity:32]; + } + return self; +} + +#pragma mark Methods + +- (void)appendBytes:(const void *)bytes length:(NSUInteger)length { + [_delegate writer:self appendBytes:bytes length:length]; +} + +- (BOOL)writeObject:(NSDictionary *)dict { + if (![self writeObjectOpen]) + return NO; + + NSArray *keys = [dict allKeys]; + + if (_sortKeys) { + if (_sortKeysComparator) { + keys = [keys sortedArrayWithOptions:NSSortStable usingComparator:_sortKeysComparator]; + } + else{ + keys = [keys sortedArrayUsingSelector:@selector(compare:)]; + } + } + + for (id k in keys) { + if (![k isKindOfClass:[NSString class]]) { + self.error = [NSString stringWithFormat:@"JSON object key must be string: %@", k]; + return NO; + } + + if (![self writeString:k]) + return NO; + if (![self writeValue:[dict objectForKey:k]]) + return NO; + } + + return [self writeObjectClose]; +} + +- (BOOL)writeArray:(NSArray*)array { + if (![self writeArrayOpen]) + return NO; + for (id v in array) + if (![self writeValue:v]) + return NO; + return [self writeArrayClose]; +} + + +- (BOOL)writeObjectOpen { + if ([_state isInvalidState:self]) return NO; + if ([_state expectingKey:self]) return NO; + [_state appendSeparator:self]; + if (_humanReadable && _stateStack.count) [_state appendWhitespace:self]; + + [_stateStack addObject:_state]; + self.state = [SBJson4StreamWriterStateObjectStart sharedInstance]; + + if (_maxDepth && _stateStack.count > _maxDepth) { + self.error = @"Nested too deep"; + return NO; + } + + [_delegate writer:self appendBytes:"{" length:1]; + return YES; +} + +- (BOOL)writeObjectClose { + if ([_state isInvalidState:self]) return NO; + + SBJson4StreamWriterState *prev = _state; + + self.state = [_stateStack lastObject]; + [_stateStack removeLastObject]; + + if (_humanReadable) [prev appendWhitespace:self]; + [_delegate writer:self appendBytes:"}" length:1]; + + [_state transitionState:self]; + return YES; +} + +- (BOOL)writeArrayOpen { + if ([_state isInvalidState:self]) return NO; + if ([_state expectingKey:self]) return NO; + [_state appendSeparator:self]; + if (_humanReadable && _stateStack.count) [_state appendWhitespace:self]; + + [_stateStack addObject:_state]; + self.state = [SBJson4StreamWriterStateArrayStart sharedInstance]; + + if (_maxDepth && _stateStack.count > _maxDepth) { + self.error = @"Nested too deep"; + return NO; + } + + [_delegate writer:self appendBytes:"[" length:1]; + return YES; +} + +- (BOOL)writeArrayClose { + if ([_state isInvalidState:self]) return NO; + if ([_state expectingKey:self]) return NO; + + SBJson4StreamWriterState *prev = _state; + + self.state = [_stateStack lastObject]; + [_stateStack removeLastObject]; + + if (_humanReadable) [prev appendWhitespace:self]; + [_delegate writer:self appendBytes:"]" length:1]; + + [_state transitionState:self]; + return YES; +} + +- (BOOL)writeNull { + if ([_state isInvalidState:self]) return NO; + if ([_state expectingKey:self]) return NO; + [_state appendSeparator:self]; + if (_humanReadable) [_state appendWhitespace:self]; + + [_delegate writer:self appendBytes:"null" length:4]; + [_state transitionState:self]; + return YES; +} + +- (BOOL)writeBool:(BOOL)x { + if ([_state isInvalidState:self]) return NO; + if ([_state expectingKey:self]) return NO; + [_state appendSeparator:self]; + if (_humanReadable) [_state appendWhitespace:self]; + + if (x) + [_delegate writer:self appendBytes:"true" length:4]; + else + [_delegate writer:self appendBytes:"false" length:5]; + [_state transitionState:self]; + return YES; +} + + +- (BOOL)writeValue:(id)o { + if ([o isKindOfClass:[NSDictionary class]]) { + return [self writeObject:o]; + + } else if ([o isKindOfClass:[NSArray class]]) { + return [self writeArray:o]; + + } else if ([o isKindOfClass:[NSString class]]) { + [self writeString:o]; + return YES; + + } else if ([o isKindOfClass:[NSNumber class]]) { + return [self writeNumber:o]; + + } else if ([o isKindOfClass:[NSNull class]]) { + return [self writeNull]; + + } else if ([o respondsToSelector:@selector(proxyForJson)]) { + return [self writeValue:[o proxyForJson]]; + + } + + self.error = [NSString stringWithFormat:@"JSON serialisation not supported for %@", [o class]]; + return NO; +} + +static const char *strForChar(int c) { + switch (c) { + case 0: return "\\u0000"; break; + case 1: return "\\u0001"; break; + case 2: return "\\u0002"; break; + case 3: return "\\u0003"; break; + case 4: return "\\u0004"; break; + case 5: return "\\u0005"; break; + case 6: return "\\u0006"; break; + case 7: return "\\u0007"; break; + case 8: return "\\b"; break; + case 9: return "\\t"; break; + case 10: return "\\n"; break; + case 11: return "\\u000b"; break; + case 12: return "\\f"; break; + case 13: return "\\r"; break; + case 14: return "\\u000e"; break; + case 15: return "\\u000f"; break; + case 16: return "\\u0010"; break; + case 17: return "\\u0011"; break; + case 18: return "\\u0012"; break; + case 19: return "\\u0013"; break; + case 20: return "\\u0014"; break; + case 21: return "\\u0015"; break; + case 22: return "\\u0016"; break; + case 23: return "\\u0017"; break; + case 24: return "\\u0018"; break; + case 25: return "\\u0019"; break; + case 26: return "\\u001a"; break; + case 27: return "\\u001b"; break; + case 28: return "\\u001c"; break; + case 29: return "\\u001d"; break; + case 30: return "\\u001e"; break; + case 31: return "\\u001f"; break; + case 34: return "\\\""; break; + case 92: return "\\\\"; break; + } + NSLog(@"FUTFUTFUT: -->'%c'<---", c); + return "FUTFUTFUT"; +} + +- (BOOL)writeString:(NSString*)string { + if ([_state isInvalidState:self]) return NO; + [_state appendSeparator:self]; + if (_humanReadable) [_state appendWhitespace:self]; + + NSMutableData *buf = [cache objectForKey:string]; + if (!buf) { + + NSUInteger len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; + const char *utf8 = [string UTF8String]; + NSUInteger written = 0, i = 0; + + buf = [NSMutableData dataWithCapacity:(NSUInteger)(len * 1.1f)]; + [buf appendBytes:"\"" length:1]; + + for (i = 0; i < len; i++) { + int c = utf8[i]; + BOOL isControlChar = c >= 0 && c < 32; + if (isControlChar || c == '"' || c == '\\') { + if (i - written) + [buf appendBytes:utf8 + written length:i - written]; + written = i + 1; + + const char *t = strForChar(c); + [buf appendBytes:t length:strlen(t)]; + } + } + + if (i - written) + [buf appendBytes:utf8 + written length:i - written]; + + [buf appendBytes:"\"" length:1]; + [cache setObject:buf forKey:string]; + } + + [_delegate writer:self appendBytes:[buf bytes] length:[buf length]]; + [_state transitionState:self]; + return YES; +} + +- (BOOL)writeNumber:(NSNumber*)number { + if (number == kTrue || number == kFalse) + return [self writeBool:[number boolValue]]; + + if ([_state isInvalidState:self]) return NO; + if ([_state expectingKey:self]) return NO; + [_state appendSeparator:self]; + if (_humanReadable) [_state appendWhitespace:self]; + + if ([kPositiveInfinity isEqualToNumber:number]) { + self.error = @"+Infinity is not a valid number in JSON"; + return NO; + + } else if ([kNegativeInfinity isEqualToNumber:number]) { + self.error = @"-Infinity is not a valid number in JSON"; + return NO; + + } else if (isnan([number doubleValue])) { + self.error = @"NaN is not a valid number in JSON"; + return NO; + } + + const char *objcType = [number objCType]; + char num[128]; + size_t len; + + switch (objcType[0]) { + case 'c': case 'i': case 's': case 'l': case 'q': + len = snprintf(num, sizeof num, "%lld", [number longLongValue]); + break; + case 'C': case 'I': case 'S': case 'L': case 'Q': + len = snprintf(num, sizeof num, "%llu", [number unsignedLongLongValue]); + break; + case 'f': case 'd': default: { + len = snprintf(num, sizeof num, "%.17g", [number doubleValue]); + break; + } + } + [_delegate writer:self appendBytes:num length: len]; + [_state transitionState:self]; + return YES; +} + +@end diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamWriterState.h b/Pods/SBJson/src/main/objc/SBJson4StreamWriterState.h new file mode 100644 index 0000000..020f715 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamWriterState.h @@ -0,0 +1,69 @@ +/* + Copyright (c) 2010, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +@class SBJson4StreamWriter; + +@interface SBJson4StreamWriterState : NSObject ++ (id)sharedInstance; +- (BOOL)isInvalidState:(SBJson4StreamWriter *)writer; +- (void)appendSeparator:(SBJson4StreamWriter *)writer; +- (BOOL)expectingKey:(SBJson4StreamWriter *)writer; +- (void)transitionState:(SBJson4StreamWriter *)writer; +- (void)appendWhitespace:(SBJson4StreamWriter *)writer; +@end + +@interface SBJson4StreamWriterStateObjectStart : SBJson4StreamWriterState +@end + +@interface SBJson4StreamWriterStateObjectKey : SBJson4StreamWriterStateObjectStart +@end + +@interface SBJson4StreamWriterStateObjectValue : SBJson4StreamWriterState +@end + +@interface SBJson4StreamWriterStateArrayStart : SBJson4StreamWriterState +@end + +@interface SBJson4StreamWriterStateArrayValue : SBJson4StreamWriterState +@end + +@interface SBJson4StreamWriterStateStart : SBJson4StreamWriterState +@end + +@interface SBJson4StreamWriterStateComplete : SBJson4StreamWriterState +@end + +@interface SBJson4StreamWriterStateError : SBJson4StreamWriterState +@end + diff --git a/Pods/SBJson/src/main/objc/SBJson4StreamWriterState.m b/Pods/SBJson/src/main/objc/SBJson4StreamWriterState.m new file mode 100644 index 0000000..ed7890a --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4StreamWriterState.m @@ -0,0 +1,147 @@ +/* + Copyright (c) 2010, Stig Brautaset. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + Neither the name of the the author nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !__has_feature(objc_arc) +#error "This source file must be compiled with ARC enabled!" +#endif + +#import "SBJson4StreamWriterState.h" +#import "SBJson4StreamWriter.h" + +#define SINGLETON \ ++ (id)sharedInstance { \ + static id state = nil; \ + if (!state) { \ + @synchronized(self) { \ + if (!state) state = [[self alloc] init]; \ + } \ + } \ + return state; \ +} + + +@implementation SBJson4StreamWriterState ++ (id)sharedInstance { return nil; } +- (BOOL)isInvalidState:(SBJson4StreamWriter *)writer { return NO; } +- (void)appendSeparator:(SBJson4StreamWriter *)writer {} +- (BOOL)expectingKey:(SBJson4StreamWriter *)writer { return NO; } +- (void)transitionState:(SBJson4StreamWriter *)writer {} +- (void)appendWhitespace:(SBJson4StreamWriter *)writer { + [writer appendBytes:"\n" length:1]; + for (NSUInteger i = 0; i < writer.stateStack.count; i++) + [writer appendBytes:" " length:2]; +} +@end + +@implementation SBJson4StreamWriterStateObjectStart + +SINGLETON + +- (void)transitionState:(SBJson4StreamWriter *)writer { + writer.state = [SBJson4StreamWriterStateObjectValue sharedInstance]; +} +- (BOOL)expectingKey:(SBJson4StreamWriter *)writer { + writer.error = @"JSON object key must be string"; + return YES; +} +@end + +@implementation SBJson4StreamWriterStateObjectKey + +SINGLETON + +- (void)appendSeparator:(SBJson4StreamWriter *)writer { + [writer appendBytes:"," length:1]; +} +@end + +@implementation SBJson4StreamWriterStateObjectValue + +SINGLETON + +- (void)appendSeparator:(SBJson4StreamWriter *)writer { + [writer appendBytes:":" length:1]; +} +- (void)transitionState:(SBJson4StreamWriter *)writer { + writer.state = [SBJson4StreamWriterStateObjectKey sharedInstance]; +} +- (void)appendWhitespace:(SBJson4StreamWriter *)writer { + [writer appendBytes:" " length:1]; +} +@end + +@implementation SBJson4StreamWriterStateArrayStart + +SINGLETON + +- (void)transitionState:(SBJson4StreamWriter *)writer { + writer.state = [SBJson4StreamWriterStateArrayValue sharedInstance]; +} +@end + +@implementation SBJson4StreamWriterStateArrayValue + +SINGLETON + +- (void)appendSeparator:(SBJson4StreamWriter *)writer { + [writer appendBytes:"," length:1]; +} +@end + +@implementation SBJson4StreamWriterStateStart + +SINGLETON + + +- (void)transitionState:(SBJson4StreamWriter *)writer { + writer.state = [SBJson4StreamWriterStateComplete sharedInstance]; +} +- (void)appendSeparator:(SBJson4StreamWriter *)writer { +} +@end + +@implementation SBJson4StreamWriterStateComplete + +SINGLETON + +- (BOOL)isInvalidState:(SBJson4StreamWriter *)writer { + writer.error = @"Stream is closed"; + return YES; +} +@end + +@implementation SBJson4StreamWriterStateError + +SINGLETON + +@end + diff --git a/Pods/SBJson/src/main/objc/SBJson4Writer.h b/Pods/SBJson/src/main/objc/SBJson4Writer.h new file mode 100644 index 0000000..17328e9 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4Writer.h @@ -0,0 +1,103 @@ +/* + Copyright (C) 2009 Stig Brautaset. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +/** + The JSON writer class. + + This uses SBJson4StreamWriter internally. + + */ + +@interface SBJson4Writer : NSObject + +/** + The maximum recursing depth. + + Defaults to 32. If the input is nested deeper than this the input will be deemed to be + malicious and the parser returns nil, signalling an error. ("Nested too deep".) You can + turn off this security feature by setting the maxDepth value to 0. + */ +@property(nonatomic) NSUInteger maxDepth; + +/** + Return an error trace, or nil if there was no errors. + + Note that this method returns the trace of the last method that failed. + You need to check the return value of the call you're making to figure out + if the call actually failed, before you know call this method. + */ +@property (nonatomic, readonly, copy) NSString *error; + +/** + Whether we are generating human-readable (multiline) JSON. + + Set whether or not to generate human-readable JSON. The default is NO, which produces + JSON without any whitespace. (Except inside strings.) If set to YES, generates human-readable + JSON with linebreaks after each array value and dictionary key/value pair, indented two + spaces per nesting level. + */ +@property(nonatomic) BOOL humanReadable; + +/** + Whether or not to sort the dictionary keys in the output. + + If this is set to YES, the dictionary keys in the JSON output will be in sorted order. + (This is useful if you need to compare two structures, for example.) The default is NO. + */ +@property(nonatomic) BOOL sortKeys; + +/** + An optional comparator to be used if sortKeys is YES. + + If this is nil, sorting will be done via @selector(compare:). + */ +@property (nonatomic, copy) NSComparator sortKeysComparator; + +/** + Generates string with JSON representation for the given object. + + Returns a string containing JSON representation of the passed in value, or nil on error. + If nil is returned and error is not NULL, *error can be interrogated to find the cause of the error. + + @param value any instance that can be represented as JSON text. + */ +- (NSString*)stringWithObject:(id)value; + +/** + Generates JSON representation for the given object. + + Returns an NSData object containing JSON represented as UTF8 text, or nil on error. + + @param value any instance that can be represented as JSON text. + */ +- (NSData*)dataWithObject:(id)value; + +@end diff --git a/Pods/SBJson/src/main/objc/SBJson4Writer.m b/Pods/SBJson/src/main/objc/SBJson4Writer.m new file mode 100644 index 0000000..9eec555 --- /dev/null +++ b/Pods/SBJson/src/main/objc/SBJson4Writer.m @@ -0,0 +1,102 @@ +/* + Copyright (C) 2009 Stig Brautaset. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the author nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if !__has_feature(objc_arc) +#error "This source file must be compiled with ARC enabled!" +#endif + +#import "SBJson4Writer.h" +#import "SBJson4StreamWriter.h" + + +@interface SBJson4Writer () < SBJson4StreamWriterDelegate > +@property (nonatomic, copy) NSString *error; +@property (nonatomic, strong) NSMutableData *acc; +@end + +@implementation SBJson4Writer + +- (id)init { + self = [super init]; + if (self) { + self.maxDepth = 32u; + } + return self; +} + + +- (NSString*)stringWithObject:(id)value { + NSData *data = [self dataWithObject:value]; + if (data) + return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + return nil; +} + +- (NSData*)dataWithObject:(id)object { + self.error = nil; + + self.acc = [[NSMutableData alloc] initWithCapacity:8096u]; + + SBJson4StreamWriter *streamWriter = [[SBJson4StreamWriter alloc] init]; + streamWriter.sortKeys = self.sortKeys; + streamWriter.maxDepth = self.maxDepth; + streamWriter.sortKeysComparator = self.sortKeysComparator; + streamWriter.humanReadable = self.humanReadable; + streamWriter.delegate = self; + + BOOL ok = NO; + if ([object isKindOfClass:[NSDictionary class]]) + ok = [streamWriter writeObject:object]; + + else if ([object isKindOfClass:[NSArray class]]) + ok = [streamWriter writeArray:object]; + + else if ([object respondsToSelector:@selector(proxyForJson)]) + return [self dataWithObject:[object proxyForJson]]; + else { + self.error = @"Not valid type for JSON"; + return nil; + } + + if (ok) + return self.acc; + + self.error = streamWriter.error; + return nil; +} + +#pragma mark SBJson4StreamWriterDelegate + +- (void)writer:(SBJson4StreamWriter *)writer appendBytes:(const void *)bytes length:(NSUInteger)length { + [self.acc appendBytes:bytes length:length]; +} + + + +@end diff --git a/README.md b/README.md index 8ea7ae4..8ccc955 100755 --- a/README.md +++ b/README.md @@ -3,13 +3,15 @@ Coderwall-iOS [![Build Status](https://modocache-oss.ci.cloudbees.com/job/Coderw ![iPhone Screenshots](https://github.com/OiNutter/Coderwall-iOS/raw/master/iPhones.png) -NOTE ----- +COMING SOON +----------- -For anyone wondering about an iOS6/iPhone 5 update, I'm talking to the guys at Coderwall -about getting some new stuff into their API so I can add all their new features to the app. -Due to the work it looks like it's going to take to support iPhone 5 and 4s layouts, I feel it -makes more sense to wait and do this as part of the big update. Will update when I have more info. +I'm currently in the midst of updating the App for iOS7 and iPhone5. It +will only support iOS6 from now on, but will continue to support both +iPhone and iPad, and will work on both iPhone screen sizes. I'm still +wanting to add support for some of Coderwall's newer features once we +can get them added to the API, but for now at least the app has got a +bit of a facelift. The App ------- diff --git a/Vendor/ILTesting b/Vendor/ILTesting index 4b971c1..2288fba 160000 --- a/Vendor/ILTesting +++ b/Vendor/ILTesting @@ -1 +1 @@ -Subproject commit 4b971c1c52395458e679dfa39a80f39f22394eb8 +Subproject commit 2288fbafd2b12104ef713dda5b781257c2268ffb diff --git a/iPhones.png b/iPhones.png old mode 100755 new mode 100644 index 5093aef..109ec1f Binary files a/iPhones.png and b/iPhones.png differ