├── .gitignore ├── .gitmodules ├── Example ├── Podfile ├── Podfile.lock ├── Pods │ ├── Expecta+Snapshots │ │ ├── EXPMatchers+FBSnapshotTest.h │ │ ├── EXPMatchers+FBSnapshotTest.m │ │ ├── LICENSE.md │ │ └── README.md │ ├── Expecta │ │ ├── LICENSE │ │ ├── README.md │ │ └── src │ │ │ ├── EXPBackwardCompatibility.h │ │ │ ├── EXPBackwardCompatibility.m │ │ │ ├── EXPBlockDefinedMatcher.h │ │ │ ├── EXPBlockDefinedMatcher.m │ │ │ ├── EXPDefines.h │ │ │ ├── EXPDoubleTuple.h │ │ │ ├── EXPDoubleTuple.m │ │ │ ├── EXPExpect.h │ │ │ ├── EXPExpect.m │ │ │ ├── EXPFloatTuple.h │ │ │ ├── EXPFloatTuple.m │ │ │ ├── EXPMatcher.h │ │ │ ├── EXPUnsupportedObject.h │ │ │ ├── EXPUnsupportedObject.m │ │ │ ├── Expecta.h │ │ │ ├── Expecta.m │ │ │ ├── ExpectaSupport.h │ │ │ ├── ExpectaSupport.m │ │ │ ├── NSObject+Expecta.h │ │ │ ├── NSValue+Expecta.h │ │ │ ├── NSValue+Expecta.m │ │ │ └── matchers │ │ │ ├── EXPMatcherHelpers.h │ │ │ ├── EXPMatcherHelpers.m │ │ │ ├── EXPMatchers+beCloseTo.h │ │ │ ├── EXPMatchers+beCloseTo.m │ │ │ ├── EXPMatchers+beFalsy.h │ │ │ ├── EXPMatchers+beFalsy.m │ │ │ ├── EXPMatchers+beGreaterThan.h │ │ │ ├── EXPMatchers+beGreaterThan.m │ │ │ ├── EXPMatchers+beGreaterThanOrEqualTo.h │ │ │ ├── EXPMatchers+beGreaterThanOrEqualTo.m │ │ │ ├── EXPMatchers+beIdenticalTo.h │ │ │ ├── EXPMatchers+beIdenticalTo.m │ │ │ ├── EXPMatchers+beInTheRangeOf.h │ │ │ ├── EXPMatchers+beInTheRangeOf.m │ │ │ ├── EXPMatchers+beInstanceOf.h │ │ │ ├── EXPMatchers+beInstanceOf.m │ │ │ ├── EXPMatchers+beKindOf.h │ │ │ ├── EXPMatchers+beKindOf.m │ │ │ ├── EXPMatchers+beLessThan.h │ │ │ ├── EXPMatchers+beLessThan.m │ │ │ ├── EXPMatchers+beLessThanOrEqualTo.h │ │ │ ├── EXPMatchers+beLessThanOrEqualTo.m │ │ │ ├── EXPMatchers+beNil.h │ │ │ ├── EXPMatchers+beNil.m │ │ │ ├── EXPMatchers+beSubclassOf.h │ │ │ ├── EXPMatchers+beSubclassOf.m │ │ │ ├── EXPMatchers+beSupersetOf.h │ │ │ ├── EXPMatchers+beSupersetOf.m │ │ │ ├── EXPMatchers+beTruthy.h │ │ │ ├── EXPMatchers+beTruthy.m │ │ │ ├── EXPMatchers+beginWith.h │ │ │ ├── EXPMatchers+beginWith.m │ │ │ ├── EXPMatchers+conformTo.h │ │ │ ├── EXPMatchers+conformTo.m │ │ │ ├── EXPMatchers+contain.h │ │ │ ├── EXPMatchers+contain.m │ │ │ ├── EXPMatchers+endWith.h │ │ │ ├── EXPMatchers+endWith.m │ │ │ ├── EXPMatchers+equal.h │ │ │ ├── EXPMatchers+equal.m │ │ │ ├── EXPMatchers+haveCountOf.h │ │ │ ├── EXPMatchers+haveCountOf.m │ │ │ ├── EXPMatchers+notify.h │ │ │ ├── EXPMatchers+notify.m │ │ │ ├── EXPMatchers+raise.h │ │ │ ├── EXPMatchers+raise.m │ │ │ ├── EXPMatchers+raiseWithReason.h │ │ │ ├── EXPMatchers+raiseWithReason.m │ │ │ ├── EXPMatchers+respondTo.h │ │ │ ├── EXPMatchers+respondTo.m │ │ │ └── EXPMatchers.h │ ├── FBSnapshotTestCase │ │ ├── FBSnapshotTestCase.h │ │ ├── FBSnapshotTestCase.m │ │ ├── FBSnapshotTestController.h │ │ ├── FBSnapshotTestController.m │ │ ├── LICENSE │ │ ├── README.md │ │ ├── UIImage+Compare.h │ │ ├── UIImage+Compare.m │ │ ├── UIImage+Diff.h │ │ └── UIImage+Diff.m │ ├── Headers │ │ ├── Private │ │ │ ├── Expecta+Snapshots │ │ │ │ └── EXPMatchers+FBSnapshotTest.h │ │ │ ├── Expecta │ │ │ │ ├── EXPBackwardCompatibility.h │ │ │ │ ├── EXPBlockDefinedMatcher.h │ │ │ │ ├── EXPDefines.h │ │ │ │ ├── EXPDoubleTuple.h │ │ │ │ ├── EXPExpect.h │ │ │ │ ├── EXPFloatTuple.h │ │ │ │ ├── EXPMatcher.h │ │ │ │ ├── EXPMatcherHelpers.h │ │ │ │ ├── EXPMatchers+beCloseTo.h │ │ │ │ ├── EXPMatchers+beFalsy.h │ │ │ │ ├── EXPMatchers+beGreaterThan.h │ │ │ │ ├── EXPMatchers+beGreaterThanOrEqualTo.h │ │ │ │ ├── EXPMatchers+beIdenticalTo.h │ │ │ │ ├── EXPMatchers+beInTheRangeOf.h │ │ │ │ ├── EXPMatchers+beInstanceOf.h │ │ │ │ ├── EXPMatchers+beKindOf.h │ │ │ │ ├── EXPMatchers+beLessThan.h │ │ │ │ ├── EXPMatchers+beLessThanOrEqualTo.h │ │ │ │ ├── EXPMatchers+beNil.h │ │ │ │ ├── EXPMatchers+beSubclassOf.h │ │ │ │ ├── EXPMatchers+beSupersetOf.h │ │ │ │ ├── EXPMatchers+beTruthy.h │ │ │ │ ├── EXPMatchers+beginWith.h │ │ │ │ ├── EXPMatchers+conformTo.h │ │ │ │ ├── EXPMatchers+contain.h │ │ │ │ ├── EXPMatchers+endWith.h │ │ │ │ ├── EXPMatchers+equal.h │ │ │ │ ├── EXPMatchers+haveCountOf.h │ │ │ │ ├── EXPMatchers+notify.h │ │ │ │ ├── EXPMatchers+raise.h │ │ │ │ ├── EXPMatchers+raiseWithReason.h │ │ │ │ ├── EXPMatchers+respondTo.h │ │ │ │ ├── EXPMatchers.h │ │ │ │ ├── EXPUnsupportedObject.h │ │ │ │ ├── Expecta.h │ │ │ │ ├── ExpectaSupport.h │ │ │ │ ├── NSObject+Expecta.h │ │ │ │ └── NSValue+Expecta.h │ │ │ ├── FBSnapshotTestCase │ │ │ │ ├── FBSnapshotTestCase.h │ │ │ │ ├── FBSnapshotTestController.h │ │ │ │ ├── UIImage+Compare.h │ │ │ │ └── UIImage+Diff.h │ │ │ ├── HexColors │ │ │ │ └── HexColor.h │ │ │ ├── Specta │ │ │ │ ├── SPTExample.h │ │ │ │ ├── SPTExampleGroup.h │ │ │ │ ├── SPTNestedReporter.h │ │ │ │ ├── SPTReporter.h │ │ │ │ ├── SPTSharedExampleGroups.h │ │ │ │ ├── SPTSpec.h │ │ │ │ ├── SPTXCTestCase.h │ │ │ │ ├── SPTXCTestReporter.h │ │ │ │ ├── Specta.h │ │ │ │ ├── SpectaSupport.h │ │ │ │ ├── SpectaTypes.h │ │ │ │ ├── SpectaUtility.h │ │ │ │ ├── XCTestCase+Specta.h │ │ │ │ ├── XCTestLog+Specta.h │ │ │ │ └── XCTestRun+Specta.h │ │ │ └── TSMessages │ │ │ │ ├── TSBlurView.h │ │ │ │ ├── TSMessage.h │ │ │ │ └── TSMessageView.h │ │ └── Public │ │ │ ├── Expecta+Snapshots │ │ │ └── EXPMatchers+FBSnapshotTest.h │ │ │ ├── Expecta │ │ │ ├── EXPBackwardCompatibility.h │ │ │ ├── EXPBlockDefinedMatcher.h │ │ │ ├── EXPDefines.h │ │ │ ├── EXPDoubleTuple.h │ │ │ ├── EXPExpect.h │ │ │ ├── EXPFloatTuple.h │ │ │ ├── EXPMatcher.h │ │ │ ├── EXPMatcherHelpers.h │ │ │ ├── EXPMatchers+beCloseTo.h │ │ │ ├── EXPMatchers+beFalsy.h │ │ │ ├── EXPMatchers+beGreaterThan.h │ │ │ ├── EXPMatchers+beGreaterThanOrEqualTo.h │ │ │ ├── EXPMatchers+beIdenticalTo.h │ │ │ ├── EXPMatchers+beInTheRangeOf.h │ │ │ ├── EXPMatchers+beInstanceOf.h │ │ │ ├── EXPMatchers+beKindOf.h │ │ │ ├── EXPMatchers+beLessThan.h │ │ │ ├── EXPMatchers+beLessThanOrEqualTo.h │ │ │ ├── EXPMatchers+beNil.h │ │ │ ├── EXPMatchers+beSubclassOf.h │ │ │ ├── EXPMatchers+beSupersetOf.h │ │ │ ├── EXPMatchers+beTruthy.h │ │ │ ├── EXPMatchers+beginWith.h │ │ │ ├── EXPMatchers+conformTo.h │ │ │ ├── EXPMatchers+contain.h │ │ │ ├── EXPMatchers+endWith.h │ │ │ ├── EXPMatchers+equal.h │ │ │ ├── EXPMatchers+haveCountOf.h │ │ │ ├── EXPMatchers+notify.h │ │ │ ├── EXPMatchers+raise.h │ │ │ ├── EXPMatchers+raiseWithReason.h │ │ │ ├── EXPMatchers+respondTo.h │ │ │ ├── EXPMatchers.h │ │ │ ├── EXPUnsupportedObject.h │ │ │ ├── Expecta.h │ │ │ ├── ExpectaSupport.h │ │ │ ├── NSObject+Expecta.h │ │ │ └── NSValue+Expecta.h │ │ │ ├── FBSnapshotTestCase │ │ │ ├── FBSnapshotTestCase.h │ │ │ ├── FBSnapshotTestController.h │ │ │ ├── UIImage+Compare.h │ │ │ └── UIImage+Diff.h │ │ │ ├── HexColors │ │ │ └── HexColor.h │ │ │ ├── Specta │ │ │ ├── SPTExample.h │ │ │ ├── SPTExampleGroup.h │ │ │ ├── SPTNestedReporter.h │ │ │ ├── SPTReporter.h │ │ │ ├── SPTSharedExampleGroups.h │ │ │ ├── SPTSpec.h │ │ │ ├── SPTXCTestCase.h │ │ │ ├── SPTXCTestReporter.h │ │ │ ├── Specta.h │ │ │ ├── SpectaSupport.h │ │ │ ├── SpectaTypes.h │ │ │ ├── SpectaUtility.h │ │ │ ├── XCTestCase+Specta.h │ │ │ ├── XCTestLog+Specta.h │ │ │ └── XCTestRun+Specta.h │ │ │ └── TSMessages │ │ │ ├── TSBlurView.h │ │ │ ├── TSMessage.h │ │ │ └── TSMessageView.h │ ├── HexColors │ │ ├── Classes │ │ │ ├── HexColors.h │ │ │ └── HexColors.m │ │ ├── LICENCE │ │ └── README.md │ ├── Local Podspecs │ │ ├── TSMessages.podspec │ │ └── TSMessages.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ ├── Specta │ │ ├── LICENSE │ │ ├── README.md │ │ └── src │ │ │ ├── SPTExample.h │ │ │ ├── SPTExample.m │ │ │ ├── SPTExampleGroup.h │ │ │ ├── SPTExampleGroup.m │ │ │ ├── SPTNestedReporter.h │ │ │ ├── SPTNestedReporter.m │ │ │ ├── SPTReporter.h │ │ │ ├── SPTReporter.m │ │ │ ├── SPTSharedExampleGroups.h │ │ │ ├── SPTSharedExampleGroups.m │ │ │ ├── SPTSpec.h │ │ │ ├── SPTSpec.m │ │ │ ├── SPTXCTestCase.h │ │ │ ├── SPTXCTestCase.m │ │ │ ├── SPTXCTestReporter.h │ │ │ ├── SPTXCTestReporter.m │ │ │ ├── Specta.h │ │ │ ├── Specta.m │ │ │ ├── SpectaSupport.h │ │ │ ├── SpectaTypes.h │ │ │ ├── SpectaUtility.h │ │ │ ├── SpectaUtility.m │ │ │ ├── XCTestCase+Specta.h │ │ │ ├── XCTestCase+Specta.m │ │ │ ├── XCTestLog+Specta.h │ │ │ ├── XCTestLog+Specta.m │ │ │ ├── XCTestRun+Specta.h │ │ │ └── XCTestRun+Specta.m │ └── Target Support Files │ │ ├── Pods-TSMessages-HexColors │ │ ├── Pods-TSMessages-HexColors-Private.xcconfig │ │ ├── Pods-TSMessages-HexColors-dummy.m │ │ ├── Pods-TSMessages-HexColors-prefix.pch │ │ └── Pods-TSMessages-HexColors.xcconfig │ │ ├── Pods-TSMessages-TSMessages │ │ ├── Pods-TSMessages-TSMessages-Private.xcconfig │ │ ├── Pods-TSMessages-TSMessages-dummy.m │ │ ├── Pods-TSMessages-TSMessages-prefix.pch │ │ └── Pods-TSMessages-TSMessages.xcconfig │ │ ├── Pods-TSMessages │ │ ├── Pods-TSMessages-acknowledgements.markdown │ │ ├── Pods-TSMessages-acknowledgements.plist │ │ ├── Pods-TSMessages-dummy.m │ │ ├── Pods-TSMessages-environment.h │ │ ├── Pods-TSMessages-resources.sh │ │ ├── Pods-TSMessages.debug.xcconfig │ │ └── Pods-TSMessages.release.xcconfig │ │ ├── Pods-Tests-Expecta+Snapshots │ │ ├── Pods-Tests-Expecta+Snapshots-Private.xcconfig │ │ ├── Pods-Tests-Expecta+Snapshots-dummy.m │ │ ├── Pods-Tests-Expecta+Snapshots-prefix.pch │ │ └── Pods-Tests-Expecta+Snapshots.xcconfig │ │ ├── Pods-Tests-Expecta │ │ ├── Pods-Tests-Expecta-Private.xcconfig │ │ ├── Pods-Tests-Expecta-dummy.m │ │ ├── Pods-Tests-Expecta-prefix.pch │ │ └── Pods-Tests-Expecta.xcconfig │ │ ├── Pods-Tests-FBSnapshotTestCase │ │ ├── Pods-Tests-FBSnapshotTestCase-Private.xcconfig │ │ ├── Pods-Tests-FBSnapshotTestCase-dummy.m │ │ ├── Pods-Tests-FBSnapshotTestCase-prefix.pch │ │ └── Pods-Tests-FBSnapshotTestCase.xcconfig │ │ ├── Pods-Tests-HexColors │ │ ├── Pods-Tests-HexColors-Private.xcconfig │ │ ├── Pods-Tests-HexColors-dummy.m │ │ ├── Pods-Tests-HexColors-prefix.pch │ │ └── Pods-Tests-HexColors.xcconfig │ │ ├── Pods-Tests-Specta │ │ ├── Pods-Tests-Specta-Private.xcconfig │ │ ├── Pods-Tests-Specta-dummy.m │ │ ├── Pods-Tests-Specta-prefix.pch │ │ └── Pods-Tests-Specta.xcconfig │ │ ├── Pods-Tests-TSMessages │ │ ├── Pods-Tests-TSMessages-Private.xcconfig │ │ ├── Pods-Tests-TSMessages-dummy.m │ │ ├── Pods-Tests-TSMessages-prefix.pch │ │ └── Pods-Tests-TSMessages.xcconfig │ │ └── Pods-Tests │ │ ├── Pods-Tests-acknowledgements.markdown │ │ ├── Pods-Tests-acknowledgements.plist │ │ ├── Pods-Tests-dummy.m │ │ ├── Pods-Tests-environment.h │ │ ├── Pods-Tests-resources.sh │ │ ├── Pods-Tests.debug.xcconfig │ │ └── Pods-Tests.release.xcconfig ├── TSMessages.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── TSMessages.xccheckout │ └── xcshareddata │ │ └── xcschemes │ │ └── TSMessages.xcscheme ├── TSMessages.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── TSMessages.xccheckout ├── TSMessages │ ├── AlternativeDesign.json │ ├── Base.lproj │ │ └── Main_iPhone.storyboard │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── LaunchImage.launchimage │ │ │ └── Contents.json │ ├── TSAppDelegate.h │ ├── TSAppDelegate.m │ ├── TSDemoViewController.h │ ├── TSDemoViewController.m │ ├── TSMessages-Info.plist │ ├── TSMessages-Prefix.pch │ ├── TSViewController.h │ ├── TSViewController.m │ ├── en.lproj │ │ └── InfoPlist.strings │ └── main.m └── Tests │ ├── ReferenceImages │ └── InitialSpecsSpec │ │ └── TSMessageViewErrorDefault@2x.png │ ├── Tests-Info.plist │ ├── Tests-Prefix.pch │ ├── Tests.m │ └── en.lproj │ └── InfoPlist.strings ├── LICENSE ├── Pod ├── Assets │ ├── .gitkeep │ ├── NotificationBackgroundError.png │ ├── NotificationBackgroundError@2x.png │ ├── NotificationBackgroundErrorIcon.png │ ├── NotificationBackgroundErrorIcon@2x.png │ ├── NotificationBackgroundMessage.png │ ├── NotificationBackgroundMessage@2x.png │ ├── NotificationBackgroundSuccess.png │ ├── NotificationBackgroundSuccess@2x.png │ ├── NotificationBackgroundSuccessIcon.png │ ├── NotificationBackgroundSuccessIcon@2x.png │ ├── NotificationBackgroundWarning.png │ ├── NotificationBackgroundWarning@2x.png │ ├── NotificationBackgroundWarningIcon.png │ ├── NotificationBackgroundWarningIcon@2x.png │ ├── NotificationButtonBackground.png │ ├── NotificationButtonBackground@2x.png │ └── TSMessagesDefaultDesign.json └── Classes │ ├── .gitkeep │ ├── TSBlurView.h │ ├── TSBlurView.m │ ├── TSMessage.h │ ├── TSMessage.m │ ├── TSMessageView.h │ └── TSMessageView.m ├── README.md ├── TSMessages.podspec ├── podspecs ├── 0.9.1 │ └── TSMessages.podspec.json ├── 0.9.10 │ └── TSMessages.podspec.json ├── 0.9.11 │ └── TSMessages.podspec.json ├── 0.9.12 │ └── TSMessages.podspec.json ├── 0.9.2 │ └── TSMessages.podspec.json ├── 0.9.3 │ └── TSMessages.podspec.json ├── 0.9.4 │ └── TSMessages.podspec.json ├── 0.9.5 │ └── TSMessages.podspec.json ├── 0.9.6 │ └── TSMessages.podspec.json ├── 0.9.7 │ └── TSMessages.podspec.json ├── 0.9.8 │ └── TSMessages.podspec.json ├── 0.9.9 │ └── TSMessages.podspec.json └── 0.9 │ └── TSMessages.podspec.json └── screenshots ├── TSMessages0.png ├── TSMessages1.png ├── TSMessages2.png ├── TSMessages3.png └── TSMessages4.png /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Xcode 3 | .DS_Store 4 | */build/* 5 | *.pbxuser 6 | !default.pbxuser 7 | *.mode1v3 8 | !default.mode1v3 9 | *.mode2v3 10 | !default.mode2v3 11 | *.perspectivev3 12 | !default.perspectivev3 13 | xcuserdata 14 | profile 15 | *.moved-aside 16 | DerivedData 17 | .idea/ 18 | *.hmap 19 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Submodules/HexColors"] 2 | path = Submodules/HexColors 3 | url = https://github.com/mRs-/HexColors.git 4 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | 3 | 4 | target 'TSMessages', :exclusive => true do 5 | pod "TSMessages", :path => "../" 6 | end 7 | 8 | target 'Tests', :exclusive => true do 9 | pod "TSMessages", :path => "../" 10 | 11 | pod 'Specta', '~> 0.2.1' 12 | pod 'Expecta' 13 | pod 'FBSnapshotTestCase' 14 | pod 'Expecta+Snapshots' 15 | end 16 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Expecta (0.3.1) 3 | - Expecta+Snapshots (1.3.1): 4 | - Expecta 5 | - FBSnapshotTestCase 6 | - FBSnapshotTestCase (1.4) 7 | - HexColors (2.2.1) 8 | - Specta (0.2.1) 9 | - TSMessages (0.9.12): 10 | - HexColors 11 | 12 | DEPENDENCIES: 13 | - Expecta 14 | - Expecta+Snapshots 15 | - FBSnapshotTestCase 16 | - Specta (~> 0.2.1) 17 | - TSMessages (from `../`) 18 | 19 | EXTERNAL SOURCES: 20 | TSMessages: 21 | :path: ../ 22 | 23 | SPEC CHECKSUMS: 24 | Expecta: 03aabd0a89d8dea843baecb19a7fd7466a69a31d 25 | Expecta+Snapshots: 4a56b9411c6ed156987072e52c39de67d864015a 26 | FBSnapshotTestCase: f9f225b5ba11c8d8c09075590490df16314e4d62 27 | HexColors: 01384d2bbe8dc4ffa43c3b4135db6e976952d153 28 | Specta: 9141310f46b1f68b676650ff2854e1ed0b74163a 29 | TSMessages: 3e67c231abe604e5ab732050ba6dc99df4650765 30 | 31 | COCOAPODS: 0.36.0.beta.1 32 | -------------------------------------------------------------------------------- /Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPMatchers+FBSnapshotTest.h 3 | // Artsy 4 | // 5 | // Created by Daniel Doubrovkine on 1/14/14. 6 | // Copyright (c) 2014 Artsy Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface EXPExpectFBSnapshotTest : NSObject 12 | @end 13 | 14 | /// Set the default folder for image tests to run in 15 | extern void setGlobalReferenceImageDir(char *reference); 16 | 17 | EXPMatcherInterface(haveValidSnapshot, (void)); 18 | EXPMatcherInterface(recordSnapshot, (void)); 19 | 20 | EXPMatcherInterface(haveValidSnapshotNamed, (NSString *snapshot)); 21 | EXPMatcherInterface(recordSnapshotNamed, (NSString *snapshot)); 22 | -------------------------------------------------------------------------------- /Example/Pods/Expecta+Snapshots/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2014 Daniel Doubrovkine, Artsy Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2012 Specta Team - https://github.com/specta 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPBackwardCompatibility.h: -------------------------------------------------------------------------------- 1 | #import "EXPExpect.h" 2 | 3 | @interface EXPExpect (BackwardCompatiblity) 4 | 5 | @property(nonatomic, readonly) EXPExpect *Not; 6 | @property(nonatomic, readonly) EXPExpect *isGoing; 7 | @property(nonatomic, readonly) EXPExpect *isNotGoing; 8 | 9 | @end 10 | 11 | #define toBeFalsy beFalsy 12 | #define toBeGreaterThan beGreaterThan 13 | #define toBeGreaterThanOrEqualTo beGreaterThanOrEqualTo 14 | #define toBeIdenticalTo beIdenticalTo 15 | #define toBeInTheRangeOf beInTheRangeOf 16 | #define toBeInstanceOf beInstanceOf 17 | #define toBeAnInstanceOf beInstanceOf 18 | #define toBeMemberOf beInstanceOf 19 | #define toBeAMemberOf beInstanceOf 20 | #define toBeKindOf beKindOf 21 | #define toBeAKindOf beKindOf 22 | #define toBeLessThan beLessThan 23 | #define toBeLessThanOrEqualTo beLessThanOrEqualTo 24 | #define toBeNil beNil 25 | #define toBeNull beNil 26 | #define toBeSubclassOf beSubclassOf 27 | #define toBeASubclassOf beSubclassOf 28 | #define toBeTruthy beTruthy 29 | #define toBeFalsy beFalsy 30 | #define toContain contain 31 | #define toEqual equal 32 | #define toBeCloseTo beCloseTo 33 | #define toBeCloseToWithin beCloseToWithin 34 | #define toHaveCount haveCountOf 35 | #define toHaveCountOf haveCountOf 36 | #define toHaveACountOf haveCountOf 37 | #define toHaveLength haveCountOf 38 | #define toHaveLengthOf haveCountOf 39 | #define toHaveALengthOf haveCountOf 40 | #define toBeEmpty beEmpty 41 | #define toRaise raise 42 | #define toRaiseAny raiseAny 43 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPBackwardCompatibility.m: -------------------------------------------------------------------------------- 1 | #import "EXPBackwardCompatibility.h" 2 | 3 | @implementation EXPExpect (BackwardCompatiblity) 4 | 5 | - (EXPExpect *)Not { 6 | return self.toNot; 7 | } 8 | 9 | - (EXPExpect *)isGoing { 10 | return self.will; 11 | } 12 | 13 | - (EXPExpect *)isNotGoing { 14 | return self.willNot; 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPBlockDefinedMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPRuntimeMatcher.h 3 | // Expecta 4 | // 5 | // Created by Luke Redpath on 26/03/2012. 6 | // Copyright (c) 2012 Peter Jihoon Kim. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EXPMatcher.h" 11 | #import "EXPDefines.h" 12 | 13 | @interface EXPBlockDefinedMatcher : NSObject { 14 | EXPBoolBlock prerequisiteBlock; 15 | EXPBoolBlock matchBlock; 16 | EXPStringBlock failureMessageForToBlock; 17 | EXPStringBlock failureMessageForNotToBlock; 18 | } 19 | 20 | @property(nonatomic, copy) EXPBoolBlock prerequisiteBlock; 21 | @property(nonatomic, copy) EXPBoolBlock matchBlock; 22 | @property(nonatomic, copy) EXPStringBlock failureMessageForToBlock; 23 | @property(nonatomic, copy) EXPStringBlock failureMessageForNotToBlock; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPBlockDefinedMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXPRuntimeMatcher.m 3 | // Expecta 4 | // 5 | // Created by Luke Redpath on 26/03/2012. 6 | // Copyright (c) 2012 Peter Jihoon Kim. All rights reserved. 7 | // 8 | 9 | #import "EXPBlockDefinedMatcher.h" 10 | 11 | @implementation EXPBlockDefinedMatcher 12 | 13 | - (void)dealloc 14 | { 15 | self.prerequisiteBlock = nil; 16 | self.matchBlock = nil; 17 | self.failureMessageForToBlock = nil; 18 | self.failureMessageForNotToBlock = nil; 19 | 20 | [super dealloc]; 21 | } 22 | 23 | @synthesize prerequisiteBlock; 24 | @synthesize matchBlock; 25 | @synthesize failureMessageForToBlock; 26 | @synthesize failureMessageForNotToBlock; 27 | 28 | - (BOOL)meetsPrerequesiteFor:(id)actual 29 | { 30 | if (self.prerequisiteBlock) { 31 | return self.prerequisiteBlock(); 32 | } 33 | return YES; 34 | } 35 | 36 | - (BOOL)matches:(id)actual 37 | { 38 | if (self.matchBlock) { 39 | return self.matchBlock(); 40 | } 41 | return YES; 42 | } 43 | 44 | - (NSString *)failureMessageForTo:(id)actual 45 | { 46 | if (self.failureMessageForToBlock) { 47 | return self.failureMessageForToBlock(); 48 | } 49 | return nil; 50 | } 51 | 52 | - (NSString *)failureMessageForNotTo:(id)actual 53 | { 54 | if (self.failureMessageForNotToBlock) { 55 | return self.failureMessageForNotToBlock(); 56 | } 57 | return nil; 58 | } 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPDefines.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPDefines.h 3 | // Expecta 4 | // 5 | // Created by Luke Redpath on 26/03/2012. 6 | // Copyright (c) 2012 Peter Jihoon Kim. All rights reserved. 7 | // 8 | 9 | #ifndef Expecta_EXPDefines_h 10 | #define Expecta_EXPDefines_h 11 | 12 | typedef void (^EXPBasicBlock)(); 13 | typedef id (^EXPIdBlock)(); 14 | typedef BOOL (^EXPBoolBlock)(); 15 | typedef NSString *(^EXPStringBlock)(); 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPDoubleTuple.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface EXPDoubleTuple : NSObject { 4 | double *_values; 5 | size_t _size; 6 | } 7 | 8 | @property (nonatomic, assign) double *values; 9 | @property (nonatomic, assign) size_t size; 10 | 11 | - (id)initWithDoubleValues:(double *)values size:(size_t)size; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPDoubleTuple.m: -------------------------------------------------------------------------------- 1 | #import "EXPDoubleTuple.h" 2 | 3 | @implementation EXPDoubleTuple 4 | 5 | @synthesize values = _values, size = _size; 6 | 7 | - (id)initWithDoubleValues:(double *)values size:(size_t)size { 8 | if ((self = [super init])) { 9 | self.values = malloc(sizeof(double) * size); 10 | memcpy(self.values, values, sizeof(double) * size); 11 | self.size = size; 12 | } 13 | return self; 14 | } 15 | 16 | - (void)dealloc { 17 | free(self.values); 18 | [super dealloc]; 19 | } 20 | 21 | - (BOOL)isEqual:(id)object { 22 | if (![object isKindOfClass:[EXPDoubleTuple class]]) return NO; 23 | EXPDoubleTuple *other = (EXPDoubleTuple *)object; 24 | if (self.size == other.size) { 25 | for (int i = 0; i < self.size; ++i) { 26 | if (self.values[i] != other.values[i]) return NO; 27 | } 28 | return YES; 29 | } 30 | return NO; 31 | } 32 | 33 | - (NSString *)description { 34 | if (self.size == 2) { 35 | return [NSString stringWithFormat:@"Double tuple: {%f, %f}", self.values[0], self.values[1]]; 36 | } else if (self.size == 4) { 37 | return [NSString stringWithFormat:@"Double tuple: {%f, %f, %f, %f}", self.values[0], self.values[1], self.values[2], self.values[3]]; 38 | } 39 | return [NSString stringWithFormat:@"Double tuple of unexpected size %zd, sadly", self.size]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPExpect.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "EXPMatcher.h" 3 | #import "EXPDefines.h" 4 | 5 | @interface EXPExpect : NSObject { 6 | EXPIdBlock _actualBlock; 7 | id _testCase; 8 | int _lineNumber; 9 | char *_fileName; 10 | BOOL _negative; 11 | BOOL _asynchronous; 12 | NSTimeInterval _timeout; 13 | } 14 | 15 | @property(nonatomic, copy) EXPIdBlock actualBlock; 16 | @property(nonatomic, readonly) id actual; 17 | @property(nonatomic, assign) id testCase; 18 | @property(nonatomic) int lineNumber; 19 | @property(nonatomic) const char *fileName; 20 | @property(nonatomic) BOOL negative; 21 | @property(nonatomic) BOOL asynchronous; 22 | @property(nonatomic) NSTimeInterval timeout; 23 | 24 | @property(nonatomic, readonly) EXPExpect *to; 25 | @property(nonatomic, readonly) EXPExpect *toNot; 26 | @property(nonatomic, readonly) EXPExpect *notTo; 27 | @property(nonatomic, readonly) EXPExpect *will; 28 | @property(nonatomic, readonly) EXPExpect *willNot; 29 | @property(nonatomic, readonly) EXPExpect *(^after)(NSTimeInterval timeInterval); 30 | 31 | - (id)initWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName; 32 | + (EXPExpect *)expectWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName; 33 | 34 | - (void)applyMatcher:(id)matcher; 35 | - (void)applyMatcher:(id)matcher to:(NSObject **)actual; 36 | 37 | @end 38 | 39 | @interface EXPDynamicPredicateMatcher : NSObject { 40 | EXPExpect *_expectation; 41 | SEL _selector; 42 | } 43 | - (id)initWithExpectation:(EXPExpect *)expectation selector:(SEL)selector; 44 | - (void (^)(void))dispatch; 45 | @end 46 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPFloatTuple.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface EXPFloatTuple : NSObject { 4 | float *_values; 5 | size_t _size; 6 | } 7 | 8 | @property (nonatomic, assign) float *values; 9 | @property (nonatomic, assign) size_t size; 10 | 11 | - (id)initWithFloatValues:(float *)values size:(size_t)size; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPFloatTuple.m: -------------------------------------------------------------------------------- 1 | #import "EXPFloatTuple.h" 2 | 3 | @implementation EXPFloatTuple 4 | 5 | @synthesize values = _values, size = _size; 6 | 7 | - (id)initWithFloatValues:(float *)values size:(size_t)size { 8 | if ((self = [super init])) { 9 | self.values = malloc(sizeof(float) * size); 10 | memcpy(self.values, values, sizeof(float) * size); 11 | self.size = size; 12 | } 13 | return self; 14 | } 15 | 16 | - (void)dealloc { 17 | free(self.values); 18 | [super dealloc]; 19 | } 20 | 21 | - (BOOL)isEqual:(id)object { 22 | if (![object isKindOfClass:[EXPFloatTuple class]]) return NO; 23 | EXPFloatTuple *other = (EXPFloatTuple *)object; 24 | if (self.size == other.size) { 25 | for (int i = 0; i < self.size; ++i) { 26 | if (self.values[i] != other.values[i]) return NO; 27 | } 28 | return YES; 29 | } 30 | return NO; 31 | } 32 | 33 | - (NSString *)description { 34 | if (self.size == 2) { 35 | return [NSString stringWithFormat:@"Float tuple: {%f, %f}", self.values[0], self.values[1]]; 36 | } else if (self.size == 4) { 37 | return [NSString stringWithFormat:@"Float tuple: {%f, %f, %f, %f}", self.values[0], self.values[1], self.values[2], self.values[3]]; 38 | } 39 | return [NSString stringWithFormat:@"Float tuple of unexpected size %zd, sadly", self.size]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPMatcher.h 3 | // Expecta 4 | // 5 | // Created by Luke Redpath on 26/03/2012. 6 | // Copyright (c) 2012 Peter Jihoon Kim. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol EXPMatcher 12 | 13 | - (BOOL)matches:(id)actual; 14 | 15 | @optional 16 | - (BOOL)meetsPrerequesiteFor:(id)actual; 17 | - (NSString *)failureMessageForTo:(id)actual; 18 | - (NSString *)failureMessageForNotTo:(id)actual; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPUnsupportedObject.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface EXPUnsupportedObject : NSObject { 4 | NSString *_type; 5 | } 6 | 7 | @property (nonatomic, retain) NSString *type; 8 | 9 | - (id)initWithType:(NSString *)type; 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/EXPUnsupportedObject.m: -------------------------------------------------------------------------------- 1 | #import "EXPUnsupportedObject.h" 2 | 3 | @implementation EXPUnsupportedObject 4 | 5 | @synthesize type=_type; 6 | 7 | - (id)initWithType:(NSString *)type { 8 | self = [super init]; 9 | if(self) { 10 | self.type = type; 11 | } 12 | return self; 13 | } 14 | 15 | - (void)dealloc { 16 | self.type = nil; 17 | [super dealloc]; 18 | } 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/Expecta.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "ExpectaSupport.h" 3 | 4 | #define EXPObjectify(value) _EXPObjectify(@encode(__typeof__((value))), (value)) 5 | 6 | #define EXP_expect(actual) _EXP_expect(self, __LINE__, __FILE__, ^id{ return EXPObjectify((actual)); }) 7 | 8 | #define EXPMatcherInterface(matcherName, matcherArguments) _EXPMatcherInterface(matcherName, matcherArguments) 9 | #define EXPMatcherImplementationBegin(matcherName, matcherArguments) _EXPMatcherImplementationBegin(matcherName, matcherArguments) 10 | #define EXPMatcherImplementationEnd _EXPMatcherImplementationEnd 11 | 12 | #import "EXPMatchers.h" 13 | 14 | #ifdef EXP_SHORTHAND 15 | # define expect(...) EXP_expect((__VA_ARGS__)) 16 | #endif 17 | 18 | #ifdef EXP_OLD_SYNTAX 19 | # import "EXPBackwardCompatibility.h" 20 | #endif 21 | 22 | @interface Expecta : NSObject 23 | 24 | + (NSTimeInterval)asynchronousTestTimeout; 25 | + (void)setAsynchronousTestTimeout:(NSTimeInterval)timeout; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/Expecta.m: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | @implementation Expecta 4 | 5 | static NSTimeInterval _asynchronousTestTimeout = 1.0; 6 | 7 | + (NSTimeInterval)asynchronousTestTimeout { 8 | return _asynchronousTestTimeout; 9 | } 10 | 11 | + (void)setAsynchronousTestTimeout:(NSTimeInterval)timeout { 12 | _asynchronousTestTimeout = timeout; 13 | } 14 | 15 | @end -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/ExpectaSupport.h: -------------------------------------------------------------------------------- 1 | #import "EXPExpect.h" 2 | #import "EXPBlockDefinedMatcher.h" 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | id _EXPObjectify(const char *type, ...); 9 | EXPExpect *_EXP_expect(id testCase, int lineNumber, const char *fileName, EXPIdBlock actualBlock); 10 | 11 | void EXPFail(id testCase, int lineNumber, const char *fileName, NSString *message); 12 | NSString *EXPDescribeObject(id obj); 13 | 14 | void EXP_prerequisite(EXPBoolBlock block); 15 | void EXP_match(EXPBoolBlock block); 16 | void EXP_failureMessageForTo(EXPStringBlock block); 17 | void EXP_failureMessageForNotTo(EXPStringBlock block); 18 | 19 | #if __has_feature(objc_arc) 20 | #define _EXP_release(x) 21 | #define _EXP_autorelease(x) (x) 22 | 23 | #else 24 | #define _EXP_release(x) [x release] 25 | #define _EXP_autorelease(x) [x autorelease] 26 | #endif 27 | 28 | // workaround for the categories bug: http://developer.apple.com/library/mac/#qa/qa1490/_index.html 29 | #define EXPFixCategoriesBug(name) \ 30 | __attribute__((constructor)) static void EXPFixCategoriesBug##name() {} 31 | 32 | #define _EXPMatcherInterface(matcherName, matcherArguments) \ 33 | @interface EXPExpect (matcherName##Matcher) \ 34 | @property (nonatomic, readonly) void(^ matcherName) matcherArguments; \ 35 | @end 36 | 37 | #define _EXPMatcherImplementationBegin(matcherName, matcherArguments) \ 38 | EXPFixCategoriesBug(EXPMatcher##matcherName##Matcher); \ 39 | @implementation EXPExpect (matcherName##Matcher) \ 40 | @dynamic matcherName;\ 41 | - (void(^) matcherArguments) matcherName { \ 42 | EXPBlockDefinedMatcher *matcher = [[EXPBlockDefinedMatcher alloc] init]; \ 43 | [[[NSThread currentThread] threadDictionary] setObject:matcher forKey:@"EXP_currentMatcher"]; \ 44 | __block id actual = self.actual; \ 45 | __block void (^prerequisite)(EXPBoolBlock block) = ^(EXPBoolBlock block) { EXP_prerequisite(block); }; \ 46 | __block void (^match)(EXPBoolBlock block) = ^(EXPBoolBlock block) { EXP_match(block); }; \ 47 | __block void (^failureMessageForTo)(EXPStringBlock block) = ^(EXPStringBlock block) { EXP_failureMessageForTo(block); }; \ 48 | __block void (^failureMessageForNotTo)(EXPStringBlock block) = ^(EXPStringBlock block) { EXP_failureMessageForNotTo(block); }; \ 49 | prerequisite(nil); match(nil); failureMessageForTo(nil); failureMessageForNotTo(nil); \ 50 | void (^matcherBlock) matcherArguments = [^ matcherArguments { \ 51 | { 52 | 53 | #define _EXPMatcherImplementationEnd \ 54 | } \ 55 | [self applyMatcher:matcher to:&actual]; \ 56 | } copy]; \ 57 | _EXP_release(matcher); \ 58 | return _EXP_autorelease(matcherBlock); \ 59 | } \ 60 | @end 61 | 62 | #ifdef __cplusplus 63 | } 64 | #endif 65 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/NSObject+Expecta.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface NSObject (Expecta) 4 | 5 | #ifdef USE_XCTEST 6 | - (void)recordFailureWithDescription:(NSString *)description 7 | inFile:(NSString *)filename 8 | atLine:(NSUInteger)lineNumber 9 | expected:(BOOL)expected; 10 | #else 11 | - (void)failWithException:(NSException *)exception; 12 | #endif 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/NSValue+Expecta.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface NSValue (Expecta) 4 | 5 | - (const char *)_EXP_objCType; 6 | - (void)set_EXP_objCType:(const char *)_EXP_objCType; 7 | 8 | @end 9 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/NSValue+Expecta.m: -------------------------------------------------------------------------------- 1 | #import "NSValue+Expecta.h" 2 | #import 3 | #import "Expecta.h" 4 | 5 | EXPFixCategoriesBug(NSValue_Expecta); 6 | 7 | @implementation NSValue (Expecta) 8 | 9 | static char _EXP_typeKey; 10 | 11 | - (const char *)_EXP_objCType { 12 | return [(NSString *)objc_getAssociatedObject(self, &_EXP_typeKey) cStringUsingEncoding:NSASCIIStringEncoding]; 13 | } 14 | 15 | - (void)set_EXP_objCType:(const char *)_EXP_objCType { 16 | objc_setAssociatedObject(self, &_EXP_typeKey, 17 | [NSString stringWithCString:_EXP_objCType encoding:NSASCIIStringEncoding], 18 | OBJC_ASSOCIATION_COPY_NONATOMIC); 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatcherHelpers.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | BOOL EXPIsValuePointer(NSValue *value); 4 | BOOL EXPIsNumberFloat(NSNumber *number); 5 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatcherHelpers.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatcherHelpers.h" 2 | 3 | BOOL EXPIsValuePointer(NSValue *value) { 4 | return [value objCType][0] == @encode(void *)[0]; 5 | } 6 | 7 | BOOL EXPIsNumberFloat(NSNumber *number) { 8 | return strcmp([number objCType], @encode(float)) == 0; 9 | } 10 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(_beCloseToWithin, (id expected, id within)); 4 | EXPMatcherInterface(beCloseToWithin, (id expected, id within)); 5 | 6 | #define beCloseTo(expected) _beCloseToWithin(EXPObjectify((expected)), nil) 7 | #define beCloseToWithin(expected, range) _beCloseToWithin(EXPObjectify((expected)), EXPObjectify((range))) 8 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beCloseTo.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(_beCloseToWithin, (id expected, id within)) { 5 | prerequisite(^BOOL{ 6 | return [actual isKindOfClass:[NSNumber class]] && 7 | [expected isKindOfClass:[NSNumber class]] && 8 | ([within isKindOfClass:[NSNumber class]] || (within == nil)); 9 | }); 10 | 11 | match(^BOOL{ 12 | double actualValue = [actual doubleValue]; 13 | double expectedValue = [expected doubleValue]; 14 | 15 | if (within != nil) { 16 | double withinValue = [within doubleValue]; 17 | double lowerBound = expectedValue - withinValue; 18 | double upperBound = expectedValue + withinValue; 19 | return (actualValue >= lowerBound) && (actualValue <= upperBound); 20 | } else { 21 | double diff = fabs(actualValue - expectedValue); 22 | actualValue = fabs(actualValue); 23 | expectedValue = fabs(expectedValue); 24 | double largest = (expectedValue > actualValue) ? expectedValue : actualValue; 25 | return (diff <= largest * FLT_EPSILON); 26 | } 27 | }); 28 | 29 | failureMessageForTo(^NSString *{ 30 | if (within) { 31 | return [NSString stringWithFormat:@"expected %@ to be close to %@ within %@", 32 | EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)]; 33 | } else { 34 | return [NSString stringWithFormat:@"expected %@ to be close to %@", 35 | EXPDescribeObject(actual), EXPDescribeObject(expected)]; 36 | } 37 | }); 38 | 39 | failureMessageForNotTo(^NSString *{ 40 | if (within) { 41 | return [NSString stringWithFormat:@"expected %@ not to be close to %@ within %@", 42 | EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)]; 43 | } else { 44 | return [NSString stringWithFormat:@"expected %@ not to be close to %@", 45 | EXPDescribeObject(actual), EXPDescribeObject(expected)]; 46 | } 47 | }); 48 | } 49 | EXPMatcherImplementationEnd -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(beFalsy, (void)); 4 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beFalsy.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(beFalsy, (void)) { 5 | match(^BOOL{ 6 | if([actual isKindOfClass:[NSNumber class]]) { 7 | return ![(NSNumber *)actual boolValue]; 8 | } else if([actual isKindOfClass:[NSValue class]]) { 9 | if(EXPIsValuePointer((NSValue *)actual)) { 10 | return ![(NSValue *)actual pointerValue]; 11 | } 12 | } 13 | return !actual; 14 | }); 15 | 16 | failureMessageForTo(^NSString *{ 17 | return [NSString stringWithFormat:@"expected: a falsy value, got: %@, which is truthy", EXPDescribeObject(actual)]; 18 | }); 19 | 20 | failureMessageForNotTo(^NSString *{ 21 | return [NSString stringWithFormat:@"expected: a non-falsy value, got: %@, which is falsy", EXPDescribeObject(actual)]; 22 | }); 23 | } 24 | EXPMatcherImplementationEnd 25 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(_beGreaterThan, (id expected)); 4 | EXPMatcherInterface(beGreaterThan, (id expected)); 5 | 6 | #define beGreaterThan(expected) _beGreaterThan(EXPObjectify((expected))) 7 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beGreaterThan.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(_beGreaterThan, (id expected)) { 5 | match(^BOOL{ 6 | if ([actual respondsToSelector:@selector(compare:)]) { 7 | return [actual compare:expected] == NSOrderedDescending; 8 | } 9 | return NO; 10 | }); 11 | 12 | failureMessageForTo(^NSString *{ 13 | return [NSString stringWithFormat:@"expected: %@ to be greater than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 14 | }); 15 | 16 | failureMessageForNotTo(^NSString *{ 17 | return [NSString stringWithFormat:@"expected: %@ not to be greater than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 18 | }); 19 | } 20 | EXPMatcherImplementationEnd -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(_beGreaterThanOrEqualTo, (id expected)); 4 | EXPMatcherInterface(beGreaterThanOrEqualTo, (id expected)); 5 | 6 | #define beGreaterThanOrEqualTo(expected) _beGreaterThanOrEqualTo(EXPObjectify((expected))) 7 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beGreaterThanOrEqualTo.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(_beGreaterThanOrEqualTo, (id expected)) { 5 | match(^BOOL{ 6 | if ([actual respondsToSelector:@selector(compare:)]) { 7 | return [actual compare:expected] != NSOrderedAscending; 8 | } 9 | return NO; 10 | }); 11 | 12 | failureMessageForTo(^NSString *{ 13 | return [NSString stringWithFormat:@"expected: %@ to be greater than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 14 | }); 15 | 16 | failureMessageForNotTo(^NSString *{ 17 | return [NSString stringWithFormat:@"expected: %@ not to be greater than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 18 | }); 19 | } 20 | EXPMatcherImplementationEnd -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(_beIdenticalTo, (void *expected)); 4 | EXPMatcherInterface(beIdenticalTo, (void *expected)); // to aid code completion 5 | 6 | #if __has_feature(objc_arc) 7 | #define beIdenticalTo(expected) _beIdenticalTo((__bridge void*)expected) 8 | #else 9 | #define beIdenticalTo _beIdenticalTo 10 | #endif 11 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+equal.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(beIdenticalTo, (void *expected)) { 5 | match(^BOOL{ 6 | if(actual == expected) { 7 | return YES; 8 | } else if([actual isKindOfClass:[NSValue class]] && EXPIsValuePointer((NSValue *)actual)) { 9 | if([(NSValue *)actual pointerValue] == expected) { 10 | return YES; 11 | } 12 | } 13 | return NO; 14 | }); 15 | 16 | failureMessageForTo(^NSString *{ 17 | return [NSString stringWithFormat:@"expected: <%p>, got: <%p>", expected, actual]; 18 | }); 19 | 20 | failureMessageForNotTo(^NSString *{ 21 | return [NSString stringWithFormat:@"expected: not <%p>, got: <%p>", expected, actual]; 22 | }); 23 | } 24 | EXPMatcherImplementationEnd 25 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(_beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound)); 4 | EXPMatcherInterface(beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound)); 5 | 6 | #define beInTheRangeOf(expectedLowerBound, expectedUpperBound) _beInTheRangeOf(EXPObjectify((expectedLowerBound)), EXPObjectify((expectedUpperBound))) 7 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beInTheRangeOf.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(_beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound)) { 5 | match(^BOOL{ 6 | if ([actual respondsToSelector:@selector(compare:)]) { 7 | NSComparisonResult compareLowerBound = [expectedLowerBound compare: actual]; 8 | NSComparisonResult compareUpperBound = [expectedUpperBound compare: actual]; 9 | if (compareLowerBound == NSOrderedSame) { 10 | return YES; 11 | } 12 | if (compareUpperBound == NSOrderedSame) { 13 | return YES; 14 | } 15 | if ((compareLowerBound == NSOrderedAscending) && (compareUpperBound == NSOrderedDescending)) { 16 | return YES; 17 | } 18 | } 19 | return NO; 20 | }); 21 | 22 | failureMessageForTo(^NSString *{ 23 | return [NSString stringWithFormat:@"expected: %@ to be in the range [%@, %@] (inclusive)", EXPDescribeObject(actual), EXPDescribeObject(expectedLowerBound), EXPDescribeObject(expectedUpperBound)]; 24 | }); 25 | 26 | failureMessageForNotTo(^NSString *{ 27 | return [NSString stringWithFormat:@"expected: %@ not to be in the range [%@, %@] (inclusive)", EXPDescribeObject(actual), EXPDescribeObject(expectedLowerBound), EXPDescribeObject(expectedUpperBound)]; 28 | }); 29 | } 30 | EXPMatcherImplementationEnd -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(beInstanceOf, (Class expected)); 4 | 5 | #define beAnInstanceOf beInstanceOf 6 | #define beMemberOf beInstanceOf 7 | #define beAMemberOf beInstanceOf 8 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beInstanceOf.h" 2 | 3 | EXPMatcherImplementationBegin(beInstanceOf, (Class expected)) { 4 | BOOL actualIsNil = (actual == nil); 5 | BOOL expectedIsNil = (expected == nil); 6 | 7 | prerequisite(^BOOL{ 8 | return !(actualIsNil || expectedIsNil); 9 | }); 10 | 11 | match(^BOOL{ 12 | return [actual isMemberOfClass:expected]; 13 | }); 14 | 15 | failureMessageForTo(^NSString *{ 16 | if(actualIsNil) return @"the actual value is nil/null"; 17 | if(expectedIsNil) return @"the expected value is nil/null"; 18 | return [NSString stringWithFormat:@"expected: an instance of %@, got: an instance of %@", [expected class], [actual class]]; 19 | }); 20 | 21 | failureMessageForNotTo(^NSString *{ 22 | if(actualIsNil) return @"the actual value is nil/null"; 23 | if(expectedIsNil) return @"the expected value is nil/null"; 24 | return [NSString stringWithFormat:@"expected: not an instance of %@, got: an instance of %@", [expected class], [actual class]]; 25 | }); 26 | } 27 | EXPMatcherImplementationEnd 28 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(beKindOf, (Class expected)); 4 | 5 | #define beAKindOf beKindOf 6 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beKindOf.h" 2 | 3 | EXPMatcherImplementationBegin(beKindOf, (Class expected)) { 4 | BOOL actualIsNil = (actual == nil); 5 | BOOL expectedIsNil = (expected == nil); 6 | 7 | prerequisite(^BOOL{ 8 | return !(actualIsNil || expectedIsNil); 9 | }); 10 | 11 | match(^BOOL{ 12 | return [actual isKindOfClass:expected]; 13 | }); 14 | 15 | failureMessageForTo(^NSString *{ 16 | if(actualIsNil) return @"the actual value is nil/null"; 17 | if(expectedIsNil) return @"the expected value is nil/null"; 18 | return [NSString stringWithFormat:@"expected: a kind of %@, got: an instance of %@, which is not a kind of %@", [expected class], [actual class], [expected class]]; 19 | }); 20 | 21 | failureMessageForNotTo(^NSString *{ 22 | if(actualIsNil) return @"the actual value is nil/null"; 23 | if(expectedIsNil) return @"the expected value is nil/null"; 24 | return [NSString stringWithFormat:@"expected: not a kind of %@, got: an instance of %@, which is a kind of %@", [expected class], [actual class], [expected class]]; 25 | }); 26 | } 27 | EXPMatcherImplementationEnd 28 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(_beLessThan, (id expected)); 4 | EXPMatcherInterface(beLessThan, (id expected)); 5 | 6 | #define beLessThan(expected) _beLessThan(EXPObjectify((expected))) 7 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beLessThan.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(_beLessThan, (id expected)) { 5 | match(^BOOL{ 6 | if ([actual respondsToSelector:@selector(compare:)]) { 7 | return [actual compare:expected] == NSOrderedAscending; 8 | } 9 | return NO; 10 | }); 11 | 12 | failureMessageForTo(^NSString *{ 13 | return [NSString stringWithFormat:@"expected: %@ to be less than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 14 | }); 15 | 16 | failureMessageForNotTo(^NSString *{ 17 | return [NSString stringWithFormat:@"expected: %@ not to be less than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 18 | }); 19 | } 20 | EXPMatcherImplementationEnd -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(_beLessThanOrEqualTo, (id expected)); 4 | EXPMatcherInterface(beLessThanOrEqualTo, (id expected)); 5 | 6 | #define beLessThanOrEqualTo(expected) _beLessThanOrEqualTo(EXPObjectify((expected))) 7 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beLessThanOrEqualTo.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(_beLessThanOrEqualTo, (id expected)) { 5 | match(^BOOL{ 6 | if ([actual respondsToSelector:@selector(compare:)]) { 7 | return [actual compare:expected] != NSOrderedDescending; 8 | } 9 | return NO; 10 | }); 11 | 12 | failureMessageForTo(^NSString *{ 13 | return [NSString stringWithFormat:@"expected: %@ to be less than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 14 | }); 15 | 16 | failureMessageForNotTo(^NSString *{ 17 | return [NSString stringWithFormat:@"expected: %@ not to be less than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 18 | }); 19 | } 20 | EXPMatcherImplementationEnd -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beNil.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(beNil, (void)); 4 | 5 | #define beNull beNil 6 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beNil.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beNil.h" 2 | 3 | EXPMatcherImplementationBegin(beNil, (void)) { 4 | match(^BOOL{ 5 | return actual == nil; 6 | }); 7 | 8 | failureMessageForTo(^NSString *{ 9 | return [NSString stringWithFormat:@"expected: nil/null, got: %@", EXPDescribeObject(actual)]; 10 | }); 11 | 12 | failureMessageForNotTo(^NSString *{ 13 | return [NSString stringWithFormat:@"expected: not nil/null, got: %@", EXPDescribeObject(actual)]; 14 | }); 15 | } 16 | EXPMatcherImplementationEnd 17 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(beSubclassOf, (Class expected)); 4 | 5 | #define beASubclassOf beSubclassOf 6 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beSubclassOf.h" 2 | #import "NSValue+Expecta.h" 3 | #import 4 | 5 | EXPMatcherImplementationBegin(beSubclassOf, (Class expected)) { 6 | __block BOOL actualIsClass = YES; 7 | 8 | prerequisite(^BOOL { 9 | actualIsClass = class_isMetaClass(object_getClass(actual)); 10 | return actualIsClass; 11 | }); 12 | 13 | match(^BOOL{ 14 | return [actual isSubclassOfClass:expected]; 15 | }); 16 | 17 | failureMessageForTo(^NSString *{ 18 | if(!actualIsClass) return @"the actual value is not a Class"; 19 | return [NSString stringWithFormat:@"expected: a subclass of %@, got: a class %@, which is not a subclass of %@", [expected class], actual, [expected class]]; 20 | }); 21 | 22 | failureMessageForNotTo(^NSString *{ 23 | if(!actualIsClass) return @"the actual value is not a Class"; 24 | return [NSString stringWithFormat:@"expected: not a subclass of %@, got: a class %@, which is a subclass of %@", [expected class], actual, [expected class]]; 25 | }); 26 | } 27 | EXPMatcherImplementationEnd 28 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(beSupersetOf, (id subset)); 4 | 5 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+contain.h" 2 | 3 | EXPMatcherImplementationBegin(beSupersetOf, (id subset)) { 4 | BOOL actualIsCompatible = [actual isKindOfClass:[NSDictionary class]] || [actual respondsToSelector:@selector(containsObject:)]; 5 | BOOL subsetIsNil = (subset == nil); 6 | 7 | // For some instances the isKindOfClass: method returns false, even though 8 | // they are both actually dictionaries. e.g. Comparing a NSCFDictionary and a 9 | // NSDictionary. 10 | BOOL bothAreDictionaries = [actual isKindOfClass:[NSDictionary class]] && [subset isKindOfClass:[NSDictionary class]]; 11 | 12 | BOOL classMatches = bothAreDictionaries || [subset isKindOfClass:[actual class]]; 13 | 14 | prerequisite(^BOOL{ 15 | return actualIsCompatible && !subsetIsNil && classMatches; 16 | }); 17 | 18 | match(^BOOL{ 19 | if(!actualIsCompatible) return NO; 20 | 21 | if([actual isKindOfClass:[NSDictionary class]]) { 22 | for (id key in subset) { 23 | id actualValue = [actual valueForKey:key]; 24 | id subsetValue = [subset valueForKey:key]; 25 | 26 | if (![subsetValue isEqual:actualValue]) return NO; 27 | } 28 | } else { 29 | for (id object in subset) { 30 | if (![actual containsObject:object]) return NO; 31 | } 32 | } 33 | 34 | return YES; 35 | }); 36 | 37 | failureMessageForTo(^NSString *{ 38 | if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSDictionary and does not implement -containsObject:", EXPDescribeObject(actual)]; 39 | 40 | if(subsetIsNil) return @"the expected value is nil/null"; 41 | 42 | if(!classMatches) return [NSString stringWithFormat:@"%@ does not match the class of %@", EXPDescribeObject(subset), EXPDescribeObject(actual)]; 43 | 44 | return [NSString stringWithFormat:@"expected %@ to be a superset of %@", EXPDescribeObject(actual), EXPDescribeObject(subset)]; 45 | }); 46 | 47 | failureMessageForNotTo(^NSString *{ 48 | if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSDictionary and does not implement -containsObject:", EXPDescribeObject(actual)]; 49 | 50 | if(subsetIsNil) return @"the expected value is nil/null"; 51 | 52 | if(!classMatches) return [NSString stringWithFormat:@"%@ does not match the class of %@", EXPDescribeObject(subset), EXPDescribeObject(actual)]; 53 | 54 | return [NSString stringWithFormat:@"expected %@ not to be a superset of %@", EXPDescribeObject(actual), EXPDescribeObject(subset)]; 55 | }); 56 | } 57 | EXPMatcherImplementationEnd 58 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(beTruthy, (void)); 4 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beTruthy.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(beTruthy, (void)) { 5 | match(^BOOL{ 6 | if([actual isKindOfClass:[NSNumber class]]) { 7 | return !![(NSNumber *)actual boolValue]; 8 | } else if([actual isKindOfClass:[NSValue class]]) { 9 | if(EXPIsValuePointer((NSValue *)actual)) { 10 | return !![(NSValue *)actual pointerValue]; 11 | } 12 | } 13 | return !!actual; 14 | }); 15 | 16 | failureMessageForTo(^NSString *{ 17 | return [NSString stringWithFormat:@"expected: a truthy value, got: %@, which is falsy", EXPDescribeObject(actual)]; 18 | }); 19 | 20 | failureMessageForNotTo(^NSString *{ 21 | return [NSString stringWithFormat:@"expected: a non-truthy value, got: %@, which is truthy", EXPDescribeObject(actual)]; 22 | }); 23 | } 24 | EXPMatcherImplementationEnd 25 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beginWith.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(beginWith, (id expected)); 4 | 5 | #define startWith beginWith 6 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+beginWith.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beginWith.h" 2 | 3 | EXPMatcherImplementationBegin(beginWith, (id expected)) { 4 | BOOL actualIsNil = (actual == nil); 5 | BOOL expectedIsNil = (expected == nil); 6 | //This condition allows the comparison of an immutable string or ordered collection to the mutable type of the same 7 | BOOL actualAndExpectedAreCompatible = (([actual isKindOfClass:[NSString class]] && [expected isKindOfClass:[NSString class]]) 8 | || ([actual isKindOfClass:[NSArray class]] && [expected isKindOfClass:[NSArray class]]) 9 | || ([actual isKindOfClass:[NSOrderedSet class]] && [expected isKindOfClass:[NSOrderedSet class]])); 10 | 11 | prerequisite(^BOOL { 12 | return actualAndExpectedAreCompatible; 13 | }); 14 | 15 | match(^BOOL { 16 | if ([actual isKindOfClass:[NSString class]]) { 17 | return [actual hasPrefix:expected]; 18 | } else if ([actual isKindOfClass:[NSArray class]]) { 19 | if ([expected count] > [actual count] || [expected count] == 0) { 20 | return NO; 21 | } 22 | NSArray *subArray = [actual subarrayWithRange:NSMakeRange(0, [expected count])]; 23 | return [subArray isEqualToArray:expected]; 24 | } else { 25 | if ([expected count] > [actual count] || [expected count] == 0) { 26 | return NO; 27 | } 28 | 29 | NSOrderedSet *subset = [NSOrderedSet orderedSetWithOrderedSet:actual range:NSMakeRange(0, [expected count]) copyItems:NO]; 30 | return [subset isEqualToOrderedSet:expected]; 31 | } 32 | }); 33 | 34 | failureMessageForTo(^NSString *{ 35 | if (actualIsNil) return @"the object is nil/null"; 36 | if (expectedIsNil) return @"the expected value is nil/null"; 37 | if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]]; 38 | return [NSString stringWithFormat:@"expected: %@ to begin with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 39 | }); 40 | 41 | failureMessageForNotTo(^NSString *{ 42 | if (actualIsNil) return @"the object is nil/null"; 43 | if (expectedIsNil) return @"the expected value is nil/null"; 44 | if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]]; 45 | 46 | return [NSString stringWithFormat:@"expected: %@ not to begin with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 47 | }); 48 | } 49 | EXPMatcherImplementationEnd 50 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+conformTo.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(conformTo, (Protocol *expected)); 4 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+conformTo.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+conformTo.h" 2 | #import "NSValue+Expecta.h" 3 | #import 4 | 5 | EXPMatcherImplementationBegin(conformTo, (Protocol *expected)) { 6 | BOOL actualIsNil = (actual == nil); 7 | BOOL expectedIsNil = (expected == nil); 8 | 9 | prerequisite(^BOOL{ 10 | return !(actualIsNil || expectedIsNil); 11 | }); 12 | 13 | match(^BOOL{ 14 | return [actual conformsToProtocol:expected]; 15 | }); 16 | 17 | failureMessageForTo(^NSString *{ 18 | if(actualIsNil) return @"the object is nil/null"; 19 | if(expectedIsNil) return @"the protocol is nil/null"; 20 | 21 | NSString *name = NSStringFromProtocol(expected); 22 | return [NSString stringWithFormat:@"expected: %@ to conform to %@", actual, name]; 23 | }); 24 | 25 | failureMessageForNotTo(^NSString *{ 26 | if(actualIsNil) return @"the object is nil/null"; 27 | if(expectedIsNil) return @"the protocol is nil/null"; 28 | 29 | NSString *name = NSStringFromProtocol(expected); 30 | return [NSString stringWithFormat:@"expected: %@ not to conform to %@", actual, name]; 31 | }); 32 | } 33 | EXPMatcherImplementationEnd 34 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+contain.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(_contain, (id expected)); 4 | EXPMatcherInterface(contain, (id expected)); // to aid code completion 5 | #define contain(expected) _contain(EXPObjectify((expected))) 6 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+contain.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+contain.h" 2 | 3 | EXPMatcherImplementationBegin(_contain, (id expected)) { 4 | BOOL actualIsCompatible = [actual isKindOfClass:[NSString class]] || [actual conformsToProtocol:@protocol(NSFastEnumeration)]; 5 | BOOL expectedIsNil = (expected == nil); 6 | 7 | prerequisite(^BOOL{ 8 | return actualIsCompatible && !expectedIsNil; 9 | }); 10 | 11 | match(^BOOL{ 12 | if(actualIsCompatible) { 13 | if([actual isKindOfClass:[NSString class]]) { 14 | return [(NSString *)actual rangeOfString:[expected description]].location != NSNotFound; 15 | } else { 16 | for (id object in actual) { 17 | if ([object isEqual:expected]) { 18 | return YES; 19 | } 20 | } 21 | } 22 | } 23 | return NO; 24 | }); 25 | 26 | failureMessageForTo(^NSString *{ 27 | if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString or NSFastEnumeration", EXPDescribeObject(actual)]; 28 | if(expectedIsNil) return @"the expected value is nil/null"; 29 | return [NSString stringWithFormat:@"expected %@ to contain %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 30 | }); 31 | 32 | failureMessageForNotTo(^NSString *{ 33 | if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString or NSFastEnumeration", EXPDescribeObject(actual)]; 34 | if(expectedIsNil) return @"the expected value is nil/null"; 35 | return [NSString stringWithFormat:@"expected %@ not to contain %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 36 | }); 37 | } 38 | EXPMatcherImplementationEnd 39 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+endWith.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(endWith, (id expected)); 4 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+endWith.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+endWith.h" 2 | 3 | EXPMatcherImplementationBegin(endWith, (id expected)) { 4 | BOOL actualIsNil = (actual == nil); 5 | BOOL expectedIsNil = (expected == nil); 6 | //This condition allows the comparison of an immutable string or ordered collection to the mutable type of the same 7 | BOOL actualAndExpectedAreCompatible = (([actual isKindOfClass:[NSString class]] && [expected isKindOfClass:[NSString class]]) 8 | || ([actual isKindOfClass:[NSArray class]] && [expected isKindOfClass:[NSArray class]]) 9 | || ([actual isKindOfClass:[NSOrderedSet class]] && [expected isKindOfClass:[NSOrderedSet class]])); 10 | 11 | prerequisite(^BOOL { 12 | return actualAndExpectedAreCompatible; 13 | }); 14 | 15 | match(^BOOL { 16 | if ([actual isKindOfClass:[NSString class]]) { 17 | return [actual hasSuffix:expected]; 18 | } else if ([actual isKindOfClass:[NSArray class]]) { 19 | if ([expected count] > [actual count] || [expected count] == 0) { 20 | return NO; 21 | } 22 | NSArray *subArray = [actual subarrayWithRange:NSMakeRange([actual count] - [expected count], [expected count])]; 23 | return [subArray isEqualToArray:expected]; 24 | } else { 25 | if ([expected count] > [actual count] || [expected count] == 0) { 26 | return NO; 27 | } 28 | 29 | NSOrderedSet *subset = [NSOrderedSet orderedSetWithOrderedSet:actual range:NSMakeRange([actual count] - [expected count], [expected count]) copyItems:NO]; 30 | return [subset isEqualToOrderedSet:expected]; 31 | } 32 | }); 33 | 34 | failureMessageForTo(^NSString *{ 35 | if (actualIsNil) return @"the object is nil/null"; 36 | if (expectedIsNil) return @"the expected value is nil/null"; 37 | if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]]; 38 | return [NSString stringWithFormat:@"expected: %@ to end with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 39 | }); 40 | 41 | failureMessageForNotTo(^NSString *{ 42 | if (actualIsNil) return @"the object is nil/null"; 43 | if (expectedIsNil) return @"the expected value is nil/null"; 44 | if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]]; 45 | 46 | return [NSString stringWithFormat:@"expected: %@ not to end with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; 47 | }); 48 | } 49 | EXPMatcherImplementationEnd 50 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+equal.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(_equal, (id expected)); 4 | EXPMatcherInterface(equal, (id expected)); // to aid code completion 5 | #define equal(...) _equal(EXPObjectify((__VA_ARGS__))) 6 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+equal.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+equal.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(_equal, (id expected)) { 5 | match(^BOOL{ 6 | if((actual == expected) || [actual isEqual:expected]) { 7 | return YES; 8 | } else if([actual isKindOfClass:[NSNumber class]] && [expected isKindOfClass:[NSNumber class]]) { 9 | if(EXPIsNumberFloat((NSNumber *)actual) || EXPIsNumberFloat((NSNumber *)expected)) { 10 | return [(NSNumber *)actual floatValue] == [(NSNumber *)expected floatValue]; 11 | } 12 | } 13 | return NO; 14 | }); 15 | 16 | failureMessageForTo(^NSString *{ 17 | return [NSString stringWithFormat:@"expected: %@, got: %@", EXPDescribeObject(expected), EXPDescribeObject(actual)]; 18 | }); 19 | 20 | failureMessageForNotTo(^NSString *{ 21 | return [NSString stringWithFormat:@"expected: not %@, got: %@", EXPDescribeObject(expected), EXPDescribeObject(actual)]; 22 | }); 23 | } 24 | EXPMatcherImplementationEnd 25 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(haveCountOf, (NSUInteger expected)); 4 | 5 | #define haveCount haveCountOf 6 | #define haveACountOf haveCountOf 7 | #define haveLength haveCountOf 8 | #define haveLengthOf haveCountOf 9 | #define haveALengthOf haveCountOf 10 | #define beEmpty() haveCountOf(0) 11 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+haveCountOf.h" 2 | 3 | EXPMatcherImplementationBegin(haveCountOf, (NSUInteger expected)) { 4 | BOOL actualIsStringy = [actual isKindOfClass:[NSString class]] || [actual isKindOfClass:[NSAttributedString class]]; 5 | BOOL actualIsCompatible = actualIsStringy || [actual respondsToSelector:@selector(count)]; 6 | 7 | prerequisite(^BOOL{ 8 | return actualIsCompatible; 9 | }); 10 | 11 | NSUInteger (^count)(id) = ^(id actual) { 12 | if(actualIsStringy) { 13 | return [actual length]; 14 | } else { 15 | return [actual count]; 16 | } 17 | }; 18 | 19 | match(^BOOL{ 20 | if(actualIsCompatible) { 21 | return count(actual) == expected; 22 | } 23 | return NO; 24 | }); 25 | 26 | failureMessageForTo(^NSString *{ 27 | if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString, NSAttributedString, NSArray, NSSet, NSOrderedSet, or NSDictionary", EXPDescribeObject(actual)]; 28 | return [NSString stringWithFormat:@"expected %@ to have a count of %zi but got %zi", EXPDescribeObject(actual), expected, count(actual)]; 29 | }); 30 | 31 | failureMessageForNotTo(^NSString *{ 32 | if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString, NSAttributedString, NSArray, NSSet, NSOrderedSet, or NSDictionary", EXPDescribeObject(actual)]; 33 | return [NSString stringWithFormat:@"expected %@ not to have a count of %zi", EXPDescribeObject(actual), expected]; 34 | }); 35 | } 36 | EXPMatcherImplementationEnd 37 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+notify.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(notify, (id expectedNotification)); 4 | 5 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+notify.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+notify.h" 2 | 3 | EXPMatcherImplementationBegin(notify, (id expected)){ 4 | BOOL actualIsNil = (actual == nil); 5 | BOOL expectedIsNil = (expected == nil); 6 | BOOL isNotification = [expected isKindOfClass:[NSNotification class]]; 7 | BOOL isName = [expected isKindOfClass:[NSString class]]; 8 | 9 | __block NSString *expectedName; 10 | __block BOOL expectedNotificationOccurred = NO; 11 | __block id observer; 12 | 13 | prerequisite(^BOOL{ 14 | expectedNotificationOccurred = NO; 15 | if (actualIsNil || expectedIsNil) return NO; 16 | if (isNotification) { 17 | expectedName = [expected name]; 18 | }else if(isName) { 19 | expectedName = expected; 20 | }else{ 21 | return NO; 22 | } 23 | 24 | observer = [[NSNotificationCenter defaultCenter] addObserverForName:expectedName object:nil queue:nil usingBlock:^(NSNotification *note){ 25 | if (isNotification) { 26 | expectedNotificationOccurred |= [expected isEqual:note]; 27 | }else{ 28 | expectedNotificationOccurred = YES; 29 | } 30 | }]; 31 | ((EXPBasicBlock)actual)(); 32 | return YES; 33 | }); 34 | 35 | match(^BOOL{ 36 | if(expectedNotificationOccurred) { 37 | [[NSNotificationCenter defaultCenter] removeObserver:observer]; 38 | } 39 | return expectedNotificationOccurred; 40 | }); 41 | 42 | failureMessageForTo(^NSString *{ 43 | if (observer) { 44 | [[NSNotificationCenter defaultCenter] removeObserver:observer]; 45 | } 46 | if(actualIsNil) return @"the actual value is nil/null"; 47 | if(expectedIsNil) return @"the expected value is nil/null"; 48 | if(!(isNotification || isName)) return @"the actual value is not a notification or string"; 49 | return [NSString stringWithFormat:@"expected: %@, got: none",expectedName]; 50 | }); 51 | 52 | failureMessageForNotTo(^NSString *{ 53 | if (observer) { 54 | [[NSNotificationCenter defaultCenter] removeObserver:observer]; 55 | } 56 | if(actualIsNil) return @"the actual value is nil/null"; 57 | if(expectedIsNil) return @"the expected value is nil/null"; 58 | if(!(isNotification || isName)) return @"the actual value is not a notification or string"; 59 | return [NSString stringWithFormat:@"expected: none, got: %@", expectedName]; 60 | }); 61 | } 62 | 63 | EXPMatcherImplementationEnd 64 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+raise.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(raise, (NSString *expectedExceptionName)); 4 | #define raiseAny() raise(nil) 5 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+raise.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+raise.h" 2 | #import "EXPDefines.h" 3 | 4 | EXPMatcherImplementationBegin(raise, (NSString *expectedExceptionName)) { 5 | __block NSException *exceptionCaught = nil; 6 | 7 | match(^BOOL{ 8 | BOOL expectedExceptionCaught = NO; 9 | @try { 10 | ((EXPBasicBlock)actual)(); 11 | } @catch(NSException *e) { 12 | exceptionCaught = e; 13 | expectedExceptionCaught = (expectedExceptionName == nil) || [[exceptionCaught name] isEqualToString:expectedExceptionName]; 14 | } 15 | return expectedExceptionCaught; 16 | }); 17 | 18 | failureMessageForTo(^NSString *{ 19 | return [NSString stringWithFormat:@"expected: %@, got: %@", 20 | expectedExceptionName ? expectedExceptionName : @"any exception", 21 | exceptionCaught ? [exceptionCaught name] : @"no exception"]; 22 | }); 23 | 24 | failureMessageForNotTo(^NSString *{ 25 | return [NSString stringWithFormat:@"expected: %@, got: %@", 26 | expectedExceptionName ? [NSString stringWithFormat:@"not %@", expectedExceptionName] : @"no exception", 27 | exceptionCaught ? [exceptionCaught name] : @"no exception"]; 28 | }); 29 | } 30 | EXPMatcherImplementationEnd 31 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(raiseWithReason, (NSString *expectedExceptionName, NSString *expectedReason)); 4 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+raiseWithReason.h" 2 | #import "EXPDefines.h" 3 | 4 | EXPMatcherImplementationBegin(raiseWithReason, (NSString *expectedExceptionName, NSString *expectedReason)) { 5 | __block NSException *exceptionCaught = nil; 6 | 7 | match(^BOOL{ 8 | BOOL expectedExceptionCaught = NO; 9 | @try { 10 | ((EXPBasicBlock)actual)(); 11 | } @catch(NSException *e) { 12 | exceptionCaught = e; 13 | expectedExceptionCaught = (((expectedExceptionName == nil) || [[exceptionCaught name] isEqualToString:expectedExceptionName]) && 14 | ((expectedReason == nil) || ([[exceptionCaught reason] isEqualToString:expectedReason]))); 15 | } 16 | return expectedExceptionCaught; 17 | }); 18 | 19 | failureMessageForTo(^NSString *{ 20 | return [NSString stringWithFormat:@"expected: %@ (%@), got: %@ (%@)", 21 | expectedExceptionName ?: @"any exception", 22 | expectedReason ?: @"any reason", 23 | exceptionCaught ? [exceptionCaught name] : @"no exception", 24 | exceptionCaught ? [exceptionCaught reason] : @""]; 25 | }); 26 | 27 | failureMessageForNotTo(^NSString *{ 28 | return [NSString stringWithFormat:@"expected: %@ (%@), got: %@ (%@)", 29 | expectedExceptionName ? [NSString stringWithFormat:@"not %@", expectedExceptionName] : @"no exception", 30 | expectedReason ? [NSString stringWithFormat:@"not '%@'", expectedReason] : @"no reason", 31 | exceptionCaught ? [exceptionCaught name] : @"no exception", 32 | exceptionCaught ? [exceptionCaught reason] : @"no reason"]; 33 | }); 34 | } 35 | EXPMatcherImplementationEnd 36 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+respondTo.h: -------------------------------------------------------------------------------- 1 | #import "Expecta.h" 2 | 3 | EXPMatcherInterface(respondTo, (SEL expected)); 4 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers+respondTo.m: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+respondTo.h" 2 | #import "EXPMatcherHelpers.h" 3 | 4 | EXPMatcherImplementationBegin(respondTo, (SEL expected)) { 5 | BOOL actualIsNil = (actual == nil); 6 | BOOL expectedIsNull = (expected == NULL); 7 | 8 | prerequisite (^BOOL { 9 | return !(actualIsNil || expectedIsNull); 10 | }); 11 | 12 | match(^BOOL { 13 | return [actual respondsToSelector:expected]; 14 | }); 15 | 16 | failureMessageForTo(^NSString *{ 17 | if (actualIsNil) return @"the object is nil/null"; 18 | if (expectedIsNull) return @"the selector is null"; 19 | return [NSString stringWithFormat:@"expected: %@ to respond to %@", EXPDescribeObject(actual), NSStringFromSelector(expected)]; 20 | }); 21 | 22 | failureMessageForNotTo(^NSString *{ 23 | if (actualIsNil) return @"the object is nil/null"; 24 | if (expectedIsNull) return @"the selector is null"; 25 | return [NSString stringWithFormat:@"expected: %@ not to respond to %@", EXPDescribeObject(actual), NSStringFromSelector(expected)]; 26 | }); 27 | } 28 | EXPMatcherImplementationEnd 29 | -------------------------------------------------------------------------------- /Example/Pods/Expecta/src/matchers/EXPMatchers.h: -------------------------------------------------------------------------------- 1 | #import "EXPMatchers+beNil.h" 2 | #import "EXPMatchers+equal.h" 3 | #import "EXPMatchers+beInstanceOf.h" 4 | #import "EXPMatchers+beKindOf.h" 5 | #import "EXPMatchers+beSubclassOf.h" 6 | #import "EXPMatchers+conformTo.h" 7 | #import "EXPMatchers+beTruthy.h" 8 | #import "EXPMatchers+beFalsy.h" 9 | #import "EXPMatchers+contain.h" 10 | #import "EXPMatchers+beSupersetOf.h" 11 | #import "EXPMatchers+haveCountOf.h" 12 | #import "EXPMatchers+beIdenticalTo.h" 13 | #import "EXPMatchers+beGreaterThan.h" 14 | #import "EXPMatchers+beGreaterThanOrEqualTo.h" 15 | #import "EXPMatchers+beLessThan.h" 16 | #import "EXPMatchers+beLessThanOrEqualTo.h" 17 | #import "EXPMatchers+beInTheRangeOf.h" 18 | #import "EXPMatchers+beCloseTo.h" 19 | #import "EXPMatchers+raise.h" 20 | #import "EXPMatchers+raiseWithReason.h" 21 | #import "EXPMatchers+respondTo.h" 22 | #import "EXPMatchers+notify.h" 23 | #import "EXPMatchers+beginWith.h" 24 | #import "EXPMatchers+endWith.h" 25 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2013, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | * 9 | */ 10 | 11 | #import "FBSnapshotTestCase.h" 12 | 13 | #import "FBSnapshotTestController.h" 14 | 15 | @interface FBSnapshotTestCase () 16 | 17 | @property (readwrite, nonatomic, retain) FBSnapshotTestController *snapshotController; 18 | 19 | @end 20 | 21 | @implementation FBSnapshotTestCase 22 | 23 | - (void)setUp 24 | { 25 | [super setUp]; 26 | self.snapshotController = [[FBSnapshotTestController alloc] initWithTestClass:[self class]]; 27 | } 28 | 29 | - (void)tearDown 30 | { 31 | self.snapshotController = nil; 32 | [super tearDown]; 33 | } 34 | 35 | - (BOOL)recordMode 36 | { 37 | return self.snapshotController.recordMode; 38 | } 39 | 40 | - (void)setRecordMode:(BOOL)recordMode 41 | { 42 | self.snapshotController.recordMode = recordMode; 43 | } 44 | 45 | - (BOOL)renderAsLayer 46 | { 47 | return self.snapshotController.renderAsLayer; 48 | } 49 | 50 | - (void)setRenderAsLayer:(BOOL)renderAsLayer 51 | { 52 | self.snapshotController.renderAsLayer = renderAsLayer; 53 | } 54 | 55 | - (BOOL)compareSnapshotOfLayer:(CALayer *)layer 56 | referenceImagesDirectory:(NSString *)referenceImagesDirectory 57 | identifier:(NSString *)identifier 58 | error:(NSError **)errorPtr 59 | { 60 | return [self _compareSnapshotOfViewOrLayer:layer 61 | referenceImagesDirectory:referenceImagesDirectory 62 | identifier:identifier 63 | error:errorPtr]; 64 | } 65 | 66 | - (BOOL)compareSnapshotOfView:(UIView *)view 67 | referenceImagesDirectory:(NSString *)referenceImagesDirectory 68 | identifier:(NSString *)identifier 69 | error:(NSError **)errorPtr 70 | { 71 | return [self _compareSnapshotOfViewOrLayer:view 72 | referenceImagesDirectory:referenceImagesDirectory 73 | identifier:identifier 74 | error:errorPtr]; 75 | } 76 | 77 | #pragma mark - 78 | #pragma mark Private API 79 | 80 | - (BOOL)_compareSnapshotOfViewOrLayer:(id)viewOrLayer 81 | referenceImagesDirectory:(NSString *)referenceImagesDirectory 82 | identifier:(NSString *)identifier 83 | error:(NSError **)errorPtr 84 | { 85 | _snapshotController.referenceImagesDirectory = referenceImagesDirectory; 86 | return [_snapshotController compareSnapshotOfViewOrLayer:viewOrLayer 87 | selector:self.invocation.selector 88 | identifier:identifier 89 | error:errorPtr]; 90 | } 91 | 92 | @end 93 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/LICENSE: -------------------------------------------------------------------------------- 1 | BSD License 2 | 3 | For the FBSnapshotTestCase software 4 | 5 | Copyright (c) 2013, Facebook, Inc. 6 | All rights reserved. 7 | 8 | Redistribution and use in source and binary forms, with or without 9 | modification, are permitted provided that the following conditions are met: 10 | 11 | * Redistributions of source code must retain the above copyright notice, 12 | this list of conditions and the following disclaimer. 13 | * Redistributions in binary form must reproduce the above copyright notice, 14 | this list of conditions and the following disclaimer in the documentation 15 | and/or other materials provided with the distribution. 16 | * Neither the name Facebook nor the names of its contributors may be used to 17 | endorse or promote products derived from this software without specific 18 | prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/UIImage+Compare.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Gabriel Handford on 3/1/09. 3 | // Copyright 2009-2013. All rights reserved. 4 | // Created by John Boiles on 10/20/11. 5 | // Copyright (c) 2011. All rights reserved 6 | // Modified by Felix Schulze on 2/11/13. 7 | // Copyright 2013. All rights reserved. 8 | // 9 | // Permission is hereby granted, free of charge, to any person 10 | // obtaining a copy of this software and associated documentation 11 | // files (the "Software"), to deal in the Software without 12 | // restriction, including without limitation the rights to use, 13 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | // copies of the Software, and to permit persons to whom the 15 | // Software is furnished to do so, subject to the following 16 | // conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be 19 | // included in all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 23 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 27 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 28 | // OTHER DEALINGS IN THE SOFTWARE. 29 | // 30 | 31 | #import 32 | 33 | @interface UIImage (Compare) 34 | 35 | - (BOOL)compareWithImage:(UIImage *)image; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/UIImage+Diff.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Gabriel Handford on 3/1/09. 3 | // Copyright 2009-2013. All rights reserved. 4 | // Created by John Boiles on 10/20/11. 5 | // Copyright (c) 2011. All rights reserved 6 | // Modified by Felix Schulze on 2/11/13. 7 | // Copyright 2013. All rights reserved. 8 | // 9 | // Permission is hereby granted, free of charge, to any person 10 | // obtaining a copy of this software and associated documentation 11 | // files (the "Software"), to deal in the Software without 12 | // restriction, including without limitation the rights to use, 13 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | // copies of the Software, and to permit persons to whom the 15 | // Software is furnished to do so, subject to the following 16 | // conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be 19 | // included in all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 23 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 27 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 28 | // OTHER DEALINGS IN THE SOFTWARE. 29 | // 30 | 31 | #import 32 | 33 | @interface UIImage (Diff) 34 | 35 | - (UIImage *)diffWithImage:(UIImage *)image; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/UIImage+Diff.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Gabriel Handford on 3/1/09. 3 | // Copyright 2009-2013. All rights reserved. 4 | // Created by John Boiles on 10/20/11. 5 | // Copyright (c) 2011. All rights reserved 6 | // Modified by Felix Schulze on 2/11/13. 7 | // Copyright 2013. All rights reserved. 8 | // 9 | // Permission is hereby granted, free of charge, to any person 10 | // obtaining a copy of this software and associated documentation 11 | // files (the "Software"), to deal in the Software without 12 | // restriction, including without limitation the rights to use, 13 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | // copies of the Software, and to permit persons to whom the 15 | // Software is furnished to do so, subject to the following 16 | // conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be 19 | // included in all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 23 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 27 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 28 | // OTHER DEALINGS IN THE SOFTWARE. 29 | // 30 | 31 | #import "UIImage+Diff.h" 32 | 33 | @implementation UIImage (Diff) 34 | 35 | - (UIImage *)diffWithImage:(UIImage *)image 36 | { 37 | if (!image) { 38 | return nil; 39 | } 40 | CGSize imageSize = CGSizeMake(MAX(self.size.width, image.size.width), MAX(self.size.height, image.size.height)); 41 | UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0.0); 42 | CGContextRef context = UIGraphicsGetCurrentContext(); 43 | [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; 44 | CGContextSetAlpha(context, 0.5f); 45 | CGContextBeginTransparencyLayer(context, NULL); 46 | [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; 47 | CGContextSetBlendMode(context, kCGBlendModeDifference); 48 | CGContextSetFillColorWithColor(context,[UIColor whiteColor].CGColor); 49 | CGContextFillRect(context, CGRectMake(0, 0, self.size.width, self.size.height)); 50 | CGContextEndTransparencyLayer(context); 51 | UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext(); 52 | UIGraphicsEndImageContext(); 53 | return returnImage; 54 | } 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPBackwardCompatibility.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPBackwardCompatibility.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPBlockDefinedMatcher.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPBlockDefinedMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPDefines.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPDefines.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPDoubleTuple.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPDoubleTuple.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPExpect.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPExpect.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPFloatTuple.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPFloatTuple.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatcher.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatcherHelpers.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatcherHelpers.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beCloseTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beCloseTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beFalsy.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beFalsy.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beGreaterThan.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beGreaterThan.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beIdenticalTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beIdenticalTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beInTheRangeOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beInTheRangeOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beInstanceOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beInstanceOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beKindOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beKindOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beLessThan.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beLessThan.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beLessThanOrEqualTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beNil.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beNil.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beSubclassOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beSubclassOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beSupersetOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beSupersetOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beTruthy.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beTruthy.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+beginWith.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beginWith.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+conformTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+conformTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+contain.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+contain.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+endWith.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+endWith.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+equal.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+equal.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+haveCountOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+haveCountOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+notify.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+notify.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+raise.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+raise.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+raiseWithReason.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+raiseWithReason.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers+respondTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+respondTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPMatchers.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/EXPUnsupportedObject.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPUnsupportedObject.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/Expecta.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/Expecta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/ExpectaSupport.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/ExpectaSupport.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/NSObject+Expecta.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/NSObject+Expecta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Expecta/NSValue+Expecta.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/NSValue+Expecta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/FBSnapshotTestCase/FBSnapshotTestCase.h: -------------------------------------------------------------------------------- 1 | ../../../FBSnapshotTestCase/FBSnapshotTestCase.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/FBSnapshotTestCase/FBSnapshotTestController.h: -------------------------------------------------------------------------------- 1 | ../../../FBSnapshotTestCase/FBSnapshotTestController.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/FBSnapshotTestCase/UIImage+Compare.h: -------------------------------------------------------------------------------- 1 | ../../../FBSnapshotTestCase/UIImage+Compare.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/FBSnapshotTestCase/UIImage+Diff.h: -------------------------------------------------------------------------------- 1 | ../../../FBSnapshotTestCase/UIImage+Diff.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/HexColors/HexColor.h: -------------------------------------------------------------------------------- 1 | ../../../HexColors/Classes/HexColor.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SPTExample.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTExample.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SPTExampleGroup.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTExampleGroup.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SPTNestedReporter.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTNestedReporter.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SPTReporter.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTReporter.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SPTSharedExampleGroups.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTSharedExampleGroups.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SPTSpec.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTSpec.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SPTXCTestCase.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTXCTestCase.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SPTXCTestReporter.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTXCTestReporter.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/Specta.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/Specta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SpectaSupport.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SpectaSupport.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SpectaTypes.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SpectaTypes.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/SpectaUtility.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SpectaUtility.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/XCTestCase+Specta.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/XCTestCase+Specta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/XCTestLog+Specta.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/XCTestLog+Specta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/Specta/XCTestRun+Specta.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/XCTestRun+Specta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/TSMessages/TSBlurView.h: -------------------------------------------------------------------------------- 1 | ../../../../../Pod/Classes/TSBlurView.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/TSMessages/TSMessage.h: -------------------------------------------------------------------------------- 1 | ../../../../../Pod/Classes/TSMessage.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Private/TSMessages/TSMessageView.h: -------------------------------------------------------------------------------- 1 | ../../../../../Pod/Classes/TSMessageView.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPBackwardCompatibility.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPBackwardCompatibility.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPBlockDefinedMatcher.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPBlockDefinedMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPDefines.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPDefines.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPDoubleTuple.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPDoubleTuple.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPExpect.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPExpect.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPFloatTuple.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPFloatTuple.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatcher.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatcherHelpers.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatcherHelpers.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beCloseTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beCloseTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beFalsy.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beFalsy.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beGreaterThan.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beGreaterThan.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beIdenticalTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beIdenticalTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beInTheRangeOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beInTheRangeOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beInstanceOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beInstanceOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beKindOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beKindOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beLessThan.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beLessThan.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beLessThanOrEqualTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beNil.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beNil.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beSubclassOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beSubclassOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beSupersetOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beSupersetOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beTruthy.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beTruthy.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+beginWith.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+beginWith.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+conformTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+conformTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+contain.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+contain.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+endWith.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+endWith.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+equal.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+equal.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+haveCountOf.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+haveCountOf.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+notify.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+notify.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+raise.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+raise.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+raiseWithReason.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+raiseWithReason.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers+respondTo.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers+respondTo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPMatchers.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/matchers/EXPMatchers.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/EXPUnsupportedObject.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/EXPUnsupportedObject.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/Expecta.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/Expecta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/ExpectaSupport.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/ExpectaSupport.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/NSObject+Expecta.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/NSObject+Expecta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Expecta/NSValue+Expecta.h: -------------------------------------------------------------------------------- 1 | ../../../Expecta/src/NSValue+Expecta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/FBSnapshotTestCase/FBSnapshotTestCase.h: -------------------------------------------------------------------------------- 1 | ../../../FBSnapshotTestCase/FBSnapshotTestCase.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/FBSnapshotTestCase/FBSnapshotTestController.h: -------------------------------------------------------------------------------- 1 | ../../../FBSnapshotTestCase/FBSnapshotTestController.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/FBSnapshotTestCase/UIImage+Compare.h: -------------------------------------------------------------------------------- 1 | ../../../FBSnapshotTestCase/UIImage+Compare.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/FBSnapshotTestCase/UIImage+Diff.h: -------------------------------------------------------------------------------- 1 | ../../../FBSnapshotTestCase/UIImage+Diff.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/HexColors/HexColor.h: -------------------------------------------------------------------------------- 1 | ../../../HexColors/Classes/HexColor.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SPTExample.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTExample.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SPTExampleGroup.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTExampleGroup.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SPTNestedReporter.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTNestedReporter.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SPTReporter.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTReporter.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SPTSharedExampleGroups.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTSharedExampleGroups.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SPTSpec.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTSpec.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SPTXCTestCase.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTXCTestCase.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SPTXCTestReporter.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SPTXCTestReporter.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/Specta.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/Specta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SpectaSupport.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SpectaSupport.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SpectaTypes.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SpectaTypes.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/SpectaUtility.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/SpectaUtility.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/XCTestCase+Specta.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/XCTestCase+Specta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/XCTestLog+Specta.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/XCTestLog+Specta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/Specta/XCTestRun+Specta.h: -------------------------------------------------------------------------------- 1 | ../../../Specta/src/XCTestRun+Specta.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/TSMessages/TSBlurView.h: -------------------------------------------------------------------------------- 1 | ../../../../../Pod/Classes/TSBlurView.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/TSMessages/TSMessage.h: -------------------------------------------------------------------------------- 1 | ../../../../../Pod/Classes/TSMessage.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/TSMessages/TSMessageView.h: -------------------------------------------------------------------------------- 1 | ../../../../../Pod/Classes/TSMessageView.h -------------------------------------------------------------------------------- /Example/Pods/HexColors/Classes/HexColors.h: -------------------------------------------------------------------------------- 1 | // 2 | // HexColor.h 3 | // 4 | // Created by Marius Landwehr on 02.12.12. 5 | // The MIT License (MIT) 6 | // Copyright (c) 2013 Marius Landwehr marius.landwehr@gmail.com 7 | // 8 | // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 11 | // 12 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 13 | // 14 | 15 | #import "TargetConditionals.h" 16 | 17 | #if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR 18 | #import 19 | #define HXColor UIColor 20 | #else 21 | #import 22 | #define HXColor NSColor 23 | #endif 24 | 25 | @interface HXColor (HexColorAddition) 26 | 27 | + (HXColor *)colorWithHexString:(NSString *)hexString; 28 | + (HXColor *)colorWithHexString:(NSString *)hexString alpha:(CGFloat)alpha; 29 | 30 | + (HXColor *)colorWith8BitRed:(NSInteger)red green:(NSInteger)green blue:(NSInteger)blue; 31 | + (HXColor *)colorWith8BitRed:(NSInteger)red green:(NSInteger)green blue:(NSInteger)blue alpha:(CGFloat)alpha; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Example/Pods/HexColors/LICENCE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2012 Marius Landwehr marius.landwehr@gmail.com 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | -------------------------------------------------------------------------------- /Example/Pods/HexColors/README.md: -------------------------------------------------------------------------------- 1 | HexColors 2 | ========================= 3 | ![Badge w/ Version](https://cocoapod-badges.herokuapp.com/v/HexColors/badge.png) 4 | 5 | ![Badge w/ Version](https://cocoapod-badges.herokuapp.com/p/HexColors/badge.png) 6 | 7 | HexColors is drop in category for HexColor Support for NSColor and UIColor. Support for HexColors with prefixed # and without. 8 | 9 | # RELEASE 2.3.0 10 | Attention the API has changed! 11 | 12 | # Example iOS 13 | ``` objective-c 14 | // with hash 15 | UIColor *colorWithHex = [UIColor colorWithHexString:@"#ff8942"]; 16 | 17 | // without hash 18 | UIColor *secondColorWithHex = [UIColor colorWithHexString:@"ff8942"]; 19 | 20 | // short handling 21 | UIColor *shortColorWithHex = [UIColor colorWithHexString:@"fff"]; 22 | ``` 23 | 24 | # Example Mac OS X 25 | ``` objective-c 26 | // with hash 27 | NSColor *colorWithHex = [NSColor colorWithHexString:@"#ff8942"]; 28 | 29 | // wihtout hash 30 | NSColor *secondColorWithHex = [NSColor colorWithHexString:@"ff8942"]; 31 | 32 | // short handling 33 | NSColor *shortColorWithHex = [NSColor colorWithHexString:@"fff"]; 34 | ``` 35 | 36 | # Installation 37 | * `#import "HexColors.h"` where you want to use easy as pie HexColors 38 | * `pod install HexColors` 39 | * or just drag the source files in your project 40 | 41 | ## Requirements 42 | HexColors requires [iOS 5.0](http://developer.apple.com/library/ios/#releasenotes/General/WhatsNewIniPhoneOS/Articles/iPhoneOS4.html) and above, and Mac OS X 10.6 43 | 44 | ## Credits 45 | HexColors was created by [Marius Landwehr](https://github.com/mRs-) because of the pain recalculating Hex values to RGB. 46 | 47 | HexColors was ported to Mac OS X by [holgersindbaek](https://github.com/holgersindbaek). 48 | 49 | ## Creator 50 | [Marius Landwehr](https://github.com/mRs-) [@mariusLAN](https://twitter.com/mariusLAN) 51 | 52 | ## License 53 | HexColors is available underthe MIT license. See the LICENSE file for more info. 54 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/TSMessages.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint TSMessages.podspec' to ensure this is a 3 | # valid spec and remove all comments before submitting the spec. 4 | # 5 | # Any lines starting with a # are optional, but encouraged 6 | # 7 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 8 | # 9 | 10 | Pod::Spec.new do |s| 11 | s.name = "TSMessages" 12 | s.version = "0.9.12" 13 | s.summary = "Easy to use and customizable messages/notifications for iOS à la Tweetbot." 14 | s.description = <<-DESC 15 | This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). 16 | The notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it. 17 | There are 4 different types already set up for you: Success, Error, Warning, Message. 18 | DESC 19 | s.homepage = "https://github.com/KrauseFx/TSMessages/" 20 | 21 | s.license = 'MIT' 22 | s.author = { "Felix Krause" => "krausefx@gmail.com" } 23 | s.source = { :git => "https://github.com/KrauseFx/TSMessages.git", :tag => s.version.to_s } 24 | s.social_media_url = 'https://twitter.com/KrauseFx' 25 | 26 | s.platform = :ios, '5.0' 27 | s.requires_arc = true 28 | 29 | s.source_files = 'Pod/Classes' 30 | s.resources = ['Pod/Assets/*.png', 'Pod/Assets/*.json'] 31 | 32 | s.public_header_files = 'Pod/Classes/**/*.h' 33 | s.dependency 'HexColors' 34 | end 35 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.12", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/KrauseFx/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "krausefx@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/KrauseFx/TSMessages.git", 13 | "tag": "0.9.12" 14 | }, 15 | "social_media_url": "https://twitter.com/KrauseFx", 16 | "platforms": { 17 | "ios": "5.0" 18 | }, 19 | "requires_arc": true, 20 | "source_files": "Pod/Classes", 21 | "resources": [ 22 | "Pod/Assets/*.png", 23 | "Pod/Assets/*.json" 24 | ], 25 | "public_header_files": "Pod/Classes/**/*.h", 26 | "dependencies": { 27 | "HexColors": [ 28 | 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Expecta (0.3.1) 3 | - Expecta+Snapshots (1.3.1): 4 | - Expecta 5 | - FBSnapshotTestCase 6 | - FBSnapshotTestCase (1.4) 7 | - HexColors (2.2.1) 8 | - Specta (0.2.1) 9 | - TSMessages (0.9.12): 10 | - HexColors 11 | 12 | DEPENDENCIES: 13 | - Expecta 14 | - Expecta+Snapshots 15 | - FBSnapshotTestCase 16 | - Specta (~> 0.2.1) 17 | - TSMessages (from `../`) 18 | 19 | EXTERNAL SOURCES: 20 | TSMessages: 21 | :path: ../ 22 | 23 | SPEC CHECKSUMS: 24 | Expecta: 03aabd0a89d8dea843baecb19a7fd7466a69a31d 25 | Expecta+Snapshots: 4a56b9411c6ed156987072e52c39de67d864015a 26 | FBSnapshotTestCase: f9f225b5ba11c8d8c09075590490df16314e4d62 27 | HexColors: 01384d2bbe8dc4ffa43c3b4135db6e976952d153 28 | Specta: 9141310f46b1f68b676650ff2854e1ed0b74163a 29 | TSMessages: 3e67c231abe604e5ab732050ba6dc99df4650765 30 | 31 | COCOAPODS: 0.36.0.beta.1 32 | -------------------------------------------------------------------------------- /Example/Pods/Specta/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2013 Specta Team. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | 21 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTExample.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "SpectaTypes.h" 3 | 4 | @interface SPTExample : NSObject 5 | 6 | @property (nonatomic, copy) NSString *name; 7 | @property (nonatomic, copy) id block; 8 | @property (nonatomic) BOOL pending; 9 | @property (nonatomic, getter = isFocused) BOOL focused; 10 | 11 | - (id)initWithName:(NSString *)name block:(id)block; 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTExample.m: -------------------------------------------------------------------------------- 1 | #import "SPTExample.h" 2 | 3 | @implementation SPTExample 4 | 5 | - (id)initWithName:(NSString *)name block:(id)block { 6 | self = [super init]; 7 | if (self) { 8 | self.name = name; 9 | self.block = block; 10 | self.pending = block == nil; 11 | } 12 | return self; 13 | } 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTExampleGroup.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "SpectaTypes.h" 4 | 5 | @class 6 | SPTExample 7 | ; 8 | 9 | @interface SPTExampleGroup : NSObject 10 | 11 | @property (nonatomic, copy) NSString *name; 12 | @property (nonatomic, strong) SPTExampleGroup *root; 13 | @property (nonatomic, strong) SPTExampleGroup *parent; 14 | @property (nonatomic, strong) NSMutableArray *children; 15 | @property (nonatomic, strong) NSMutableArray *beforeAllArray; 16 | @property (nonatomic, strong) NSMutableArray *afterAllArray; 17 | @property (nonatomic, strong) NSMutableArray *beforeEachArray; 18 | @property (nonatomic, strong) NSMutableArray *afterEachArray; 19 | @property (nonatomic, strong) NSMutableDictionary *sharedExamples; 20 | @property (nonatomic) unsigned int exampleCount; 21 | @property (nonatomic) unsigned int ranExampleCount; 22 | @property (nonatomic, getter=isFocused) BOOL focused; 23 | 24 | + (void)setAsyncSpecTimeout:(NSTimeInterval)timeout; 25 | - (id)initWithName:(NSString *)name parent:(SPTExampleGroup *)parent root:(SPTExampleGroup *)root; 26 | 27 | - (SPTExampleGroup *)addExampleGroupWithName:(NSString *)name; 28 | - (SPTExampleGroup *)addExampleGroupWithName:(NSString *)name focused:(BOOL)focused; 29 | 30 | - (SPTExample *)addExampleWithName:(NSString *)name block:(id)block; 31 | - (SPTExample *)addExampleWithName:(NSString *)name block:(id)block focused:(BOOL)focused; 32 | 33 | - (void)addBeforeAllBlock:(SPTVoidBlock)block; 34 | - (void)addAfterAllBlock:(SPTVoidBlock)block; 35 | - (void)addBeforeEachBlock:(SPTVoidBlock)block; 36 | - (void)addAfterEachBlock:(SPTVoidBlock)block; 37 | 38 | - (NSArray *)compileExamplesWithNameStack:(NSArray *)nameStack; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTNestedReporter.h: -------------------------------------------------------------------------------- 1 | #import "SPTReporter.h" 2 | 3 | @interface SPTNestedReporter : SPTReporter 4 | 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTReporter.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface SPTReporter : XCTestLog 4 | 5 | /* 6 | * Returns a singleton reporter used to generate Specta's test output. 7 | * The type of reporter can be customized by subclassing and setting the 8 | * SPECTA_REPORTER_CLASS environment variable. 9 | * 10 | * Subclasses may override methods from XCTestObserver to change test output. 11 | * Initialization shuld be performed in the -startObserving / -stopObserving methods, 12 | * and MUST invoke the super class implementation. 13 | */ 14 | + (instancetype)sharedReporter; 15 | 16 | #pragma mark - Run Stack 17 | 18 | @property (nonatomic, strong, readonly) NSArray *runStack; 19 | @property (nonatomic, assign, readonly) NSUInteger runStackCount; 20 | 21 | @property (nonatomic, assign, readonly) NSInteger numberOfTestCases; 22 | @property (nonatomic, assign, readonly) NSInteger numberOfCompletedTestCases; 23 | 24 | #pragma mark - Printing 25 | 26 | - (void)printString:(NSString *)string; 27 | - (void)printStringWithFormat:(NSString *)formatString, ... NS_FORMAT_FUNCTION(1,2); 28 | 29 | - (void)printLine; 30 | - (void)printLine:(NSString *)line; 31 | - (void)printLineWithFormat:(NSString *)formatString, ... NS_FORMAT_FUNCTION(1,2); 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTSharedExampleGroups.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "SpectaTypes.h" 3 | 4 | @class 5 | SPTExampleGroup 6 | ; 7 | 8 | @interface SPTSharedExampleGroups : NSObject 9 | 10 | + (void)addSharedExampleGroupWithName:(NSString *)name block:(SPTDictionaryBlock)block exampleGroup:(SPTExampleGroup *)exampleGroup; 11 | + (SPTDictionaryBlock)sharedExampleGroupWithName:(NSString *)name exampleGroup:(SPTExampleGroup *)exampleGroup; 12 | + (void)defineSharedExampleGroups; 13 | 14 | + (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected; 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTSharedExampleGroups.m: -------------------------------------------------------------------------------- 1 | #import "SPTSharedExampleGroups.h" 2 | #import "SPTExampleGroup.h" 3 | #import "SPTXCTestCase.h" 4 | #import "SpectaUtility.h" 5 | #import 6 | 7 | NSMutableDictionary *globalSharedExampleGroups = nil; 8 | BOOL initialized = NO; 9 | 10 | @implementation SPTSharedExampleGroups 11 | 12 | + (void)initialize { 13 | Class SPTSharedExampleGroupsClass = [SPTSharedExampleGroups class]; 14 | if ([self class] == SPTSharedExampleGroupsClass) { 15 | if (!initialized) { 16 | initialized = YES; 17 | globalSharedExampleGroups = [[NSMutableDictionary alloc] init]; 18 | 19 | Class *classes = NULL; 20 | int numClasses = objc_getClassList(NULL, 0); 21 | 22 | if (numClasses > 0) { 23 | classes = (Class *)malloc(sizeof(Class) * numClasses); 24 | numClasses = objc_getClassList(classes, numClasses); 25 | 26 | Class klass, superClass; 27 | for(uint i = 0; i < numClasses; i++) { 28 | klass = classes[i]; 29 | superClass = class_getSuperclass(klass); 30 | if (superClass == SPTSharedExampleGroupsClass) { 31 | [klass defineSharedExampleGroups]; 32 | } 33 | } 34 | 35 | free(classes); 36 | } 37 | } 38 | } 39 | } 40 | 41 | + (void)addSharedExampleGroupWithName:(NSString *)name block:(SPTDictionaryBlock)block exampleGroup:(SPTExampleGroup *)exampleGroup { 42 | (exampleGroup == nil ? globalSharedExampleGroups : exampleGroup.sharedExamples)[name] = [block copy]; 43 | } 44 | 45 | + (SPTDictionaryBlock)sharedExampleGroupWithName:(NSString *)name exampleGroup:(SPTExampleGroup *)exampleGroup { 46 | SPTDictionaryBlock sharedExampleGroup = nil; 47 | while (exampleGroup != nil) { 48 | if ((sharedExampleGroup = exampleGroup.sharedExamples[name])) { 49 | return sharedExampleGroup; 50 | } 51 | exampleGroup = exampleGroup.parent; 52 | } 53 | return globalSharedExampleGroups[name]; 54 | } 55 | 56 | + (void)defineSharedExampleGroups {} 57 | 58 | + (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected { 59 | [SPTCurrentTestCase recordFailureWithDescription:description inFile:filename atLine:lineNumber expected:expected]; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTSpec.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @class 4 | SPTExample 5 | , SPTExampleGroup 6 | ; 7 | 8 | @interface SPTSpec : NSObject 9 | 10 | @property (nonatomic, strong) SPTExampleGroup *rootGroup; 11 | @property (nonatomic, strong) NSMutableArray *groupStack; 12 | @property (nonatomic, strong) NSArray *compiledExamples; 13 | @property (nonatomic, strong) NSString *fileName; 14 | @property (nonatomic) NSUInteger lineNumber; 15 | @property (nonatomic, getter = isDisabled) BOOL disabled; 16 | @property (nonatomic) BOOL hasFocusedExamples; 17 | 18 | - (SPTExampleGroup *)currentGroup; 19 | - (void)compile; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTSpec.m: -------------------------------------------------------------------------------- 1 | #import "SPTSpec.h" 2 | #import "SPTExampleGroup.h" 3 | #import "SPTExample.h" 4 | 5 | @implementation SPTSpec 6 | 7 | - (id)init { 8 | self = [super init]; 9 | if (self) { 10 | self.rootGroup = [[SPTExampleGroup alloc] init]; 11 | self.rootGroup.root = self.rootGroup; 12 | self.groupStack = [NSMutableArray arrayWithObject:self.rootGroup]; 13 | } 14 | return self; 15 | } 16 | 17 | - (SPTExampleGroup *)currentGroup { 18 | return [self.groupStack lastObject]; 19 | } 20 | 21 | - (void)compile { 22 | self.compiledExamples = [self.rootGroup compileExamplesWithNameStack:@[]]; 23 | for (SPTExample *example in self.compiledExamples) { 24 | if (example.focused) { 25 | self.hasFocusedExamples = YES; 26 | break; 27 | } 28 | } 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTXCTestCase.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "XCTestCase+Specta.h" 3 | 4 | @class 5 | SPTSpec 6 | , SPTExample 7 | ; 8 | 9 | @interface SPTXCTestCase : XCTestCase 10 | 11 | @property (nonatomic, strong) NSInvocation *spt_invocation; 12 | @property (nonatomic, strong) XCTestCaseRun *spt_run; 13 | @property (nonatomic, assign) BOOL spt_skipped; 14 | @property (nonatomic, assign, readonly, getter = spt_isPending) BOOL spt_pending; 15 | 16 | + (BOOL)spt_isDisabled; 17 | + (void)spt_setDisabled:(BOOL)disabled; 18 | + (BOOL)spt_focusedExamplesExist; 19 | 20 | + (SPTSpec *)spt_spec; 21 | - (void)spt_setCurrentSpecWithFileName:(const char *)fileName lineNumber:(NSUInteger)lineNumber; 22 | - (void)spt_defineSpec; 23 | - (void)spt_unsetCurrentSpec; 24 | - (void)spt_runExampleAtIndex:(NSUInteger)index; 25 | - (SPTExample *)spt_getCurrentExample; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTXCTestReporter.h: -------------------------------------------------------------------------------- 1 | #import "SPTReporter.h" 2 | 3 | /** 4 | * Reporter that produces output identical to XCode's default output. Useful when integrating with 3rd-party tools that 5 | * may not like SPTNestedReporter's indented output. 6 | */ 7 | @interface SPTXCTestReporter : SPTReporter 8 | 9 | @end 10 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SPTXCTestReporter.m: -------------------------------------------------------------------------------- 1 | #import "SPTXCTestReporter.h" 2 | 3 | @implementation SPTXCTestReporter 4 | 5 | /* 6 | * Intentionally left blank. 7 | * This class is included for future-compatibility just in case we need to 8 | * weak reporter output for users who want test output idential to XCTestLog. 9 | */ 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/Specta.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "SpectaSupport.h" 4 | #import "SPTXCTestCase.h" 5 | #import "SPTSpec.h" 6 | #import "SPTExampleGroup.h" 7 | #import "SPTSharedExampleGroups.h" 8 | 9 | @interface Specta : NSObject 10 | @end 11 | 12 | #define SpecBegin(name) _SPTSpecBegin(name, __FILE__, __LINE__) 13 | #define SpecEnd _SPTSpecEnd 14 | 15 | #define SharedExamplesBegin(name) _SPTSharedExampleGroupsBegin(name) 16 | #define SharedExamplesEnd _SPTSharedExampleGroupsEnd 17 | #define SharedExampleGroupsBegin(name) _SPTSharedExampleGroupsBegin(name) 18 | #define SharedExampleGroupsEnd _SPTSharedExampleGroupsEnd 19 | 20 | #ifdef SPT_CEDAR_SYNTAX 21 | # define SPEC_BEGIN(name) SpecBegin(name) 22 | # define SPEC_END SpecEnd 23 | # define SHARED_EXAMPLE_GROUPS_BEGIN(name) SharedExamplesBegin(name) 24 | # define SHARED_EXAMPLE_GROUPS_END SharedExamplesEnd 25 | # ifndef PENDING 26 | # define PENDING nil 27 | # endif 28 | #endif 29 | 30 | void SPTdescribe(NSString *name, BOOL focused, void (^block)()); 31 | void describe(NSString *name, void (^block)()); 32 | void fdescribe(NSString *name, void (^block)()); 33 | void context(NSString *name, void (^block)()); 34 | void fcontext(NSString *name, void (^block)()); 35 | 36 | void SPTexample(NSString *name, BOOL focused, id block); 37 | void example(NSString *name, id block); 38 | void fexample(NSString *name, id block); 39 | void it(NSString *name, id block); 40 | void fit(NSString *name, id block); 41 | void specify(NSString *name, id block); 42 | void fspecify(NSString *name, id block); 43 | 44 | 45 | void SPTpending(NSString *name, ...); 46 | #define xdescribe(...) SPTpending(__VA_ARGS__, nil) 47 | #define xcontext(...) SPTpending(__VA_ARGS__, nil) 48 | #define xexample(...) SPTpending(__VA_ARGS__, nil) 49 | #define xit(...) SPTpending(__VA_ARGS__, nil) 50 | #define xspecify(...) SPTpending(__VA_ARGS__, nil) 51 | #define pending(...) SPTpending(__VA_ARGS__, nil) 52 | 53 | void beforeAll(id block); 54 | void afterAll(id block); 55 | void beforeEach(id block); 56 | void afterEach(id block); 57 | void before(id block); 58 | void after(id block); 59 | 60 | void sharedExamplesFor(NSString *name, void (^block)(NSDictionary *data)); 61 | void sharedExamples(NSString *name, void (^block)(NSDictionary *data)); 62 | 63 | void SPTitShouldBehaveLike(const char *fileName, NSUInteger lineNumber, NSString *name, id dictionaryOrBlock); 64 | void itShouldBehaveLike(NSString *name, id dictionaryOrBlockOrNil); // aid code completion 65 | void itBehavesLike(NSString *name, id dictionaryOrBlockOrNil); 66 | #define itShouldBehaveLike(...) SPTitShouldBehaveLike(__FILE__, __LINE__, __VA_ARGS__) 67 | #define itBehavesLike(...) SPTitShouldBehaveLike(__FILE__, __LINE__, __VA_ARGS__) 68 | 69 | void setAsyncSpecTimeout(NSTimeInterval timeout); 70 | #define AsyncBlock (void (^done)(void)) 71 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SpectaSupport.h: -------------------------------------------------------------------------------- 1 | #ifndef SPT_SUBCLASS 2 | #define SPT_SUBCLASS SPTXCTestCase 3 | #endif 4 | 5 | 6 | 7 | #define _SPTSpecBegin(name, file, line) \ 8 | @interface name##Spec : SPT_SUBCLASS \ 9 | @end \ 10 | @implementation name##Spec \ 11 | - (void)spt_defineSpec { \ 12 | const char *specFileName = file; \ 13 | @try { \ 14 | [self spt_setCurrentSpecWithFileName:(file) lineNumber:(line)]; 15 | 16 | #define _SPTSpecEnd \ 17 | [self spt_unsetCurrentSpec]; \ 18 | } @catch(NSException *exception) { \ 19 | fprintf(stderr, "%s: An exception has occured outside of tests, aborting.\n\n%s (%s) \n", specFileName, [[exception name] UTF8String], [[exception reason] UTF8String]); \ 20 | if ([exception respondsToSelector:@selector(callStackSymbols)]) { \ 21 | NSArray *callStackSymbols = [exception callStackSymbols]; \ 22 | if (callStackSymbols) { \ 23 | NSString *callStack = [NSString stringWithFormat:@"\n Call Stack:\n %@\n", [callStackSymbols componentsJoinedByString:@"\n "]]; \ 24 | fprintf(stderr, "%s", [callStack UTF8String]); \ 25 | } \ 26 | } \ 27 | exit(1); \ 28 | } \ 29 | } \ 30 | @end 31 | 32 | #define _SPTSharedExampleGroupsBegin(name) \ 33 | @interface name##SharedExampleGroups : SPTSharedExampleGroups \ 34 | @end \ 35 | @implementation name##SharedExampleGroups \ 36 | + (void)defineSharedExampleGroups { 37 | 38 | #define _SPTSharedExampleGroupsEnd \ 39 | } \ 40 | @end 41 | 42 | #undef _XCTRegisterFailure 43 | #define _XCTRegisterFailure(condition, format...) \ 44 | ({ \ 45 | _XCTFailureHandler((id)self, YES, __FILE__, __LINE__, condition, @"" format); \ 46 | }) -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SpectaTypes.h: -------------------------------------------------------------------------------- 1 | typedef void (^SPTVoidBlock)(); 2 | typedef void (^SPTAsyncBlock)(void (^)()); 3 | typedef void (^SPTDictionaryBlock)(NSDictionary *dictionary); 4 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SpectaUtility.h: -------------------------------------------------------------------------------- 1 | #import 2 | extern NSString * const SPTCurrentSpecKey; 3 | extern NSString * const SPTCurrentTestCaseKey; 4 | 5 | #define SPTCurrentSpec [[NSThread currentThread] threadDictionary][SPTCurrentSpecKey] 6 | #define SPTCurrentTestCase [[NSThread currentThread] threadDictionary][SPTCurrentTestCaseKey] 7 | #define SPTCurrentGroup [SPTCurrentSpec currentGroup] 8 | #define SPTGroupStack [SPTCurrentSpec groupStack] 9 | 10 | #define SPTReturnUnlessBlockOrNil(block) if ((block) && !SPTIsBlock((block))) return; 11 | #define SPTIsBlock(obj) [(obj) isKindOfClass:NSClassFromString(@"NSBlock")] 12 | 13 | const char *SPTGetBlockSignature(id blockObject); 14 | BOOL SPTIsSpecClass(Class aClass); -------------------------------------------------------------------------------- /Example/Pods/Specta/src/SpectaUtility.m: -------------------------------------------------------------------------------- 1 | #import "SpectaUtility.h" 2 | #import "SPTXCTestCase.h" 3 | #import 4 | 5 | NSString * const SPTCurrentSpecKey = @"SPTCurrentSpec"; 6 | NSString * const SPTCurrentTestCaseKey = @"SPTCurrentTestCase"; 7 | 8 | // http://clang.llvm.org/docs/Block-ABI-Apple.html 9 | struct SPTBlockLiteral { 10 | void *isa; // initialized to &_NSConcreteStackBlock or &_NSConcreteGlobalBlock 11 | int flags; 12 | int reserved; 13 | void (*invoke)(void *, ...); 14 | struct Block_descriptor_1 { 15 | unsigned long int reserved; // NULL 16 | unsigned long int size; // sizeof(struct Block_literal_1) 17 | // optional helper functions 18 | void (*copy_helper)(void *dst, void *src); // IFF (1<<25) 19 | void (*dispose_helper)(void *src); // IFF (1<<25) 20 | // required ABI.2010.3.16 21 | const char *signature; // IFF (1<<30) 22 | } *descriptor; 23 | // imported variables 24 | }; 25 | 26 | enum { 27 | SPT_BLOCK_HAS_COPY_DISPOSE = (1 << 25), 28 | SPT_BLOCK_HAS_CTOR = (1 << 26), // helpers have C++ code 29 | SPT_BLOCK_IS_GLOBAL = (1 << 28), 30 | SPT_BLOCK_HAS_STRET = (1 << 29), // IFF BLOCK_HAS_SIGNATURE 31 | SPT_BLOCK_HAS_SIGNATURE = (1 << 30), 32 | }; 33 | 34 | const char *SPTGetBlockSignature(id blockObject) { 35 | struct SPTBlockLiteral *block = (__bridge struct SPTBlockLiteral *)blockObject; 36 | 37 | int flags = block->flags; 38 | 39 | if (flags & SPT_BLOCK_HAS_SIGNATURE) { 40 | void *signaturePtr = block->descriptor; 41 | signaturePtr += sizeof(unsigned long int); // skip reserved 42 | signaturePtr += sizeof(unsigned long int); // skip size 43 | 44 | if (flags & SPT_BLOCK_HAS_COPY_DISPOSE) { 45 | signaturePtr += sizeof(void(*)(void *dst, void *src)); // skip copy_helper 46 | signaturePtr += sizeof(void(*)(void *src)); // skip dispose_helper 47 | } 48 | 49 | return *(const char **)signaturePtr; 50 | } 51 | 52 | return NULL; 53 | } 54 | 55 | BOOL SPTIsSpecClass(Class aClass) { 56 | Class superclass = class_getSuperclass(aClass); 57 | while (superclass != Nil) { 58 | if (superclass == [SPTXCTestCase class]) { 59 | return YES; 60 | } else { 61 | superclass = class_getSuperclass(superclass); 62 | } 63 | } 64 | return NO; 65 | } -------------------------------------------------------------------------------- /Example/Pods/Specta/src/XCTestCase+Specta.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface XCTestCase (Specta) 4 | @end -------------------------------------------------------------------------------- /Example/Pods/Specta/src/XCTestCase+Specta.m: -------------------------------------------------------------------------------- 1 | #import "XCTestCase+Specta.h" 2 | #import "SPTXCTestCase.h" 3 | #import "SPTExample.h" 4 | #import 5 | 6 | @interface XCTestCase (xct_allSubclasses) 7 | 8 | - (NSArray *)xct_allSubclasses; 9 | 10 | @end 11 | 12 | @implementation XCTestCase (Specta) 13 | 14 | + (void)load { 15 | Method xct_allSubclasses = class_getClassMethod(self, @selector(xct_allSubclasses)); 16 | Method xct_allSubclasses_swizzle = class_getClassMethod(self, @selector(xct_allSubclasses_swizzle)); 17 | method_exchangeImplementations(xct_allSubclasses, xct_allSubclasses_swizzle); 18 | } 19 | 20 | + (NSArray *)xct_allSubclasses_swizzle { 21 | NSMutableArray *subclasses = [[self xct_allSubclasses_swizzle] mutableCopy]; // call original 22 | [subclasses removeObject:[SPTXCTestCase class]]; 23 | return subclasses; 24 | } 25 | 26 | @end -------------------------------------------------------------------------------- /Example/Pods/Specta/src/XCTestLog+Specta.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface XCTestLog (Specta) 4 | 5 | - (void)spt_pauseObservationInBlock:(void (^)(void))block; 6 | 7 | @end 8 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/XCTestLog+Specta.m: -------------------------------------------------------------------------------- 1 | #import "XCTestLog+Specta.h" 2 | #import "SPTReporter.h" 3 | #import 4 | 5 | static void spt_swizzleInstanceMethod(Class class, SEL originalSelector, SEL swizzledSelector) { 6 | Method originalMethod = class_getInstanceMethod(class, originalSelector); 7 | Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); 8 | 9 | method_exchangeImplementations(originalMethod, swizzledMethod); 10 | } 11 | 12 | @implementation XCTestLog (Specta) 13 | 14 | + (void)load { 15 | spt_swizzleInstanceMethod(self, @selector(startObserving), @selector(XCTestLog_startObserving)); 16 | spt_swizzleInstanceMethod(self, @selector(stopObserving), @selector(XCTestLog_stopObserving)); 17 | } 18 | 19 | - (BOOL)spt_shouldProxyToSPTReporter { 20 | // Instances of XCTestLog (but not subclasses) simply forward to -[SPTReporter sharedReporter] 21 | return [self isMemberOfClass:[XCTestLog class]]; 22 | } 23 | 24 | - (void)spt_pauseObservationInBlock:(void (^)(void))block { 25 | [self XCTestLog_stopObserving]; 26 | block(); 27 | [self XCTestLog_startObserving]; 28 | } 29 | 30 | #pragma mark - XCTestObserver 31 | 32 | - (void)XCTestLog_startObserving { 33 | if ([self spt_shouldProxyToSPTReporter]) { 34 | [[SPTReporter sharedReporter] startObserving]; 35 | } else { 36 | [self XCTestLog_startObserving]; 37 | } 38 | } 39 | 40 | - (void)XCTestLog_stopObserving { 41 | if ([self spt_shouldProxyToSPTReporter]) { 42 | [[SPTReporter sharedReporter] stopObserving]; 43 | } else { 44 | [self XCTestLog_stopObserving]; 45 | usleep(100000); 46 | } 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/XCTestRun+Specta.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface XCTestRun (Specta) 4 | 5 | - (NSUInteger)spt_pendingTestCaseCount; 6 | - (NSUInteger)spt_skippedTestCaseCount; 7 | 8 | @end 9 | -------------------------------------------------------------------------------- /Example/Pods/Specta/src/XCTestRun+Specta.m: -------------------------------------------------------------------------------- 1 | #import "XCTestRun+Specta.h" 2 | #import "SPTXCTestCase.h" 3 | 4 | @implementation XCTestRun (Specta) 5 | 6 | #pragma mark - Pending Test Cases 7 | 8 | - (NSUInteger)spt_pendingTestCaseCount { 9 | NSUInteger pendingTestCaseCount = 0; 10 | 11 | if ([self isKindOfClass:[XCTestSuiteRun class]]) { 12 | for (XCTestRun * testRun in [(XCTestSuiteRun *)self testRuns]) { 13 | pendingTestCaseCount += [testRun spt_pendingTestCaseCount]; 14 | } 15 | } else if ([[self test] isKindOfClass:[SPTXCTestCase class]]) { 16 | SPTXCTestCase * testCase = (SPTXCTestCase *)[self test]; 17 | if (testCase != nil && [testCase spt_isPending]) { 18 | pendingTestCaseCount++; 19 | } 20 | } 21 | 22 | return pendingTestCaseCount; 23 | } 24 | 25 | #pragma mark - Skipped Test Cases 26 | 27 | - (NSUInteger)spt_skippedTestCaseCount { 28 | NSUInteger skippedTestCaseCount = 0; 29 | 30 | if ([self isKindOfClass:[XCTestSuiteRun class]]) { 31 | for (XCTestRun * testRun in [(XCTestSuiteRun *)self testRuns]) { 32 | skippedTestCaseCount += [testRun spt_skippedTestCaseCount]; 33 | } 34 | } else if ([[self test] isKindOfClass:[SPTXCTestCase class]]) { 35 | SPTXCTestCase * testCase = (SPTXCTestCase *)[self test]; 36 | if (testCase.spt_skipped) { 37 | skippedTestCaseCount++; 38 | } 39 | } 40 | 41 | return skippedTestCaseCount; 42 | } 43 | 44 | @end -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages-HexColors/Pods-TSMessages-HexColors-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-TSMessages-HexColors.xcconfig" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/HexColors" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 4 | OTHER_LDFLAGS = -ObjC 5 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages-HexColors/Pods-TSMessages-HexColors-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TSMessages_HexColors : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TSMessages_HexColors 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages-HexColors/Pods-TSMessages-HexColors-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-TSMessages-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages-HexColors/Pods-TSMessages-HexColors.xcconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Example/Pods/Target Support Files/Pods-TSMessages-HexColors/Pods-TSMessages-HexColors.xcconfig -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages-TSMessages/Pods-TSMessages-TSMessages-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-TSMessages-TSMessages.xcconfig" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/TSMessages" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 4 | OTHER_LDFLAGS = -ObjC 5 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages-TSMessages/Pods-TSMessages-TSMessages-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TSMessages_TSMessages : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TSMessages_TSMessages 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages-TSMessages/Pods-TSMessages-TSMessages-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-TSMessages-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages-TSMessages/Pods-TSMessages-TSMessages.xcconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Example/Pods/Target Support Files/Pods-TSMessages-TSMessages/Pods-TSMessages-TSMessages.xcconfig -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages/Pods-TSMessages-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## HexColors 5 | 6 | The MIT License (MIT) 7 | Copyright (c) 2012 Marius Landwehr marius.landwehr@gmail.com 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 14 | 15 | 16 | ## TSMessages 17 | 18 | Copyright (c) 2014 Toursprung, Felix Krause 19 | 20 | Permission is hereby granted, free of charge, to any person obtaining a copy 21 | of this software and associated documentation files (the "Software"), to deal 22 | in the Software without restriction, including without limitation the rights 23 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 24 | copies of the Software, and to permit persons to whom the Software is 25 | furnished to do so, subject to the following conditions: 26 | 27 | The above copyright notice and this permission notice shall be included in 28 | all copies or substantial portions of the Software. 29 | 30 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 31 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 32 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 33 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 34 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 35 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 36 | THE SOFTWARE. 37 | 38 | Generated by CocoaPods - http://cocoapods.org 39 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages/Pods-TSMessages-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_TSMessages : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_TSMessages 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages/Pods-TSMessages-environment.h: -------------------------------------------------------------------------------- 1 | 2 | // To check if a library is compiled with CocoaPods you 3 | // can use the `COCOAPODS` macro definition which is 4 | // defined in the xcconfigs so it is available in 5 | // headers also when they are imported in the client 6 | // project. 7 | 8 | 9 | // HexColors 10 | #define COCOAPODS_POD_AVAILABLE_HexColors 11 | #define COCOAPODS_VERSION_MAJOR_HexColors 2 12 | #define COCOAPODS_VERSION_MINOR_HexColors 2 13 | #define COCOAPODS_VERSION_PATCH_HexColors 1 14 | 15 | // TSMessages 16 | #define COCOAPODS_POD_AVAILABLE_TSMessages 17 | #define COCOAPODS_VERSION_MAJOR_TSMessages 0 18 | #define COCOAPODS_VERSION_MINOR_TSMessages 9 19 | #define COCOAPODS_VERSION_PATCH_TSMessages 12 20 | 21 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages/Pods-TSMessages.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Expecta" -isystem "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" -isystem "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" -isystem "${PODS_ROOT}/Headers/Public/HexColors" -isystem "${PODS_ROOT}/Headers/Public/Specta" -isystem "${PODS_ROOT}/Headers/Public/TSMessages" 4 | OTHER_LDFLAGS = -ObjC -l"Pods-TSMessages-HexColors" -l"Pods-TSMessages-TSMessages" 5 | OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) 6 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-TSMessages/Pods-TSMessages.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Expecta" -isystem "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" -isystem "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" -isystem "${PODS_ROOT}/Headers/Public/HexColors" -isystem "${PODS_ROOT}/Headers/Public/Specta" -isystem "${PODS_ROOT}/Headers/Public/TSMessages" 4 | OTHER_LDFLAGS = -ObjC -l"Pods-TSMessages-HexColors" -l"Pods-TSMessages-TSMessages" 5 | OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) 6 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Expecta+Snapshots/Pods-Tests-Expecta+Snapshots-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-Tests-Expecta+Snapshots.xcconfig" 2 | FRAMEWORK_SEARCH_PATHS = ${PODS_TESTS_EXPECTA_SNAPSHOTS_FRAMEWORK_SEARCH_PATHS} 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 5 | OTHER_LDFLAGS = ${PODS_TESTS_EXPECTA_SNAPSHOTS_OTHER_LDFLAGS} -ObjC 6 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Expecta+Snapshots/Pods-Tests-Expecta+Snapshots-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests_Expecta_Snapshots : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests_Expecta_Snapshots 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Expecta+Snapshots/Pods-Tests-Expecta+Snapshots-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-Tests-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Expecta+Snapshots/Pods-Tests-Expecta+Snapshots.xcconfig: -------------------------------------------------------------------------------- 1 | PODS_TESTS_EXPECTA_SNAPSHOTS_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" 2 | PODS_TESTS_EXPECTA_SNAPSHOTS_OTHER_LDFLAGS = -framework "Foundation" -framework "XCTest" -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Expecta/Pods-Tests-Expecta-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-Tests-Expecta.xcconfig" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Expecta" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 4 | OTHER_LDFLAGS = ${PODS_TESTS_EXPECTA_OTHER_LDFLAGS} -ObjC 5 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Expecta/Pods-Tests-Expecta-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests_Expecta : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests_Expecta 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Expecta/Pods-Tests-Expecta-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-Tests-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Expecta/Pods-Tests-Expecta.xcconfig: -------------------------------------------------------------------------------- 1 | PODS_TESTS_EXPECTA_OTHER_LDFLAGS = -framework "Foundation" -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-FBSnapshotTestCase/Pods-Tests-FBSnapshotTestCase-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-Tests-FBSnapshotTestCase.xcconfig" 2 | FRAMEWORK_SEARCH_PATHS = ${PODS_TESTS_FBSNAPSHOTTESTCASE_FRAMEWORK_SEARCH_PATHS} 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 5 | OTHER_LDFLAGS = ${PODS_TESTS_FBSNAPSHOTTESTCASE_OTHER_LDFLAGS} -ObjC 6 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-FBSnapshotTestCase/Pods-Tests-FBSnapshotTestCase-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests_FBSnapshotTestCase : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests_FBSnapshotTestCase 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-FBSnapshotTestCase/Pods-Tests-FBSnapshotTestCase-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-Tests-environment.h" 6 | #define FB_REFERENCE_IMAGE_DIR = "$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages" 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-FBSnapshotTestCase/Pods-Tests-FBSnapshotTestCase.xcconfig: -------------------------------------------------------------------------------- 1 | PODS_TESTS_FBSNAPSHOTTESTCASE_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" 2 | PODS_TESTS_FBSNAPSHOTTESTCASE_OTHER_LDFLAGS = -framework "XCTest" -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-HexColors/Pods-Tests-HexColors-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-Tests-HexColors.xcconfig" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/HexColors" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 4 | OTHER_LDFLAGS = -ObjC 5 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-HexColors/Pods-Tests-HexColors-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests_HexColors : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests_HexColors 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-HexColors/Pods-Tests-HexColors-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-Tests-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-HexColors/Pods-Tests-HexColors.xcconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Example/Pods/Target Support Files/Pods-Tests-HexColors/Pods-Tests-HexColors.xcconfig -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Specta/Pods-Tests-Specta-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-Tests-Specta.xcconfig" 2 | FRAMEWORK_SEARCH_PATHS = ${PODS_TESTS_SPECTA_FRAMEWORK_SEARCH_PATHS} 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Specta" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 5 | OTHER_LDFLAGS = ${PODS_TESTS_SPECTA_OTHER_LDFLAGS} -ObjC 6 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Specta/Pods-Tests-Specta-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests_Specta : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests_Specta 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Specta/Pods-Tests-Specta-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-Tests-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-Specta/Pods-Tests-Specta.xcconfig: -------------------------------------------------------------------------------- 1 | PODS_TESTS_SPECTA_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" 2 | PODS_TESTS_SPECTA_OTHER_LDFLAGS = -framework "Foundation" -framework "XCTest" -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-TSMessages/Pods-Tests-TSMessages-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-Tests-TSMessages.xcconfig" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/TSMessages" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 4 | OTHER_LDFLAGS = -ObjC 5 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-TSMessages/Pods-Tests-TSMessages-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests_TSMessages : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests_TSMessages 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-TSMessages/Pods-Tests-TSMessages-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-Tests-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests-TSMessages/Pods-Tests-TSMessages.xcconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Example/Pods/Target Support Files/Pods-Tests-TSMessages/Pods-Tests-TSMessages.xcconfig -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests/Pods-Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests/Pods-Tests-environment.h: -------------------------------------------------------------------------------- 1 | 2 | // To check if a library is compiled with CocoaPods you 3 | // can use the `COCOAPODS` macro definition which is 4 | // defined in the xcconfigs so it is available in 5 | // headers also when they are imported in the client 6 | // project. 7 | 8 | 9 | // Expecta 10 | #define COCOAPODS_POD_AVAILABLE_Expecta 11 | #define COCOAPODS_VERSION_MAJOR_Expecta 0 12 | #define COCOAPODS_VERSION_MINOR_Expecta 3 13 | #define COCOAPODS_VERSION_PATCH_Expecta 1 14 | 15 | // Expecta+Snapshots 16 | #define COCOAPODS_POD_AVAILABLE_Expecta_Snapshots 17 | #define COCOAPODS_VERSION_MAJOR_Expecta_Snapshots 1 18 | #define COCOAPODS_VERSION_MINOR_Expecta_Snapshots 3 19 | #define COCOAPODS_VERSION_PATCH_Expecta_Snapshots 1 20 | 21 | // FBSnapshotTestCase 22 | #define COCOAPODS_POD_AVAILABLE_FBSnapshotTestCase 23 | #define COCOAPODS_VERSION_MAJOR_FBSnapshotTestCase 1 24 | #define COCOAPODS_VERSION_MINOR_FBSnapshotTestCase 4 25 | #define COCOAPODS_VERSION_PATCH_FBSnapshotTestCase 0 26 | 27 | // HexColors 28 | #define COCOAPODS_POD_AVAILABLE_HexColors 29 | #define COCOAPODS_VERSION_MAJOR_HexColors 2 30 | #define COCOAPODS_VERSION_MINOR_HexColors 2 31 | #define COCOAPODS_VERSION_PATCH_HexColors 1 32 | 33 | // Specta 34 | #define COCOAPODS_POD_AVAILABLE_Specta 35 | #define COCOAPODS_VERSION_MAJOR_Specta 0 36 | #define COCOAPODS_VERSION_MINOR_Specta 2 37 | #define COCOAPODS_VERSION_PATCH_Specta 1 38 | 39 | // TSMessages 40 | #define COCOAPODS_POD_AVAILABLE_TSMessages 41 | #define COCOAPODS_VERSION_MAJOR_TSMessages 0 42 | #define COCOAPODS_VERSION_MINOR_TSMessages 9 43 | #define COCOAPODS_VERSION_PATCH_TSMessages 12 44 | 45 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests/Pods-Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Expecta" -isystem "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" -isystem "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" -isystem "${PODS_ROOT}/Headers/Public/HexColors" -isystem "${PODS_ROOT}/Headers/Public/Specta" -isystem "${PODS_ROOT}/Headers/Public/TSMessages" 5 | OTHER_LDFLAGS = -ObjC -l"Pods-Tests-Expecta" -l"Pods-Tests-Expecta+Snapshots" -l"Pods-Tests-FBSnapshotTestCase" -l"Pods-Tests-HexColors" -l"Pods-Tests-Specta" -l"Pods-Tests-TSMessages" -framework "Foundation" -framework "XCTest" 6 | OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) 7 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Tests/Pods-Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/HexColors" "${PODS_ROOT}/Headers/Public/Specta" "${PODS_ROOT}/Headers/Public/TSMessages" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Expecta" -isystem "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" -isystem "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" -isystem "${PODS_ROOT}/Headers/Public/HexColors" -isystem "${PODS_ROOT}/Headers/Public/Specta" -isystem "${PODS_ROOT}/Headers/Public/TSMessages" 5 | OTHER_LDFLAGS = -ObjC -l"Pods-Tests-Expecta" -l"Pods-Tests-Expecta+Snapshots" -l"Pods-Tests-FBSnapshotTestCase" -l"Pods-Tests-HexColors" -l"Pods-Tests-Specta" -l"Pods-Tests-TSMessages" -framework "Foundation" -framework "XCTest" 6 | OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) 7 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/TSMessages.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/TSMessages.xcodeproj/project.xcworkspace/xcshareddata/TSMessages.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 78862BC7-6303-467C-B9D6-C369B27995F9 9 | IDESourceControlProjectName 10 | TSMessages 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 7F6719F1314E6B51016DB1EC166C64F051B42C2E 14 | https://github.com/diogomaximo/TSMessages.git 15 | 16 | IDESourceControlProjectPath 17 | Example/TSMessages.xcodeproj 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | 7F6719F1314E6B51016DB1EC166C64F051B42C2E 21 | ../../.. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/diogomaximo/TSMessages.git 25 | IDESourceControlProjectVersion 26 | 111 27 | IDESourceControlProjectWCCIdentifier 28 | 7F6719F1314E6B51016DB1EC166C64F051B42C2E 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | 7F6719F1314E6B51016DB1EC166C64F051B42C2E 36 | IDESourceControlWCCName 37 | TSMessages 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Example/TSMessages.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Example/TSMessages.xcworkspace/xcshareddata/TSMessages.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 249E2109-095D-494B-8F2B-18ED9B88893D 9 | IDESourceControlProjectName 10 | TSMessages 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 7F6719F1314E6B51016DB1EC166C64F051B42C2E 14 | https://github.com/toursprung/TSMessages.git 15 | 16 | IDESourceControlProjectPath 17 | Example/TSMessages.xcworkspace 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | 7F6719F1314E6B51016DB1EC166C64F051B42C2E 21 | ../.. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/toursprung/TSMessages.git 25 | IDESourceControlProjectVersion 26 | 111 27 | IDESourceControlProjectWCCIdentifier 28 | 7F6719F1314E6B51016DB1EC166C64F051B42C2E 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | 7F6719F1314E6B51016DB1EC166C64F051B42C2E 36 | IDESourceControlWCCName 37 | TSMessages 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Example/TSMessages/AlternativeDesign.json: -------------------------------------------------------------------------------- 1 | { 2 | "success": { 3 | "backgroundImageName": "NotificationBackgroundSuccess.png", 4 | "borderColor": "#005700", 5 | "borderHeight": 1, 6 | "buttonBackgroundImageName": "NotificationButtonBackground.png", 7 | "buttonTitleTextColor": "#FFFFFF", 8 | "buttonTitleShadowColor": "#67B759", 9 | "buttonTitleShadowOffsetX": 0, 10 | "buttonTitleShadowOffsetY": -1, 11 | "contentFontSize": 12, 12 | "contentTextColor": "#FFFFFF", 13 | "imageName": "NotificationBackgroundSuccessIcon.png", 14 | "shadowColor": "#67B759", 15 | "shadowOffsetX": 0, 16 | "shadowOffsetY": -1, 17 | "textColor": "#FFFFFF", 18 | "titleFontSize": 25 19 | }, 20 | "message": { 21 | "backgroundImageName": "NotificationBackgroundMessage.png", 22 | "borderColor": "#727C83", 23 | "borderHeight": 1, 24 | "buttonBackgroundImageName": "NotificationButtonBackground.png", 25 | "buttonTitleTextColor": "#727C83", 26 | "buttonTitleShadowColor": "#EBEEF1", 27 | "buttonTitleShadowOffsetX": 0, 28 | "buttonTitleShadowOffsetY": 1, 29 | "contentFontSize": 12, 30 | "contentTextColor": "#727C83", 31 | "imageName": "", 32 | "shadowColor": "#EBEEF1", 33 | "shadowOffsetX": 0, 34 | "shadowOffsetY": 1, 35 | "textColor": "#727C83", 36 | "titleFontSize": 14 37 | }, 38 | "warning": { 39 | "backgroundImageName": "NotificationBackgroundWarning.png", 40 | "borderColor": "#A28918", 41 | "borderHeight": 1, 42 | "buttonBackgroundImageName": "NotificationButtonBackground.png", 43 | "buttonTitleTextColor": "#484638", 44 | "buttonTitleShadowColor": "#E5D87C", 45 | "buttonTitleShadowOffsetX": 0, 46 | "buttonTitleShadowOffsetY": 1, 47 | "contentFontSize": 12, 48 | "contentTextColor": "#484638", 49 | "imageName": "NotificationBackgroundWarningIcon.png", 50 | "shadowColor": "#E5D87C", 51 | "shadowOffsetX": 0, 52 | "shadowOffsetY": 1, 53 | "textColor": "#484638", 54 | "titleFontSize": 14 55 | }, 56 | "error": { 57 | "backgroundImageName": "NotificationBackgroundError.png", 58 | "borderColor": "#700000", 59 | "borderHeight": 1, 60 | "buttonBackgroundImageName": "NotificationButtonBackground.png", 61 | "buttonTitleTextColor": "#FFFFFF", 62 | "buttonTitleShadowColor": "#812929", 63 | "buttonTitleShadowOffsetX": 0, 64 | "buttonTitleShadowOffsetY": -1, 65 | "contentFontSize": 12, 66 | "contentTextColor": "#FFFFFF", 67 | "imageName": "NotificationBackgroundErrorIcon.png", 68 | "shadowColor": "#812929", 69 | "shadowOffsetX": 0, 70 | "shadowOffsetY": -1, 71 | "textColor": "#FFFFFF", 72 | "titleFontSize": 14 73 | } 74 | } -------------------------------------------------------------------------------- /Example/TSMessages/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "ipad", 20 | "size" : "29x29", 21 | "scale" : "1x" 22 | }, 23 | { 24 | "idiom" : "ipad", 25 | "size" : "29x29", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "ipad", 30 | "size" : "40x40", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "40x40", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "76x76", 41 | "scale" : "1x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "76x76", 46 | "scale" : "2x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Example/TSMessages/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "orientation" : "portrait", 20 | "idiom" : "ipad", 21 | "extent" : "full-screen", 22 | "minimum-system-version" : "7.0", 23 | "scale" : "1x" 24 | }, 25 | { 26 | "orientation" : "landscape", 27 | "idiom" : "ipad", 28 | "extent" : "full-screen", 29 | "minimum-system-version" : "7.0", 30 | "scale" : "1x" 31 | }, 32 | { 33 | "orientation" : "portrait", 34 | "idiom" : "ipad", 35 | "extent" : "full-screen", 36 | "minimum-system-version" : "7.0", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "orientation" : "landscape", 41 | "idiom" : "ipad", 42 | "extent" : "full-screen", 43 | "minimum-system-version" : "7.0", 44 | "scale" : "2x" 45 | } 46 | ], 47 | "info" : { 48 | "version" : 1, 49 | "author" : "xcode" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Example/TSMessages/TSAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // TSAppDelegate.h 3 | // Example 4 | // 5 | // Created by Felix Krause on 13.04.13. 6 | // Copyright (c) 2013 Felix Krause. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface TSAppDelegate : UIResponder 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/TSMessages/TSAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // TSAppDelegate.m 3 | // Example 4 | // 5 | // Created by Felix Krause on 13.04.13. 6 | // Copyright (c) 2013 Felix Krause. All rights reserved. 7 | // 8 | 9 | #import "TSAppDelegate.h" 10 | #import 11 | @implementation TSAppDelegate 12 | 13 | @synthesize window; 14 | 15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 16 | { 17 | /** 18 | //If you want you can overidde some properties using UIAppearance 19 | [[TSMessageView appearance] setTitleFont:[UIFont boldSystemFontOfSize:6]]; 20 | [[TSMessageView appearance] setTitleTextColor:[UIColor redColor]]; 21 | [[TSMessageView appearance] setContentFont:[UIFont boldSystemFontOfSize:10]]; 22 | [[TSMessageView appearance]setContentTextColor:[UIColor greenColor]]; 23 | [[TSMessageView appearance]setErrorIcon:[UIImage imageNamed:@"NotificationButtonBackground"]]; 24 | [[TSMessageView appearance]setSuccessIcon:[UIImage imageNamed:@"NotificationButtonBackground"]]; 25 | [[TSMessageView appearance]setMessageIcon:[UIImage imageNamed:@"NotificationButtonBackground"]]; 26 | [[TSMessageView appearance]setWarningIcon:[UIImage imageNamed:@"NotificationButtonBackground"]]; 27 | //End of override 28 | */ 29 | return YES; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Example/TSMessages/TSDemoViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TSDemoViewController.h 3 | // Example 4 | // 5 | // Created by Felix Krause on 13.04.13. 6 | // Copyright (c) 2013 Felix Krause. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "TSMessageView.h" 11 | 12 | @interface TSDemoViewController : UIViewController 13 | 14 | 15 | - (IBAction)didTapError:(id)sender; 16 | - (IBAction)didTapWarning:(id)sender; 17 | - (IBAction)didTapMessage:(id)sender; 18 | - (IBAction)didTapSuccess:(id)sender; 19 | - (IBAction)didTapButton:(id)sender; 20 | - (IBAction)didTapDismissCurrentMessage:(id)sender; 21 | - (IBAction)didTapEndless:(id)sender; 22 | - (IBAction)didTapLong:(id)sender; 23 | - (IBAction)didTapBottom:(id)sender; 24 | - (IBAction)didTapText:(id)sender; 25 | - (IBAction)didTapCustomDesign:(id)sender; 26 | - (IBAction)didTapNavbarHidden:(id)sender; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Example/TSMessages/TSMessages-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | Main_iPhone 29 | UIMainStoryboardFile~ipad 30 | Main_iPhone 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Example/TSMessages/TSMessages-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /Example/TSMessages/TSViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TSViewController.h 3 | // TSMessages 4 | // 5 | // Created by Felix Krause on 08/25/2014. 6 | // Copyright (c) 2014 Felix Krause. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface TSViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/TSMessages/TSViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // TSViewController.m 3 | // TSMessages 4 | // 5 | // Created by Felix Krause on 08/25/2014. 6 | // Copyright (c) 2014 Felix Krause. All rights reserved. 7 | // 8 | 9 | #import "TSViewController.h" 10 | 11 | @interface TSViewController () 12 | 13 | @end 14 | 15 | @implementation TSViewController 16 | 17 | - (void)viewDidLoad 18 | { 19 | [super viewDidLoad]; 20 | // Do any additional setup after loading the view, typically from a nib. 21 | } 22 | 23 | - (void)didReceiveMemoryWarning 24 | { 25 | [super didReceiveMemoryWarning]; 26 | // Dispose of any resources that can be recreated. 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Example/TSMessages/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Example/TSMessages/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // TSMessages 4 | // 5 | // Created by Felix Krause on 08/25/2014. 6 | // Copyright (c) 2014 Felix Krause. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "TSAppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([TSAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Tests/ReferenceImages/InitialSpecsSpec/TSMessageViewErrorDefault@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Example/Tests/ReferenceImages/InitialSpecsSpec/TSMessageViewErrorDefault@2x.png -------------------------------------------------------------------------------- /Example/Tests/Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/Tests/Tests-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every test case source file. 5 | // 6 | 7 | #ifdef __OBJC__ 8 | 9 | #define EXP_SHORTHAND 10 | #import 11 | #import 12 | #import 13 | #import 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /Example/Tests/Tests.m: -------------------------------------------------------------------------------- 1 | // 2 | // TSMessagesTests.m 3 | // TSMessagesTests 4 | // 5 | // Created by Felix Krause on 08/25/2014. 6 | // Copyright (c) 2014 Felix Krause. All rights reserved. 7 | // 8 | 9 | #import "TSMessage.h" 10 | #import "TSMessageView.h" 11 | 12 | SpecBegin(InitialSpecs) 13 | 14 | describe(@"Show a new TSMessage notification", ^{ 15 | before(^{ 16 | [UIView setAnimationsEnabled:NO]; 17 | [TSMessage dismissActiveNotification]; 18 | }); 19 | 20 | it(@"matches view (error message)", ^{ 21 | [TSMessage showNotificationWithTitle:@"Error" type:TSMessageNotificationTypeError]; 22 | TSMessageView *view = [[TSMessage queuedMessages] lastObject]; 23 | 24 | expect(view).to.haveValidSnapshotNamed(@"TSMessageViewErrorDefault"); 25 | }); 26 | }); 27 | 28 | SpecEnd 29 | -------------------------------------------------------------------------------- /Example/Tests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Felix Krause 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Pod/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/.gitkeep -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundError.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundError.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundError@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundError@2x.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundErrorIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundErrorIcon.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundErrorIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundErrorIcon@2x.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundMessage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundMessage.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundMessage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundMessage@2x.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundSuccess.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundSuccess.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundSuccess@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundSuccess@2x.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundSuccessIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundSuccessIcon.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundSuccessIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundSuccessIcon@2x.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundWarning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundWarning.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundWarning@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundWarning@2x.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundWarningIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundWarningIcon.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationBackgroundWarningIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationBackgroundWarningIcon@2x.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationButtonBackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationButtonBackground.png -------------------------------------------------------------------------------- /Pod/Assets/NotificationButtonBackground@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Assets/NotificationButtonBackground@2x.png -------------------------------------------------------------------------------- /Pod/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/Pod/Classes/.gitkeep -------------------------------------------------------------------------------- /Pod/Classes/TSBlurView.h: -------------------------------------------------------------------------------- 1 | // 2 | // TSBlurView.h 3 | // Pods 4 | // 5 | // Created by Felix Krause on 20.08.13. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface TSBlurView : UIView 12 | 13 | @property (nonatomic, strong) UIColor *blurTintColor; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Pod/Classes/TSBlurView.m: -------------------------------------------------------------------------------- 1 | // 2 | // TSBlurView.m 3 | // Pods 4 | // 5 | // Created by Felix Krause on 20.08.13. 6 | // 7 | // 8 | 9 | #import "TSBlurView.h" 10 | #import 11 | 12 | @interface TSBlurView () 13 | 14 | @property (nonatomic, strong) UIToolbar *toolbar; 15 | 16 | @end 17 | 18 | @implementation TSBlurView 19 | 20 | 21 | - (UIToolbar *)toolbar 22 | { 23 | if (_toolbar == nil) { 24 | _toolbar = [[UIToolbar alloc] initWithFrame:self.bounds]; 25 | _toolbar.userInteractionEnabled = NO; 26 | _toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 27 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 28 | [_toolbar setBackgroundImage:nil forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; // remove background set through the appearence proxy 29 | #endif 30 | [self addSubview:_toolbar]; 31 | } 32 | 33 | return _toolbar; 34 | } 35 | 36 | - (void)setBlurTintColor:(UIColor *)blurTintColor 37 | { 38 | if ([self.toolbar respondsToSelector:@selector(setBarTintColor:)]) { 39 | [self.toolbar performSelector:@selector(setBarTintColor:) withObject:blurTintColor]; 40 | } 41 | } 42 | 43 | - (UIColor *)blurTintColor 44 | { 45 | if ([self.toolbar respondsToSelector:@selector(barTintColor)]) { 46 | return [self.toolbar performSelector:@selector(barTintColor)]; 47 | } 48 | return nil; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /TSMessages.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint TSMessages.podspec' to ensure this is a 3 | # valid spec and remove all comments before submitting the spec. 4 | # 5 | # Any lines starting with a # are optional, but encouraged 6 | # 7 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 8 | # 9 | 10 | Pod::Spec.new do |s| 11 | s.name = "TSMessages" 12 | s.version = "0.9.13" 13 | s.summary = "Easy to use and customizable messages/notifications for iOS à la Tweetbot." 14 | s.description = <<-DESC 15 | This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). 16 | The notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it. 17 | There are 4 different types already set up for you: Success, Error, Warning, Message. 18 | DESC 19 | s.homepage = "https://github.com/KrauseFx/TSMessages/" 20 | 21 | s.license = 'MIT' 22 | s.author = { "Felix Krause" => "tsmessages@krausefx.com" } 23 | s.source = { :git => "https://github.com/KrauseFx/TSMessages.git", :tag => s.version.to_s } 24 | s.social_media_url = 'https://twitter.com/KrauseFx' 25 | 26 | s.platform = :ios, '5.0' 27 | s.requires_arc = true 28 | 29 | s.source_files = 'Pod/Classes' 30 | s.resources = ['Pod/Assets/*.png', 'Pod/Assets/*.json'] 31 | 32 | s.public_header_files = 'Pod/Classes/**/*.h' 33 | s.dependency 'HexColors', '~> 2.3.0' 34 | end 35 | -------------------------------------------------------------------------------- /podspecs/0.9.1/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.1", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "felix@toursprung.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9.1" 14 | }, 15 | "platforms": { 16 | "ios": "5.0" 17 | }, 18 | "source_files": [ 19 | "Classes/**/*.{h,m}", 20 | "Views/**/*.{h,m}" 21 | ], 22 | "resources": "Resources/**/*.{png,json}", 23 | "requires_arc": true, 24 | "dependencies": { 25 | "MLUIColorAdditions": [ 26 | 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /podspecs/0.9.10/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.10", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "krausefx@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9.10" 14 | }, 15 | "social_media_url": "https://twitter.com/KrauseFx", 16 | "platforms": { 17 | "ios": "5.0" 18 | }, 19 | "requires_arc": true, 20 | "source_files": "Pod/Classes", 21 | "resources": [ 22 | "Pod/Assets/*.png", 23 | "Pod/Assets/*.json" 24 | ], 25 | "public_header_files": "Pod/Classes/**/*.h", 26 | "dependencies": { 27 | "HexColors": [ 28 | "~> 2.2.0" 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /podspecs/0.9.11/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.11", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "krausefx@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9.11" 14 | }, 15 | "social_media_url": "https://twitter.com/KrauseFx", 16 | "platforms": { 17 | "ios": "5.0" 18 | }, 19 | "requires_arc": true, 20 | "source_files": "Pod/Classes", 21 | "resources": [ 22 | "Pod/Assets/*.png", 23 | "Pod/Assets/*.json" 24 | ], 25 | "public_header_files": "Pod/Classes/**/*.h", 26 | "dependencies": { 27 | "HexColors": [ 28 | "~> 2.2.0" 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /podspecs/0.9.12/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.12", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/KrauseFx/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "krausefx@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/KrauseFx/TSMessages.git", 13 | "tag": "0.9.12" 14 | }, 15 | "social_media_url": "https://twitter.com/KrauseFx", 16 | "platforms": { 17 | "ios": "5.0" 18 | }, 19 | "requires_arc": true, 20 | "source_files": "Pod/Classes", 21 | "resources": [ 22 | "Pod/Assets/*.png", 23 | "Pod/Assets/*.json" 24 | ], 25 | "public_header_files": "Pod/Classes/**/*.h", 26 | "dependencies": { 27 | "HexColors": [ 28 | "~> 2.2.0" 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /podspecs/0.9.2/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.2", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "felix@toursprung.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9.2" 14 | }, 15 | "platforms": { 16 | "ios": "5.0" 17 | }, 18 | "source_files": [ 19 | "Classes/**/*.{h,m}", 20 | "Views/**/*.{h,m}" 21 | ], 22 | "resources": "Resources/**/*.{png,json}", 23 | "requires_arc": true 24 | } 25 | -------------------------------------------------------------------------------- /podspecs/0.9.3/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.3", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "felix@toursprung.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9.3" 14 | }, 15 | "platforms": { 16 | "ios": "5.0" 17 | }, 18 | "source_files": [ 19 | "Classes/**/*.{h,m}", 20 | "Views/**/*.{h,m}" 21 | ], 22 | "resources": "Resources/**/*.{png,json}", 23 | "requires_arc": true 24 | } 25 | -------------------------------------------------------------------------------- /podspecs/0.9.4/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.4", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "krausefx@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9.4" 14 | }, 15 | "platforms": { 16 | "ios": "5.0" 17 | }, 18 | "source_files": [ 19 | "TSMessages/Classes/**/*.{h,m}", 20 | "TSMessages/Views/**/*.{h,m}" 21 | ], 22 | "resources": "TSMessages/Resources/**/*.{png,json}", 23 | "requires_arc": true, 24 | "dependencies": { 25 | "HexColors": [ 26 | "~> 2.2.0" 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /podspecs/0.9.5/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.5", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "krausefx@gmail.com" 10 | }, 11 | "social_media_url": "https://twitter.com/KrauseFx", 12 | "source": { 13 | "git": "https://github.com/toursprung/TSMessages.git", 14 | "tag": "0.9.5" 15 | }, 16 | "platforms": { 17 | "ios": "5.0" 18 | }, 19 | "source_files": [ 20 | "TSMessages/Classes/**/*.{h,m}", 21 | "TSMessages/Views/**/*.{h,m}" 22 | ], 23 | "resources": "TSMessages/Resources/**/*.{png,json}", 24 | "requires_arc": true, 25 | "dependencies": { 26 | "HexColors": [ 27 | "~> 2.2.0" 28 | ] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /podspecs/0.9.6/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.6", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "krausefx@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9.6" 14 | }, 15 | "platforms": { 16 | "ios": "5.0" 17 | }, 18 | "source_files": [ 19 | "TSMessages/Classes/**/*.{h,m}", 20 | "TSMessages/Views/**/*.{h,m}" 21 | ], 22 | "resources": "TSMessages/Resources/**/*.{png,json}", 23 | "requires_arc": true, 24 | "dependencies": { 25 | "HexColors": [ 26 | "~> 2.2.0" 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /podspecs/0.9.7/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.7", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "social_media_url": "https://twitter.com/KrauseFx", 9 | "authors": { 10 | "Felix Krause": "krausefx@gmail.com" 11 | }, 12 | "source": { 13 | "git": "https://github.com/toursprung/TSMessages.git", 14 | "tag": "0.9.7" 15 | }, 16 | "platforms": { 17 | "ios": "5.0" 18 | }, 19 | "source_files": [ 20 | "TSMessages/Classes/**/*.{h,m}", 21 | "TSMessages/Views/**/*.{h,m}" 22 | ], 23 | "resources": "TSMessages/Resources/**/*.{png,json}", 24 | "requires_arc": true, 25 | "dependencies": { 26 | "HexColors": [ 27 | "~> 2.2.0" 28 | ] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /podspecs/0.9.8/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.8", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "krausefx@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9.8" 14 | }, 15 | "platforms": { 16 | "ios": "5.0" 17 | }, 18 | "source_files": [ 19 | "TSMessages/Classes/**/*.{h,m}", 20 | "TSMessages/Views/**/*.{h,m}" 21 | ], 22 | "resources": "TSMessages/Resources/**/*.{png,json}", 23 | "requires_arc": true, 24 | "dependencies": { 25 | "HexColors": [ 26 | "~> 2.2.0" 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /podspecs/0.9.9/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9.9", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "krausefx@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9.9" 14 | }, 15 | "platforms": { 16 | "ios": "5.0" 17 | }, 18 | "source_files": [ 19 | "TSMessages/Classes/**/*.{h,m}", 20 | "TSMessages/Views/**/*.{h,m}" 21 | ], 22 | "resources": "TSMessages/Resources/**/*.{png,json}", 23 | "requires_arc": true, 24 | "dependencies": { 25 | "HexColors": [ 26 | "~> 2.2.0" 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /podspecs/0.9/TSMessages.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TSMessages", 3 | "version": "0.9", 4 | "summary": "Easy to use and customizable messages/notifications for iOS à la Tweetbot.", 5 | "description": " This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). \nThe notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it.\nThere are 4 different types already set up for you: Success, Error, Warning, Message.\n", 6 | "homepage": "https://github.com/toursprung/TSMessages/", 7 | "license": "MIT", 8 | "authors": { 9 | "Felix Krause": "felix@toursprung.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/toursprung/TSMessages.git", 13 | "tag": "0.9" 14 | }, 15 | "platforms": { 16 | "ios": "5.0" 17 | }, 18 | "source_files": [ 19 | "Classes/**/*.{h,m}", 20 | "Views/**/*.{h,m}" 21 | ], 22 | "resources": "Resources/**/*.{png,json}", 23 | "requires_arc": true, 24 | "dependencies": { 25 | "MLUIColorAdditions": [ 26 | 27 | ] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /screenshots/TSMessages0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/screenshots/TSMessages0.png -------------------------------------------------------------------------------- /screenshots/TSMessages1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/screenshots/TSMessages1.png -------------------------------------------------------------------------------- /screenshots/TSMessages2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/screenshots/TSMessages2.png -------------------------------------------------------------------------------- /screenshots/TSMessages3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/screenshots/TSMessages3.png -------------------------------------------------------------------------------- /screenshots/TSMessages4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KrauseFx/TSMessages/79eff39a342f7b30e4de2cbbc0b9f2c1c1d5cdbf/screenshots/TSMessages4.png --------------------------------------------------------------------------------