├── .gitignore ├── .travis.yml ├── DSNestedAccordion.podspec ├── Example ├── DSNestedAccordion.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── DSNestedAccordion.xcscheme ├── DSNestedAccordion.xcworkspace │ └── contents.xcworkspacedata ├── DSNestedAccordion │ ├── Base.lproj │ │ ├── Main_iPad.storyboard │ │ └── Main_iPhone.storyboard │ ├── DSAppDelegate.h │ ├── DSAppDelegate.m │ ├── DSBeerFlavor.h │ ├── DSBeerFlavor.m │ ├── DSBeerStyle.h │ ├── DSBeerStyle.m │ ├── DSBeerTableViewHandler.h │ ├── DSBeerTableViewHandler.m │ ├── DSBeerViewController.h │ ├── DSBeerViewController.m │ ├── DSBeers.h │ ├── DSBeers.m │ ├── DSCellWithLabel.h │ ├── DSCellWithLabel.m │ ├── DSNestedAccordion-Info.plist │ ├── DSNestedAccordion-Prefix.pch │ ├── DSNotableBeerStyle.h │ ├── DSNotableBeerStyle.m │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── LaunchImage.launchimage │ │ │ └── Contents.json │ ├── en.lproj │ │ └── InfoPlist.strings │ └── main.m ├── Podfile ├── Podfile.lock ├── Pods │ ├── BuildHeaders │ │ ├── DSNestedAccordion │ │ │ ├── DSCellLevel.h │ │ │ ├── DSCellPath.h │ │ │ ├── DSCellPathTracker.h │ │ │ ├── DSNestedAccordionHandler.h │ │ │ └── NSException+DSException.h │ │ └── Kiwi │ │ │ ├── KWAfterAllNode.h │ │ │ ├── KWAfterEachNode.h │ │ │ ├── KWAny.h │ │ │ ├── KWAsyncVerifier.h │ │ │ ├── KWBeBetweenMatcher.h │ │ │ ├── KWBeEmptyMatcher.h │ │ │ ├── KWBeIdenticalToMatcher.h │ │ │ ├── KWBeKindOfClassMatcher.h │ │ │ ├── KWBeMemberOfClassMatcher.h │ │ │ ├── KWBeSubclassOfClassMatcher.h │ │ │ ├── KWBeTrueMatcher.h │ │ │ ├── KWBeWithinMatcher.h │ │ │ ├── KWBeZeroMatcher.h │ │ │ ├── KWBeforeAllNode.h │ │ │ ├── KWBeforeEachNode.h │ │ │ ├── KWBlock.h │ │ │ ├── KWBlockNode.h │ │ │ ├── KWBlockRaiseMatcher.h │ │ │ ├── KWCallSite.h │ │ │ ├── KWCaptureSpy.h │ │ │ ├── KWChangeMatcher.h │ │ │ ├── KWConformToProtocolMatcher.h │ │ │ ├── KWContainMatcher.h │ │ │ ├── KWContainStringMatcher.h │ │ │ ├── KWContextNode.h │ │ │ ├── KWCountType.h │ │ │ ├── KWDeviceInfo.h │ │ │ ├── KWEqualMatcher.h │ │ │ ├── KWExample.h │ │ │ ├── KWExampleDelegate.h │ │ │ ├── KWExampleNode.h │ │ │ ├── KWExampleNodeVisitor.h │ │ │ ├── KWExampleSuite.h │ │ │ ├── KWExampleSuiteBuilder.h │ │ │ ├── KWExistVerifier.h │ │ │ ├── KWExpectationType.h │ │ │ ├── KWFailure.h │ │ │ ├── KWFormatter.h │ │ │ ├── KWFutureObject.h │ │ │ ├── KWGenericMatchEvaluator.h │ │ │ ├── KWGenericMatcher.h │ │ │ ├── KWGenericMatchingAdditions.h │ │ │ ├── KWHaveMatcher.h │ │ │ ├── KWHaveValueMatcher.h │ │ │ ├── KWInequalityMatcher.h │ │ │ ├── KWIntercept.h │ │ │ ├── KWInvocationCapturer.h │ │ │ ├── KWItNode.h │ │ │ ├── KWLet.h │ │ │ ├── KWLetNode.h │ │ │ ├── KWMatchVerifier.h │ │ │ ├── KWMatcher.h │ │ │ ├── KWMatcherFactory.h │ │ │ ├── KWMatchers.h │ │ │ ├── KWMatching.h │ │ │ ├── KWMessagePattern.h │ │ │ ├── KWMessageSpying.h │ │ │ ├── KWMessageTracker.h │ │ │ ├── KWMock.h │ │ │ ├── KWNilMatcher.h │ │ │ ├── KWNotificationMatcher.h │ │ │ ├── KWNull.h │ │ │ ├── KWObjCUtilities.h │ │ │ ├── KWPendingNode.h │ │ │ ├── KWProbe.h │ │ │ ├── KWProbePoller.h │ │ │ ├── KWRaiseMatcher.h │ │ │ ├── KWReceiveMatcher.h │ │ │ ├── KWRegisterMatchersNode.h │ │ │ ├── KWRegularExpressionPatternMatcher.h │ │ │ ├── KWReporting.h │ │ │ ├── KWRespondToSelectorMatcher.h │ │ │ ├── KWSpec.h │ │ │ ├── KWStringContainsMatcher.h │ │ │ ├── KWStringPrefixMatcher.h │ │ │ ├── KWStringUtilities.h │ │ │ ├── KWStub.h │ │ │ ├── KWSymbolicator.h │ │ │ ├── KWUserDefinedMatcher.h │ │ │ ├── KWValue.h │ │ │ ├── KWVerifying.h │ │ │ ├── KWWorkarounds.h │ │ │ ├── Kiwi.h │ │ │ ├── KiwiBlockMacros.h │ │ │ ├── KiwiConfiguration.h │ │ │ ├── KiwiMacros.h │ │ │ ├── NSInvocation+KiwiAdditions.h │ │ │ ├── NSInvocation+OCMAdditions.h │ │ │ ├── NSMethodSignature+KiwiAdditions.h │ │ │ ├── NSNumber+KiwiAdditions.h │ │ │ ├── NSObject+KiwiMockAdditions.h │ │ │ ├── NSObject+KiwiSpyAdditions.h │ │ │ ├── NSObject+KiwiStubAdditions.h │ │ │ ├── NSObject+KiwiVerifierAdditions.h │ │ │ ├── NSProxy+KiwiVerifierAdditions.h │ │ │ └── NSValue+KiwiAdditions.h │ ├── Headers │ │ ├── DSNestedAccordion │ │ │ ├── DSCellLevel.h │ │ │ ├── DSCellPath.h │ │ │ ├── DSCellPathTracker.h │ │ │ ├── DSNestedAccordionHandler.h │ │ │ └── NSException+DSException.h │ │ └── Kiwi │ │ │ ├── KWAfterAllNode.h │ │ │ ├── KWAfterEachNode.h │ │ │ ├── KWAny.h │ │ │ ├── KWAsyncVerifier.h │ │ │ ├── KWBeBetweenMatcher.h │ │ │ ├── KWBeEmptyMatcher.h │ │ │ ├── KWBeIdenticalToMatcher.h │ │ │ ├── KWBeKindOfClassMatcher.h │ │ │ ├── KWBeMemberOfClassMatcher.h │ │ │ ├── KWBeSubclassOfClassMatcher.h │ │ │ ├── KWBeTrueMatcher.h │ │ │ ├── KWBeWithinMatcher.h │ │ │ ├── KWBeZeroMatcher.h │ │ │ ├── KWBeforeAllNode.h │ │ │ ├── KWBeforeEachNode.h │ │ │ ├── KWBlock.h │ │ │ ├── KWBlockNode.h │ │ │ ├── KWBlockRaiseMatcher.h │ │ │ ├── KWCallSite.h │ │ │ ├── KWCaptureSpy.h │ │ │ ├── KWChangeMatcher.h │ │ │ ├── KWConformToProtocolMatcher.h │ │ │ ├── KWContainMatcher.h │ │ │ ├── KWContainStringMatcher.h │ │ │ ├── KWContextNode.h │ │ │ ├── KWCountType.h │ │ │ ├── KWDeviceInfo.h │ │ │ ├── KWEqualMatcher.h │ │ │ ├── KWExample.h │ │ │ ├── KWExampleDelegate.h │ │ │ ├── KWExampleNode.h │ │ │ ├── KWExampleNodeVisitor.h │ │ │ ├── KWExampleSuite.h │ │ │ ├── KWExampleSuiteBuilder.h │ │ │ ├── KWExistVerifier.h │ │ │ ├── KWExpectationType.h │ │ │ ├── KWFailure.h │ │ │ ├── KWFormatter.h │ │ │ ├── KWFutureObject.h │ │ │ ├── KWGenericMatchEvaluator.h │ │ │ ├── KWGenericMatcher.h │ │ │ ├── KWGenericMatchingAdditions.h │ │ │ ├── KWHaveMatcher.h │ │ │ ├── KWHaveValueMatcher.h │ │ │ ├── KWInequalityMatcher.h │ │ │ ├── KWIntercept.h │ │ │ ├── KWInvocationCapturer.h │ │ │ ├── KWItNode.h │ │ │ ├── KWLet.h │ │ │ ├── KWLetNode.h │ │ │ ├── KWMatchVerifier.h │ │ │ ├── KWMatcher.h │ │ │ ├── KWMatcherFactory.h │ │ │ ├── KWMatchers.h │ │ │ ├── KWMatching.h │ │ │ ├── KWMessagePattern.h │ │ │ ├── KWMessageSpying.h │ │ │ ├── KWMessageTracker.h │ │ │ ├── KWMock.h │ │ │ ├── KWNilMatcher.h │ │ │ ├── KWNotificationMatcher.h │ │ │ ├── KWNull.h │ │ │ ├── KWObjCUtilities.h │ │ │ ├── KWPendingNode.h │ │ │ ├── KWProbe.h │ │ │ ├── KWProbePoller.h │ │ │ ├── KWRaiseMatcher.h │ │ │ ├── KWReceiveMatcher.h │ │ │ ├── KWRegisterMatchersNode.h │ │ │ ├── KWRegularExpressionPatternMatcher.h │ │ │ ├── KWReporting.h │ │ │ ├── KWRespondToSelectorMatcher.h │ │ │ ├── KWSpec.h │ │ │ ├── KWStringContainsMatcher.h │ │ │ ├── KWStringPrefixMatcher.h │ │ │ ├── KWStringUtilities.h │ │ │ ├── KWStub.h │ │ │ ├── KWSymbolicator.h │ │ │ ├── KWUserDefinedMatcher.h │ │ │ ├── KWValue.h │ │ │ ├── KWVerifying.h │ │ │ ├── KWWorkarounds.h │ │ │ ├── Kiwi.h │ │ │ ├── KiwiBlockMacros.h │ │ │ ├── KiwiConfiguration.h │ │ │ ├── KiwiMacros.h │ │ │ ├── NSInvocation+KiwiAdditions.h │ │ │ ├── NSInvocation+OCMAdditions.h │ │ │ ├── NSMethodSignature+KiwiAdditions.h │ │ │ ├── NSNumber+KiwiAdditions.h │ │ │ ├── NSObject+KiwiMockAdditions.h │ │ │ ├── NSObject+KiwiSpyAdditions.h │ │ │ ├── NSObject+KiwiStubAdditions.h │ │ │ ├── NSObject+KiwiVerifierAdditions.h │ │ │ ├── NSProxy+KiwiVerifierAdditions.h │ │ │ └── NSValue+KiwiAdditions.h │ ├── Kiwi │ │ ├── Classes │ │ │ ├── Core │ │ │ │ ├── KWAny.h │ │ │ │ ├── KWAny.m │ │ │ │ ├── KWBlock.h │ │ │ │ ├── KWBlock.m │ │ │ │ ├── KWCallSite.h │ │ │ │ ├── KWCallSite.m │ │ │ │ ├── KWCaptureSpy.h │ │ │ │ ├── KWCaptureSpy.m │ │ │ │ ├── KWCountType.h │ │ │ │ ├── KWDeviceInfo.h │ │ │ │ ├── KWDeviceInfo.m │ │ │ │ ├── KWExample.h │ │ │ │ ├── KWExample.m │ │ │ │ ├── KWExampleDelegate.h │ │ │ │ ├── KWExampleNodeVisitor.h │ │ │ │ ├── KWExampleSuite.h │ │ │ │ ├── KWExampleSuite.m │ │ │ │ ├── KWExampleSuiteBuilder.h │ │ │ │ ├── KWExampleSuiteBuilder.m │ │ │ │ ├── KWExpectationType.h │ │ │ │ ├── KWFailure.h │ │ │ │ ├── KWFailure.m │ │ │ │ ├── KWFormatter.h │ │ │ │ ├── KWFormatter.m │ │ │ │ ├── KWFutureObject.h │ │ │ │ ├── KWFutureObject.m │ │ │ │ ├── KWInvocationCapturer.h │ │ │ │ ├── KWInvocationCapturer.m │ │ │ │ ├── KWLet.h │ │ │ │ ├── KWMatcher.h │ │ │ │ ├── KWMatcher.m │ │ │ │ ├── KWMatcherFactory.h │ │ │ │ ├── KWMatcherFactory.m │ │ │ │ ├── KWMatchers.h │ │ │ │ ├── KWMatchers.m │ │ │ │ ├── KWMatching.h │ │ │ │ ├── KWMessageSpying.h │ │ │ │ ├── KWMessageTracker.h │ │ │ │ ├── KWMessageTracker.m │ │ │ │ ├── KWNull.h │ │ │ │ ├── KWNull.m │ │ │ │ ├── KWObjCUtilities.h │ │ │ │ ├── KWObjCUtilities.m │ │ │ │ ├── KWProbe.h │ │ │ │ ├── KWProbePoller.h │ │ │ │ ├── KWProbePoller.m │ │ │ │ ├── KWReporting.h │ │ │ │ ├── KWSpec.h │ │ │ │ ├── KWSpec.m │ │ │ │ ├── KWStringUtilities.h │ │ │ │ ├── KWStringUtilities.m │ │ │ │ ├── KWSymbolicator.h │ │ │ │ ├── KWSymbolicator.m │ │ │ │ ├── KWValue.h │ │ │ │ ├── KWValue.m │ │ │ │ ├── KWWorkarounds.h │ │ │ │ ├── KWWorkarounds.m │ │ │ │ ├── Kiwi.h │ │ │ │ ├── KiwiBlockMacros.h │ │ │ │ ├── KiwiConfiguration.h │ │ │ │ ├── KiwiMacros.h │ │ │ │ ├── NSInvocation+KiwiAdditions.h │ │ │ │ ├── NSInvocation+KiwiAdditions.m │ │ │ │ ├── NSInvocation+OCMAdditions.h │ │ │ │ ├── NSInvocation+OCMAdditions.m │ │ │ │ ├── NSMethodSignature+KiwiAdditions.h │ │ │ │ ├── NSMethodSignature+KiwiAdditions.m │ │ │ │ ├── NSNumber+KiwiAdditions.h │ │ │ │ ├── NSNumber+KiwiAdditions.m │ │ │ │ ├── NSObject+KiwiSpyAdditions.h │ │ │ │ ├── NSObject+KiwiSpyAdditions.m │ │ │ │ ├── NSObject+KiwiVerifierAdditions.h │ │ │ │ ├── NSObject+KiwiVerifierAdditions.m │ │ │ │ ├── NSProxy+KiwiVerifierAdditions.h │ │ │ │ ├── NSProxy+KiwiVerifierAdditions.m │ │ │ │ ├── NSValue+KiwiAdditions.h │ │ │ │ └── NSValue+KiwiAdditions.m │ │ │ ├── Matchers │ │ │ │ ├── KWBeBetweenMatcher.h │ │ │ │ ├── KWBeBetweenMatcher.m │ │ │ │ ├── KWBeEmptyMatcher.h │ │ │ │ ├── KWBeEmptyMatcher.m │ │ │ │ ├── KWBeIdenticalToMatcher.h │ │ │ │ ├── KWBeIdenticalToMatcher.m │ │ │ │ ├── KWBeKindOfClassMatcher.h │ │ │ │ ├── KWBeKindOfClassMatcher.m │ │ │ │ ├── KWBeMemberOfClassMatcher.h │ │ │ │ ├── KWBeMemberOfClassMatcher.m │ │ │ │ ├── KWBeSubclassOfClassMatcher.h │ │ │ │ ├── KWBeSubclassOfClassMatcher.m │ │ │ │ ├── KWBeTrueMatcher.h │ │ │ │ ├── KWBeTrueMatcher.m │ │ │ │ ├── KWBeWithinMatcher.h │ │ │ │ ├── KWBeWithinMatcher.m │ │ │ │ ├── KWBeZeroMatcher.h │ │ │ │ ├── KWBeZeroMatcher.m │ │ │ │ ├── KWBlockRaiseMatcher.h │ │ │ │ ├── KWBlockRaiseMatcher.m │ │ │ │ ├── KWChangeMatcher.h │ │ │ │ ├── KWChangeMatcher.m │ │ │ │ ├── KWConformToProtocolMatcher.h │ │ │ │ ├── KWConformToProtocolMatcher.m │ │ │ │ ├── KWContainMatcher.h │ │ │ │ ├── KWContainMatcher.m │ │ │ │ ├── KWContainStringMatcher.h │ │ │ │ ├── KWContainStringMatcher.m │ │ │ │ ├── KWEqualMatcher.h │ │ │ │ ├── KWEqualMatcher.m │ │ │ │ ├── KWGenericMatchEvaluator.h │ │ │ │ ├── KWGenericMatchEvaluator.m │ │ │ │ ├── KWGenericMatcher.h │ │ │ │ ├── KWGenericMatcher.m │ │ │ │ ├── KWGenericMatchingAdditions.h │ │ │ │ ├── KWGenericMatchingAdditions.m │ │ │ │ ├── KWHaveMatcher.h │ │ │ │ ├── KWHaveMatcher.m │ │ │ │ ├── KWHaveValueMatcher.h │ │ │ │ ├── KWHaveValueMatcher.m │ │ │ │ ├── KWInequalityMatcher.h │ │ │ │ ├── KWInequalityMatcher.m │ │ │ │ ├── KWNilMatcher.h │ │ │ │ ├── KWNilMatcher.m │ │ │ │ ├── KWNotificationMatcher.h │ │ │ │ ├── KWNotificationMatcher.m │ │ │ │ ├── KWRaiseMatcher.h │ │ │ │ ├── KWRaiseMatcher.m │ │ │ │ ├── KWReceiveMatcher.h │ │ │ │ ├── KWReceiveMatcher.m │ │ │ │ ├── KWRegularExpressionPatternMatcher.h │ │ │ │ ├── KWRegularExpressionPatternMatcher.m │ │ │ │ ├── KWRespondToSelectorMatcher.h │ │ │ │ ├── KWRespondToSelectorMatcher.m │ │ │ │ ├── KWStringContainsMatcher.h │ │ │ │ ├── KWStringContainsMatcher.m │ │ │ │ ├── KWStringPrefixMatcher.h │ │ │ │ ├── KWStringPrefixMatcher.m │ │ │ │ ├── KWUserDefinedMatcher.h │ │ │ │ └── KWUserDefinedMatcher.m │ │ │ ├── Mocking │ │ │ │ ├── KWMock.h │ │ │ │ ├── KWMock.m │ │ │ │ ├── NSObject+KiwiMockAdditions.h │ │ │ │ └── NSObject+KiwiMockAdditions.m │ │ │ ├── Nodes │ │ │ │ ├── KWAfterAllNode.h │ │ │ │ ├── KWAfterAllNode.m │ │ │ │ ├── KWAfterEachNode.h │ │ │ │ ├── KWAfterEachNode.m │ │ │ │ ├── KWBeforeAllNode.h │ │ │ │ ├── KWBeforeAllNode.m │ │ │ │ ├── KWBeforeEachNode.h │ │ │ │ ├── KWBeforeEachNode.m │ │ │ │ ├── KWBlockNode.h │ │ │ │ ├── KWBlockNode.m │ │ │ │ ├── KWContextNode.h │ │ │ │ ├── KWContextNode.m │ │ │ │ ├── KWExampleNode.h │ │ │ │ ├── KWItNode.h │ │ │ │ ├── KWItNode.m │ │ │ │ ├── KWLetNode.h │ │ │ │ ├── KWLetNode.m │ │ │ │ ├── KWPendingNode.h │ │ │ │ ├── KWPendingNode.m │ │ │ │ ├── KWRegisterMatchersNode.h │ │ │ │ └── KWRegisterMatchersNode.m │ │ │ ├── Stubbing │ │ │ │ ├── KWIntercept.h │ │ │ │ ├── KWIntercept.m │ │ │ │ ├── KWStub.h │ │ │ │ ├── KWStub.m │ │ │ │ ├── NSObject+KiwiStubAdditions.h │ │ │ │ └── NSObject+KiwiStubAdditions.m │ │ │ └── Verifiers │ │ │ │ ├── KWAsyncVerifier.h │ │ │ │ ├── KWAsyncVerifier.m │ │ │ │ ├── KWExistVerifier.h │ │ │ │ ├── KWExistVerifier.m │ │ │ │ ├── KWMatchVerifier.h │ │ │ │ ├── KWMatchVerifier.m │ │ │ │ └── KWVerifying.h │ │ ├── License.txt │ │ ├── NonARC │ │ │ ├── KWMessagePattern.h │ │ │ └── KWMessagePattern.m │ │ └── Readme.md │ ├── Local Podspecs │ │ └── DSNestedAccordion.podspec │ ├── Manifest.lock │ ├── Pods-DSNestedAccordion-DSNestedAccordion-Private.xcconfig │ ├── Pods-DSNestedAccordion-DSNestedAccordion-dummy.m │ ├── Pods-DSNestedAccordion-DSNestedAccordion-prefix.pch │ ├── Pods-DSNestedAccordion-DSNestedAccordion.xcconfig │ ├── Pods-DSNestedAccordion-acknowledgements.markdown │ ├── Pods-DSNestedAccordion-acknowledgements.plist │ ├── Pods-DSNestedAccordion-dummy.m │ ├── Pods-DSNestedAccordion-environment.h │ ├── Pods-DSNestedAccordion-resources.sh │ ├── Pods-DSNestedAccordion.xcconfig │ ├── Pods-Tests-DSNestedAccordion-Private.xcconfig │ ├── Pods-Tests-DSNestedAccordion-dummy.m │ ├── Pods-Tests-DSNestedAccordion-prefix.pch │ ├── Pods-Tests-DSNestedAccordion.xcconfig │ ├── Pods-Tests-Kiwi-Private.xcconfig │ ├── Pods-Tests-Kiwi-dummy.m │ ├── Pods-Tests-Kiwi-prefix.pch │ ├── Pods-Tests-Kiwi.xcconfig │ ├── Pods-Tests-acknowledgements.markdown │ ├── Pods-Tests-acknowledgements.plist │ ├── Pods-Tests-dummy.m │ ├── Pods-Tests-environment.h │ ├── Pods-Tests-resources.sh │ ├── Pods-Tests.xcconfig │ └── Pods.xcodeproj │ │ └── project.pbxproj └── Tests │ ├── DSCellLevelTest.m │ ├── Tests-Info.plist │ ├── Tests-Prefix.pch │ └── en.lproj │ └── InfoPlist.strings ├── LICENSE ├── Pod ├── Assets │ └── .gitkeep └── Classes │ ├── .gitkeep │ ├── DSCellLevel.h │ ├── DSCellLevel.m │ ├── DSCellPath.h │ ├── DSCellPath.m │ ├── DSCellPathTracker.h │ ├── DSCellPathTracker.m │ ├── DSNestedAccordionHandler.h │ ├── DSNestedAccordionHandler.m │ ├── NSException+DSException.h │ └── NSException+DSException.m └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | # We recommend against adding the Pods directory to your .gitignore. However 26 | # you should judge for yourself, the pros and cons are mentioned at: 27 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 28 | # 29 | # Pods/ 30 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # reference: http://www.objc.io/issue-6/travis-ci.html 2 | 3 | language: objective-c 4 | script: 5 | - xctool test -workspace Example/DSNestedAccordion.xcworkspace -scheme DSNestedAccordion -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO 6 | -------------------------------------------------------------------------------- /DSNestedAccordion.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "DSNestedAccordion" 3 | s.version = "0.1.0" 4 | s.summary = "A nested accordion view for Cocoa Touch" 5 | s.description = <<-DESC 6 | To use the library 7 | 8 | * Inherit DSNestedAccordionHandler to your table view handler. 9 | * Provide implementation to the below listed methods 10 | * - (NSInteger)noOfRowsInRootLevel; 11 | * - (NSInteger)tableView:(UITableView *)view noOfChildRowsForCellAtPath:(DSCellPath *)path; 12 | * - (UITableViewCell *)tableView:(UITableView *)view cellForPath:(DSCellPath *)path; 13 | DESC 14 | s.homepage = "https://github.com/deepan/DSNestedAccordion" 15 | s.license = 'MIT' 16 | s.author = { "deepan" => "emaildeepan@yahoo.co.in" } 17 | s.source = { :git => "https://github.com/deepan/DSNestedAccordion.git", :tag => s.version.to_s } 18 | s.social_media_url = 'https://twitter.com/s_deepan' 19 | 20 | s.platform = :ios, '6.0' 21 | s.requires_arc = true 22 | 23 | s.source_files = 'Pod/Classes' 24 | end 25 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // DSAppDelegate.h 3 | // DSNestedAccordion 4 | // 5 | // Created by CocoaPods on 07/26/2014. 6 | // Copyright (c) 2014 deepan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface DSAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // DSAppDelegate.m 3 | // DSNestedAccordion 4 | // 5 | // Created by CocoaPods on 07/26/2014. 6 | // Copyright (c) 2014 deepan. All rights reserved. 7 | // 8 | 9 | #import "DSAppDelegate.h" 10 | 11 | @implementation DSAppDelegate 12 | 13 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 14 | { 15 | // Override point for customization after application launch. 16 | return YES; 17 | } 18 | 19 | - (void)applicationWillResignActive:(UIApplication *)application 20 | { 21 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 22 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 23 | } 24 | 25 | - (void)applicationDidEnterBackground:(UIApplication *)application 26 | { 27 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 28 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 29 | } 30 | 31 | - (void)applicationWillEnterForeground:(UIApplication *)application 32 | { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | - (void)applicationDidBecomeActive:(UIApplication *)application 37 | { 38 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application 42 | { 43 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSBeerFlavor.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "DSBeerStyle.h" 3 | 4 | @interface DSBeerFlavor : NSObject 5 | @property (nonatomic, strong) NSString *name; 6 | @property (nonatomic, strong) NSArray *styles; 7 | 8 | - (instancetype)initWithName:(NSString *)name styles:(NSArray *)styles; 9 | 10 | + (instancetype)flavorWithName:(NSString *)name styles:(NSArray *)styles; 11 | 12 | - (DSBeerStyle *)styleAtIndex:(NSInteger)index; 13 | 14 | @end -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSBeerFlavor.m: -------------------------------------------------------------------------------- 1 | #import "DSBeerFlavor.h" 2 | 3 | @implementation DSBeerFlavor 4 | - (instancetype)initWithName:(NSString *)name styles:(NSArray *)styles { 5 | self = [super init]; 6 | if (self) { 7 | self.name = name; 8 | self.styles = styles; 9 | } 10 | 11 | return self; 12 | } 13 | 14 | + (instancetype)flavorWithName:(NSString *)name styles:(NSArray *)styles { 15 | return [[self alloc] initWithName:name styles:styles]; 16 | } 17 | 18 | - (DSBeerStyle *)styleAtIndex:(NSInteger)index { 19 | return self.styles[(NSUInteger) index]; 20 | } 21 | 22 | @end -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSBeerStyle.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @class DSNotableBeerStyle; 4 | 5 | @interface DSBeerStyle : NSObject 6 | @property (nonatomic, strong) NSString *name; 7 | @property (nonatomic, strong) NSArray *notableStyles; 8 | 9 | - (instancetype)initWithName:(NSString *)name notableStyles:(NSArray *)notableStyles; 10 | 11 | + (instancetype)styleWithName:(NSString *)name notableStyles:(NSArray *)notableStyles; 12 | 13 | - (DSNotableBeerStyle *)notableStyleAtIndex:(NSInteger)index; 14 | 15 | @end -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSBeerStyle.m: -------------------------------------------------------------------------------- 1 | #import "DSBeerStyle.h" 2 | #import "DSNotableBeerStyle.h" 3 | 4 | @implementation DSBeerStyle 5 | - (instancetype)initWithName:(NSString *)name notableStyles:(NSArray *)notableStyles { 6 | self = [super init]; 7 | if (self) { 8 | self.name = name; 9 | self.notableStyles = notableStyles; 10 | } 11 | 12 | return self; 13 | } 14 | 15 | + (instancetype)styleWithName:(NSString *)name notableStyles:(NSArray *)notableStyles { 16 | return [[self alloc] initWithName:name notableStyles:notableStyles]; 17 | } 18 | 19 | - (DSNotableBeerStyle *)notableStyleAtIndex:(NSInteger)index { 20 | return self.notableStyles[(NSUInteger) index]; 21 | } 22 | 23 | @end -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSBeerTableViewHandler.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "DSNestedAccordionHandler.h" 3 | #import "DSBeers.h" 4 | 5 | @interface DSBeerTableViewHandler : DSNestedAccordionHandler 6 | - (id)initWithBeers:(DSBeers *)beers; 7 | @end -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSBeerViewController.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import "DSNestedAccordionHandler.h" 3 | 4 | @interface DSBeerViewController : UIViewController 5 | @property (weak, nonatomic) IBOutlet UITableView *beerTableView; 6 | @end 7 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSBeerViewController.m: -------------------------------------------------------------------------------- 1 | #import "DSBeerViewController.h" 2 | #import "DSBeers.h" 3 | #import "DSBeerTableViewHandler.h" 4 | 5 | @implementation DSBeerViewController { 6 | DSNestedAccordionHandler *_beerTableViewHandler; 7 | } 8 | 9 | - (void)viewDidLoad 10 | { 11 | [super viewDidLoad]; 12 | [self initializeBeerTableView]; 13 | [_beerTableViewHandler reload]; 14 | } 15 | 16 | - (void)initializeBeerTableView { 17 | _beerTableViewHandler = [[DSBeerTableViewHandler alloc] initWithBeers: [[DSBeers alloc] init]]; 18 | self.beerTableView.dataSource = _beerTableViewHandler; 19 | self.beerTableView.delegate = _beerTableViewHandler; 20 | [self hideEmptyTableViewRows]; 21 | } 22 | 23 | - (void)hideEmptyTableViewRows { 24 | self.beerTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSBeers.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @class DSBeerFlavor; 4 | @class DSBeerStyle; 5 | @class DSNotableBeerStyle; 6 | 7 | @interface DSBeers : NSObject 8 | @property (nonatomic, strong) NSArray *allFlavors; 9 | 10 | - (DSBeerFlavor *)flavorAtIndex:(NSInteger)index; 11 | 12 | - (DSBeerStyle *)styleAtIndex:(NSInteger)styleIndex withFlavorAtIndex:(NSInteger)flavorIndex; 13 | 14 | - (DSNotableBeerStyle *)notableStyleAtIndex:(NSInteger)notableStyleIndex withStyleAtIndex:(NSInteger)styleIndex withFlavorAtIndex:(NSInteger)flavorIndex; 15 | @end -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSCellWithLabel.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface DSCellWithLabel : UITableViewCell 4 | @property (weak, nonatomic) IBOutlet UILabel *label; 5 | 6 | - (void)render:(NSString *)text; 7 | @end 8 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSCellWithLabel.m: -------------------------------------------------------------------------------- 1 | #import "DSCellWithLabel.h" 2 | 3 | @implementation DSCellWithLabel 4 | 5 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated 6 | { 7 | [super setSelected:selected animated:animated]; 8 | } 9 | 10 | -(void) render:(NSString *) text{ 11 | self.label.text = text; 12 | } 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSNestedAccordion-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_iPad 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSNestedAccordion-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/DSNestedAccordion/DSNotableBeerStyle.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface DSNotableBeerStyle : NSObject 4 | @property (nonatomic, strong) NSString *name; 5 | 6 | - (instancetype)initWithName:(NSString *)name; 7 | 8 | + (instancetype)styleWithName:(NSString *)name; 9 | 10 | @end -------------------------------------------------------------------------------- /Example/DSNestedAccordion/DSNotableBeerStyle.m: -------------------------------------------------------------------------------- 1 | #import "DSNotableBeerStyle.h" 2 | 3 | @implementation DSNotableBeerStyle 4 | - (instancetype)initWithName:(NSString *)name { 5 | self = [super init]; 6 | if (self) { 7 | self.name = name; 8 | } 9 | 10 | return self; 11 | } 12 | 13 | + (instancetype)styleWithName:(NSString *)name { 14 | return [[self alloc] initWithName:name]; 15 | } 16 | 17 | @end -------------------------------------------------------------------------------- /Example/DSNestedAccordion/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/DSNestedAccordion/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/DSNestedAccordion/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Example/DSNestedAccordion/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // DSNestedAccordion 4 | // 5 | // Created by deepan on 07/26/2014. 6 | // Copyright (c) 2014 deepan. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "DSAppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([DSAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | target 'DSNestedAccordion', :exclusive => true do 2 | pod "DSNestedAccordion", :path => "../" 3 | end 4 | 5 | target 'Tests', :exclusive => true do 6 | pod "DSNestedAccordion", :path => "../" 7 | pod 'Kiwi/XCTest', "~> 2.2.4" 8 | end 9 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - DSNestedAccordion (0.1.0) 3 | - Kiwi/ARC (2.2.4) 4 | - Kiwi/NonARC (2.2.4) 5 | - Kiwi/XCTest (2.2.4): 6 | - Kiwi/ARC 7 | - Kiwi/NonARC 8 | 9 | DEPENDENCIES: 10 | - DSNestedAccordion (from `../`) 11 | - Kiwi/XCTest (~> 2.2.4) 12 | 13 | EXTERNAL SOURCES: 14 | DSNestedAccordion: 15 | :path: ../ 16 | 17 | SPEC CHECKSUMS: 18 | DSNestedAccordion: f2f0feaf7b10f0c30abefe62101d355e4a31105f 19 | Kiwi: c73667f2b84cbf36f1a3830267c5a4ae8dcbd8ba 20 | 21 | COCOAPODS: 0.33.1 22 | -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/DSNestedAccordion/DSCellLevel.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/DSCellLevel.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/DSNestedAccordion/DSCellPath.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/DSCellPath.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/DSNestedAccordion/DSCellPathTracker.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/DSCellPathTracker.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/DSNestedAccordion/DSNestedAccordionHandler.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/DSNestedAccordionHandler.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/DSNestedAccordion/NSException+DSException.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/NSException+DSException.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWAfterAllNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWAfterAllNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWAfterEachNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWAfterEachNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWAny.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWAny.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWAsyncVerifier.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Verifiers/KWAsyncVerifier.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeBetweenMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeBetweenMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeEmptyMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeEmptyMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeIdenticalToMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeKindOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeMemberOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeSubclassOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeTrueMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeTrueMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeWithinMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeWithinMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeZeroMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeZeroMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeforeAllNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWBeforeAllNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBeforeEachNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWBeforeEachNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBlock.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWBlock.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBlockNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWBlockNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWBlockRaiseMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWCallSite.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWCallSite.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWCaptureSpy.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWCaptureSpy.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWChangeMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWChangeMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWConformToProtocolMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWContainMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWContainMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWContainStringMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWContainStringMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWContextNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWContextNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWCountType.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWCountType.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWDeviceInfo.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWDeviceInfo.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWEqualMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWEqualMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWExample.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExample.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWExampleDelegate.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExampleDelegate.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWExampleNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWExampleNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWExampleNodeVisitor.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExampleNodeVisitor.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWExampleSuite.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExampleSuite.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWExampleSuiteBuilder.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExampleSuiteBuilder.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWExistVerifier.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Verifiers/KWExistVerifier.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWExpectationType.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExpectationType.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWFailure.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWFailure.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWFormatter.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWFormatter.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWFutureObject.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWFutureObject.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWGenericMatchEvaluator.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWGenericMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWGenericMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWGenericMatchingAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWHaveMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWHaveMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWHaveValueMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWHaveValueMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWInequalityMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWInequalityMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWIntercept.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Stubbing/KWIntercept.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWInvocationCapturer.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWInvocationCapturer.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWItNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWItNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWLet.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWLet.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWLetNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWLetNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWMatchVerifier.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Verifiers/KWMatchVerifier.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWMatcherFactory.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMatcherFactory.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWMatchers.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMatchers.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWMatching.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMatching.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWMessagePattern.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/NonARC/KWMessagePattern.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWMessageSpying.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMessageSpying.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWMessageTracker.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMessageTracker.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWMock.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Mocking/KWMock.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWNilMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWNilMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWNotificationMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWNotificationMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWNull.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWNull.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWObjCUtilities.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWObjCUtilities.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWPendingNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWPendingNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWProbe.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWProbe.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWProbePoller.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWProbePoller.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWRaiseMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWRaiseMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWReceiveMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWReceiveMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWRegisterMatchersNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWRegisterMatchersNode.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWRegularExpressionPatternMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWReporting.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWReporting.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWRespondToSelectorMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWSpec.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWSpec.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWStringContainsMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWStringContainsMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWStringPrefixMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWStringPrefixMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWStringUtilities.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWStringUtilities.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWStub.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Stubbing/KWStub.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWSymbolicator.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWSymbolicator.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWUserDefinedMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWUserDefinedMatcher.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWValue.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWValue.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWVerifying.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Verifiers/KWVerifying.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KWWorkarounds.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWWorkarounds.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/Kiwi.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/Kiwi.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KiwiBlockMacros.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KiwiBlockMacros.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KiwiConfiguration.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KiwiConfiguration.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/KiwiMacros.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KiwiMacros.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSInvocation+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSInvocation+OCMAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSInvocation+OCMAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSMethodSignature+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSNumber+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSNumber+KiwiAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSObject+KiwiMockAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSObject+KiwiSpyAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSObject+KiwiStubAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSObject+KiwiVerifierAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSProxy+KiwiVerifierAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h -------------------------------------------------------------------------------- /Example/Pods/BuildHeaders/Kiwi/NSValue+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSValue+KiwiAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/DSNestedAccordion/DSCellLevel.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/DSCellLevel.h -------------------------------------------------------------------------------- /Example/Pods/Headers/DSNestedAccordion/DSCellPath.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/DSCellPath.h -------------------------------------------------------------------------------- /Example/Pods/Headers/DSNestedAccordion/DSCellPathTracker.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/DSCellPathTracker.h -------------------------------------------------------------------------------- /Example/Pods/Headers/DSNestedAccordion/DSNestedAccordionHandler.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/DSNestedAccordionHandler.h -------------------------------------------------------------------------------- /Example/Pods/Headers/DSNestedAccordion/NSException+DSException.h: -------------------------------------------------------------------------------- 1 | ../../../../Pod/Classes/NSException+DSException.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWAfterAllNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWAfterAllNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWAfterEachNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWAfterEachNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWAny.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWAny.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWAsyncVerifier.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Verifiers/KWAsyncVerifier.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeBetweenMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeBetweenMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeEmptyMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeEmptyMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeIdenticalToMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeKindOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeMemberOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeSubclassOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeTrueMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeTrueMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeWithinMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeWithinMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeZeroMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBeZeroMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeforeAllNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWBeforeAllNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBeforeEachNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWBeforeEachNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBlock.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWBlock.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBlockNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWBlockNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWBlockRaiseMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWCallSite.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWCallSite.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWCaptureSpy.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWCaptureSpy.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWChangeMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWChangeMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWConformToProtocolMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWContainMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWContainMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWContainStringMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWContainStringMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWContextNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWContextNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWCountType.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWCountType.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWDeviceInfo.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWDeviceInfo.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWEqualMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWEqualMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWExample.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExample.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWExampleDelegate.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExampleDelegate.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWExampleNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWExampleNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWExampleNodeVisitor.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExampleNodeVisitor.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWExampleSuite.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExampleSuite.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWExampleSuiteBuilder.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExampleSuiteBuilder.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWExistVerifier.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Verifiers/KWExistVerifier.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWExpectationType.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWExpectationType.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWFailure.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWFailure.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWFormatter.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWFormatter.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWFutureObject.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWFutureObject.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWGenericMatchEvaluator.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWGenericMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWGenericMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWGenericMatchingAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWHaveMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWHaveMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWHaveValueMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWHaveValueMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWInequalityMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWInequalityMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWIntercept.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Stubbing/KWIntercept.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWInvocationCapturer.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWInvocationCapturer.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWItNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWItNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWLet.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWLet.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWLetNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWLetNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWMatchVerifier.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Verifiers/KWMatchVerifier.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWMatcherFactory.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMatcherFactory.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWMatchers.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMatchers.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWMatching.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMatching.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWMessagePattern.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/NonARC/KWMessagePattern.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWMessageSpying.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMessageSpying.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWMessageTracker.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWMessageTracker.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWMock.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Mocking/KWMock.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWNilMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWNilMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWNotificationMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWNotificationMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWNull.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWNull.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWObjCUtilities.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWObjCUtilities.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWPendingNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWPendingNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWProbe.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWProbe.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWProbePoller.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWProbePoller.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWRaiseMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWRaiseMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWReceiveMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWReceiveMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWRegisterMatchersNode.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Nodes/KWRegisterMatchersNode.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWRegularExpressionPatternMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWReporting.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWReporting.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWRespondToSelectorMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWSpec.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWSpec.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWStringContainsMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWStringContainsMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWStringPrefixMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWStringPrefixMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWStringUtilities.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWStringUtilities.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWStub.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Stubbing/KWStub.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWSymbolicator.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWSymbolicator.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWUserDefinedMatcher.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Matchers/KWUserDefinedMatcher.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWValue.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWValue.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWVerifying.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Verifiers/KWVerifying.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KWWorkarounds.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KWWorkarounds.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/Kiwi.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/Kiwi.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KiwiBlockMacros.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KiwiBlockMacros.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KiwiConfiguration.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KiwiConfiguration.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/KiwiMacros.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/KiwiMacros.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSInvocation+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSInvocation+OCMAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSInvocation+OCMAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSMethodSignature+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSNumber+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSNumber+KiwiAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSObject+KiwiMockAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSObject+KiwiSpyAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSObject+KiwiStubAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Stubbing/NSObject+KiwiStubAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSObject+KiwiVerifierAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSProxy+KiwiVerifierAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Kiwi/NSValue+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | ../../Kiwi/Classes/Core/NSValue+KiwiAdditions.h -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWAny.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | // KWAny exists to determine arguments in a message pattern that should 10 | // match any value. Used for pointers as well as for scalar values. 11 | @interface KWAny : NSObject 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)any; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWAny.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWAny.h" 8 | 9 | @implementation KWAny 10 | 11 | #pragma mark - Initializing 12 | 13 | + (id)any { 14 | static KWAny *sharedAny = nil; 15 | static dispatch_once_t onceToken; 16 | dispatch_once(&onceToken, ^{ 17 | sharedAny = [self new]; 18 | 19 | }); 20 | return sharedAny; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWBlock.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWBlock : NSObject 10 | 11 | #pragma mark - Initializing 12 | - (id)initWithBlock:(void (^)(void))block; 13 | 14 | + (id)blockWithBlock:(void (^)(void))block; 15 | 16 | #pragma mark - Calling Blocks 17 | 18 | - (void)call; 19 | 20 | @end 21 | 22 | #pragma mark - Creating Blocks 23 | 24 | KWBlock *theBlock(void (^block)(void)); 25 | KWBlock *lambda(void (^block)(void)); 26 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWBlock.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBlock.h" 8 | 9 | @interface KWBlock() 10 | 11 | #pragma mark - Properties 12 | 13 | @property (nonatomic, readonly, copy) void (^block)(void); 14 | 15 | @end 16 | 17 | @implementation KWBlock 18 | 19 | #pragma mark - Initializing 20 | 21 | - (id)initWithBlock:(void (^)(void))block { 22 | self = [super init]; 23 | if (self) { 24 | _block = [block copy]; 25 | } 26 | 27 | return self; 28 | } 29 | 30 | + (id)blockWithBlock:(void (^)(void))aBlock { 31 | return [[self alloc] initWithBlock:aBlock]; 32 | } 33 | 34 | #pragma mark - Calling Blocks 35 | 36 | - (void)call { 37 | self.block(); 38 | } 39 | 40 | @end 41 | 42 | #pragma mark - Creating Blocks 43 | 44 | KWBlock *theBlock(void (^block)(void)) { 45 | return lambda(block); 46 | } 47 | 48 | KWBlock *lambda(void (^block)(void)) { 49 | return [KWBlock blockWithBlock:block]; 50 | } 51 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCallSite.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWCallSite : NSObject 10 | 11 | #pragma mark - Initializing 12 | 13 | - (id)initWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber; 14 | 15 | + (id)callSiteWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber; 16 | 17 | #pragma mark - Properties 18 | 19 | @property (nonatomic, readonly, copy) NSString *filename; 20 | @property (nonatomic, readonly) NSUInteger lineNumber; 21 | 22 | #pragma mark - Identifying and Comparing 23 | 24 | - (BOOL)isEqualToCallSite:(KWCallSite *)aCallSite; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCallSite.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWCallSite.h" 8 | 9 | @implementation KWCallSite 10 | 11 | #pragma mark - Initializing 12 | 13 | - (id)initWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { 14 | self = [super init]; 15 | if (self) { 16 | _filename = [aFilename copy]; 17 | _lineNumber = aLineNumber; 18 | } 19 | 20 | return self; 21 | } 22 | 23 | + (id)callSiteWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { 24 | return [[self alloc] initWithFilename:aFilename lineNumber:aLineNumber]; 25 | } 26 | 27 | #pragma mark - Identifying and Comparing 28 | 29 | - (NSUInteger)hash { 30 | return [[NSString stringWithFormat:@"%@%u", self.filename, (unsigned)self.lineNumber] hash]; 31 | } 32 | 33 | - (BOOL)isEqual:(id)anObject { 34 | if (![anObject isKindOfClass:[KWCallSite class]]) 35 | return NO; 36 | 37 | return [self isEqualToCallSite:anObject]; 38 | } 39 | 40 | - (BOOL)isEqualToCallSite:(KWCallSite *)aCallSite { 41 | return [self.filename isEqualToString:aCallSite.filename] && (self.lineNumber == aCallSite.lineNumber); 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCaptureSpy.h: -------------------------------------------------------------------------------- 1 | #import "KWMessageSpying.h" 2 | 3 | @interface KWCaptureSpy : NSObject 4 | 5 | @property (nonatomic, strong, readonly) id argument; 6 | 7 | - (id)initWithArgumentIndex:(NSUInteger)index; 8 | 9 | @end 10 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCaptureSpy.m: -------------------------------------------------------------------------------- 1 | #import "KWCaptureSpy.h" 2 | 3 | #import "KWObjCUtilities.h" 4 | #import "KWNull.h" 5 | #import "KWValue.h" 6 | #import "NSInvocation+KiwiAdditions.h" 7 | #import "NSMethodSignature+KiwiAdditions.h" 8 | 9 | @interface KWCaptureSpy() 10 | 11 | @property (nonatomic, strong) id argument; 12 | 13 | @end 14 | 15 | @implementation KWCaptureSpy { 16 | NSUInteger _argumentIndex; 17 | } 18 | 19 | - (id)initWithArgumentIndex:(NSUInteger)index { 20 | self = [super init]; 21 | if (self) { 22 | _argumentIndex = index; 23 | } 24 | return self; 25 | } 26 | 27 | - (id)argument { 28 | if (!_argument) { 29 | @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Argument requested has yet to be captured." userInfo:nil]; 30 | } 31 | 32 | if(_argument == [KWNull null]) { 33 | return nil; 34 | } 35 | else { 36 | return _argument; 37 | } 38 | } 39 | 40 | - (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation { 41 | if (!_argument) { 42 | NSMethodSignature *signature = [anInvocation methodSignature]; 43 | const char *objCType = [signature messageArgumentTypeAtIndex:_argumentIndex]; 44 | if (KWObjCTypeIsObject(objCType) || KWObjCTypeIsClass(objCType)) { 45 | void* argumentBuffer = NULL; 46 | [anInvocation getMessageArgument:&argumentBuffer atIndex:_argumentIndex]; 47 | id argument = (__bridge id)argumentBuffer; 48 | if (KWObjCTypeIsBlock(objCType)) { 49 | _argument = [argument copy]; 50 | } else { 51 | if(argument == nil) { 52 | _argument = [KWNull null]; 53 | } else { 54 | _argument = argument; 55 | } 56 | } 57 | } else { 58 | NSData *data = [anInvocation messageArgumentDataAtIndex:_argumentIndex]; 59 | _argument = [KWValue valueWithBytes:[data bytes] objCType:objCType]; 60 | } 61 | } 62 | } 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCountType.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | enum { 10 | KWCountTypeExact, 11 | KWCountTypeAtLeast, 12 | KWCountTypeAtMost 13 | }; 14 | 15 | typedef NSUInteger KWCountType; 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWDeviceInfo.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWDeviceInfo : NSObject 10 | 11 | #pragma mark - Getting the Device Type 12 | 13 | + (BOOL)isSimulator; 14 | + (BOOL)isPhysical; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWDeviceInfo.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWDeviceInfo.h" 8 | 9 | #if TARGET_IPHONE_SIMULATOR 10 | 11 | #import 12 | 13 | #endif // #if TARGET_IPHONE_SIMULATOR 14 | 15 | @implementation KWDeviceInfo 16 | 17 | #pragma mark - Getting the Device Type 18 | 19 | + (BOOL)isSimulator { 20 | #if TARGET_IPHONE_SIMULATOR 21 | return YES; 22 | #else 23 | return NO; 24 | #endif // #if TARGET_IPHONE_SIMULATOR 25 | } 26 | 27 | + (BOOL)isPhysical { 28 | return ![self isSimulator]; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExampleDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWExampleGroupDelegate.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 08/09/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class KWExample; 12 | @class KWFailure; 13 | 14 | @protocol KWExampleDelegate 15 | 16 | - (void)example:(KWExample *)example didFailWithFailure:(KWFailure *)failure; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExampleNodeVisitor.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWAfterAllNode; 10 | @class KWAfterEachNode; 11 | @class KWBeforeAllNode; 12 | @class KWBeforeEachNode; 13 | @class KWContextNode; 14 | @class KWLetNode; 15 | @class KWItNode; 16 | @class KWPendingNode; 17 | @class KWRegisterMatchersNode; 18 | 19 | @protocol KWExampleNodeVisitor 20 | 21 | #pragma mark - Visiting Nodes 22 | 23 | @optional 24 | 25 | - (void)visitContextNode:(KWContextNode *)aNode; 26 | - (void)visitRegisterMatchersNode:(KWRegisterMatchersNode *)aNode; 27 | - (void)visitBeforeAllNode:(KWBeforeAllNode *)aNode; 28 | - (void)visitAfterAllNode:(KWAfterAllNode *)aNode; 29 | - (void)visitBeforeEachNode:(KWBeforeEachNode *)aNode; 30 | - (void)visitAfterEachNode:(KWAfterEachNode *)aNode; 31 | - (void)visitLetNode:(KWLetNode *)aNode; 32 | - (void)visitItNode:(KWItNode *)aNode; 33 | - (void)visitPendingNode:(KWPendingNode *)aNode; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExampleSuite.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWExampleSuite.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 17/10/2011. 6 | // Copyright (c) 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWExampleNodeVisitor.h" 11 | 12 | @class KWContextNode; 13 | @class KWExample; 14 | @class SenTestCase; 15 | 16 | @interface KWExampleSuite : NSObject 17 | 18 | - (id)initWithRootNode:(KWContextNode *)contextNode; 19 | - (void)addExample:(KWExample *)example; 20 | - (void)markLastExampleAsLastInContext:(KWContextNode *)context; 21 | - (NSArray *)invocationsForTestCase; 22 | @end 23 | 24 | @interface NSInvocation (KWExampleGroup) 25 | - (void)kw_setExample:(KWExample *)exampleGroup; 26 | - (KWExample *)kw_example; 27 | @end 28 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlock.h" 9 | 10 | @class KWCallSite; 11 | @class KWExample; 12 | @class KWExampleSuite; 13 | @class KWContextNode; 14 | 15 | @interface KWExampleSuiteBuilder : NSObject 16 | 17 | #pragma mark - Initializing 18 | 19 | + (id)sharedExampleSuiteBuilder; 20 | 21 | #pragma mark - Building Example Groups 22 | 23 | @property (nonatomic, readonly) BOOL isBuildingExampleSuite; 24 | @property (nonatomic, strong, readonly) KWExampleSuite *currentExampleSuite; 25 | @property (nonatomic, strong) KWExample *currentExample; 26 | @property (nonatomic, strong) KWCallSite *focusedCallSite; 27 | 28 | //spec file name:line number of callsite 29 | - (void)focusWithURI:(NSString *)nodeUrl; 30 | - (KWExampleSuite *)buildExampleSuite:(void (^)(void))buildingBlock; 31 | 32 | - (void)pushContextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; 33 | - (void)popContextNode; 34 | - (void)setRegisterMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; 35 | - (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 36 | - (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 37 | - (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 38 | - (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 39 | - (void)addLetNodeWithCallSite:(KWCallSite *)aCallSite objectRef:(id *)anObjectRef symbolName:(NSString *)aSymbolName block:(id (^)(void))block; 40 | - (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block; 41 | - (void)addPendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; 42 | 43 | - (BOOL)isFocused; 44 | - (BOOL)foundFocus; 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExpectationType.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | enum { 10 | KWExpectationTypeShould, 11 | KWExpectationTypeShouldNot, 12 | KWExpectationTypeMaybe 13 | }; 14 | 15 | typedef NSUInteger KWExpectationType; 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFailure.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWCallSite; 10 | 11 | @interface KWFailure : NSObject 12 | 13 | #pragma mark - Initializing 14 | 15 | - (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage; 16 | - (id)initWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ...; 17 | 18 | + (id)failureWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage; 19 | + (id)failureWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ...; 20 | 21 | #pragma mark - Properties 22 | 23 | @property (nonatomic, readonly) NSString *message; 24 | @property (nonatomic, weak, readonly) KWCallSite *callSite; 25 | 26 | #pragma mark - Getting Exception Representations 27 | 28 | - (NSException *)exceptionValue; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFailure.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWFailure.h" 8 | #import 9 | #import "KWCallSite.h" 10 | 11 | @implementation KWFailure 12 | 13 | #pragma mark - Initializing 14 | 15 | - (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { 16 | self = [super init]; 17 | if (self) { 18 | _callSite = aCallSite; 19 | _message = [aMessage copy]; 20 | } 21 | 22 | return self; 23 | } 24 | 25 | - (id)initWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { 26 | va_list argumentList; 27 | va_start(argumentList, format); 28 | NSString *aMessage = [[NSString alloc] initWithFormat:format arguments:argumentList]; 29 | return [self initWithCallSite:aCallSite message:aMessage]; 30 | } 31 | 32 | + (id)failureWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { 33 | return [[self alloc] initWithCallSite:aCallSite message:aMessage]; 34 | } 35 | 36 | + (id)failureWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { 37 | va_list argumentList; 38 | va_start(argumentList, format); 39 | NSString *message = [[NSString alloc] initWithFormat:format arguments:argumentList]; 40 | return [self failureWithCallSite:aCallSite message:message]; 41 | } 42 | 43 | #pragma mark - Getting Exception Representations 44 | 45 | - (NSException *)exceptionValue { 46 | NSDictionary *userInfo = nil; 47 | if (self.callSite) { 48 | NSNumber *lineNumber = @(self.callSite.lineNumber); 49 | userInfo = @{ 50 | @"SenTestFilenameKey": self.callSite.filename, 51 | @"SenTestLineNumberKey": lineNumber 52 | }; 53 | } 54 | return [NSException exceptionWithName:@"KWFailureException" reason:self.message userInfo:userInfo]; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFormatter.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWFormatter : NSObject 10 | 11 | #pragma mark - Getting Descriptions 12 | 13 | + (NSString *)formatObject:(id)anObject; 14 | + (NSString *)formatObjectIncludingClass:(id)anObject; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFormatter.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWFormatter.h" 8 | 9 | @implementation KWFormatter 10 | 11 | 12 | #pragma mark - Getting Descriptions 13 | 14 | + (NSString *)formatObject:(id)anObject { 15 | if ([anObject isKindOfClass:[NSString class]]) 16 | return [NSString stringWithFormat:@"\"%@\"", anObject]; 17 | 18 | else if ([anObject isKindOfClass:[NSDictionary class]]) 19 | return [anObject description]; // NSDictionary conforms to NSFastEnumeration 20 | 21 | else if ([anObject conformsToProtocol:@protocol(NSFastEnumeration)]) 22 | return [self formattedCollection:anObject]; 23 | 24 | return [anObject description]; 25 | } 26 | 27 | + (NSString *)formatObjectIncludingClass:(id)anObject { 28 | NSString *classString = [[anObject class] description]; 29 | 30 | if ([anObject isKindOfClass:[NSString class]]) 31 | classString = @"NSString"; 32 | 33 | return [NSString stringWithFormat:@"(%@) %@", classString, [self formatObject:anObject]]; 34 | } 35 | 36 | 37 | #pragma mark - Private 38 | 39 | + (NSString *)formattedCollection:(id)collection { 40 | 41 | NSMutableString *description = [[NSMutableString alloc] initWithString:@"("]; 42 | NSUInteger index = 0; 43 | 44 | for (id object in collection) { 45 | if (index == 0) 46 | [description appendFormat:@"%@", [self formatObject:object]]; 47 | else 48 | [description appendFormat:@", %@", [self formatObject:object]]; 49 | 50 | ++index; 51 | } 52 | 53 | [description appendString:@")"]; 54 | return description; 55 | } 56 | 57 | 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFutureObject.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWFutureObject.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef id (^KWFutureObjectBlock)(void); 12 | 13 | @interface KWFutureObject : NSObject 14 | 15 | + (id)objectWithObjectPointer:(id *)pointer; 16 | + (id)futureObjectWithBlock:(KWFutureObjectBlock)block; 17 | - (id)initWithBlock:(KWFutureObjectBlock)aBlock; 18 | - (id)object; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFutureObject.m: -------------------------------------------------------------------------------- 1 | // 2 | // KWFutureObject.m 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "KWFutureObject.h" 10 | 11 | @interface KWFutureObject() 12 | 13 | @property (nonatomic, strong) KWFutureObjectBlock block; 14 | 15 | @end 16 | 17 | @implementation KWFutureObject 18 | 19 | + (id)objectWithObjectPointer:(id *)pointer { 20 | return [self futureObjectWithBlock:^{ return *pointer; }]; 21 | } 22 | 23 | + (id)futureObjectWithBlock:(KWFutureObjectBlock)block { 24 | return [[self alloc] initWithBlock:block]; 25 | } 26 | 27 | - (id)initWithBlock:(KWFutureObjectBlock)aBlock { 28 | self = [super init]; 29 | if (self) { 30 | _block = [aBlock copy]; 31 | } 32 | return self; 33 | } 34 | 35 | - (id)object; { 36 | return self.block(); 37 | } 38 | 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWInvocationCapturer.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KWInvocationCapturerDelegate; 10 | 11 | @interface KWInvocationCapturer : NSProxy 12 | 13 | #pragma mark - Initializing 14 | 15 | - (id)initWithDelegate:(id)aDelegate; 16 | - (id)initWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo; 17 | 18 | + (id)invocationCapturerWithDelegate:(id)aDelegate; 19 | + (id)invocationCapturerWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo; 20 | 21 | #pragma mark - Properties 22 | 23 | @property (nonatomic, weak, readonly) id delegate; 24 | @property (nonatomic, strong, readonly) NSDictionary *userInfo; 25 | 26 | @end 27 | 28 | @protocol KWInvocationCapturerDelegate 29 | 30 | #pragma mark - Capturing Invocations 31 | 32 | - (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector; 33 | - (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWLet.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #if __has_feature(objc_arr) 8 | # define KW_ARC_AUTORELEASE(obj) obj 9 | #else 10 | # define KW_ARC_AUTORELEASE(obj) [obj autorelease] 11 | #endif 12 | 13 | #define KW_LET_REF(var) \ 14 | (__autoreleasing id *) \ 15 | ( (void *(^)(void)) KW_ARC_AUTORELEASE([^{ void *ref = &var; return ref; } copy]) )() 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatching.h" 9 | 10 | @interface KWMatcher : NSObject 11 | 12 | #pragma mark - Initializing 13 | 14 | - (id)initWithSubject:(id)anObject; 15 | 16 | + (id)matcherWithSubject:(id)anObject; 17 | 18 | #pragma mark - Properties 19 | 20 | @property (nonatomic, strong) id subject; 21 | 22 | #pragma mark - Getting Matcher Strings 23 | 24 | + (NSArray *)matcherStrings; 25 | 26 | #pragma mark - Getting Matcher Compatability 27 | 28 | + (BOOL)canMatchSubject:(id)anObject; 29 | 30 | #pragma mark - Matching 31 | 32 | - (BOOL)evaluate; 33 | 34 | #pragma mark - Getting Failure Messages 35 | 36 | - (NSString *)failureMessageForShould; 37 | - (NSString *)failureMessageForShouldNot; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMatcherFactory.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatching.h" 9 | 10 | @class KWFailure; 11 | @class KWMatcher; 12 | @class KWUserDefinedMatcherBuilder; 13 | 14 | @interface KWMatcherFactory : NSObject 15 | 16 | #pragma mark - Initializing 17 | 18 | - (id)init; 19 | 20 | #pragma mark - Properties 21 | 22 | @property (nonatomic, readonly) NSArray *registeredMatcherClasses; 23 | 24 | #pragma mark - Registering Matcher Classes 25 | 26 | - (void)registerMatcherClass:(Class)aClass; 27 | - (void)registerMatcherClassesWithNamespacePrefix:(NSString *)aNamespacePrefix; 28 | 29 | #pragma mark - Getting Method Signatures 30 | 31 | - (NSMethodSignature *)methodSignatureForMatcherSelector:(SEL)aSelector; 32 | 33 | #pragma mark - Getting Matchers 34 | 35 | - (KWMatcher *)matcherFromInvocation:(NSInvocation *)anInvocation subject:(id)subject; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMatchers.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWMatchers.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 17/06/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class KWUserDefinedMatcherBuilder; 12 | 13 | typedef void (^KWMatchersBuildingBlock)(KWUserDefinedMatcherBuilder *matcherBuilder); 14 | 15 | @class KWUserDefinedMatcher; 16 | 17 | @interface KWMatchers : NSObject 18 | 19 | + (id)matchers; 20 | 21 | #pragma mark - Defining Matchers 22 | 23 | + (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block; 24 | - (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block; 25 | - (void)addUserDefinedMatcherBuilder:(KWUserDefinedMatcherBuilder *)builder; 26 | 27 | #pragma mark - Building Matchers 28 | 29 | - (KWUserDefinedMatcher *)matcherForSelector:(SEL)selector subject:(id)subject; 30 | @end 31 | 32 | void KWDefineMatchers(NSString *selectorString, KWMatchersBuildingBlock block); 33 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMatchers.m: -------------------------------------------------------------------------------- 1 | // 2 | // KWMatchers.m 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 17/06/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWMatchers.h" 10 | #import "KWUserDefinedMatcher.h" 11 | 12 | @interface KWMatchers() { 13 | NSMutableDictionary *userDefinedMatchers; 14 | } 15 | @end 16 | 17 | @implementation KWMatchers 18 | 19 | #pragma mark - Singleton implementation 20 | 21 | static id sharedMatchers = nil; 22 | 23 | + (void)initialize { 24 | if (self == [KWMatchers class]) { 25 | sharedMatchers = [[self alloc] init]; 26 | } 27 | } 28 | 29 | + (id)matchers { 30 | return sharedMatchers; 31 | } 32 | 33 | - (id)init { 34 | self = [super init]; 35 | if (self) { 36 | userDefinedMatchers = [[NSMutableDictionary alloc] init]; 37 | } 38 | return self; 39 | } 40 | 41 | #pragma mark - Defining Matchers 42 | 43 | + (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block { 44 | [[self matchers] defineMatcher:selectorString as:block]; 45 | } 46 | 47 | - (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block { 48 | KWUserDefinedMatcherBuilder *builder = [KWUserDefinedMatcherBuilder builderForSelector:NSSelectorFromString(selectorString)]; 49 | block(builder); 50 | userDefinedMatchers[builder.key] = builder; 51 | } 52 | 53 | - (void)addUserDefinedMatcherBuilder:(KWUserDefinedMatcherBuilder *)builder { 54 | userDefinedMatchers[builder.key] = builder; 55 | } 56 | 57 | #pragma mark - Building Matchers 58 | 59 | - (KWUserDefinedMatcher *)matcherForSelector:(SEL)selector subject:(id)subject { 60 | KWUserDefinedMatcherBuilder *builder = userDefinedMatchers[NSStringFromSelector(selector)]; 61 | 62 | if (builder == nil) 63 | return nil; 64 | 65 | return [builder buildMatcherWithSubject:subject]; 66 | } 67 | 68 | 69 | @end 70 | 71 | void KWDefineMatchers(NSString *selectorString, KWMatchersBuildingBlock block) 72 | { 73 | [KWMatchers defineMatcher:selectorString as:block]; 74 | } 75 | 76 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMatching.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KWMatching 10 | 11 | #pragma mark - Initializing 12 | 13 | - (id)initWithSubject:(id)anObject; 14 | 15 | #pragma mark - Getting Matcher Strings 16 | 17 | + (NSArray *)matcherStrings; 18 | 19 | #pragma mark - Getting Matcher Compatability 20 | 21 | + (BOOL)canMatchSubject:(id)anObject; 22 | 23 | #pragma mark - Matching 24 | 25 | @optional 26 | 27 | - (BOOL)isNilMatcher; 28 | - (BOOL)shouldBeEvaluatedAtEndOfExample; 29 | - (BOOL)willEvaluateMultipleTimes; 30 | - (void)setWillEvaluateMultipleTimes:(BOOL)shouldEvaluateMultipleTimes; 31 | 32 | @required 33 | 34 | - (BOOL)evaluate; 35 | 36 | #pragma mark - Getting Failure Messages 37 | 38 | - (NSString *)failureMessageForShould; 39 | - (NSString *)failureMessageForShouldNot; 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMessageSpying.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KWMessageSpying 10 | 11 | #pragma mark - Spying on Messages 12 | 13 | - (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMessageTracker.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWCountType.h" 9 | #import "KWMessageSpying.h" 10 | 11 | @class KWMessagePattern; 12 | 13 | @interface KWMessageTracker : NSObject 14 | 15 | #pragma mark - Initializing 16 | 17 | - (id)initWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; 18 | 19 | + (id)messageTrackerWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; 20 | 21 | #pragma mark - Properties 22 | 23 | @property (nonatomic, readonly) id subject; 24 | @property (nonatomic, readonly) KWMessagePattern *messagePattern; 25 | @property (nonatomic, readonly) KWCountType countType; 26 | @property (nonatomic, readonly) NSUInteger count; 27 | 28 | #pragma mark - Stopping Tracking 29 | 30 | - (void)stopTracking; 31 | 32 | #pragma mark - Getting Message Tracker Status 33 | 34 | - (BOOL)succeeded; 35 | 36 | #pragma mark - Getting Phrases 37 | 38 | - (NSString *)expectedCountPhrase; 39 | - (NSString *)receivedCountPhrase; 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWNull.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | // KWNull exists to represent the same thing as NSNull, except that Kiwi needs 10 | // to distinguish between null singletons used internally and those a user 11 | // is using as an object parameter. 12 | @interface KWNull : NSObject 13 | 14 | #pragma mark - Initializing 15 | 16 | + (id)null; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWNull.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWNull.h" 8 | 9 | @implementation KWNull 10 | 11 | #pragma mark - Initializing 12 | 13 | 14 | + (id)null { 15 | static KWNull *sharedNull = nil; 16 | static dispatch_once_t onceToken; 17 | dispatch_once(&onceToken, ^{ 18 | sharedNull = [self new]; 19 | 20 | }); 21 | 22 | return sharedNull; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWObjCUtilities.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | #pragma mark - Objective-C Type Utilities 10 | 11 | BOOL KWObjCTypeEqualToObjCType(const char *firstObjCType, const char *secondObjCType); 12 | BOOL KWObjCTypeIsNumeric(const char *objCType); 13 | BOOL KWObjCTypeIsFloatingPoint(const char *objCType); 14 | BOOL KWObjCTypeIsIntegral(const char *objCType); 15 | BOOL KWObjCTypeIsSignedIntegral(const char *objCType); 16 | BOOL KWObjCTypeIsUnsignedIntegral(const char *objCType); 17 | BOOL KWObjCTypeIsBool(const char *objCType); 18 | BOOL KWObjCTypeIsObject(const char *objCType); 19 | BOOL KWObjCTypeIsCharString(const char *objCType); 20 | BOOL KWObjCTypeIsClass(const char *objCType); 21 | BOOL KWObjCTypeIsSelector(const char *objCType); 22 | BOOL KWObjCTypeIsPointerToType(const char *objCType); 23 | BOOL KWObjCTypeIsPointerLike(const char *objCType); 24 | BOOL KWObjCTypeIsUnknown(const char *objCType); 25 | BOOL KWObjCTypeIsBlock(const char *objCType); 26 | 27 | NSUInteger KWObjCTypeLength(const char *objCType); 28 | 29 | #pragma mark - Selector Utlities 30 | 31 | NSUInteger KWSelectorParameterCount(SEL selector); 32 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWProbe.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWProbe.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol KWProbe 12 | - (BOOL)isSatisfied; 13 | - (void)sample; 14 | @end 15 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWProbePoller.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWProbePoller.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWProbe.h" 11 | 12 | #define kKW_DEFAULT_PROBE_DELAY 0.1 13 | 14 | @interface KWProbePoller : NSObject 15 | 16 | - (id)initWithTimeout:(NSTimeInterval)theTimeout delay:(NSTimeInterval)theDelay shouldWait:(BOOL)wait; 17 | - (BOOL)check:(id)probe; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWProbePoller.m: -------------------------------------------------------------------------------- 1 | // 2 | // KWProbePoller.m 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "KWProbePoller.h" 10 | 11 | @interface KWTimeout : NSObject 12 | 13 | @property (nonatomic) CFTimeInterval timeoutDateStamp; 14 | 15 | @end 16 | 17 | @implementation KWTimeout 18 | 19 | - (id)initWithTimeout:(NSTimeInterval)timeout 20 | { 21 | self = [super init]; 22 | if (self) { 23 | _timeoutDateStamp = CFAbsoluteTimeGetCurrent() + timeout; 24 | } 25 | return self; 26 | } 27 | 28 | 29 | - (BOOL)hasTimedOut { 30 | return (_timeoutDateStamp - CFAbsoluteTimeGetCurrent()) < 0; 31 | } 32 | 33 | @end 34 | 35 | 36 | @interface KWProbePoller() 37 | 38 | @property (nonatomic, assign) NSTimeInterval timeoutInterval; 39 | @property (nonatomic, assign) NSTimeInterval delayInterval; 40 | @property (nonatomic, assign) BOOL shouldWait; 41 | 42 | @end 43 | 44 | @implementation KWProbePoller 45 | 46 | - (id)initWithTimeout:(NSTimeInterval)theTimeout 47 | delay:(NSTimeInterval)theDelay 48 | shouldWait:(BOOL)wait { 49 | self = [super init]; 50 | if (self) { 51 | _timeoutInterval = theTimeout; 52 | _delayInterval = theDelay; 53 | _shouldWait = wait; 54 | } 55 | return self; 56 | } 57 | 58 | - (BOOL)check:(id)probe; { 59 | KWTimeout *timeout = [[KWTimeout alloc] initWithTimeout:self.timeoutInterval]; 60 | 61 | while (self.shouldWait || ![probe isSatisfied]) { 62 | if ([timeout hasTimedOut]) { 63 | return [probe isSatisfied]; 64 | } 65 | CFRunLoopRunInMode(kCFRunLoopDefaultMode, _delayInterval, false); 66 | [probe sample]; 67 | } 68 | 69 | return YES; 70 | } 71 | 72 | @end 73 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWReporting.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWFailure; 10 | 11 | @protocol KWReporting 12 | 13 | #pragma mark - Reporting Failures 14 | 15 | - (void)reportFailure:(KWFailure *)failure; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWSpec.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import 9 | #import "KWExpectationType.h" 10 | #import "KWVerifying.h" 11 | #import "KWExampleDelegate.h" 12 | 13 | 14 | @class KWCallSite; 15 | 16 | #ifdef XCT_EXPORT 17 | @interface KWSpec : XCTestCase 18 | #else 19 | @interface KWSpec : SenTestCase 20 | #endif 21 | 22 | #pragma mark - Adding Verifiers 23 | 24 | + (id)addVerifier:(id)aVerifier; 25 | + (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; 26 | + (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; 27 | + (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSTimeInterval)timeout shouldWait:(BOOL)shouldWait; 28 | 29 | #pragma mark - Building Example Groups 30 | 31 | + (NSString *)file; 32 | + (void)buildExampleGroups; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWStringUtilities.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | #pragma mark - Checking for Case Separated Words 10 | 11 | BOOL KWStringHasWordPrefix(NSString *string, NSString *prefix); 12 | BOOL KWStringHasStrictWordPrefix(NSString *string, NSString *prefix); 13 | BOOL KWStringHasWord(NSString *string, NSString *word); 14 | 15 | #pragma mark - Getting Type Encodings 16 | 17 | NSString *KWEncodingWithObjCTypes(const char *firstType, ...) NS_REQUIRES_NIL_TERMINATION; 18 | NSString *KWEncodingForVoidMethod(void); 19 | NSString *KWEncodingForDefaultMethod(void); 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWSymbolicator.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWSymbolicator.h 3 | // Kiwi 4 | // 5 | // Created by Jerry Marino on 4/28/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | long kwCallerAddress(void); 12 | 13 | @interface NSString (KWShellCommand) 14 | 15 | + (NSString *)stringWithShellCommand:(NSString *)command arguments:(NSArray *)arguments; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWSymbolicator.m: -------------------------------------------------------------------------------- 1 | // 2 | // KWSymbolicator.m 3 | // Kiwi 4 | // 5 | // Created by Jerry Marino on 4/28/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWSymbolicator.h" 10 | #import 11 | #import 12 | 13 | long kwCallerAddress (void){ 14 | #if !__arm__ 15 | unw_cursor_t cursor; unw_context_t uc; 16 | unw_word_t ip; 17 | 18 | unw_getcontext(&uc); 19 | unw_init_local(&cursor, &uc); 20 | 21 | int pos = 2; 22 | while (unw_step(&cursor) && pos--){ 23 | unw_get_reg (&cursor, UNW_REG_IP, &ip); 24 | if(pos == 0) return (NSUInteger)(ip - 4); 25 | } 26 | #endif 27 | return 0; 28 | } 29 | 30 | // Used to suppress compiler warnings by 31 | // casting receivers to this protocol 32 | @protocol NSTask_KWWarningSuppressor 33 | 34 | - (void)setLaunchPath:(NSString *)path; 35 | - (void)setArguments:(NSArray *)arguments; 36 | - (void)setEnvironment:(NSDictionary *)dict; 37 | - (void)setStandardOutput:(id)output; 38 | - (void)launch; 39 | - (void)waitUntilExit; 40 | 41 | @end 42 | 43 | @implementation NSString (KWShellCommand) 44 | 45 | + (NSString *)stringWithShellCommand:(NSString *)command arguments:(NSArray *)arguments { 46 | id task = [[NSClassFromString(@"NSTask") alloc] init]; 47 | [task setEnvironment:[NSDictionary dictionary]]; 48 | [task setLaunchPath:command]; 49 | [task setArguments:arguments]; 50 | 51 | NSPipe *pipe = [NSPipe pipe]; 52 | [task setStandardOutput:pipe]; 53 | [task launch]; 54 | 55 | [task waitUntilExit]; 56 | 57 | NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile]; 58 | NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 59 | return string; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWWorkarounds.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 10 | 11 | #pragma mark - Invocation Exception Bug Workaround 12 | 13 | // See KiwiConfiguration.h for notes. 14 | void KWSetExceptionFromAcrossInvocationBoundary(NSException *anException); 15 | NSException *KWGetAndClearExceptionFromAcrossInvocationBoundary(void); 16 | 17 | #endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWWorkarounds.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWWorkarounds.h" 8 | 9 | #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 10 | 11 | static NSException *KWExceptionAcrossInvokeBoundary = nil; 12 | 13 | void KWSetExceptionFromAcrossInvocationBoundary(NSException *anException) { 14 | if (KWExceptionAcrossInvokeBoundary != nil) 15 | return; 16 | 17 | KWExceptionAcrossInvokeBoundary = anException; 18 | } 19 | 20 | NSException *KWGetAndClearExceptionFromAcrossInvocationBoundary(void) { 21 | NSException *exception = KWExceptionAcrossInvokeBoundary; 22 | KWExceptionAcrossInvokeBoundary = nil; 23 | return exception; 24 | } 25 | 26 | #endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KiwiBlockMacros.h: -------------------------------------------------------------------------------- 1 | // 2 | // KiwiBlockMacros.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 11/07/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | // user defined matchers 10 | #define registerMatcher(name) \ 11 | \ 12 | @interface NSObject (KWUserDefinedMatchersDefinitions) \ 13 | - (void)name; \ 14 | @end \ 15 | 16 | #define defineMatcher(...) KWDefineMatchers(__VA_ARGS__) 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KiwiConfiguration.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | // As of iPhone SDK 4 GM, exceptions thrown across an NSInvocation -invoke or 8 | // forwardInvocation: boundary in the simulator will terminate the app instead 9 | // of being caught in @catch blocks from the caller side of the -invoke. Kiwi 10 | // tries to handle this by storing the first exception that it would have 11 | // otherwise thrown in a nasty global that callers can look for and handle. 12 | // (Buggy termination is less desirable than global variables). 13 | // 14 | // Obviously, this can only handles cases where Kiwi itself would have raised 15 | // an exception. 16 | #if TARGET_IPHONE_SIMULATOR 17 | #define KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 1 18 | #endif 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface NSInvocation(KiwiAdditions) 10 | 11 | #pragma mark - Creating NSInvocation Objects 12 | 13 | + (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector; 14 | + (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector messageArguments:(const void *)firstBytes, ...; 15 | 16 | #pragma mark - Accessing Message Arguments 17 | 18 | // Message arguments are invocation arguments that begin after the target and selector arguments. These methods provide 19 | // convenient ways to access them. 20 | 21 | - (NSData *)messageArgumentDataAtIndex:(NSUInteger)anIndex; 22 | - (void)getMessageArgument:(void *)buffer atIndex:(NSUInteger)anIndex; 23 | - (void)setMessageArgument:(const void *)bytes atIndex:(NSUInteger)anIndex; 24 | - (void)setMessageArguments:(const void *)firstBytes, ...; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.h: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------------------- 2 | // $Id$ 3 | // Copyright (c) 2006-2009 by Mulle Kybernetik. See License file for details. 4 | //--------------------------------------------------------------------------------------- 5 | 6 | #import 7 | 8 | @interface NSInvocation(OCMAdditions) 9 | 10 | - (id)getArgumentAtIndexAsObject:(int)argIndex; 11 | 12 | - (NSString *)invocationDescription; 13 | 14 | - (NSString *)argumentDescriptionAtIndex:(int)argIndex; 15 | 16 | - (NSString *)objectDescriptionAtIndex:(int)anInt; 17 | - (NSString *)charDescriptionAtIndex:(int)anInt; 18 | - (NSString *)unsignedCharDescriptionAtIndex:(int)anInt; 19 | - (NSString *)intDescriptionAtIndex:(int)anInt; 20 | - (NSString *)unsignedIntDescriptionAtIndex:(int)anInt; 21 | - (NSString *)shortDescriptionAtIndex:(int)anInt; 22 | - (NSString *)unsignedShortDescriptionAtIndex:(int)anInt; 23 | - (NSString *)longDescriptionAtIndex:(int)anInt; 24 | - (NSString *)unsignedLongDescriptionAtIndex:(int)anInt; 25 | - (NSString *)longLongDescriptionAtIndex:(int)anInt; 26 | - (NSString *)unsignedLongLongDescriptionAtIndex:(int)anInt; 27 | - (NSString *)doubleDescriptionAtIndex:(int)anInt; 28 | - (NSString *)floatDescriptionAtIndex:(int)anInt; 29 | - (NSString *)structDescriptionAtIndex:(int)anInt; 30 | - (NSString *)pointerDescriptionAtIndex:(int)anInt; 31 | - (NSString *)cStringDescriptionAtIndex:(int)anInt; 32 | - (NSString *)selectorDescriptionAtIndex:(int)anInt; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface NSMethodSignature(KiwiAdditions) 10 | 11 | #pragma mark - Getting Information on Message Arguments 12 | 13 | - (NSUInteger)numberOfMessageArguments; 14 | - (const char *)messageArgumentTypeAtIndex:(NSUInteger)anIndex; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSMethodSignature+KiwiAdditions.h" 8 | 9 | @implementation NSMethodSignature(KiwiAdditions) 10 | 11 | #pragma mark - Getting Information on Message Arguments 12 | 13 | - (NSUInteger)numberOfMessageArguments { 14 | return [self numberOfArguments] - 2; 15 | } 16 | 17 | - (const char *)messageArgumentTypeAtIndex:(NSUInteger)anIndex { 18 | return [self getArgumentTypeAtIndex:anIndex + 2]; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface NSNumber(KiwiAdditions) 10 | 11 | #pragma mark - Creating Numbers 12 | 13 | + (id)numberWithBytes:(const void *)bytes objCType:(const char *)anObjCType; 14 | + (id)numberWithBoolBytes:(const void *)bytes; 15 | + (id)numberWithCharBytes:(const void *)bytes; 16 | + (id)numberWithDoubleBytes:(const void *)bytes; 17 | + (id)numberWithFloatBytes:(const void *)bytes; 18 | + (id)numberWithIntBytes:(const void *)bytes; 19 | + (id)numberWithIntegerBytes:(const void *)bytes; 20 | + (id)numberWithLongBytes:(const void *)bytes; 21 | + (id)numberWithLongLongBytes:(const void *)bytes; 22 | + (id)numberWithShortBytes:(const void *)bytes; 23 | + (id)numberWithUnsignedCharBytes:(const void *)bytes; 24 | + (id)numberWithUnsignedIntBytes:(const void *)bytes; 25 | + (id)numberWithUnsignedIntegerBytes:(const void *)bytes; 26 | + (id)numberWithUnsignedLongBytes:(const void *)bytes; 27 | + (id)numberWithUnsignedLongLongBytes:(const void *)bytes; 28 | + (id)numberWithUnsignedShortBytes:(const void *)bytes; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWCaptureSpy; 10 | 11 | @protocol KiwiSpyAdditions 12 | 13 | - (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; 14 | + (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; 15 | 16 | @end 17 | 18 | @interface NSObject (KiwiSpyAdditions) 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSObject+KiwiSpyAdditions.h" 8 | 9 | #import "KWCaptureSpy.h" 10 | #import "KWMessagePattern.h" 11 | #import "NSObject+KiwiStubAdditions.h" 12 | 13 | @implementation NSObject (KiwiSpyAdditions) 14 | 15 | - (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { 16 | KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; 17 | KWMessagePattern *pattern = [[KWMessagePattern alloc] initWithSelector:selector]; 18 | [self addMessageSpy:spy forMessagePattern:pattern]; 19 | return spy; 20 | } 21 | 22 | + (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { 23 | KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; 24 | KWMessagePattern *pattern = [[KWMessagePattern alloc] initWithSelector:selector]; 25 | [self addMessageSpy:spy forMessagePattern:pattern]; 26 | return spy; 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KWVerifying; 10 | 11 | @interface NSObject(KiwiVerifierAdditions) 12 | 13 | #pragma mark - Attaching to Verifiers 14 | 15 | - (id)attachToVerifier:(id)aVerifier; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSObject+KiwiVerifierAdditions.h" 8 | #import "KWVerifying.h" 9 | 10 | @implementation NSObject(KiwiVerifierAdditions) 11 | 12 | #pragma mark - Attaching to Verifiers 13 | 14 | - (id)attachToVerifier:(id)aVerifier { 15 | [aVerifier setSubject:self]; 16 | return aVerifier; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2013 Allen Ding. All rights reserved. 5 | // 6 | // Contributed by https://github.com/dwlnetnl 7 | // 8 | 9 | #import "KiwiConfiguration.h" 10 | 11 | @protocol KWVerifying; 12 | 13 | @interface NSProxy (KiwiVerifierAdditions) 14 | 15 | #pragma mark - Attaching to Verifiers 16 | 17 | - (id)attachToVerifier:(id)aVerifier; 18 | - (id)attachToVerifier:(id)firstVerifier verifier:(id)secondVerifier; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2013 Allen Ding. All rights reserved. 5 | // 6 | // Contributed by https://github.com/dwlnetnl 7 | // 8 | 9 | #import "NSProxy+KiwiVerifierAdditions.h" 10 | #import "KWVerifying.h" 11 | 12 | @implementation NSProxy (KiwiVerifierAdditions) 13 | 14 | #pragma mark - Attaching to Verifiers 15 | 16 | - (id)attachToVerifier:(id)aVerifier { 17 | [aVerifier setSubject:self]; 18 | return aVerifier; 19 | } 20 | 21 | - (id)attachToVerifier:(id)firstVerifier verifier:(id)secondVerifier { 22 | [firstVerifier setSubject:self]; 23 | [secondVerifier setSubject:self]; 24 | return firstVerifier; 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface NSValue(KiwiAdditions) 10 | 11 | #pragma mark - Accessing Data 12 | 13 | - (NSData *)dataValue; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSValue+KiwiAdditions.h" 8 | #import "KWObjCUtilities.h" 9 | 10 | @implementation NSValue(KiwiAdditions) 11 | 12 | #pragma mark - Accessing Data 13 | 14 | - (NSData *)dataValue { 15 | NSUInteger length = KWObjCTypeLength([self objCType]); 16 | void *buffer = malloc(length); 17 | [self getValue:buffer]; 18 | NSData *data = [NSData dataWithBytes:buffer length:length]; 19 | free(buffer); 20 | return data; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeBetweenMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | // TODO: 'and' below is a reserved word in C++ 15 | - (void)beBetween:(id)aLowerEndpoint and:(id)anUpperEndpoint; 16 | - (void)beInTheIntervalFrom:(id)aLowerEndpoint to:(id)anUpperEndpoint; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeEmptyMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beEmpty; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeEmptyMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeEmptyMatcher() 11 | 12 | #pragma mark - Properties 13 | 14 | @property (nonatomic, readwrite) NSUInteger count; 15 | 16 | @end 17 | 18 | @implementation KWBeEmptyMatcher 19 | 20 | #pragma mark - Getting Matcher Strings 21 | 22 | + (NSArray *)matcherStrings { 23 | return @[@"beEmpty"]; 24 | } 25 | 26 | #pragma mark - Matching 27 | 28 | - (BOOL)evaluate { 29 | if ([self.subject respondsToSelector:@selector(count)]) { 30 | self.count = [self.subject count]; 31 | return self.count == 0; 32 | } 33 | else if ([self.subject respondsToSelector:@selector(length)]) { 34 | self.count = [self.subject length]; 35 | return self.count == 0; 36 | } 37 | 38 | [NSException raise:@"KWMatcherException" format:@"subject does not respond to -count or -length"]; 39 | return NO; 40 | } 41 | 42 | #pragma mark - Getting Failure Messages 43 | 44 | - (NSString *)countPhrase { 45 | if (self.count == 1) 46 | return @"1 item"; 47 | else 48 | return [NSString stringWithFormat:@"%u items", (unsigned)self.count]; 49 | } 50 | 51 | - (NSString *)failureMessageForShould { 52 | return [NSString stringWithFormat:@"expected subject to be empty, got %@", [self countPhrase]]; 53 | } 54 | 55 | - (NSString *)failureMessageForShouldNot { 56 | return @"expected subject not to be empty"; 57 | } 58 | 59 | - (NSString *)description { 60 | return @"be empty"; 61 | } 62 | 63 | #pragma mark - Configuring Matchers 64 | 65 | - (void)beEmpty { 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeIdenticalToMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beIdenticalTo:(id)anObject; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeIdenticalToMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeIdenticalToMatcher() 11 | 12 | #pragma mark - Properties 13 | 14 | @property (nonatomic, readwrite, strong) id otherSubject; 15 | 16 | @end 17 | 18 | @implementation KWBeIdenticalToMatcher 19 | 20 | #pragma mark - Getting Matcher Strings 21 | 22 | + (NSArray *)matcherStrings { 23 | return @[@"beIdenticalTo:"]; 24 | } 25 | 26 | #pragma mark - Matching 27 | 28 | - (BOOL)evaluate { 29 | return self.subject == self.otherSubject; 30 | } 31 | 32 | #pragma mark - Getting Failure Messages 33 | 34 | - (NSString *)failureMessageForShould { 35 | return [NSString stringWithFormat:@"expected subject to be identical to %@ (%p), got %@ (%p)", 36 | [KWFormatter formatObject:self.otherSubject], 37 | self.otherSubject, 38 | [KWFormatter formatObject:self.subject], 39 | self.subject]; 40 | } 41 | 42 | - (NSString *)failureMessageForShouldNot { 43 | return [NSString stringWithFormat:@"expected subject not to be identical to %@ (%p)", 44 | [KWFormatter formatObject:self.otherSubject], 45 | self.otherSubject]; 46 | } 47 | 48 | - (NSString *)description { 49 | return [NSString stringWithFormat:@"be identical to %@", self.otherSubject]; 50 | } 51 | 52 | #pragma mark - Configuring Matchers 53 | 54 | - (void)beIdenticalTo:(id)anObject { 55 | self.otherSubject = anObject; 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeKindOfClassMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beKindOfClass:(Class)aClass; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeKindOfClassMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeKindOfClassMatcher() 11 | 12 | @property (nonatomic, assign) Class targetClass; 13 | 14 | @end 15 | 16 | @implementation KWBeKindOfClassMatcher 17 | 18 | #pragma mark - Getting Matcher Strings 19 | 20 | + (NSArray *)matcherStrings { 21 | return @[@"beKindOfClass:"]; 22 | } 23 | 24 | #pragma mark - Matching 25 | 26 | - (BOOL)evaluate { 27 | return [self.subject isKindOfClass:self.targetClass]; 28 | } 29 | 30 | #pragma mark - Getting Failure Messages 31 | 32 | - (NSString *)failureMessageForShould { 33 | return [NSString stringWithFormat:@"expected subject to be kind of %@, got %@", 34 | NSStringFromClass(self.targetClass), 35 | NSStringFromClass([self.subject class])]; 36 | } 37 | 38 | - (NSString *)description { 39 | return [NSString stringWithFormat:@"be kind of %@", NSStringFromClass(self.targetClass)]; 40 | } 41 | 42 | #pragma mark - Configuring Matchers 43 | 44 | - (void)beKindOfClass:(Class)aClass { 45 | self.targetClass = aClass; 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeMemberOfClassMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beMemberOfClass:(Class)aClass; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeMemberOfClassMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeMemberOfClassMatcher() 11 | 12 | @property (nonatomic, assign) Class targetClass; 13 | 14 | @end 15 | 16 | @implementation KWBeMemberOfClassMatcher 17 | 18 | #pragma mark - Getting Matcher Strings 19 | 20 | + (NSArray *)matcherStrings { 21 | return @[@"beMemberOfClass:"]; 22 | } 23 | 24 | #pragma mark - Matching 25 | 26 | - (BOOL)evaluate { 27 | return [self.subject isMemberOfClass:self.targetClass]; 28 | } 29 | 30 | #pragma mark - Getting Failure Messages 31 | 32 | - (NSString *)failureMessageForShould { 33 | return [NSString stringWithFormat:@"expected subject to be member of %@, got %@", 34 | NSStringFromClass(self.targetClass), 35 | NSStringFromClass([self.subject class])]; 36 | } 37 | 38 | - (NSString *)description { 39 | return [NSString stringWithFormat:@"be member of %@", 40 | NSStringFromClass(self.targetClass)]; 41 | } 42 | 43 | #pragma mark - Configuring Matchers 44 | 45 | - (void)beMemberOfClass:(Class)aClass { 46 | self.targetClass = aClass; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeSubclassOfClassMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beSubclassOfClass:(Class)aClass; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeSubclassOfClassMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeSubclassOfClassMatcher() 11 | 12 | #pragma mark - Properties 13 | 14 | @property (nonatomic, assign) Class targetClass; 15 | 16 | @end 17 | 18 | @implementation KWBeSubclassOfClassMatcher 19 | 20 | #pragma mark - Getting Matcher Strings 21 | 22 | + (NSArray *)matcherStrings { 23 | return @[@"beSubclassOfClass:"]; 24 | } 25 | 26 | #pragma mark - Matching 27 | 28 | - (BOOL)evaluate { 29 | return [self.subject isSubclassOfClass:self.targetClass]; 30 | } 31 | 32 | #pragma mark - Getting Failure Messages 33 | 34 | - (NSString *)failureMessageForShould { 35 | return [NSString stringWithFormat:@"expected subject to be subclass of %@, got %@", 36 | NSStringFromClass(self.targetClass), 37 | NSStringFromClass([self.subject class])]; 38 | } 39 | 40 | - (NSString *)description { 41 | return [NSString stringWithFormat:@"be subclass of %@", 42 | NSStringFromClass(self.targetClass)]; 43 | } 44 | 45 | #pragma mark - Configuring Matchers 46 | 47 | - (void)beSubclassOfClass:(Class)aClass { 48 | self.targetClass = aClass; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeTrueMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beTrue; 15 | - (void)beFalse; 16 | - (void)beYes; 17 | - (void)beNo; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeTrueMatcher.h" 8 | 9 | @interface KWBeTrueMatcher() 10 | 11 | @property (nonatomic, readwrite) BOOL expectedValue; 12 | 13 | @end 14 | 15 | @implementation KWBeTrueMatcher 16 | 17 | #pragma mark - Getting Matcher Strings 18 | 19 | + (NSArray *)matcherStrings { 20 | return @[@"beTrue", @"beFalse", @"beYes", @"beNo"]; 21 | } 22 | 23 | #pragma mark - Matching 24 | 25 | - (BOOL)evaluate { 26 | if (![self.subject respondsToSelector:@selector(boolValue)]) 27 | [NSException raise:@"KWMatcherException" format:@"subject does not respond to -boolValue"]; 28 | 29 | return [self.subject boolValue] == self.expectedValue; 30 | } 31 | 32 | #pragma mark - Getting Failure Messages 33 | 34 | - (NSString *)failureMessageForShould { 35 | return [NSString stringWithFormat:@"expected subject to be %@", 36 | self.expectedValue ? @"true" : @"false"]; 37 | } 38 | 39 | - (NSString *)description { 40 | if (self.expectedValue == YES) { 41 | return @"be true"; 42 | } 43 | return @"be false"; 44 | } 45 | 46 | #pragma mark - Configuring Matchers 47 | 48 | - (void)beTrue { 49 | self.expectedValue = YES; 50 | } 51 | 52 | - (void)beFalse { 53 | self.expectedValue = NO; 54 | } 55 | 56 | - (void)beYes { 57 | self.expectedValue = YES; 58 | } 59 | 60 | - (void)beNo { 61 | self.expectedValue = NO; 62 | } 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeWithinMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beWithin:(id)aDistance of:(id)aValue; 15 | - (void)equal:(double)aValue withDelta:(double)aDelta; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeZeroMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beZero; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeZeroMatcher.h" 8 | #import "KWFormatter.h" 9 | #import "KWValue.h" 10 | 11 | @implementation KWBeZeroMatcher 12 | 13 | #pragma mark - Getting Matcher Strings 14 | 15 | + (NSArray *)matcherStrings { 16 | return @[@"beZero"]; 17 | } 18 | 19 | #pragma mark - Matching 20 | 21 | - (BOOL)evaluate { 22 | if ([self.subject isKindOfClass:[NSNumber class]]) { 23 | return [self.subject isEqualToNumber:@0]; 24 | } 25 | 26 | if ([self.subject respondsToSelector:@selector(numberValue)]) { 27 | return [[self.subject numberValue] isEqualToNumber:@0]; 28 | } 29 | 30 | return NO; 31 | } 32 | 33 | #pragma mark - Getting Failure Messages 34 | 35 | - (NSString *)failureMessageForShould { 36 | return [NSString stringWithFormat:@"expected subject to be zero, got %@", 37 | [KWFormatter formatObject:self.subject]]; 38 | } 39 | 40 | - (NSString *)failureMessageForShouldNot { 41 | return [NSString stringWithFormat:@"expected subject not to be zero"]; 42 | } 43 | 44 | - (NSString *)description { 45 | return @"be zero"; 46 | } 47 | 48 | #pragma mark - Configuring Matchers 49 | 50 | - (void)beZero { 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBlockRaiseMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)raise; 15 | - (void)raiseWithName:(NSString *)aName; 16 | - (void)raiseWithReason:(NSString *)aReason; 17 | - (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWChangeMatcher.h 3 | // Kiwi 4 | // 5 | // Copyright (c) 2013 Eloy Durán . 6 | // All rights reserved. 7 | // 8 | 9 | #import "KWMatcher.h" 10 | 11 | typedef NSInteger (^KWChangeMatcherCountBlock)(); 12 | 13 | @interface KWChangeMatcher : KWMatcher 14 | 15 | // Expect _any_ change. 16 | - (void)change:(KWChangeMatcherCountBlock)countBlock; 17 | 18 | // Expect changes by a specific amount. 19 | - (void)change:(KWChangeMatcherCountBlock)countBlock by:(NSInteger)expectedDifference; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWConformToProtocolMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)conformToProtocol:(Protocol *)aProtocol; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWConformToProtocolMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWConformToProtocolMatcher() 11 | 12 | @property (nonatomic, assign) Protocol *protocol; 13 | 14 | @end 15 | 16 | @implementation KWConformToProtocolMatcher 17 | 18 | #pragma mark - Getting Matcher Strings 19 | 20 | + (NSArray *)matcherStrings { 21 | return @[@"conformToProtocol:"]; 22 | } 23 | 24 | #pragma mark - Matching 25 | 26 | - (BOOL)evaluate { 27 | return [self.subject conformsToProtocol:self.protocol]; 28 | } 29 | 30 | #pragma mark - Getting Failure Messages 31 | 32 | - (NSString *)failureMessageForShould { 33 | return [NSString stringWithFormat:@"expected subject to conform to %@ protocol", 34 | NSStringFromProtocol(self.protocol)]; 35 | } 36 | 37 | - (NSString *)description { 38 | return [NSString stringWithFormat:@"conform to %@ protocol", NSStringFromProtocol(self.protocol)]; 39 | } 40 | 41 | #pragma mark - Configuring Matchers 42 | 43 | - (void)conformToProtocol:(Protocol *)aProtocol { 44 | self.protocol = aProtocol; 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWContainMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | #import "KWMatchVerifier.h" 10 | 11 | @interface KWContainMatcher : KWMatcher 12 | 13 | #pragma mark - Configuring Matchers 14 | 15 | - (void)contain:(id)anObject; 16 | - (void)containObjectsInArray:(NSArray *)anArray; 17 | 18 | @end 19 | 20 | @interface KWMatchVerifier(KWContainMatcherAdditions) 21 | 22 | #pragma mark - Verifying 23 | 24 | - (void)containObjects:(id)firstObject, ... NS_REQUIRES_NIL_TERMINATION; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWContainStringMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Kristopher Johnson on 4/28/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KiwiConfiguration.h" 10 | #import "KWMatcher.h" 11 | 12 | // Kiwi matcher for determining whether a string contains an expected substring 13 | // 14 | // Examples: 15 | // 16 | // [[@"Hello, world!" should] containString:@"world"]; 17 | // [[@"Hello, world!" shouldNot] containString:@"xyzzy"]; 18 | // 19 | // [[@"Hello, world!" should] containString:@"WORLD" 20 | // options:NSCaseInsensitiveSearch]; 21 | // 22 | // [[@"Hello, world!" should] startWithString:@"Hello,"]; 23 | // [[@"Hello, world!" should] endWithString:@"world!"]; 24 | 25 | @interface KWContainStringMatcher : KWMatcher 26 | 27 | // Match if subject contains specified substring 28 | - (void)containString:(NSString *)string; 29 | 30 | // Match if subject contains specified substring, using specified comparison options 31 | - (void)containString:(NSString *)string options:(NSStringCompareOptions)options; 32 | 33 | // Match if subject starts with the specified prefix 34 | - (void)startWithString:(NSString *)prefix; 35 | 36 | // Match if subject ends with the specified prefix 37 | - (void)endWithString:(NSString *)suffix; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWEqualMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)equal:(id)anObject; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWEqualMatcher.h" 8 | #import "KWFormatter.h" 9 | #import "KWValue.h" 10 | 11 | @interface KWEqualMatcher() 12 | 13 | #pragma mark - Properties 14 | 15 | @property (nonatomic, readwrite, strong) id otherSubject; 16 | 17 | @end 18 | 19 | @implementation KWEqualMatcher 20 | 21 | #pragma mark - Initializing 22 | 23 | 24 | #pragma mark - Properties 25 | 26 | @synthesize otherSubject; 27 | 28 | #pragma mark - Getting Matcher Strings 29 | 30 | + (NSArray *)matcherStrings { 31 | return @[@"equal:"]; 32 | } 33 | 34 | #pragma mark - Matching 35 | 36 | - (BOOL)evaluate { 37 | /** handle this as a special case; KWValue supports NSNumber equality but not vice-versa **/ 38 | if ([self.subject isKindOfClass:[NSNumber class]] && [self.otherSubject isKindOfClass:[KWValue class]]) { 39 | return [self.otherSubject isEqual:self.subject]; 40 | } 41 | return [self.subject isEqual:self.otherSubject]; 42 | } 43 | 44 | #pragma mark - Getting Failure Messages 45 | 46 | - (NSString *)failureMessageForShould { 47 | return [NSString stringWithFormat:@"expected subject to equal %@, got %@", 48 | [KWFormatter formatObjectIncludingClass:self.otherSubject], 49 | [KWFormatter formatObjectIncludingClass:self.subject]]; 50 | } 51 | 52 | - (NSString *)failureMessageForShouldNot { 53 | return [NSString stringWithFormat:@"expected subject not to equal %@", 54 | [KWFormatter formatObjectIncludingClass:self.otherSubject]]; 55 | } 56 | 57 | - (NSString *)description 58 | { 59 | return [NSString stringWithFormat:@"equal %@", [KWFormatter formatObjectIncludingClass:self.otherSubject]]; 60 | } 61 | 62 | #pragma mark - Configuring Matchers 63 | 64 | - (void)equal:(id)anObject { 65 | self.otherSubject = anObject; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWGenericMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Allen Ding on 1/31/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KWGenericMatchEvaluator : NSObject 12 | 13 | + (BOOL)isGenericMatcher:(id)object; 14 | 15 | + (BOOL)genericMatcher:(id)matcher matches:(id)object; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.m: -------------------------------------------------------------------------------- 1 | // 2 | // KWGenericMatcher.m 3 | // Kiwi 4 | // 5 | // Created by Allen Ding on 1/31/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWGenericMatchEvaluator.h" 10 | #import "KWStringUtilities.h" 11 | #import "KWObjCUtilities.h" 12 | #import 13 | #import "KWGenericMatcher.h" 14 | 15 | @implementation KWGenericMatchEvaluator 16 | 17 | // Returns true only if the object has a method with the signature "- (BOOL)matches:(id)object" 18 | + (BOOL)isGenericMatcher:(id)object { 19 | Class theClass = object_getClass(object); 20 | 21 | if (theClass == NULL) { 22 | return NO; 23 | } 24 | Method method = class_getInstanceMethod(theClass, @selector(matches:)); 25 | 26 | if (method == NULL) { 27 | return NO; 28 | } 29 | 30 | const char *cEncoding = method_getTypeEncoding(method); 31 | 32 | if (cEncoding == NULL) { 33 | return NO; 34 | } 35 | 36 | NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:cEncoding]; 37 | 38 | if (!KWObjCTypeEqualToObjCType(@encode(BOOL), [signature methodReturnType])) { 39 | return NO; 40 | } 41 | 42 | if ([signature numberOfArguments] != 3) { 43 | return NO; 44 | } 45 | 46 | if (!KWObjCTypeEqualToObjCType(@encode(id), [signature getArgumentTypeAtIndex:2])) { 47 | return NO; 48 | } 49 | 50 | return YES; 51 | } 52 | 53 | + (BOOL)genericMatcher:(id)matcher matches:(id)object { 54 | NSString *targetEncoding = KWEncodingWithObjCTypes(@encode(BOOL), @encode(id), @encode(SEL), @encode(id), nil); 55 | NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:[targetEncoding UTF8String]]; 56 | NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; 57 | [invocation setSelector:@selector(matches:)]; 58 | [invocation setArgument:&object atIndex:2]; 59 | [invocation invokeWithTarget:matcher]; 60 | BOOL result = NO; 61 | [invocation getReturnValue:&result]; 62 | return result; 63 | } 64 | 65 | @end 66 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWGenericMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatcher.h" 11 | 12 | @protocol KWGenericMatching 13 | 14 | - (BOOL)matches:(id)object; 15 | 16 | @end 17 | 18 | @interface KWGenericMatcher : KWMatcher 19 | 20 | #pragma mark - Configuring Matchers 21 | 22 | - (void)match:(id)aMatcher; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // KWGenericMatcher.m 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWGenericMatcher.h" 10 | #import "KWGenericMatchEvaluator.h" 11 | 12 | @interface KWGenericMatcher () 13 | 14 | @property (nonatomic, strong) id matcher; 15 | 16 | @end 17 | 18 | @implementation KWGenericMatcher 19 | 20 | #pragma mark - Matching 21 | 22 | - (BOOL)evaluate { 23 | return [KWGenericMatchEvaluator genericMatcher:self.matcher matches:self.subject]; 24 | } 25 | 26 | - (NSString *)failureMessageForShould { 27 | return [NSString stringWithFormat:@"expected subject to match %@", self.matcher]; 28 | } 29 | 30 | - (NSString *)description 31 | { 32 | return [NSString stringWithFormat:@"match %@", [self.matcher description]]; 33 | } 34 | 35 | #pragma mark - Getting Matcher Strings 36 | 37 | + (NSArray *)matcherStrings { 38 | return @[@"match:"]; 39 | } 40 | 41 | #pragma mark - Configuring Matchers 42 | 43 | - (void)match:(id)aMatcher; 44 | { 45 | self.matcher = aMatcher; 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+KiwiAdditions.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSObject (KiwiGenericMatchingAdditions) 12 | 13 | - (BOOL)isEqualOrMatches:(id)object DEPRECATED_ATTRIBUTE; 14 | 15 | @end 16 | 17 | @interface NSArray (KiwiGenericMatchingAdditions) 18 | 19 | - (BOOL)containsObjectEqualToOrMatching:(id)object DEPRECATED_ATTRIBUTE; 20 | - (BOOL)containsObjectMatching:(id)matcher DEPRECATED_ATTRIBUTE; 21 | 22 | @end 23 | 24 | @interface NSSet (KiwiGenericMatchingAdditions) 25 | 26 | - (BOOL)containsObjectEqualToOrMatching:(id)object DEPRECATED_ATTRIBUTE; 27 | 28 | @end 29 | 30 | @interface NSOrderedSet (KiwiGenericMatchingAdditions) 31 | 32 | - (BOOL)containsObjectEqualToOrMatching:(id)object DEPRECATED_ATTRIBUTE; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+KiwiAdditions.m 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWGenericMatchingAdditions.h" 10 | #import "KWGenericMatcher.h" 11 | #import "KWGenericMatchEvaluator.h" 12 | 13 | @implementation NSObject (KiwiGenericMatchingAdditions) 14 | 15 | - (BOOL)isEqualOrMatches:(id)object { 16 | if ([KWGenericMatchEvaluator isGenericMatcher:self]) { 17 | return [KWGenericMatchEvaluator genericMatcher:self matches:object]; 18 | } 19 | return [self isEqual:object]; 20 | } 21 | 22 | @end 23 | 24 | @implementation NSArray (KiwiGenericMatchingAdditions) 25 | 26 | - (BOOL)containsObjectEqualToOrMatching:(id)object { 27 | if ([KWGenericMatchEvaluator isGenericMatcher:object]) { 28 | return [self containsObjectMatching:object]; 29 | } 30 | return [self containsObject:object]; 31 | } 32 | 33 | - (BOOL)containsObjectMatching:(id)matcher { 34 | NSIndexSet *indexSet = [self indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 35 | BOOL matches = [KWGenericMatchEvaluator genericMatcher:matcher matches:obj]; 36 | if (matches) { 37 | *stop = YES; 38 | } 39 | return matches; 40 | }]; 41 | 42 | return (indexSet.count > 0); 43 | } 44 | 45 | @end 46 | 47 | @implementation NSSet (KiwiGenericMatchingAdditions) 48 | 49 | - (BOOL)containsObjectEqualToOrMatching:(id)object { 50 | if ([KWGenericMatchEvaluator isGenericMatcher:object]) { 51 | return [[self allObjects] containsObjectMatching:object]; 52 | } 53 | return [self containsObject:object]; 54 | } 55 | 56 | @end 57 | 58 | @implementation NSOrderedSet (KiwiGenericMatchingAdditions) 59 | 60 | - (BOOL)containsObjectEqualToOrMatching:(id)object { 61 | if ([KWGenericMatchEvaluator isGenericMatcher:object]) { 62 | return [[self array] containsObjectMatching:object]; 63 | } 64 | return [self containsObject:object]; 65 | } 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWCountType.h" 9 | #import "KWMatcher.h" 10 | #import "KWMatchVerifier.h" 11 | 12 | @interface KWHaveMatcher : KWMatcher 13 | 14 | #pragma mark - Configuring Matchers 15 | 16 | - (void)haveCountOf:(NSUInteger)aCount; 17 | - (void)haveCountOfAtLeast:(NSUInteger)aCount; 18 | - (void)haveCountOfAtMost:(NSUInteger)aCount; 19 | - (void)haveLengthOf:(NSUInteger)aCount; 20 | - (void)haveLengthOfAtLeast:(NSUInteger)aCount; 21 | - (void)haveLengthOfAtMost:(NSUInteger)aCount; 22 | - (void)have:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; 23 | - (void)haveAtLeast:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; 24 | - (void)haveAtMost:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; 25 | 26 | @end 27 | 28 | @protocol KWContainmentCountMatcherTerminals 29 | 30 | #pragma mark - Terminals 31 | 32 | - (id)objects; 33 | - (id)items; 34 | - (id)elements; 35 | 36 | @end 37 | 38 | #pragma mark - Verifying 39 | 40 | @interface KWMatchVerifier(KWHaveMatcherAdditions) 41 | 42 | #pragma mark - Invocation Capturing Methods 43 | 44 | - (id)have:(NSUInteger)aCount; 45 | - (id)haveAtLeast:(NSUInteger)aCount; 46 | - (id)haveAtMost:(NSUInteger)aCount; 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWHaveValueMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatcher.h" 11 | 12 | @interface KWHaveValueMatcher : KWMatcher 13 | 14 | #pragma mark - Configuring Matchers 15 | 16 | - (void)haveValue:(id)value forKey:(NSString *)key; 17 | - (void)haveValue:(id)value forKeyPath:(NSString *)keyPath; 18 | - (void)haveValueForKey:(NSString *)key; 19 | - (void)haveValueForKeyPath:(NSString *)keyPath; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWInequalityMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beLessThan:(id)aValue; 15 | - (void)beLessThanOrEqualTo:(id)aValue; 16 | - (void)beGreaterThan:(id)aValue; 17 | - (void)beGreaterThanOrEqualTo:(id)aValue; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWNilMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWBeNilMatcher.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 14/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatcher.h" 11 | 12 | @interface KWNilMatcher : KWMatcher 13 | 14 | - (void)beNil; 15 | - (void)beNonNil; 16 | 17 | - (void)beNil:(BOOL)workaroundArgument; 18 | - (void)beNonNil:(BOOL)workaroundArgument; 19 | 20 | + (BOOL)verifyNilSubject; 21 | + (BOOL)verifyNonNilSubject; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWNotificationMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWNotificationMatcher.h 3 | // 4 | // Created by Paul Zabelin on 7/12/12. 5 | // Copyright (c) 2012 Blazing Cloud, Inc. All rights reserved. 6 | // 7 | 8 | #import "KWMatcher.h" 9 | 10 | typedef void (^PostedNotificationBlock)(NSNotification* note); 11 | 12 | @interface KWNotificationMatcher : KWMatcher 13 | 14 | - (void)bePosted; 15 | - (void)bePostedWithObject:(id)object; 16 | - (void)bePostedWithUserInfo:(NSDictionary *)userInfo; 17 | - (void)bePostedWithObject:(id)object andUserInfo:(NSDictionary *)userInfo; 18 | - (void)bePostedEvaluatingBlock:(PostedNotificationBlock)block; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWRaiseMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWRaiseMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)raiseWhenSent:(SEL)aSelector DEPRECATED_ATTRIBUTE; 15 | - (void)raiseWithName:(NSString *)aName whenSent:(SEL)aSelector DEPRECATED_ATTRIBUTE; 16 | - (void)raiseWithReason:(NSString *)aReason whenSent:(SEL)aSelector DEPRECATED_ATTRIBUTE; 17 | - (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason whenSent:(SEL)aSelector DEPRECATED_ATTRIBUTE; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWRegularExpressionPatternMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Kristopher Johnson on 4/11/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KiwiConfiguration.h" 10 | #import "KWMatcher.h" 11 | 12 | @interface KWRegularExpressionPatternMatcher : KWMatcher 13 | 14 | - (void)matchPattern:(NSString *)pattern; 15 | 16 | - (void)matchPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWRespondToSelectorMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)respondToSelector:(SEL)aSelector; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWRespondToSelectorMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWRespondToSelectorMatcher() 11 | 12 | #pragma mark - Properties 13 | 14 | @property (nonatomic, assign) SEL selector; 15 | 16 | @end 17 | 18 | @implementation KWRespondToSelectorMatcher 19 | 20 | #pragma mark - Getting Matcher Strings 21 | 22 | + (NSArray *)matcherStrings { 23 | return @[@"respondToSelector:"]; 24 | } 25 | 26 | #pragma mark - Matching 27 | 28 | - (BOOL)evaluate { 29 | return [self.subject respondsToSelector:self.selector]; 30 | } 31 | 32 | #pragma mark - Getting Failure Messages 33 | 34 | - (NSString *)failureMessageForShould { 35 | return [NSString stringWithFormat:@"expected subject to respond to -%@", 36 | NSStringFromSelector(self.selector)]; 37 | } 38 | 39 | - (NSString *)description { 40 | return [NSString stringWithFormat:@"respond to -%@", NSStringFromSelector(self.selector)]; 41 | } 42 | 43 | #pragma mark - Configuring Matchers 44 | 45 | - (void)respondToSelector:(SEL)aSelector { 46 | self.selector = aSelector; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWStringContainsMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Stewart Gleadow on 7/06/12. 6 | // Copyright (c) 2012 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWGenericMatcher.h" 11 | 12 | @interface KWStringContainsMatcher : NSObject 13 | 14 | + (id)matcherWithSubstring:(NSString *)aSubstring DEPRECATED_ATTRIBUTE; 15 | - (id)initWithSubstring:(NSString *)aSubstring DEPRECATED_ATTRIBUTE; 16 | 17 | @end 18 | 19 | #define hasSubstring(substring) [KWStringContainsMatcher matcherWithSubstring:substring] 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // StringContainsMatcher.m 3 | // Kiwi 4 | // 5 | // Created by Stewart Gleadow on 7/06/12. 6 | // Copyright (c) 2012 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWStringContainsMatcher.h" 10 | 11 | @interface KWStringContainsMatcher(){} 12 | @property (nonatomic, copy) NSString *substring; 13 | @end 14 | 15 | @implementation KWStringContainsMatcher 16 | 17 | + (id)matcherWithSubstring:(NSString *)aSubstring { 18 | return [[self alloc] initWithSubstring:aSubstring]; 19 | } 20 | 21 | - (id)initWithSubstring:(NSString *)aSubstring { 22 | self = [super init]; 23 | if (self) { 24 | _substring = [aSubstring copy]; 25 | } 26 | return self; 27 | } 28 | 29 | 30 | - (BOOL)matches:(id)item { 31 | if (![item respondsToSelector:@selector(rangeOfString:)]) { 32 | return NO; 33 | } 34 | 35 | return [item rangeOfString:self.substring].location != NSNotFound; 36 | } 37 | 38 | - (NSString *)description { 39 | return [NSString stringWithFormat:@"a string with substring '%@'", self.substring]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // StringPrefixMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 17/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KWStringPrefixMatcher : NSObject 12 | 13 | + (id)matcherWithPrefix:(NSString *)aPrefix; 14 | - (id)initWithPrefix:(NSString *)aPrefix; 15 | 16 | @end 17 | 18 | #define hasPrefix(prefix) [KWStringPrefixMatcher matcherWithPrefix:prefix] 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // StringPrefixMatcher.m 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 17/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWStringPrefixMatcher.h" 10 | 11 | @interface KWStringPrefixMatcher(){} 12 | @property (nonatomic, copy) NSString *prefix; 13 | @end 14 | 15 | @implementation KWStringPrefixMatcher 16 | 17 | + (id)matcherWithPrefix:(NSString *)aPrefix { 18 | return [[self alloc] initWithPrefix:aPrefix]; 19 | } 20 | 21 | - (id)initWithPrefix:(NSString *)aPrefix { 22 | self = [super init]; 23 | if (self) { 24 | _prefix = [aPrefix copy]; 25 | } 26 | return self; 27 | } 28 | 29 | 30 | - (BOOL)matches:(id)item { 31 | if (![item respondsToSelector:@selector(hasPrefix:)]) 32 | return NO; 33 | 34 | return [item hasPrefix:self.prefix]; 35 | } 36 | 37 | - (NSString *)description { 38 | return [NSString stringWithFormat:@"a string with prefix '%@'", self.prefix]; 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWUserDefinedMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 16/06/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatcher.h" 11 | 12 | typedef BOOL (^KWUserDefinedMatcherBlock)(); 13 | 14 | @interface KWUserDefinedMatcher : KWMatcher 15 | 16 | @property (nonatomic, assign) SEL selector; 17 | @property (nonatomic, copy) NSString *failureMessageForShould; 18 | @property (nonatomic, copy) NSString *failureMessageForShouldNot; 19 | @property (nonatomic, copy) KWUserDefinedMatcherBlock matcherBlock; 20 | @property (nonatomic, copy) NSString *description; 21 | 22 | + (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; 23 | - (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; 24 | @end 25 | 26 | #pragma mark - 27 | 28 | typedef NSString * (^KWUserDefinedMatcherMessageBlock)(id); 29 | 30 | @interface KWUserDefinedMatcherBuilder : NSObject 31 | { 32 | KWUserDefinedMatcher *matcher; 33 | KWUserDefinedMatcherMessageBlock failureMessageForShouldBlock; 34 | KWUserDefinedMatcherMessageBlock failureMessageForShouldNotBlock; 35 | NSString *description; 36 | } 37 | @property (nonatomic, copy, readonly) NSString *key; 38 | 39 | + (id)builder; 40 | + (id)builderForSelector:(SEL)aSelector; 41 | - (id)initWithSelector:(SEL)aSelector; 42 | 43 | #pragma mark - Configuring The Matcher 44 | 45 | - (void)match:(KWUserDefinedMatcherBlock)block; 46 | - (void)failureMessageForShould:(KWUserDefinedMatcherMessageBlock)block; 47 | - (void)failureMessageForShouldNot:(KWUserDefinedMatcherMessageBlock)block; 48 | - (void)description:(NSString *)description; 49 | 50 | #pragma mark - Buiding The Matcher 51 | 52 | - (KWUserDefinedMatcher *)buildMatcherWithSubject:(id)subject; 53 | @end 54 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KiwiMockAdditions 10 | 11 | #pragma mark - Creating Mocks 12 | 13 | + (id)mock; 14 | + (id)mockWithName:(NSString *)aName; 15 | 16 | + (id)nullMock; 17 | + (id)nullMockWithName:(NSString *)aName; 18 | 19 | @end 20 | 21 | @interface NSObject(KiwiMockAdditions) 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSObject+KiwiMockAdditions.h" 8 | #import "KWMock.h" 9 | 10 | @implementation NSObject(KiwiMockAdditions) 11 | 12 | #pragma mark - Creating Mocks 13 | 14 | + (id)mock { 15 | return [KWMock mockForClass:[self class]]; 16 | } 17 | 18 | + (id)mockWithName:(NSString *)aName { 19 | return [KWMock mockWithName:aName forClass:[self class]]; 20 | } 21 | 22 | + (id)nullMock { 23 | return [KWMock nullMockForClass:[self class]]; 24 | } 25 | 26 | + (id)nullMockWithName:(NSString *)aName { 27 | return [KWMock nullMockWithName:aName forClass:[self class]]; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @interface KWAfterAllNode : KWBlockNode 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWAfterAllNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | 10 | @implementation KWAfterAllNode 11 | 12 | #pragma mark - Initializing 13 | 14 | + (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { 15 | return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; 16 | } 17 | 18 | #pragma mark - Accepting Visitors 19 | 20 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 21 | [aVisitor visitAfterAllNode:self]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @interface KWAfterEachNode : KWBlockNode 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWAfterEachNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | 10 | @implementation KWAfterEachNode 11 | 12 | #pragma mark - Initializing 13 | 14 | + (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { 15 | return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; 16 | } 17 | 18 | #pragma mark - Accepting Visitors 19 | 20 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 21 | [aVisitor visitAfterEachNode:self]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @interface KWBeforeAllNode : KWBlockNode 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeforeAllNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | 10 | @implementation KWBeforeAllNode 11 | 12 | #pragma mark - Initializing 13 | 14 | + (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { 15 | return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; 16 | } 17 | 18 | #pragma mark - Accepting Visitors 19 | 20 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 21 | [aVisitor visitBeforeAllNode:self]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @interface KWBeforeEachNode : KWBlockNode 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeforeEachNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | 10 | @implementation KWBeforeEachNode 11 | 12 | #pragma mark - Initializing 13 | 14 | + (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { 15 | return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; 16 | } 17 | 18 | #pragma mark - Accepting Visitors 19 | 20 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 21 | [aVisitor visitBeforeEachNode:self]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBlockNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlock.h" 9 | 10 | @class KWCallSite; 11 | 12 | @interface KWBlockNode : NSObject 13 | 14 | #pragma mark - Initializing 15 | 16 | - (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block; 17 | 18 | #pragma mark - Getting Call Sites 19 | 20 | @property (nonatomic, strong, readonly) KWCallSite *callSite; 21 | 22 | #pragma mark - Getting Descriptions 23 | 24 | @property (nonatomic, copy) NSString *description; 25 | 26 | #pragma mark - Getting Blocks 27 | 28 | @property (nonatomic, copy, readonly) void (^block)(void); 29 | 30 | #pragma mark - Performing blocks 31 | 32 | - (void)performBlock; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBlockNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBlockNode.h" 8 | 9 | @implementation KWBlockNode 10 | 11 | #pragma mark - Initializing 12 | 13 | - (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block { 14 | self = [super init]; 15 | if (self) { 16 | _callSite = aCallSite; 17 | _description = aDescription; 18 | _block = [block copy]; 19 | } 20 | 21 | return self; 22 | } 23 | 24 | - (void)performBlock { 25 | if (self.block != nil) { self.block(); } 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWExampleNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWContextNode; 10 | @protocol KWExampleNodeVisitor; 11 | 12 | @protocol KWExampleNode 13 | 14 | #pragma mark - Accepting Visitors 15 | 16 | - (void)acceptExampleNodeVisitor:(id)aVisitor; 17 | 18 | @optional 19 | 20 | - (NSArray *)contextStack; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWItNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @class KWPendingNode; 12 | @class KWExample; 13 | @class KWContextNode; 14 | 15 | @interface KWItNode : KWBlockNode 16 | 17 | @property (nonatomic, strong) KWExample *example; 18 | @property (nonatomic, weak, readonly) KWContextNode *context; 19 | 20 | #pragma mark - Initializing 21 | 22 | + (id)itNodeWithCallSite:(KWCallSite *)aCallSite 23 | description:(NSString *)aDescription 24 | context:(KWContextNode *)context 25 | block:(void (^)(void))block; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWItNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWItNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | #import "KWExample.h" 10 | #import "KWVerifying.h" 11 | #import "KWContextNode.h" 12 | 13 | @interface KWItNode () 14 | 15 | @property (nonatomic, weak) KWContextNode *context; 16 | 17 | @end 18 | 19 | @implementation KWItNode 20 | 21 | #pragma mark - Initializing 22 | 23 | + (id)itNodeWithCallSite:(KWCallSite *)aCallSite 24 | description:(NSString *)aDescription 25 | context:(KWContextNode *)context 26 | block:(void (^)(void))block { 27 | KWItNode *itNode = [[self alloc] initWithCallSite:aCallSite description:aDescription block:block]; 28 | itNode.context = context; 29 | return itNode; 30 | } 31 | 32 | #pragma mark - Accepting Visitors 33 | 34 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 35 | [aVisitor visitItNode:self]; 36 | } 37 | 38 | #pragma mark - Runtime Description support 39 | 40 | - (NSString *)description { 41 | NSString *description = [super description]; 42 | if (description == nil) { 43 | description = [self.example generateDescriptionForAnonymousItNode]; 44 | } 45 | return description; 46 | } 47 | 48 | #pragma mark - Accessing the context stack 49 | 50 | - (NSArray *)contextStack { 51 | NSMutableArray *contextStack = [NSMutableArray array]; 52 | 53 | KWContextNode *currentContext = _context; 54 | 55 | while (currentContext) { 56 | [contextStack addObject:currentContext]; 57 | currentContext = currentContext.parentContext; 58 | } 59 | return contextStack; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWLetNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExampleNode.h" 9 | 10 | @interface KWLetNode : NSObject 11 | 12 | - (instancetype)initWithSymbolName:(NSString *)aSymbolName objectRef:(id *)anObjectRef block:(id (^)(void))block; 13 | + (instancetype)letNodeWithSymbolName:(NSString *)aSymbolName objectRef:(id *)anObjectRef block:(id (^)(void))block; 14 | 15 | @property (nonatomic, copy) NSString *symbolName; 16 | @property (nonatomic, copy) id (^block)(void); 17 | @property (nonatomic, readonly) __autoreleasing id *objectRef; 18 | 19 | - (id)evaluate; 20 | - (void)evaluateTree; 21 | 22 | - (void)addLetNode:(KWLetNode *)aNode; 23 | - (void)unlink; 24 | 25 | // The parent/child relationship describes let nodes declared in nested 26 | // contexts -- evaluating a node returns the value of the deepest 27 | // evaluated child. 28 | @property (nonatomic, readonly, weak) KWLetNode *parent; 29 | @property (nonatomic, readonly, strong) KWLetNode *child; 30 | 31 | // The next/previous relationship describes the order in which nodes 32 | // of different symbols were declared. 33 | @property (nonatomic, readonly, strong) KWLetNode *next; 34 | @property (nonatomic, readonly, weak) KWLetNode *previous; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWPendingNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExampleNode.h" 9 | 10 | @class KWContextNode; 11 | @class KWCallSite; 12 | 13 | @interface KWPendingNode : NSObject 14 | 15 | @property (nonatomic, readonly, strong) KWContextNode *context; 16 | 17 | #pragma mark - Initializing 18 | 19 | - (id)initWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription; 20 | 21 | + (id)pendingNodeWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription; 22 | 23 | #pragma mark - Getting Call Sites 24 | 25 | @property (nonatomic, readonly) KWCallSite *callSite; 26 | 27 | #pragma mark - Getting Descriptions 28 | 29 | @property (nonatomic, readonly) NSString *description; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWPendingNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWPendingNode.h" 8 | 9 | #import "KWCallSite.h" 10 | #import "KWContextNode.h" 11 | #import "KWExampleNodeVisitor.h" 12 | 13 | @implementation KWPendingNode 14 | 15 | #pragma mark - Initializing 16 | 17 | - (id)initWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription { 18 | self = [super init]; 19 | if (self) { 20 | _callSite = aCallSite; 21 | _description = [aDescription copy]; 22 | _context = context; 23 | } 24 | 25 | return self; 26 | } 27 | 28 | + (id)pendingNodeWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription { 29 | return [[self alloc] initWithCallSite:aCallSite context:context description:aDescription]; 30 | } 31 | 32 | #pragma mark - Accepting Visitors 33 | 34 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 35 | [aVisitor visitPendingNode:self]; 36 | } 37 | 38 | #pragma mark - Accessing the context stack 39 | 40 | - (NSArray *)contextStack 41 | { 42 | NSMutableArray *contextStack = [NSMutableArray array]; 43 | 44 | KWContextNode *currentContext = _context; 45 | 46 | while (currentContext) { 47 | [contextStack addObject:currentContext]; 48 | currentContext = currentContext.parentContext; 49 | } 50 | return contextStack; 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExampleNode.h" 9 | 10 | @class KWCallSite; 11 | 12 | @interface KWRegisterMatchersNode : NSObject 13 | 14 | #pragma mark - Initializing 15 | 16 | - (id)initWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; 17 | 18 | + (id)registerMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; 19 | 20 | #pragma mark - Getting Call Sites 21 | 22 | @property (nonatomic, readonly) KWCallSite *callSite; 23 | 24 | #pragma mark - Getting Namespace Prefixes 25 | 26 | @property (nonatomic, readonly) NSString *namespacePrefix; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWRegisterMatchersNode.h" 8 | 9 | #import "KWCallSite.h" 10 | #import "KWExampleNodeVisitor.h" 11 | 12 | @implementation KWRegisterMatchersNode 13 | 14 | #pragma mark - Initializing 15 | 16 | - (id)initWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { 17 | self = [super init]; 18 | if (self) { 19 | _callSite = aCallSite; 20 | _namespacePrefix = [aNamespacePrefix copy]; 21 | } 22 | 23 | return self; 24 | } 25 | 26 | + (id)registerMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { 27 | return [[self alloc] initWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; 28 | } 29 | 30 | #pragma mark - Accepting Visitors 31 | 32 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 33 | [aVisitor visitRegisterMatchersNode:self]; 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Stubbing/KWIntercept.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import 9 | 10 | @class KWMessagePattern; 11 | @class KWStub; 12 | 13 | #pragma mark - Getting Forwarding Implementations 14 | 15 | IMP KWRegularForwardingImplementation(void); 16 | IMP KWStretForwardingImplementation(void); 17 | IMP KWForwardingImplementationForMethodEncoding(const char* encoding); 18 | 19 | #pragma mark - Getting Intercept Class Information 20 | 21 | BOOL KWObjectIsClass(id anObject); 22 | BOOL KWClassIsInterceptClass(Class aClass); 23 | NSString *KWInterceptClassNameForClass(Class aClass); 24 | Class KWInterceptClassForCanonicalClass(Class canonicalClass); 25 | Class KWRealClassForClass(Class aClass); 26 | 27 | #pragma mark - Enabling Intercepting 28 | 29 | Class KWSetupObjectInterceptSupport(id anObject); 30 | void KWSetupMethodInterceptSupport(Class interceptClass, SEL aSelector); 31 | 32 | #pragma mark - Managing Stubs & Spies 33 | void KWClearStubsAndSpies(void); 34 | 35 | #pragma mark - Managing Objects Stubs 36 | 37 | void KWAssociateObjectStub(id anObject, KWStub *aStub, BOOL overrideExisting); 38 | void KWClearObjectStubs(id anObject); 39 | void KWClearAllObjectStubs(void); 40 | 41 | #pragma mark - Managing Message Spies 42 | 43 | void KWAssociateMessageSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern); 44 | void KWClearObjectSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern); 45 | void KWClearAllMessageSpies(void); 46 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Stubbing/KWStub.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWMessagePattern; 10 | 11 | @interface KWStub : NSObject 12 | 13 | #pragma mark - Initializing 14 | 15 | - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern; 16 | - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue; 17 | - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(NSArray *params))aBlock; 18 | - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; 19 | 20 | + (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern; 21 | + (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue; 22 | + (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(NSArray *params))aBlock; 23 | + (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; 24 | 25 | #pragma mark - Properties 26 | 27 | @property (nonatomic, readonly) KWMessagePattern *messagePattern; 28 | @property (nonatomic, readonly) id value; 29 | @property (nonatomic, readonly) id returnValueTimes; 30 | @property (nonatomic, readonly) int returnedValueTimes; 31 | @property (nonatomic, readonly) id secondValue; 32 | 33 | #pragma mark - Processing Invocations 34 | 35 | - (BOOL)processInvocation:(NSInvocation *)anInvocation; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWAsyncVerifier.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatchVerifier.h" 11 | #import "KWProbe.h" 12 | 13 | #define kKW_DEFAULT_PROBE_TIMEOUT 1.0 14 | 15 | @class KWAsyncMatcherProbe; 16 | 17 | 18 | @interface KWAsyncVerifier : KWMatchVerifier 19 | 20 | @property (nonatomic, assign) NSTimeInterval timeout; 21 | @property (nonatomic, assign) BOOL shouldWait; 22 | 23 | + (id)asyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter probeTimeout:(NSTimeInterval)probeTimeout shouldWait:(BOOL)shouldWait; 24 | - (void)verifyWithProbe:(KWAsyncMatcherProbe *)aProbe; 25 | 26 | @end 27 | 28 | 29 | @interface KWAsyncMatcherProbe : NSObject 30 | 31 | @property (nonatomic, assign) BOOL matchResult; 32 | @property (nonatomic, readonly) id matcher; 33 | 34 | - (id)initWithMatcher:(id)aMatcher; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExpectationType.h" 9 | #import "KWVerifying.h" 10 | 11 | @class KWCallSite; 12 | 13 | @protocol KWReporting; 14 | 15 | @interface KWExistVerifier : NSObject 16 | 17 | #pragma mark - Initializing 18 | 19 | - (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter; 20 | 21 | + (id)existVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter; 22 | 23 | #pragma mark - Properties 24 | 25 | @property (nonatomic, strong) id subject; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExpectationType.h" 9 | #import "KWVerifying.h" 10 | 11 | @class KWCallSite; 12 | @class KWMatcherFactory; 13 | 14 | @protocol KWMatching; 15 | @protocol KWReporting; 16 | 17 | @interface KWMatchVerifier : NSObject 18 | 19 | #pragma mark - Properties 20 | 21 | @property (nonatomic, readonly) KWExpectationType expectationType; 22 | 23 | @property (nonatomic, readonly) KWMatcherFactory *matcherFactory; 24 | @property (nonatomic, readonly) id reporter; 25 | 26 | @property (nonatomic, strong) id subject; 27 | 28 | 29 | #pragma mark - Initializing 30 | 31 | - (id)initForShouldWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; 32 | - (id)initForShouldNotWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; 33 | - (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; 34 | 35 | + (id)matchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; 36 | 37 | - (void)verifyWithMatcher:(id)aMatcher; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Verifiers/KWVerifying.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWCallSite; 10 | 11 | @protocol KWVerifying 12 | 13 | @property (nonatomic, readonly) KWCallSite *callSite; 14 | 15 | - (NSString *)descriptionForAnonymousItNode; 16 | 17 | #pragma mark - Subjects 18 | 19 | @property (nonatomic, strong) id subject; 20 | 21 | #pragma mark - Ending Examples 22 | 23 | - (void)exampleWillEnd; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010, Allen Ding 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | 3. Neither the name of Allen Ding nor the names of any contributors may be 15 | used to endorse or promote products derived from this software without specific 16 | prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/NonARC/KWMessagePattern.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWMessagePattern : NSObject 10 | 11 | #pragma mark - Initializing 12 | 13 | - (id)initWithSelector:(SEL)aSelector; 14 | - (id)initWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray; 15 | - (id)initWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList; 16 | 17 | + (id)messagePatternWithSelector:(SEL)aSelector; 18 | + (id)messagePatternWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray; 19 | + (id)messagePatternWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList; 20 | 21 | + (id)messagePatternFromInvocation:(NSInvocation *)anInvocation; 22 | 23 | #pragma mark - Properties 24 | 25 | @property (nonatomic, readonly) SEL selector; 26 | @property (nonatomic, readonly) NSArray *argumentFilters; 27 | 28 | #pragma mark - Matching Invocations 29 | 30 | - (BOOL)matchesInvocation:(NSInvocation *)anInvocation; 31 | 32 | #pragma mark - Comparing Message Patterns 33 | 34 | - (BOOL)isEqualToMessagePattern:(KWMessagePattern *)aMessagePattern; 35 | 36 | #pragma mark - Retrieving String Representations 37 | 38 | - (NSString *)stringValue; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Readme.md: -------------------------------------------------------------------------------- 1 | # Simple BDD for iOS # 2 | [![Build Status](https://travis-ci.org/allending/Kiwi.png?branch=master)](https://travis-ci.org/allending/Kiwi) 3 | 4 | Kiwi is a Behavior Driven Development library for iOS development. 5 | The goal is to provide a BDD library that is exquisitely simple to setup and use. 6 | 7 | # Why? # 8 | The idea behind Kiwi is to have tests that are more readable than what is possible with the bundled test framework. 9 | 10 | Tests (or rather specs) are written in Objective-C and run within the comfort of Xcode to provide a test environment that is as unobtrusive and seamless as possible in terms of running tests and error reporting. 11 | 12 | Specs look like this: 13 | 14 | ```objective-c 15 | describe(@"Team", ^{ 16 | context(@"when newly created", ^{ 17 | it(@"should have a name", ^{ 18 | id team = [Team team]; 19 | [[team.name should] equal:@"Black Hawks"]; 20 | }); 21 | 22 | it(@"should have 11 players", ^{ 23 | id team = [Team team]; 24 | [[[team should] have:11] players]; 25 | }); 26 | }); 27 | }); 28 | ``` 29 | 30 | # Documentation # 31 | The [Kiwi Wiki](https://github.com/allending/Kiwi/wiki) is the official documentation source. 32 | 33 | # Getting it # 34 | The best way to get Kiwi is by using [CocoaPods](https://github.com/cocoapods/cocoapods). 35 | For all the installation details, check out the [Wiki](https://github.com/allending/kiwi/wiki) 36 | 37 | # Support # 38 | For all the questions / suggestions you have, that aren't bug reports please use our [Google Group](https://groups.google.com/forum/#!forum/kiwi-bdd) 39 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/DSNestedAccordion.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "DSNestedAccordion" 3 | s.version = "0.1.0" 4 | s.summary = "A nested accordion view for Cocoa Touch" 5 | s.description = <<-DESC 6 | To use the library 7 | 8 | * Inherit DSNestedAccordionHandler to your table view handler. 9 | * Provide implementation to the below listed methods 10 | * - (NSInteger)noOfRowsInRootLevel; 11 | * - (NSInteger)tableView:(UITableView *)view noOfChildRowsForCellAtPath:(DSCellPath *)path; 12 | * - (UITableViewCell *)tableView:(UITableView *)view cellForPath:(DSCellPath *)path; 13 | DESC 14 | s.homepage = "https://github.com/deepan/DSNestedAccordion" 15 | s.license = 'MIT' 16 | s.author = { "deepan" => "emaildeepan@yahoo.co.in" } 17 | s.source = { :git => "https://github.com/deepan/DSNestedAccordion.git", :tag => s.version.to_s } 18 | s.social_media_url = 'https://twitter.com/s_deepan' 19 | 20 | s.platform = :ios, '6.0' 21 | s.requires_arc = true 22 | 23 | s.source_files = 'Pod/Classes' 24 | end 25 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - DSNestedAccordion (0.1.0) 3 | - Kiwi/ARC (2.2.4) 4 | - Kiwi/NonARC (2.2.4) 5 | - Kiwi/XCTest (2.2.4): 6 | - Kiwi/ARC 7 | - Kiwi/NonARC 8 | 9 | DEPENDENCIES: 10 | - DSNestedAccordion (from `../`) 11 | - Kiwi/XCTest (~> 2.2.4) 12 | 13 | EXTERNAL SOURCES: 14 | DSNestedAccordion: 15 | :path: ../ 16 | 17 | SPEC CHECKSUMS: 18 | DSNestedAccordion: f2f0feaf7b10f0c30abefe62101d355e4a31105f 19 | Kiwi: c73667f2b84cbf36f1a3830267c5a4ae8dcbd8ba 20 | 21 | COCOAPODS: 0.33.1 22 | -------------------------------------------------------------------------------- /Example/Pods/Pods-DSNestedAccordion-DSNestedAccordion-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-DSNestedAccordion-DSNestedAccordion.xcconfig" 2 | GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/DSNestedAccordion" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DSNestedAccordion" "${PODS_ROOT}/Headers/Kiwi" 4 | OTHER_LDFLAGS = -ObjC 5 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Pods-DSNestedAccordion-DSNestedAccordion-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_DSNestedAccordion_DSNestedAccordion : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_DSNestedAccordion_DSNestedAccordion 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Pods-DSNestedAccordion-DSNestedAccordion-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-DSNestedAccordion-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Pods-DSNestedAccordion-DSNestedAccordion.xcconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepan/DSNestedAccordion/6eec71d646bd4bc39ef90d420939cee07d331cf1/Example/Pods/Pods-DSNestedAccordion-DSNestedAccordion.xcconfig -------------------------------------------------------------------------------- /Example/Pods/Pods-DSNestedAccordion-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## DSNestedAccordion 5 | 6 | Copyright (c) 2014 deepan 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - http://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/Pods/Pods-DSNestedAccordion-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_DSNestedAccordion : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_DSNestedAccordion 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Pods-DSNestedAccordion-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 | // DSNestedAccordion 10 | #define COCOAPODS_POD_AVAILABLE_DSNestedAccordion 11 | #define COCOAPODS_VERSION_MAJOR_DSNestedAccordion 0 12 | #define COCOAPODS_VERSION_MINOR_DSNestedAccordion 1 13 | #define COCOAPODS_VERSION_PATCH_DSNestedAccordion 0 14 | 15 | -------------------------------------------------------------------------------- /Example/Pods/Pods-DSNestedAccordion.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DSNestedAccordion" "${PODS_ROOT}/Headers/Kiwi" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers" -isystem "${PODS_ROOT}/Headers/DSNestedAccordion" -isystem "${PODS_ROOT}/Headers/Kiwi" 4 | OTHER_LDFLAGS = -ObjC 5 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests-DSNestedAccordion-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-Tests-DSNestedAccordion.xcconfig" 2 | GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/DSNestedAccordion" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DSNestedAccordion" "${PODS_ROOT}/Headers/Kiwi" 4 | OTHER_LDFLAGS = -ObjC 5 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests-DSNestedAccordion-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests_DSNestedAccordion : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests_DSNestedAccordion 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests-DSNestedAccordion-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-Tests-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests-DSNestedAccordion.xcconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepan/DSNestedAccordion/6eec71d646bd4bc39ef90d420939cee07d331cf1/Example/Pods/Pods-Tests-DSNestedAccordion.xcconfig -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests-Kiwi-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-Tests-Kiwi.xcconfig" 2 | FRAMEWORK_SEARCH_PATHS = ${PODS_TESTS_KIWI_FRAMEWORK_SEARCH_PATHS} 3 | GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Kiwi" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DSNestedAccordion" "${PODS_ROOT}/Headers/Kiwi" 5 | OTHER_LDFLAGS = -ObjC ${PODS_TESTS_KIWI_OTHER_LDFLAGS} 6 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests-Kiwi-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests_Kiwi : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests_Kiwi 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests-Kiwi-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-Tests-environment.h" 6 | #import 7 | -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests-Kiwi.xcconfig: -------------------------------------------------------------------------------- 1 | PODS_TESTS_KIWI_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" 2 | PODS_TESTS_KIWI_OTHER_LDFLAGS = -framework XCTest -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/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 | // DSNestedAccordion 10 | #define COCOAPODS_POD_AVAILABLE_DSNestedAccordion 11 | #define COCOAPODS_VERSION_MAJOR_DSNestedAccordion 0 12 | #define COCOAPODS_VERSION_MINOR_DSNestedAccordion 1 13 | #define COCOAPODS_VERSION_PATCH_DSNestedAccordion 0 14 | 15 | // Kiwi/ARC 16 | #define COCOAPODS_POD_AVAILABLE_Kiwi_ARC 17 | #define COCOAPODS_VERSION_MAJOR_Kiwi_ARC 2 18 | #define COCOAPODS_VERSION_MINOR_Kiwi_ARC 2 19 | #define COCOAPODS_VERSION_PATCH_Kiwi_ARC 4 20 | 21 | // Kiwi/NonARC 22 | #define COCOAPODS_POD_AVAILABLE_Kiwi_NonARC 23 | #define COCOAPODS_VERSION_MAJOR_Kiwi_NonARC 2 24 | #define COCOAPODS_VERSION_MINOR_Kiwi_NonARC 2 25 | #define COCOAPODS_VERSION_PATCH_Kiwi_NonARC 4 26 | 27 | // Kiwi/XCTest 28 | #define COCOAPODS_POD_AVAILABLE_Kiwi_XCTest 29 | #define COCOAPODS_VERSION_MAJOR_Kiwi_XCTest 2 30 | #define COCOAPODS_VERSION_MINOR_Kiwi_XCTest 2 31 | #define COCOAPODS_VERSION_PATCH_Kiwi_XCTest 4 32 | 33 | -------------------------------------------------------------------------------- /Example/Pods/Pods-Tests.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/DSNestedAccordion" "${PODS_ROOT}/Headers/Kiwi" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers" -isystem "${PODS_ROOT}/Headers/DSNestedAccordion" -isystem "${PODS_ROOT}/Headers/Kiwi" 5 | OTHER_LDFLAGS = -ObjC -framework XCTest 6 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Tests/DSCellLevelTest.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import "DSCellLevel.h" 3 | 4 | SPEC_BEGIN(DSNestedAccordionSpec) 5 | 6 | describe(@"Nested accordion cell", ^{ 7 | it(@"should return level information given the index of cell", ^{ 8 | 9 | DSCellLevel *cellLevel1 = [[DSCellLevel alloc] initWithCellCount:6 openCellIndex:-1 childLevel:nil]; 10 | [[[cellLevel1 pathToCellAtIndex:5].levelIndexes should] equal:[NSArray arrayWithObjects:@5, nil]]; 11 | 12 | 13 | DSCellLevel *cellLevel3 = [[DSCellLevel alloc] initWithCellCount:2 openCellIndex:-1 childLevel:nil]; 14 | DSCellLevel *cellLevel2 = [[DSCellLevel alloc] initWithCellCount:4 openCellIndex:2 childLevel:cellLevel3]; 15 | cellLevel1 = [[DSCellLevel alloc] initWithCellCount:6 openCellIndex:1 childLevel:cellLevel2]; 16 | 17 | [[[cellLevel1 pathToCellAtIndex: 7].levelIndexes should] equal:[NSArray arrayWithObjects:@1, @3, nil]]; 18 | 19 | [[[cellLevel1 pathToCellAtIndex: 6].levelIndexes should] equal:[NSArray arrayWithObjects:@1, @2, @1, nil]]; 20 | 21 | }); 22 | 23 | it(@"should return number of cells the levels have", ^{ 24 | DSCellLevel *cellLevel3 = [[DSCellLevel alloc] initWithCellCount:2 openCellIndex:-1 childLevel:nil]; 25 | DSCellLevel *cellLevel2 = [[DSCellLevel alloc] initWithCellCount:4 openCellIndex:2 childLevel:cellLevel3]; 26 | DSCellLevel *cellLevel1 = [[DSCellLevel alloc] initWithCellCount:6 openCellIndex:1 childLevel:cellLevel2]; 27 | 28 | [[@([cellLevel1 nestedCellCount]) should] equal:@12]; 29 | [[@([cellLevel2 nestedCellCount]) should] equal:@6]; 30 | [[@([cellLevel3 nestedCellCount]) should] equal:@2]; 31 | 32 | }); 33 | }); 34 | 35 | SPEC_END -------------------------------------------------------------------------------- /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 | #import 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /Example/Tests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 deepan 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/deepan/DSNestedAccordion/6eec71d646bd4bc39ef90d420939cee07d331cf1/Pod/Assets/.gitkeep -------------------------------------------------------------------------------- /Pod/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepan/DSNestedAccordion/6eec71d646bd4bc39ef90d420939cee07d331cf1/Pod/Classes/.gitkeep -------------------------------------------------------------------------------- /Pod/Classes/DSCellLevel.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @class DSCellPath; 4 | 5 | @interface DSCellLevel : NSObject 6 | 7 | @property(nonatomic) NSInteger cellCount; 8 | 9 | @property(nonatomic, strong) DSCellLevel *childLevel; 10 | 11 | @property(nonatomic) NSInteger openCellIndex; 12 | 13 | - (id)initWithCellCount:(NSInteger)cellCount openCellIndex:(NSInteger)openCellIndex childLevel:(DSCellLevel *)childLevel; 14 | 15 | - (DSCellPath *)pathToCellAtIndex:(NSInteger)cellIndex; 16 | 17 | - (NSInteger)nestedCellCount; 18 | 19 | - (DSCellLevel *)getLeafLevel:(DSCellPath *)path; 20 | 21 | - (void)addChildLevelWithCellCount:(NSInteger)cellCount atIndex:(NSInteger)index; 22 | 23 | - (void)reset; 24 | 25 | - (bool)hasOpenCell; 26 | 27 | - (NSInteger)removeChildLevel; 28 | 29 | - (BOOL)hasOpenChildLevelAtIndex:(NSInteger)cellIndex; 30 | 31 | - (BOOL)hasOpenChildLevelButAtDifferentIndex:(NSInteger)cellIndex; 32 | 33 | - (NSInteger)flattenedIndexOfExpandedCellInLevel:(DSCellLevel *)level; 34 | 35 | - (NSInteger)flattenedIndexOfCellInLevel:(DSCellLevel *)level atIndex:(NSInteger)cellIndex; 36 | 37 | @end -------------------------------------------------------------------------------- /Pod/Classes/DSCellPath.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface DSCellPath : NSObject 4 | 5 | @property(nonatomic, strong) NSMutableArray *levelIndexes; 6 | 7 | - (id)init; 8 | 9 | - (void)addToPath:(NSInteger)path; 10 | 11 | - (void)removeLastPath; 12 | 13 | - (void)addToLastPath:(NSInteger)noOfCells; 14 | 15 | @end -------------------------------------------------------------------------------- /Pod/Classes/DSCellPath.m: -------------------------------------------------------------------------------- 1 | #import "DSCellPath.h" 2 | 3 | @implementation DSCellPath 4 | 5 | - (id)init{ 6 | self = [super init]; 7 | if(self){ 8 | _levelIndexes = [[NSMutableArray alloc] init]; 9 | } 10 | return self; 11 | } 12 | 13 | -(void) addToPath:(NSInteger) path{ 14 | [_levelIndexes addObject:@(path)]; 15 | } 16 | 17 | - (void)removeLastPath { 18 | [_levelIndexes removeLastObject]; 19 | } 20 | 21 | - (void)addToLastPath:(NSInteger)noOfCells { 22 | _levelIndexes[_levelIndexes.count - 1] = @([_levelIndexes[_levelIndexes.count - 1] intValue] + noOfCells); 23 | } 24 | 25 | @end -------------------------------------------------------------------------------- /Pod/Classes/DSCellPathTracker.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @class DSCellPath; 4 | 5 | @interface DSCellPathTracker : NSObject 6 | 7 | @property(nonatomic) NSInteger flattenedCellIndex; 8 | 9 | @property(nonatomic, strong) DSCellPath *cellPath; 10 | 11 | - (id)initWithFlattenedCellIndex:(NSInteger)flattenedCellIndex; 12 | 13 | - (void)visitedCellsInLeafLevel:(NSInteger)cellCount; 14 | 15 | - (BOOL)haveNotFoundPathYet; 16 | 17 | - (void)visitedCellsInNewLevel:(NSInteger)cellCount; 18 | 19 | - (void)removeLastPath; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Pod/Classes/DSCellPathTracker.m: -------------------------------------------------------------------------------- 1 | #import "DSCellPathTracker.h" 2 | #import "DSCellPath.h" 3 | 4 | @implementation DSCellPathTracker 5 | 6 | - (id)initWithFlattenedCellIndex:(NSInteger)flattenedCellIndex { 7 | self = [super init]; 8 | if (self) { 9 | _flattenedCellIndex = flattenedCellIndex; 10 | _cellPath = [[DSCellPath alloc] init]; 11 | } 12 | return self; 13 | } 14 | 15 | - (void)visitedCellsInLeafLevel:(NSInteger)cellCount { 16 | _flattenedCellIndex = _flattenedCellIndex - cellCount; 17 | [_cellPath addToLastPath:cellCount]; 18 | } 19 | 20 | - (BOOL)haveNotFoundPathYet { 21 | return _flattenedCellIndex != -1; 22 | } 23 | 24 | - (void)visitedCellsInNewLevel:(NSInteger)cellCount { 25 | _flattenedCellIndex = _flattenedCellIndex - cellCount; 26 | [_cellPath addToPath:cellCount - 1]; 27 | } 28 | 29 | - (void)removeLastPath { 30 | [_cellPath removeLastPath]; 31 | } 32 | 33 | @end -------------------------------------------------------------------------------- /Pod/Classes/DSNestedAccordionHandler.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @class DSCellPath; 4 | 5 | @interface DSNestedAccordionHandler : NSObject 6 | 7 | @property(nonatomic, weak) UITableView *tableView; 8 | 9 | - (void)reload; 10 | 11 | - (void)closeOpenCells; 12 | 13 | - (void)tableView:(UITableView *)tableView toggleAtIndexPath:(NSIndexPath *)indexPath; 14 | 15 | - (NSInteger)noOfRowsInRootLevel; 16 | 17 | - (NSInteger)tableView:(UITableView *)view noOfChildRowsForCellAtPath:(DSCellPath *)path; 18 | 19 | - (UITableViewCell *)tableView:(UITableView *)view cellForPath:(DSCellPath *)path; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Pod/Classes/NSException+DSException.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface NSException (DSException) 4 | 5 | + (NSException *)dsMethodNotOverridden:(NSString *)methodName; 6 | 7 | @end -------------------------------------------------------------------------------- /Pod/Classes/NSException+DSException.m: -------------------------------------------------------------------------------- 1 | #import "NSException+DSException.h" 2 | 3 | @implementation NSException (DSException) 4 | 5 | + (NSException *)dsMethodNotOverridden:(NSString *)methodName { 6 | return [NSException exceptionWithName:NSInternalInconsistencyException 7 | reason:[NSString stringWithFormat:@"You must override %@ in a subclass", methodName] 8 | userInfo:nil]; 9 | } 10 | 11 | @end --------------------------------------------------------------------------------