From c2ea6dffd95123658e19d7386b8790daa349780d Mon Sep 17 00:00:00 2001 From: Christian Wellenbrock Date: Fri, 14 Feb 2014 17:58:53 +0100 Subject: [PATCH 01/11] Add test files This reverts commit 2a5262c292a110d24009ab9981e430ba4b4a98a0. --- AdjustIo.xcodeproj/project.pbxproj | 572 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/AdjustIo.xccheckout | 41 ++ .../xcschemes/AdjustIo.xcscheme | 69 +++ .../xcschemes/xcschememanagement.plist | 27 + AdjustIoTests/AIActivityHandlerMock.h | 13 + AdjustIoTests/AIActivityHandlerMock.m | 67 ++ AdjustIoTests/AIActivityHandlerTests.m | 277 +++++++++ AdjustIoTests/AILoggerMock.h | 17 + AdjustIoTests/AILoggerMock.m | 116 ++++ AdjustIoTests/AIPackageHandlerMock.h | 18 + AdjustIoTests/AIPackageHandlerMock.m | 75 +++ AdjustIoTests/AIPackageHandlerTests.m | 177 ++++++ AdjustIoTests/AIRequestHandlerMock.h | 16 + AdjustIoTests/AIRequestHandlerMock.m | 60 ++ AdjustIoTests/AIRequestHandlerTests.m | 159 +++++ AdjustIoTests/AITestsUtil.h | 22 + AdjustIoTests/AITestsUtil.m | 57 ++ AdjustIoTests/AdjustIoTests-Info.plist | 22 + ...NSURLConnectionSynchronousLoadingMocking.h | 18 + ...NSURLConnectionSynchronousLoadingMocking.m | 57 ++ AdjustIoTests/en.lproj/InfoPlist.strings | 2 + 22 files changed, 1889 insertions(+) create mode 100644 AdjustIo.xcodeproj/project.pbxproj create mode 100644 AdjustIo.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 AdjustIo.xcodeproj/project.xcworkspace/xcshareddata/AdjustIo.xccheckout create mode 100644 AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/AdjustIo.xcscheme create mode 100644 AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 AdjustIoTests/AIActivityHandlerMock.h create mode 100644 AdjustIoTests/AIActivityHandlerMock.m create mode 100644 AdjustIoTests/AIActivityHandlerTests.m create mode 100644 AdjustIoTests/AILoggerMock.h create mode 100644 AdjustIoTests/AILoggerMock.m create mode 100644 AdjustIoTests/AIPackageHandlerMock.h create mode 100644 AdjustIoTests/AIPackageHandlerMock.m create mode 100644 AdjustIoTests/AIPackageHandlerTests.m create mode 100644 AdjustIoTests/AIRequestHandlerMock.h create mode 100644 AdjustIoTests/AIRequestHandlerMock.m create mode 100644 AdjustIoTests/AIRequestHandlerTests.m create mode 100644 AdjustIoTests/AITestsUtil.h create mode 100644 AdjustIoTests/AITestsUtil.m create mode 100644 AdjustIoTests/AdjustIoTests-Info.plist create mode 100644 AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h create mode 100644 AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m create mode 100644 AdjustIoTests/en.lproj/InfoPlist.strings diff --git a/AdjustIo.xcodeproj/project.pbxproj b/AdjustIo.xcodeproj/project.pbxproj new file mode 100644 index 000000000..68ad06617 --- /dev/null +++ b/AdjustIo.xcodeproj/project.pbxproj @@ -0,0 +1,572 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7FF8AC9C18AD54870065977B /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC7C18AD54870065977B /* Adjust.m */; }; + 7FF8AC9D18AD54870065977B /* AIActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC7E18AD54870065977B /* AIActivityHandler.m */; }; + 7FF8AC9E18AD54870065977B /* AIActivityKind.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8018AD54870065977B /* AIActivityKind.m */; }; + 7FF8AC9F18AD54870065977B /* AIActivityPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8218AD54870065977B /* AIActivityPackage.m */; }; + 7FF8ACA018AD54870065977B /* AIActivityState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8418AD54870065977B /* AIActivityState.m */; }; + 7FF8ACA118AD54870065977B /* NSData+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8718AD54870065977B /* NSData+AIAdditions.m */; }; + 7FF8ACA218AD54870065977B /* NSString+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8918AD54870065977B /* NSString+AIAdditions.m */; }; + 7FF8ACA318AD54870065977B /* UIDevice+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8B18AD54870065977B /* UIDevice+AIAdditions.m */; }; + 7FF8ACA418AD54870065977B /* AIAdjustFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8D18AD54870065977B /* AIAdjustFactory.m */; }; + 7FF8ACA518AD54870065977B /* AILogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8F18AD54870065977B /* AILogger.m */; }; + 7FF8ACA618AD54870065977B /* AIPackageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9118AD54870065977B /* AIPackageBuilder.m */; }; + 7FF8ACA718AD54870065977B /* AIPackageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9318AD54870065977B /* AIPackageHandler.m */; }; + 7FF8ACA818AD54870065977B /* AIRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9518AD54870065977B /* AIRequestHandler.m */; }; + 7FF8ACA918AD54870065977B /* AIResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9718AD54870065977B /* AIResponseData.m */; }; + 7FF8ACAA18AD54870065977B /* AITimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9918AD54870065977B /* AITimer.m */; }; + 7FF8ACAB18AD54870065977B /* AIUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9B18AD54870065977B /* AIUtil.m */; }; + 9649D79F18A9053F0026AA0E /* AIPackageHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9649D79E18A9053F0026AA0E /* AIPackageHandlerMock.m */; }; + 9649D7A218A907280026AA0E /* AILoggerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9649D7A118A907280026AA0E /* AILoggerMock.m */; }; + 9649D7A518A91FA20026AA0E /* AIRequestHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9649D7A418A91FA20026AA0E /* AIRequestHandlerMock.m */; }; + 9695105018AA770C0072B6D7 /* AIActivityHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9695104F18AA770C0072B6D7 /* AIActivityHandlerMock.m */; }; + 96E913D118A4F06B00F01294 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913D018A4F06B00F01294 /* Foundation.framework */; }; + 96E913DF18A4F06B00F01294 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913DE18A4F06B00F01294 /* XCTest.framework */; }; + 96E913E018A4F06B00F01294 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913D018A4F06B00F01294 /* Foundation.framework */; }; + 96E913E218A4F06B00F01294 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913E118A4F06B00F01294 /* UIKit.framework */; }; + 96E913E518A4F06B00F01294 /* libAdjustIo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913CD18A4F06B00F01294 /* libAdjustIo.a */; }; + 96E913EB18A4F06B00F01294 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 96E913E918A4F06B00F01294 /* InfoPlist.strings */; }; + 96E9144618A5122A00F01294 /* AIActivityHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E9144518A5122A00F01294 /* AIActivityHandlerTests.m */; }; + 96E9144818A5124C00F01294 /* AIPackageHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E9144718A5124C00F01294 /* AIPackageHandlerTests.m */; }; + 96E9144A18A5126100F01294 /* AIRequestHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E9144918A5126100F01294 /* AIRequestHandlerTests.m */; }; + 96F0018D18ABC0C800612200 /* AITestsUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F0018C18ABC0C800612200 /* AITestsUtil.m */; }; + 96F0019618ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F0019518ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */; }; + 96F9050C18AE776F00DBEF2F /* AITestsUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F0018C18ABC0C800612200 /* AITestsUtil.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 96E913E318A4F06B00F01294 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 96E913C518A4F06B00F01294 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 96E913CC18A4F06B00F01294; + remoteInfo = AdjustIo; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 96E913CB18A4F06B00F01294 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 7FF8AC7A18AD54870065977B /* Adjust-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Adjust-Prefix.pch"; sourceTree = ""; }; + 7FF8AC7B18AD54870065977B /* Adjust.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Adjust.h; sourceTree = ""; }; + 7FF8AC7C18AD54870065977B /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; + 7FF8AC7D18AD54870065977B /* AIActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandler.h; sourceTree = ""; }; + 7FF8AC7E18AD54870065977B /* AIActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandler.m; sourceTree = ""; }; + 7FF8AC7F18AD54870065977B /* AIActivityKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityKind.h; sourceTree = ""; }; + 7FF8AC8018AD54870065977B /* AIActivityKind.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityKind.m; sourceTree = ""; }; + 7FF8AC8118AD54870065977B /* AIActivityPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityPackage.h; sourceTree = ""; }; + 7FF8AC8218AD54870065977B /* AIActivityPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityPackage.m; sourceTree = ""; }; + 7FF8AC8318AD54870065977B /* AIActivityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityState.h; sourceTree = ""; }; + 7FF8AC8418AD54870065977B /* AIActivityState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityState.m; sourceTree = ""; }; + 7FF8AC8618AD54870065977B /* NSData+AIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+AIAdditions.h"; sourceTree = ""; }; + 7FF8AC8718AD54870065977B /* NSData+AIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+AIAdditions.m"; sourceTree = ""; }; + 7FF8AC8818AD54870065977B /* NSString+AIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+AIAdditions.h"; sourceTree = ""; }; + 7FF8AC8918AD54870065977B /* NSString+AIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+AIAdditions.m"; sourceTree = ""; }; + 7FF8AC8A18AD54870065977B /* UIDevice+AIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+AIAdditions.h"; sourceTree = ""; }; + 7FF8AC8B18AD54870065977B /* UIDevice+AIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+AIAdditions.m"; sourceTree = ""; }; + 7FF8AC8C18AD54870065977B /* AIAdjustFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIAdjustFactory.h; sourceTree = ""; }; + 7FF8AC8D18AD54870065977B /* AIAdjustFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIAdjustFactory.m; sourceTree = ""; }; + 7FF8AC8E18AD54870065977B /* AILogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AILogger.h; sourceTree = ""; }; + 7FF8AC8F18AD54870065977B /* AILogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AILogger.m; sourceTree = ""; }; + 7FF8AC9018AD54870065977B /* AIPackageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageBuilder.h; sourceTree = ""; }; + 7FF8AC9118AD54870065977B /* AIPackageBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageBuilder.m; sourceTree = ""; }; + 7FF8AC9218AD54870065977B /* AIPackageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageHandler.h; sourceTree = ""; }; + 7FF8AC9318AD54870065977B /* AIPackageHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandler.m; sourceTree = ""; }; + 7FF8AC9418AD54870065977B /* AIRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIRequestHandler.h; sourceTree = ""; }; + 7FF8AC9518AD54870065977B /* AIRequestHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandler.m; sourceTree = ""; }; + 7FF8AC9618AD54870065977B /* AIResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIResponseData.h; sourceTree = ""; }; + 7FF8AC9718AD54870065977B /* AIResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIResponseData.m; sourceTree = ""; }; + 7FF8AC9818AD54870065977B /* AITimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AITimer.h; sourceTree = ""; }; + 7FF8AC9918AD54870065977B /* AITimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AITimer.m; sourceTree = ""; }; + 7FF8AC9A18AD54870065977B /* AIUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIUtil.h; sourceTree = ""; }; + 7FF8AC9B18AD54870065977B /* AIUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIUtil.m; sourceTree = ""; }; + 9649D79D18A9053F0026AA0E /* AIPackageHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageHandlerMock.h; sourceTree = ""; }; + 9649D79E18A9053F0026AA0E /* AIPackageHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerMock.m; sourceTree = ""; }; + 9649D7A018A907280026AA0E /* AILoggerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AILoggerMock.h; sourceTree = ""; }; + 9649D7A118A907280026AA0E /* AILoggerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AILoggerMock.m; sourceTree = ""; }; + 9649D7A318A91FA20026AA0E /* AIRequestHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIRequestHandlerMock.h; sourceTree = ""; }; + 9649D7A418A91FA20026AA0E /* AIRequestHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerMock.m; sourceTree = ""; }; + 9695104E18AA770C0072B6D7 /* AIActivityHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandlerMock.h; sourceTree = ""; }; + 9695104F18AA770C0072B6D7 /* AIActivityHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerMock.m; sourceTree = ""; }; + 96E913CD18A4F06B00F01294 /* libAdjustIo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAdjustIo.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 96E913D018A4F06B00F01294 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 96E913DD18A4F06B00F01294 /* AdjustIoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AdjustIoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 96E913DE18A4F06B00F01294 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 96E913E118A4F06B00F01294 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 96E913E818A4F06B00F01294 /* AdjustIoTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "AdjustIoTests-Info.plist"; sourceTree = ""; }; + 96E913EA18A4F06B00F01294 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 96E9144518A5122A00F01294 /* AIActivityHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerTests.m; sourceTree = ""; }; + 96E9144718A5124C00F01294 /* AIPackageHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerTests.m; sourceTree = ""; }; + 96E9144918A5126100F01294 /* AIRequestHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerTests.m; sourceTree = ""; }; + 96F0018B18ABC0C800612200 /* AITestsUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AITestsUtil.h; sourceTree = ""; }; + 96F0018C18ABC0C800612200 /* AITestsUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AITestsUtil.m; sourceTree = ""; }; + 96F0019418ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h"; sourceTree = ""; }; + 96F0019518ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 96E913CA18A4F06B00F01294 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 96E913D118A4F06B00F01294 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 96E913DA18A4F06B00F01294 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 96E913DF18A4F06B00F01294 /* XCTest.framework in Frameworks */, + 96E913E218A4F06B00F01294 /* UIKit.framework in Frameworks */, + 96E913E518A4F06B00F01294 /* libAdjustIo.a in Frameworks */, + 96E913E018A4F06B00F01294 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7FF8AC7918AD54870065977B /* Adjust */ = { + isa = PBXGroup; + children = ( + 7FF8AC7A18AD54870065977B /* Adjust-Prefix.pch */, + 7FF8AC7B18AD54870065977B /* Adjust.h */, + 7FF8AC7C18AD54870065977B /* Adjust.m */, + 7FF8AC7D18AD54870065977B /* AIActivityHandler.h */, + 7FF8AC7E18AD54870065977B /* AIActivityHandler.m */, + 7FF8AC7F18AD54870065977B /* AIActivityKind.h */, + 7FF8AC8018AD54870065977B /* AIActivityKind.m */, + 7FF8AC8118AD54870065977B /* AIActivityPackage.h */, + 7FF8AC8218AD54870065977B /* AIActivityPackage.m */, + 7FF8AC8318AD54870065977B /* AIActivityState.h */, + 7FF8AC8418AD54870065977B /* AIActivityState.m */, + 7FF8AC8518AD54870065977B /* AIAdditions */, + 7FF8AC8C18AD54870065977B /* AIAdjustFactory.h */, + 7FF8AC8D18AD54870065977B /* AIAdjustFactory.m */, + 7FF8AC8E18AD54870065977B /* AILogger.h */, + 7FF8AC8F18AD54870065977B /* AILogger.m */, + 7FF8AC9018AD54870065977B /* AIPackageBuilder.h */, + 7FF8AC9118AD54870065977B /* AIPackageBuilder.m */, + 7FF8AC9218AD54870065977B /* AIPackageHandler.h */, + 7FF8AC9318AD54870065977B /* AIPackageHandler.m */, + 7FF8AC9418AD54870065977B /* AIRequestHandler.h */, + 7FF8AC9518AD54870065977B /* AIRequestHandler.m */, + 7FF8AC9618AD54870065977B /* AIResponseData.h */, + 7FF8AC9718AD54870065977B /* AIResponseData.m */, + 7FF8AC9818AD54870065977B /* AITimer.h */, + 7FF8AC9918AD54870065977B /* AITimer.m */, + 7FF8AC9A18AD54870065977B /* AIUtil.h */, + 7FF8AC9B18AD54870065977B /* AIUtil.m */, + ); + path = Adjust; + sourceTree = ""; + }; + 7FF8AC8518AD54870065977B /* AIAdditions */ = { + isa = PBXGroup; + children = ( + 7FF8AC8618AD54870065977B /* NSData+AIAdditions.h */, + 7FF8AC8718AD54870065977B /* NSData+AIAdditions.m */, + 7FF8AC8818AD54870065977B /* NSString+AIAdditions.h */, + 7FF8AC8918AD54870065977B /* NSString+AIAdditions.m */, + 7FF8AC8A18AD54870065977B /* UIDevice+AIAdditions.h */, + 7FF8AC8B18AD54870065977B /* UIDevice+AIAdditions.m */, + ); + path = AIAdditions; + sourceTree = ""; + }; + 96E913C418A4F06B00F01294 = { + isa = PBXGroup; + children = ( + 7FF8AC7918AD54870065977B /* Adjust */, + 96E913E618A4F06B00F01294 /* AdjustIoTests */, + 96E913CF18A4F06B00F01294 /* Frameworks */, + 96E913CE18A4F06B00F01294 /* Products */, + ); + sourceTree = ""; + }; + 96E913CE18A4F06B00F01294 /* Products */ = { + isa = PBXGroup; + children = ( + 96E913CD18A4F06B00F01294 /* libAdjustIo.a */, + 96E913DD18A4F06B00F01294 /* AdjustIoTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 96E913CF18A4F06B00F01294 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 96E913D018A4F06B00F01294 /* Foundation.framework */, + 96E913DE18A4F06B00F01294 /* XCTest.framework */, + 96E913E118A4F06B00F01294 /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 96E913E618A4F06B00F01294 /* AdjustIoTests */ = { + isa = PBXGroup; + children = ( + 96E913E718A4F06B00F01294 /* Supporting Files */, + 96E9144518A5122A00F01294 /* AIActivityHandlerTests.m */, + 96E9144718A5124C00F01294 /* AIPackageHandlerTests.m */, + 96E9144918A5126100F01294 /* AIRequestHandlerTests.m */, + 9649D79D18A9053F0026AA0E /* AIPackageHandlerMock.h */, + 9649D79E18A9053F0026AA0E /* AIPackageHandlerMock.m */, + 9649D7A018A907280026AA0E /* AILoggerMock.h */, + 9649D7A118A907280026AA0E /* AILoggerMock.m */, + 9649D7A318A91FA20026AA0E /* AIRequestHandlerMock.h */, + 9649D7A418A91FA20026AA0E /* AIRequestHandlerMock.m */, + 9695104E18AA770C0072B6D7 /* AIActivityHandlerMock.h */, + 9695104F18AA770C0072B6D7 /* AIActivityHandlerMock.m */, + 96F0018B18ABC0C800612200 /* AITestsUtil.h */, + 96F0018C18ABC0C800612200 /* AITestsUtil.m */, + 96F0019418ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */, + 96F0019518ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */, + ); + path = AdjustIoTests; + sourceTree = ""; + }; + 96E913E718A4F06B00F01294 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 96E913E818A4F06B00F01294 /* AdjustIoTests-Info.plist */, + 96E913E918A4F06B00F01294 /* InfoPlist.strings */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 96E913CC18A4F06B00F01294 /* AdjustIo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 96E913F018A4F06B00F01294 /* Build configuration list for PBXNativeTarget "AdjustIo" */; + buildPhases = ( + 96E913C918A4F06B00F01294 /* Sources */, + 96E913CA18A4F06B00F01294 /* Frameworks */, + 96E913CB18A4F06B00F01294 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AdjustIo; + productName = AdjustIo; + productReference = 96E913CD18A4F06B00F01294 /* libAdjustIo.a */; + productType = "com.apple.product-type.library.static"; + }; + 96E913DC18A4F06B00F01294 /* AdjustIoTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 96E913F318A4F06B00F01294 /* Build configuration list for PBXNativeTarget "AdjustIoTests" */; + buildPhases = ( + 96E913D918A4F06B00F01294 /* Sources */, + 96E913DA18A4F06B00F01294 /* Frameworks */, + 96E913DB18A4F06B00F01294 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 96E913E418A4F06B00F01294 /* PBXTargetDependency */, + ); + name = AdjustIoTests; + productName = AdjustIoTests; + productReference = 96E913DD18A4F06B00F01294 /* AdjustIoTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 96E913C518A4F06B00F01294 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + ORGANIZATIONNAME = adeven; + }; + buildConfigurationList = 96E913C818A4F06B00F01294 /* Build configuration list for PBXProject "AdjustIo" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 96E913C418A4F06B00F01294; + productRefGroup = 96E913CE18A4F06B00F01294 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 96E913CC18A4F06B00F01294 /* AdjustIo */, + 96E913DC18A4F06B00F01294 /* AdjustIoTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 96E913DB18A4F06B00F01294 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 96E913EB18A4F06B00F01294 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 96E913C918A4F06B00F01294 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 96F9050C18AE776F00DBEF2F /* AITestsUtil.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 96E913D918A4F06B00F01294 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 96E9144818A5124C00F01294 /* AIPackageHandlerTests.m in Sources */, + 9649D7A218A907280026AA0E /* AILoggerMock.m in Sources */, + 7FF8AC9D18AD54870065977B /* AIActivityHandler.m in Sources */, + 96E9144A18A5126100F01294 /* AIRequestHandlerTests.m in Sources */, + 7FF8ACA818AD54870065977B /* AIRequestHandler.m in Sources */, + 7FF8ACAB18AD54870065977B /* AIUtil.m in Sources */, + 96F0019618ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */, + 7FF8AC9C18AD54870065977B /* Adjust.m in Sources */, + 7FF8ACAA18AD54870065977B /* AITimer.m in Sources */, + 7FF8ACA918AD54870065977B /* AIResponseData.m in Sources */, + 9695105018AA770C0072B6D7 /* AIActivityHandlerMock.m in Sources */, + 96F0018D18ABC0C800612200 /* AITestsUtil.m in Sources */, + 7FF8ACA118AD54870065977B /* NSData+AIAdditions.m in Sources */, + 7FF8ACA318AD54870065977B /* UIDevice+AIAdditions.m in Sources */, + 7FF8AC9E18AD54870065977B /* AIActivityKind.m in Sources */, + 7FF8AC9F18AD54870065977B /* AIActivityPackage.m in Sources */, + 7FF8ACA018AD54870065977B /* AIActivityState.m in Sources */, + 9649D79F18A9053F0026AA0E /* AIPackageHandlerMock.m in Sources */, + 7FF8ACA218AD54870065977B /* NSString+AIAdditions.m in Sources */, + 7FF8ACA718AD54870065977B /* AIPackageHandler.m in Sources */, + 9649D7A518A91FA20026AA0E /* AIRequestHandlerMock.m in Sources */, + 96E9144618A5122A00F01294 /* AIActivityHandlerTests.m in Sources */, + 7FF8ACA518AD54870065977B /* AILogger.m in Sources */, + 7FF8ACA618AD54870065977B /* AIPackageBuilder.m in Sources */, + 7FF8ACA418AD54870065977B /* AIAdjustFactory.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 96E913E418A4F06B00F01294 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 96E913CC18A4F06B00F01294 /* AdjustIo */; + targetProxy = 96E913E318A4F06B00F01294 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 96E913E918A4F06B00F01294 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 96E913EA18A4F06B00F01294 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 96E913EE18A4F06B00F01294 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 96E913EF18A4F06B00F01294 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 96E913F118A4F06B00F01294 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = NO; + DSTROOT = /tmp/Adjust.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/pfms/GitHub/adjust_ios_sdk, + ); + GCC_PRECOMPILE_PREFIX_HEADER = NO; + OTHER_LDFLAGS = "-ObjC"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 96E913F218A4F06B00F01294 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = NO; + DSTROOT = /tmp/Adjust.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + /Users/pfms/GitHub/adjust_ios_sdk, + ); + GCC_PRECOMPILE_PREFIX_HEADER = NO; + OTHER_LDFLAGS = "-ObjC"; + PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 96E913F418A4F06B00F01294 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + /Users/pfms/GitHub/adjust_ios_sdk, + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Adjust/Adjust-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "AdjustIoTests/AdjustIoTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + 96E913F518A4F06B00F01294 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + /Users/pfms/GitHub/adjust_ios_sdk, + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Adjust/Adjust-Prefix.pch"; + INFOPLIST_FILE = "AdjustIoTests/AdjustIoTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 96E913C818A4F06B00F01294 /* Build configuration list for PBXProject "AdjustIo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 96E913EE18A4F06B00F01294 /* Debug */, + 96E913EF18A4F06B00F01294 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 96E913F018A4F06B00F01294 /* Build configuration list for PBXNativeTarget "AdjustIo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 96E913F118A4F06B00F01294 /* Debug */, + 96E913F218A4F06B00F01294 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 96E913F318A4F06B00F01294 /* Build configuration list for PBXNativeTarget "AdjustIoTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 96E913F418A4F06B00F01294 /* Debug */, + 96E913F518A4F06B00F01294 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 96E913C518A4F06B00F01294 /* Project object */; +} diff --git a/AdjustIo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/AdjustIo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..2d94213e4 --- /dev/null +++ b/AdjustIo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/AdjustIo.xcodeproj/project.xcworkspace/xcshareddata/AdjustIo.xccheckout b/AdjustIo.xcodeproj/project.xcworkspace/xcshareddata/AdjustIo.xccheckout new file mode 100644 index 000000000..4b1a8df06 --- /dev/null +++ b/AdjustIo.xcodeproj/project.xcworkspace/xcshareddata/AdjustIo.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + 13E048FD-E792-464F-AD3C-78F6DBFCB0DB + IDESourceControlProjectName + AdjustIo + IDESourceControlProjectOriginsDictionary + + 721308F3-3749-4DBE-A630-4BE178874714 + https://github.com/adeven/adjust_ios_sdk.git + + IDESourceControlProjectPath + AdjustIo.xcodeproj/project.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + 721308F3-3749-4DBE-A630-4BE178874714 + ../.. + + IDESourceControlProjectURL + https://github.com/adeven/adjust_ios_sdk.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + 721308F3-3749-4DBE-A630-4BE178874714 + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 721308F3-3749-4DBE-A630-4BE178874714 + IDESourceControlWCCName + adjust_ios_sdk + + + + diff --git a/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/AdjustIo.xcscheme b/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/AdjustIo.xcscheme new file mode 100644 index 000000000..5f02a8703 --- /dev/null +++ b/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/AdjustIo.xcscheme @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/xcschememanagement.plist b/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..152005229 --- /dev/null +++ b/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + AdjustIo.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 96E913CC18A4F06B00F01294 + + primary + + + 96E913DC18A4F06B00F01294 + + primary + + + + + diff --git a/AdjustIoTests/AIActivityHandlerMock.h b/AdjustIoTests/AIActivityHandlerMock.h new file mode 100644 index 000000000..4c91c426f --- /dev/null +++ b/AdjustIoTests/AIActivityHandlerMock.h @@ -0,0 +1,13 @@ +// +// AIActivityHandlerMock.h +// Adjust +// +// Created by Pedro Filipe on 11/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIActivityHandler.h" + +@interface AIActivityHandlerMock : NSObject + +@end diff --git a/AdjustIoTests/AIActivityHandlerMock.m b/AdjustIoTests/AIActivityHandlerMock.m new file mode 100644 index 000000000..082c3a9dd --- /dev/null +++ b/AdjustIoTests/AIActivityHandlerMock.m @@ -0,0 +1,67 @@ +// +// AIActivityHandlerMock.m +// Adjust +// +// Created by Pedro Filipe on 11/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIActivityHandlerMock.h" +#import "AILoggerMock.h" +#import "AIAdjustFactory.h" + +static NSString * const prefix = @"AIActivityHandler "; + +@interface AIActivityHandlerMock() + +@property (nonatomic, strong) AILoggerMock *loggerMock; + +@end + +@implementation AIActivityHandlerMock + +@synthesize environment; +@synthesize bufferEvents; +@synthesize trackMacMd5; +@synthesize delegate; + +- (id)initWithAppToken:(NSString *)yourAppToken { + self = [super init]; + if (self == nil) return nil; + + self.loggerMock = (AILoggerMock *) [AIAdjustFactory logger]; + + [self.loggerMock test:[prefix stringByAppendingFormat:@"initWithAppToken yourAppToken:%@", yourAppToken]]; + + return self; +} + +- (void)setSdkPrefix:(NSString *)sdkPrefix { + [self.loggerMock test:[prefix stringByAppendingFormat:@"setSdkPrefix sdkPrefix:%@", sdkPrefix]]; +} + +- (void)trackSubsessionStart { + [self.loggerMock test:[prefix stringByAppendingFormat:@"trackSubsessionStart"]]; +} +- (void)trackSubsessionEnd { + [self.loggerMock test:[prefix stringByAppendingFormat:@"trackSubsessionEnd"]]; +} + +- (void)trackEvent:(NSString *)eventToken + withParameters:(NSDictionary *)parameters { + [self.loggerMock test:[prefix stringByAppendingFormat:@"trackEvent eventToken:%@ parameters:%@", eventToken, parameters]]; +} + +- (void)trackRevenue:(double)amount + forEvent:(NSString *)eventToken + withParameters:(NSDictionary *)parameters { + [self.loggerMock test:[prefix stringByAppendingFormat:@"trackRevenue amount:%f eventToken:%@ parameters:%@", amount, eventToken, parameters]]; +} + +- (void)finishedTrackingWithResponse:(AIResponseData *)response { + [self.loggerMock test:[prefix stringByAppendingFormat:@"finishedTrackingWithResponse response:%@", response]]; +} + + + +@end diff --git a/AdjustIoTests/AIActivityHandlerTests.m b/AdjustIoTests/AIActivityHandlerTests.m new file mode 100644 index 000000000..04e3bec81 --- /dev/null +++ b/AdjustIoTests/AIActivityHandlerTests.m @@ -0,0 +1,277 @@ +// +// AIActivityHandlerTests.m +// Adjust +// +// Created by Pedro Filipe on 07/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AILoggerMock.h" +#import "AIPackageHandlerMock.h" +#import "AIAdjustFactory.h" +#import "AIActivityHandler.h" +#import "AIActivityPackage.h" +#import "AITestsUtil.h" + +@interface AIActivityHandlerTests : XCTestCase + +@property (atomic,strong) AILoggerMock *loggerMock; +@property (atomic,strong) AIPackageHandlerMock *packageHandlerMock; + +@end + +@implementation AIActivityHandlerTests + +- (void)setUp +{ + [super setUp]; + // Put setup code here; it will be run once, before the first test case. + +} + +- (void)tearDown +{ + [AIAdjustFactory setPackageHandler:nil]; + [AIAdjustFactory setLogger:nil]; + [AIAdjustFactory setSessionInterval:-1]; + [AIAdjustFactory setSubsessionInterval:-1]; + // Put teardown code here; it will be run once, after the last test case. + [super tearDown]; +} + +- (void)reset { + self.loggerMock = [[AILoggerMock alloc] init]; + [AIAdjustFactory setLogger:self.loggerMock]; + + self.packageHandlerMock = [AIPackageHandlerMock alloc]; + [AIAdjustFactory setPackageHandler:self.packageHandlerMock]; + + [AIAdjustFactory setSessionInterval:-1]; + [AIAdjustFactory setSubsessionInterval:-1]; +} + +- (void)testFirstRun +{ + // reseting to make the test order independent + [self reset]; + + // deleting the activity state file to simulate a first session + XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); + + // create handler and start the first session + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + + // set the delegate to be called at after sending the package + AITestsUtil * testsUtil = [[AITestsUtil alloc] init]; + [activityHandler setDelegate:testsUtil]; + + // it's necessary to sleep the activity for a while after each handler call + // to let the internal queue act + [NSThread sleepForTimeInterval:10.0]; + + // test that the file did not exist in the first run of the application + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Activity state file not found"], @"%@", self.loggerMock); + + // when a session package is being sent the package handler should resume sending + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler resumeSending"], @"%@", self.loggerMock); + + // if the package was build, it was sent to the Package Handler + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler addPackage"], @"%@", self.loggerMock); + + // checking the default values of the first session package + // should only have one package + XCTAssertEqual(1, (NSInteger)[self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + + AIActivityPackage *activityPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[0]; + + // check the Sdk version is being tested + XCTAssertEqual(@"ios3.0.0", activityPackage.clientSdk, @"%@", activityPackage.extendedString); + + // packageType should be SESSION_START + XCTAssertEqual(@"/startup", activityPackage.path, @"%@", activityPackage.extendedString); + + NSDictionary *parameters = activityPackage.parameters; + + // sessions attributes + // sessionCount 1, because is the first session + XCTAssertEqual(1, [(NSString *)parameters[@"session_count"] intValue], @"%@", activityPackage.extendedString); + + // subSessionCount -1, because we didn't had any subsessions yet + // because only values > 0 are added to parameters, therefore is not present + XCTAssertNil(parameters[@"subsession_count"], @"%@", activityPackage.extendedString); + + // sessionLenght -1, same as before + XCTAssertNil(parameters[@"session_length"], @"%@", activityPackage.extendedString); + + // timeSpent -1, same as before + XCTAssertNil(parameters[@"time_spent"], @"%@", activityPackage.extendedString); + + // lastInterval -1, same as before + XCTAssertNil(parameters[@"last_interval"], @"%@", activityPackage.extendedString); + + // after adding, the activity handler ping the Package handler to send the package + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendFirstPackage"], @"%@", self.loggerMock); + + // check that the package handler calls back with the delegate + //XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AdjustDelegate adjustFinishedTrackingWithResponse"], + // @"%@", self.loggerMock); + + // check that the activity state is written by the first session or timer + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: "], @"%@", self.loggerMock); + + // ending of first session + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"First session"], @"%@", self.loggerMock); +} + +- (void)testSessions { + // reseting to make the test order independent + [self reset]; + + // starting from a clean slate + XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); + + // adjust the intervals for testing + [AIAdjustFactory setSessionInterval:(2)]; // 2 seconds + [AIAdjustFactory setSubsessionInterval:(0.1)]; // 0.1 second + + // create handler to start the session + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + + // wait enough to be a new subsession, but not a new session + [NSThread sleepForTimeInterval:1.5]; + [activityHandler trackSubsessionStart]; + + // wait enough to be a new session + [NSThread sleepForTimeInterval:4]; + [activityHandler trackSubsessionStart]; + + // test the subsession end + [activityHandler trackSubsessionEnd]; + [NSThread sleepForTimeInterval:1]; + + // check that a new subsession was created + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Processed Subsession 2 of Session 1"], @"%@", self.loggerMock); + + // check that it's now on the 2nd session + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Session 2"], @"%@", self.loggerMock); + + // check that 2 packages were added to the package handler + XCTAssertEqual(2, (NSInteger)[self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + + // get the second session package and its parameters + AIActivityPackage *activityPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; + NSDictionary *parameters = activityPackage.parameters; + + // the session and subsession count should be 2 + // session_count + XCTAssertEqual(2, [(NSString *)parameters[@"session_count"] intValue], @"%@", activityPackage.extendedString); + + // subsession_count + XCTAssertEqual(2, [(NSString *)parameters[@"subsession_count"] intValue], @"%@", activityPackage.extendedString); + + // check that the package handler was paused + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler pauseSending"], @"%@", self.loggerMock); +} + +- (void)testEventsBuffered { + // reseting to make the test order independent + [self reset]; + + // starting from a clean slate + XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); + + // create handler to start the session + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + [activityHandler setBufferEvents:YES]; + + // construct the parameters of the the event + NSDictionary *eventParameters = @{@"key": @"value", @"foo": @"bar" }; + + // the first is a normal event has parameters, the second a revenue + [activityHandler trackEvent:@"abc123" withParameters:eventParameters]; + [activityHandler trackRevenue:4.45 forEvent:@"abc123" withParameters:eventParameters]; + + [NSThread sleepForTimeInterval:2]; + + // check that event buffering is enabled + //XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Event buffering is enabled"], @"%@", self.loggerMock); + + // check that the package builder added the session, event and revenue package + XCTAssertEqual(3, (NSInteger)[self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + + // check the first event + AIActivityPackage *eventPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; + + // check the event path + XCTAssert([eventPackage.path isEqualToString:@"/event"], @"%@", eventPackage.extendedString); + + // check the event suffix + XCTAssert([eventPackage.suffix isEqualToString:@" 'abc123'"], @"%@", eventPackage.extendedString); + + NSDictionary *eventPackageParameters = eventPackage.parameters; + + // check the event count in the package parameters + XCTAssertEqual(1, [(NSString *)eventPackageParameters[@"event_count"] intValue], @"%@", eventPackage.extendedString); + + // check the event token + XCTAssert([(NSString *)eventPackageParameters[@"event_token"] isEqualToString:@"abc123"], @"%@", eventPackage.extendedString); + + // check the injected parameters + XCTAssert([(NSString *)eventPackageParameters[@"params"] isEqualToString:@"eyJrZXkiOiJ2YWx1ZSIsImZvbyI6ImJhciJ9"], + @"%@", eventPackage.extendedString); + + // check that the event was buffered + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Buffered event 'abc123'"], @"%@", self.loggerMock); + + // check the event count in the written activity state + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:1"], @"%@", self.loggerMock); + + // check the event count in the logger + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 1"], @"%@", self.loggerMock); + + // check the second event/ first revenue + AIActivityPackage *revenuePackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[2]; + + // check the revenue path + XCTAssert([revenuePackage.path isEqualToString:@"/revenue"], @"%@", revenuePackage.extendedString); + + // check the revenue suffix + // note that the amount was rounded to the decimal cents + XCTAssert([revenuePackage.suffix isEqualToString:@" (4.5 cent, 'abc123')"], @"%@", revenuePackage.extendedString); + + NSDictionary *revenuePackageParameters = revenuePackage.parameters; + + // check the event count in the package parameters + XCTAssertEqual(2, [(NSString *)revenuePackageParameters[@"event_count"] intValue], @"%@", revenuePackage.extendedString); + + // check the amount, transforming cents into rounded decimal cents + // note that the 4.45 cents ~> 45 decimal cents + XCTAssertEqual(45, [(NSString *)revenuePackageParameters[@"amount"] intValue], @"%@", revenuePackage.extendedString); + + // check the event token + XCTAssert([(NSString *)revenuePackageParameters[@"event_token"] isEqualToString:@"abc123"], @"%@", revenuePackage.extendedString); + + // check the injected parameters + XCTAssert([(NSString *)revenuePackageParameters[@"params"] isEqualToString:@"eyJrZXkiOiJ2YWx1ZSIsImZvbyI6ImJhciJ9"], + @"%@", eventPackage.extendedString); + + // check that the revenue was buffered + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Buffered revenue (4.5 cent, 'abc123')"], @"%@", self.loggerMock); + + // check the event count in the written activity state + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:2"], @"%@", self.loggerMock); + + // check the event count in the logger + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 2 (revenue)"], @"%@", self.loggerMock); +} + +- (void)testEventsNotBuffered { + // reseting to make the test order independent + [self reset]; + +} + + + +@end diff --git a/AdjustIoTests/AILoggerMock.h b/AdjustIoTests/AILoggerMock.h new file mode 100644 index 000000000..5f454ec95 --- /dev/null +++ b/AdjustIoTests/AILoggerMock.h @@ -0,0 +1,17 @@ +// +// AILoggerMock.h +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AILogger.h" + +static const int AILogLevelTest = 0; + +@interface AILoggerMock : NSObject + - (void)test:(NSString *)message, ...; + - (BOOL) containsMessage:(NSInteger)logLevel beginsWith:(NSString *)beginsWith; +@end diff --git a/AdjustIoTests/AILoggerMock.m b/AdjustIoTests/AILoggerMock.m new file mode 100644 index 000000000..7298ce370 --- /dev/null +++ b/AdjustIoTests/AILoggerMock.m @@ -0,0 +1,116 @@ +// +// AILoggerMock.m +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AILoggerMock.h" + +static NSString * const kLogTag = @"AdjustTests"; + +@interface AILoggerMock() + +@property (nonatomic, strong) NSMutableString *logBuffer; +@property (nonatomic, strong) NSDictionary *logMap; + +@end + +@implementation AILoggerMock + +- (id)init { + self = [super init]; + if (self == nil) return nil; + + self.logBuffer = [[NSMutableString alloc] init]; + self.logMap = @{ + @0 : [NSMutableArray array], + @1 : [NSMutableArray array], + @2 : [NSMutableArray array], + @3 : [NSMutableArray array], + @4 : [NSMutableArray array], + @5 : [NSMutableArray array], + @6 : [NSMutableArray array], + }; + + return self; +} + +- (NSString *)description { + return self.logBuffer; +} + +- (BOOL) containsMessage:(NSInteger)logLevel beginsWith:(NSString *)beginsWith { + NSMutableArray *logArray = (NSMutableArray *)self.logMap[@(logLevel)]; + for (int i = 0; i < [logArray count]; i++) { + NSString *logMessage = logArray[i]; + if ([logMessage hasPrefix:beginsWith]) { + [logArray removeObjectsInRange:NSMakeRange(0, i + 1)]; + NSLog(@"%@ found", beginsWith); + return YES; + } + } + NSLog(@"%@ not in (%@)", beginsWith, [logArray componentsJoinedByString:@","]); + return NO; +} + +- (void)setLogLevel:(AILogLevel)logLevel { + [self test:@"AILogger setLogLevel logLevel:%@", logLevel]; +} + +- (void)test:(NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelTest logPrefix:@"t" format:format parameters:parameters]; +} + + +- (void)verbose:(NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelVerbose logPrefix:@"v" format:format parameters:parameters]; +} + +- (void)debug: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelDebug logPrefix:@"d" format:format parameters:parameters]; +} + +- (void)info: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelInfo logPrefix:@"i" format:format parameters:parameters]; +} + +- (void)warn: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelWarn logPrefix:@"w" format:format parameters:parameters]; +} + +- (void)error: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelError logPrefix:@"e" format:format parameters:parameters]; +} + +- (void)assert: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelAssert logPrefix:@"a" format:format parameters:parameters]; +} + +// private implementation +- (void)logLevel:(NSInteger)logLevel logPrefix:(NSString *)logPrefix format:(NSString *)format parameters:(va_list)parameters { + NSString *formatedMessage = [[NSString alloc] initWithFormat:format arguments:parameters]; + va_end(parameters); + + NSString *logMessage = [NSString stringWithFormat:@"\t[%@]%@: %@", kLogTag, logPrefix, formatedMessage]; + + [self.logBuffer appendString:logMessage]; + + NSMutableArray *logArray = (NSMutableArray *)self.logMap[@(logLevel)]; + [logArray addObject:formatedMessage]; + + NSArray *lines = [formatedMessage componentsSeparatedByString:@"\n"]; + for (NSString *line in lines) { + NSLog(@"\t[%@]%@: %@", kLogTag, logPrefix, line); + } +} + +@end diff --git a/AdjustIoTests/AIPackageHandlerMock.h b/AdjustIoTests/AIPackageHandlerMock.h new file mode 100644 index 000000000..b55bb010b --- /dev/null +++ b/AdjustIoTests/AIPackageHandlerMock.h @@ -0,0 +1,18 @@ +// +// AIPackageHandlerMock.h +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIPackageHandler.h" + +@interface AIPackageHandlerMock : NSObject + +@property (nonatomic, strong) NSMutableArray *packageQueue; + +@property (nonatomic, strong) AIResponseData *responseData; +@property (nonatomic, strong) AIActivityPackage * activityPackage; + +@end diff --git a/AdjustIoTests/AIPackageHandlerMock.m b/AdjustIoTests/AIPackageHandlerMock.m new file mode 100644 index 000000000..6a21f6b5c --- /dev/null +++ b/AdjustIoTests/AIPackageHandlerMock.m @@ -0,0 +1,75 @@ +// +// AIPackageHandlerMock.m +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIPackageHandlerMock.h" +#import "AILoggerMock.h" +#import "AIAdjustFactory.h" +#import "AIActivityHandler.h" +#import "AIResponseData.h" + +static NSString * const prefix = @"AIPackageHandler "; + +@interface AIPackageHandlerMock() + +@property (nonatomic, strong) AILoggerMock *loggerMock; +@property (nonatomic, assign) id activityHandler; + +@end + +@implementation AIPackageHandlerMock + +- (id)init { + return [self initWithActivityHandler:nil]; +} + +- (id)initWithActivityHandler:(id)activityHandler { + self = [super init]; + if (self == nil) return nil; + + self.activityHandler = activityHandler; + + self.loggerMock = (AILoggerMock *) AIAdjustFactory.logger; + self.packageQueue = [NSMutableArray array]; + + [self.loggerMock test:[prefix stringByAppendingString:@"initWithActivityHandler"]]; + + return self; +} + +- (void)addPackage:(AIActivityPackage *)package { + [self.loggerMock test:[prefix stringByAppendingString:@"addPackage"]]; + [self.packageQueue addObject:package]; +} + +- (void)sendFirstPackage { + [self.loggerMock test:[prefix stringByAppendingString:@"sendFirstPackage"]]; + [self.activityHandler finishedTrackingWithResponse:[[AIResponseData alloc] init]]; +} + +- (void)sendNextPackage { + [self.loggerMock test:[prefix stringByAppendingString:@"sendNextPackage"]]; +} + +- (void)closeFirstPackage { + [self.loggerMock test:[prefix stringByAppendingString:@"closeFirstPackage"]]; +} + +- (void)pauseSending { + [self.loggerMock test:[prefix stringByAppendingString:@"pauseSending"]]; +} + +- (void)resumeSending { + [self.loggerMock test:[prefix stringByAppendingString:@"resumeSending"]]; +} + +- (void)finishedTrackingActivity:(AIActivityPackage *)activityPackage withResponse:(AIResponseData *)response { + [self.loggerMock test:[prefix stringByAppendingString:@"finishedTrackingActivity"]]; + self.responseData = response; +} + +@end diff --git a/AdjustIoTests/AIPackageHandlerTests.m b/AdjustIoTests/AIPackageHandlerTests.m new file mode 100644 index 000000000..18ccb28f9 --- /dev/null +++ b/AdjustIoTests/AIPackageHandlerTests.m @@ -0,0 +1,177 @@ +// +// AIPackageHandlerTests.m +// Adjust +// +// Created by Pedro Filipe on 07/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AIAdjustFactory.h" +#import "AILoggerMock.h" +#import "AIActivityHandlerMock.h" +#import "AIRequestHandlerMock.h" +#import "AITestsUtil.h" + +@interface AIPackageHandlerTests : XCTestCase + +@property (atomic,strong) AILoggerMock *loggerMock; +@property (atomic,strong) AIRequestHandlerMock *requestHandlerMock; + +@end + +@implementation AIPackageHandlerTests + +- (void)setUp +{ + [super setUp]; + // Put setup code here; it will be run once, before the first test case. +} + +- (void)tearDown +{ + [AIAdjustFactory setRequestHandler:nil]; + [AIAdjustFactory setLogger:nil]; + + // Put teardown code here; it will be run once, after the last test case. + [super tearDown]; +} + +- (void)reset { + self.loggerMock = [[AILoggerMock alloc] init]; + [AIAdjustFactory setLogger:self.loggerMock]; + + self.requestHandlerMock = [AIRequestHandlerMock alloc]; + [AIAdjustFactory setRequestHandler:self.requestHandlerMock]; + +} + +- (void)testFirstPackage +{ + // reseting to make the test order independent + [self reset]; + + // delete previously created Package queue file to make a new queue + XCTAssert([AITestsUtil deleteFile:@"AdjustIoPackageQueue" logger:self.loggerMock], @"%@", self.loggerMock); + + // initialize Package Handler + AIActivityHandlerMock *activityHandler = [[AIActivityHandlerMock alloc] initWithAppToken:@"123456789012"]; + id packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; + + // enable sending packages to Request Handler + [packageHandler resumeSending]; + + // build and add the first package to the queue + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + + // send the first package in the queue to the mock request handler + [packageHandler sendFirstPackage]; + + // it's necessary to sleep the activity for a while after each handler call + // to let the internal queue act + [NSThread sleepForTimeInterval:1.0]; + + // check that the request handler mock was created + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler initWithPackageHandler"], @"%@", self.loggerMock); + + // test that the file did not exist in the first run of the application + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Package queue file not found"], @"%@", self.loggerMock); + + // check that added first package to a previous empty queue + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Added package 1 "], @"%@", self.loggerMock); + + //TODO add the verbose message + + // it should write the package queue with the first session package + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler wrote 1 packages"], @"%@", self.loggerMock); + + // check that the Request Handler was called to send the package + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler sendPackage"], @"%@", self.loggerMock); + + // check that the the request handler called the package callback, that foward it to the activity handler + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIActivityHandler finishedTrackingWithResponse"], + @"%@", self.loggerMock); + + // check that the package was removed from the queue and 0 packages were written + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler wrote 0 packages"], @"%@", self.loggerMock); +} + +- (void) testPaused { + // reseting to make the test order independent + [self reset]; + + // initialize Package Handler + AIActivityHandlerMock *activityHandler = [[AIActivityHandlerMock alloc] initWithAppToken:@"123456789012"]; + id packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; + + // disable sending packages to Request Handler + [packageHandler pauseSending]; + + // build and add a package the queue + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + + // try to send the first package in the queue to the mock request handler + [packageHandler sendFirstPackage]; + + [NSThread sleepForTimeInterval:1.0]; + + // check that the request handler mock was created + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler initWithPackageHandler"], @"%@", self.loggerMock); + + // check that a package was added + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Added package "], @"%@", self.loggerMock); + + // check that the mock request handler was NOT called to send the package + XCTAssertFalse([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler sendPackage"], @"%@", self.loggerMock); + + // check that the package handler is paused + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler is paused"], @"%@", self.loggerMock); +} + +- (void) testMultiplePackages { + // reseting to make the test order independent + [self reset]; + + // delete previously created Package queue file to make a new queue + XCTAssert([AITestsUtil deleteFile:@"AdjustIoPackageQueue" logger:self.loggerMock], @"%@", self.loggerMock); + + // initialize Package Handler + AIActivityHandlerMock *activityHandler = [[AIActivityHandlerMock alloc] initWithAppToken:@"123456789012"]; + id packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; + + // enable sending packages to Request Handler + [packageHandler resumeSending]; + + // build and add the 3 packages to the queue + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + + // create a new package handler to simulate a new launch + [NSThread sleepForTimeInterval:1.0]; + packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; + + // try to send two packages without closing the first + [packageHandler sendFirstPackage]; + [packageHandler sendFirstPackage]; + + [NSThread sleepForTimeInterval:1.0]; + + // check that the request handler mock was created + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler initWithPackageHandler"], @"%@", self.loggerMock); + + // test that the file did not exist in the first run of the application + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Package queue file not found"], @"%@", self.loggerMock); + + // check that added the third package to the queue and wrote to a file + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Added package 3 "], @"%@", self.loggerMock); + + // check that it reads the same 3 packages in the file + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler read 3 packages"], @"%@", self.loggerMock); + + // check that the package handler was already sending one package before + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Package handler is already sending"], @"%@", self.loggerMock); + +} + +@end diff --git a/AdjustIoTests/AIRequestHandlerMock.h b/AdjustIoTests/AIRequestHandlerMock.h new file mode 100644 index 000000000..836c23791 --- /dev/null +++ b/AdjustIoTests/AIRequestHandlerMock.h @@ -0,0 +1,16 @@ +// +// AIRequestHandlerMock.h +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AIRequestHandler.h" + +@interface AIRequestHandlerMock : NSObject + +@property (nonatomic, assign) BOOL connectionError; + +@end diff --git a/AdjustIoTests/AIRequestHandlerMock.m b/AdjustIoTests/AIRequestHandlerMock.m new file mode 100644 index 000000000..be926adf0 --- /dev/null +++ b/AdjustIoTests/AIRequestHandlerMock.m @@ -0,0 +1,60 @@ +// +// AIRequestHandlerMock.m +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIRequestHandlerMock.h" +#import "AILoggerMock.h" +#import "AIAdjustFactory.h" +#import "AIResponseData.h" + +static NSString * const prefix = @"AIRequestHandler "; + +@interface AIRequestHandlerMock() + +@property (nonatomic, assign) id packageHandler; +@property (nonatomic, assign) AILoggerMock *loggerMock; + +@end + +@implementation AIRequestHandlerMock + +- (id)initWithPackageHandler:(id) packageHandler { + self = [super init]; + if (self == nil) return nil; + + self.packageHandler = packageHandler; + self.loggerMock = (AILoggerMock *) [AIAdjustFactory logger]; + + [self.loggerMock test:[prefix stringByAppendingString:@"initWithPackageHandler"]]; + + self.connectionError = NO; + + return self; +} + +- (void)sendPackage:(AIActivityPackage *)activityPackage { + [self.loggerMock test:[prefix stringByAppendingString:@"sendPackage"]]; + + AIResponseData *responseData; + + if (self.connectionError) { + responseData = [[AIResponseData alloc] initWithError:@"connection error"]; + } else { + responseData = [[AIResponseData alloc] initWithJsonString:@"{\"tracker_token\":\"token\",\"tracker_name\":\"name\"}"]; + } + + [self.packageHandler finishedTrackingActivity:activityPackage withResponse:responseData]; + + if (self.connectionError) { + [self.packageHandler closeFirstPackage]; + } else { + [self.packageHandler sendNextPackage]; + } +} + + +@end diff --git a/AdjustIoTests/AIRequestHandlerTests.m b/AdjustIoTests/AIRequestHandlerTests.m new file mode 100644 index 000000000..935fefa69 --- /dev/null +++ b/AdjustIoTests/AIRequestHandlerTests.m @@ -0,0 +1,159 @@ +// +// AIRequestHandlerTests.m +// Adjust +// +// Created by Pedro Filipe on 07/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AIAdjustFactory.h" +#import "AILoggerMock.h" +#import "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h" +#import "AIPackageHandlerMock.h" +#import "AIRequestHandlerMock.h" +#import "AITestsUtil.h" +#import "AIResponseData.h" + +@interface AIRequestHandlerTests : XCTestCase + +@property (atomic,strong) AILoggerMock *loggerMock; +@property (atomic,strong) AIPackageHandlerMock *packageHandlerMock; +@property (atomic,strong) id requestHandler; + + +@end + +@implementation AIRequestHandlerTests + +- (void)setUp +{ + [super setUp]; + // Put setup code here; it will be run once, before the first test case. + + [self reset]; + +} + +- (void)tearDown +{ + [AIAdjustFactory setLogger:nil]; + + // Put teardown code here; it will be run once, after the last test case. + [super tearDown]; +} + +- (void)reset { + self.loggerMock = [[AILoggerMock alloc] init]; + [AIAdjustFactory setLogger:self.loggerMock]; + + self.packageHandlerMock = [[AIPackageHandlerMock alloc] init]; + self.requestHandler =[AIAdjustFactory requestHandlerForPackageHandler:self.packageHandlerMock]; +} + +- (void)testSendPackage +{ + // reseting to make the test order independent + [self reset]; + + // set the connection to respond OK + [NSURLConnection setConnectionError:NO]; + [NSURLConnection setResponseError:NO]; + + [self.requestHandler sendPackage:[AITestsUtil buildEmptyPackage]]; + + [NSThread sleepForTimeInterval:1.0]; + + NSLog(@"%@", self.loggerMock); + + // check the URL Connection was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"NSURLConnection sendSynchronousRequest"], + @"%@", self.loggerMock); + + // check that the package handler was pinged after sending + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler finishedTrackingActivity"], + @"%@", self.loggerMock); + + // check the response data, the kind is unknown because is set by the package handler + NSString *sresponseData= [NSString stringWithFormat:@"%@", self.packageHandlerMock.responseData]; + XCTAssert([sresponseData isEqualToString:@"[kind:unknown success:1 willRetry:0 error:(null) trackerToken:token trackerName:name]"], + @"%@", sresponseData); + + // check that the package was successfully sent + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Tracked session"], + @"%@", self.loggerMock); + + // check that the package handler was called to send the next package + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendNextPackage"], + @"%@", self.loggerMock); + +} + +- (void)testConnectionError { + // reseting to make the test order independent + [self reset]; + + // set the connection to return error on the connection + [NSURLConnection setConnectionError:YES]; + [NSURLConnection setResponseError:NO]; + + [self.requestHandler sendPackage:[AITestsUtil buildEmptyPackage]]; + [NSThread sleepForTimeInterval:1.0]; + + // check the URL Connection was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"NSURLConnection sendSynchronousRequest"], + @"%@", self.loggerMock); + + // check that the package handler was pinged after sending + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler finishedTrackingActivity"], + @"%@", self.loggerMock); + + // check the response data, + NSString *sresponseData= [NSString stringWithFormat:@"%@", self.packageHandlerMock.responseData]; + XCTAssert([sresponseData isEqualToString:@"[kind:unknown success:0 willRetry:1 error:'connection error' trackerToken:(null) trackerName:(null)]"], @"%@", sresponseData); + + // check that the package was successfully sent + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Failed to track session. (connection error) Will retry later."], + @"%@", self.loggerMock); + + // check that the package handler was called to close the package to retry later + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler closeFirstPackage"], + @"%@", self.loggerMock); + +} + +- (void)testResponseError { + // reseting to make the test order independent + [self reset]; + + // set the response to return an error + [NSURLConnection setConnectionError:NO]; + [NSURLConnection setResponseError:YES]; + + [self.requestHandler sendPackage:[AITestsUtil buildEmptyPackage]]; + [NSThread sleepForTimeInterval:1.0]; + + // check the URL Connection was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"NSURLConnection sendSynchronousRequest"], + @"%@", self.loggerMock); + + // check that the package handler was pinged after sending + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler finishedTrackingActivity"], + @"%@", self.loggerMock); + + // check the response data, + NSString *sresponseData= [NSString stringWithFormat:@"%@", self.packageHandlerMock.responseData]; + XCTAssert([sresponseData isEqualToString:@"[kind:unknown success:0 willRetry:0 error:'response error' trackerToken:token trackerName:name]"], @"%@", sresponseData); + + // check that the package was successfully sent + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Failed to track session. (response error)"], + @"%@", sresponseData); + + // check that the package handler was called to send the next package + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendNextPackage"], + @"%@", self.loggerMock); + +} + + +@end diff --git a/AdjustIoTests/AITestsUtil.h b/AdjustIoTests/AITestsUtil.h new file mode 100644 index 000000000..0f5a0f48e --- /dev/null +++ b/AdjustIoTests/AITestsUtil.h @@ -0,0 +1,22 @@ +// +// AITestsUtil.h +// Adjust +// +// Created by Pedro Filipe on 12/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AILoggerMock.h" +#import "AIActivityPackage.h" +#import "Adjust.h" + +@interface AITestsUtil : NSObject + ++ (NSString *)getFilename:(NSString *)filename; ++ (BOOL)deleteFile:(NSString *)filename logger:(AILoggerMock *)loggerMock; ++ (AIActivityPackage *)buildEmptyPackage; + +- (void)adjustFinishedTrackingWithResponse:(AIResponseData *)responseData; + +@end diff --git a/AdjustIoTests/AITestsUtil.m b/AdjustIoTests/AITestsUtil.m new file mode 100644 index 000000000..297a47c8b --- /dev/null +++ b/AdjustIoTests/AITestsUtil.m @@ -0,0 +1,57 @@ +// +// AITestsUtil.m +// Adjust +// +// Created by Pedro Filipe on 12/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AITestsUtil.h" +#import "AIPackageBuilder.h" +#import "AILoggerMock.h" +#import "AIAdjustFactory.h" + +@implementation AITestsUtil + ++ (NSString *)getFilename:(NSString *)filename { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *path = [paths objectAtIndex:0]; + NSString *filepath = [path stringByAppendingPathComponent:filename]; + return filepath; +} + ++ (BOOL)deleteFile:(NSString *)filename logger:(AILoggerMock *)loggerMock { + NSString *filepath = [AITestsUtil getFilename:filename]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSError *error = nil; + BOOL exists = [fileManager fileExistsAtPath:filepath]; + if (!exists) { + [loggerMock test:@"file %@ does not exist at path %@", filename, filepath]; + return YES; + } + BOOL deleted = [fileManager removeItemAtPath:filepath error:&error]; + + if (!deleted) { + [loggerMock test:@"unable to delete file %@ at path %@", filename, filepath]; + } + + if (error) { + [loggerMock test:@"error (%@) deleting file %@", [error localizedDescription], filename]; + } + + return deleted; +} + ++ (AIActivityPackage *)buildEmptyPackage { + AIPackageBuilder *sessionBuilder = [[AIPackageBuilder alloc] init]; + AIActivityPackage *sessionPackage = [sessionBuilder buildSessionPackage]; + return sessionPackage; +} + +- (void)adjustFinishedTrackingWithResponse:(AIResponseData *)responseData { + AILoggerMock *loggerMock = (AILoggerMock *)AIAdjustFactory.logger; + + [loggerMock test:@"AdjustDelegate adjustFinishedTrackingWithResponse"]; +} + +@end diff --git a/AdjustIoTests/AdjustIoTests-Info.plist b/AdjustIoTests/AdjustIoTests-Info.plist new file mode 100644 index 000000000..654db09eb --- /dev/null +++ b/AdjustIoTests/AdjustIoTests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + adeven.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h b/AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h new file mode 100644 index 000000000..cfe3d4024 --- /dev/null +++ b/AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h @@ -0,0 +1,18 @@ +// +// NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h +// Adjust +// +// Created by Pedro Filipe on 12/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import + +@interface NSURLConnection(NSURLConnectionSynchronousLoadingMock) + ++ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error; + ++ (void)setConnectionError:(BOOL)connection; ++ (void)setResponseError:(BOOL)response; + +@end diff --git a/AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m b/AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m new file mode 100644 index 000000000..440e19216 --- /dev/null +++ b/AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m @@ -0,0 +1,57 @@ +// +// NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m +// Adjust +// +// Created by Pedro Filipe on 12/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// +#import "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h" +#import "AIAdjustFactory.h" +#import "AILoggerMock.h" + +static BOOL triggerConnectionError = NO; +static BOOL triggerResponseError = NO; + +@implementation NSURLConnection(NSURLConnectionSynchronousLoadingMock) + ++ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error { + AILoggerMock *loggerMock =(AILoggerMock *)AIAdjustFactory.logger; + [loggerMock test:@"NSURLConnection sendSynchronousRequest"]; + + if (triggerConnectionError) { + NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(@"connection error", nil) }; + (*error) = [NSError errorWithDomain:@"Adjust" + code:-57 + userInfo:userInfo]; + return nil; + } + NSInteger statusCode; + NSString * sResponseBase64; + if (triggerResponseError) { + statusCode = 0; + // encoded from "{"error":"response error","tracker_token":"token","tracker_name":"name"}" + sResponseBase64 = @"eyJlcnJvciI6InJlc3BvbnNlIGVycm9yIiwidHJhY2tlcl90b2tlbiI6InRva2VuIiwidHJhY2tlcl9uYW1lIjoibmFtZSJ9"; + } else { + statusCode = 200; + // encoded from "{"tracker_token":"token","tracker_name":"name"}" + sResponseBase64 = @"eyJ0cmFja2VyX3Rva2VuIjoidG9rZW4iLCJ0cmFja2VyX25hbWUiOiJuYW1lIn0="; + } + // build response + (*response) = [[NSHTTPURLResponse alloc] initWithURL:[[NSURL alloc] init] statusCode:statusCode HTTPVersion:@"" headerFields:nil]; + + NSData *responseData = [[NSData alloc] + initWithBase64EncodedString:sResponseBase64 + options:NSDataBase64DecodingIgnoreUnknownCharacters]; + + return responseData; +} + ++ (void)setConnectionError:(BOOL)connection { + triggerConnectionError = connection; +} + ++ (void)setResponseError:(BOOL)response { + triggerResponseError = response; +} + +@end diff --git a/AdjustIoTests/en.lproj/InfoPlist.strings b/AdjustIoTests/en.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/AdjustIoTests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + From ea6e309a8aa5d3eac7b5eca4d3d18802d017e7ca Mon Sep 17 00:00:00 2001 From: Pedro Date: Fri, 14 Feb 2014 18:08:20 +0100 Subject: [PATCH 02/11] Test request handler unbuffered --- AdjustIoTests/AIActivityHandlerTests.m | 84 +++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/AdjustIoTests/AIActivityHandlerTests.m b/AdjustIoTests/AIActivityHandlerTests.m index 04e3bec81..dc4a21de3 100644 --- a/AdjustIoTests/AIActivityHandlerTests.m +++ b/AdjustIoTests/AIActivityHandlerTests.m @@ -270,8 +270,90 @@ - (void)testEventsNotBuffered { // reseting to make the test order independent [self reset]; -} + // starting from a clean slate + XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); + + // create handler to start the session + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + [activityHandler setBufferEvents:NO]; + + // the first is a normal event has parameters, the second a revenue + [activityHandler trackEvent:@"abc123" withParameters:nil]; + [activityHandler trackRevenue:0 forEvent:nil withParameters:nil]; + + [NSThread sleepForTimeInterval:2]; + + // check that the package added the session, event and revenue package + XCTAssertEqual(3, (NSInteger)[self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + // check the first event + AIActivityPackage *eventPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; + // check the event path + XCTAssert([eventPackage.path isEqualToString:@"/event"], @"%@", eventPackage.extendedString); + + // check the event suffix + XCTAssert([eventPackage.suffix isEqualToString:@" 'abc123'"], @"%@", eventPackage.extendedString); + + NSDictionary *eventPackageParameters = eventPackage.parameters; + + // check the event count in the package parameters + XCTAssertEqual(1, [(NSString *)eventPackageParameters[@"event_count"] intValue], @"%@", eventPackage.extendedString); + + // check the event token + XCTAssert([(NSString *)eventPackageParameters[@"event_token"] isEqualToString:@"abc123"], @"%@", eventPackage.extendedString); + + // check the that the parameters were not injected + XCTAssertNil(eventPackageParameters[@"params"], @"%@", eventPackage.extendedString); + + // check that the package handler was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendFirstPackage"], @"%@", self.loggerMock); + + // check the event count in the written activity state + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:1"], @"%@", self.loggerMock); + + // check the event count in the logger + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 1"], @"%@", self.loggerMock); + + // check the second event/ first revenue + AIActivityPackage *revenuePackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[2]; + + // check the revenue path + XCTAssert([revenuePackage.path isEqualToString:@"/revenue"], @"%@", revenuePackage.extendedString); + + // check the revenue suffix + // note that the amount was rounded to the decimal cents + XCTAssert([revenuePackage.suffix isEqualToString:@" (0.0 cent, 'abc123')"], @"%@", revenuePackage.extendedString); + + NSDictionary *revenuePackageParameters = revenuePackage.parameters; + + // check the event count in the package parameters + XCTAssertEqual(2, [(NSString *)revenuePackageParameters[@"event_count"] intValue], @"%@", revenuePackage.extendedString); + + // check the amount, transforming cents into rounded decimal cents + // note that the 4.45 cents ~> 45 decimal cents + XCTAssertEqual(0, [(NSString *)revenuePackageParameters[@"amount"] intValue], @"%@", revenuePackage.extendedString); + + // check that the event token is nil + XCTAssertNil(revenuePackageParameters[@"event_token"], @"%@", revenuePackage.extendedString); + + // check the that the parameters were not injected + XCTAssertNil(eventPackageParameters[@"params"], @"%@", eventPackage.extendedString); + + // check that the package handler was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendFirstPackage"], @"%@", self.loggerMock); + + // check the event count in the written activity state + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:2"], @"%@", self.loggerMock); + + // check the event count in the logger + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 2 (revenue)"], @"%@", self.loggerMock); + +} + +- (void)testChecks { + // reseting to make the test order independent + [self reset]; +} @end From 799bf770a7cf640ad346554e10f43af8657acf8f Mon Sep 17 00:00:00 2001 From: Pedro Date: Mon, 17 Feb 2014 13:44:56 +0100 Subject: [PATCH 03/11] Ignore prefix header files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 144b934da..eb6655971 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ profile DerivedData *.hmap *.ipa +*-Prefix.pch # CocoaPods Pods From 7523db44f005d51315ff55146d1425f75c79aad8 Mon Sep 17 00:00:00 2001 From: Pedro Date: Mon, 17 Feb 2014 13:45:17 +0100 Subject: [PATCH 04/11] Test activity handler checks --- AdjustIo.xcodeproj/project.pbxproj | 6 ++- AdjustIoTests/AIActivityHandlerTests.m | 63 +++++++++++++++++++++++++- 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/AdjustIo.xcodeproj/project.pbxproj b/AdjustIo.xcodeproj/project.pbxproj index 68ad06617..c4e35efb2 100644 --- a/AdjustIo.xcodeproj/project.pbxproj +++ b/AdjustIo.xcodeproj/project.pbxproj @@ -64,7 +64,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 7FF8AC7A18AD54870065977B /* Adjust-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Adjust-Prefix.pch"; sourceTree = ""; }; 7FF8AC7B18AD54870065977B /* Adjust.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Adjust.h; sourceTree = ""; }; 7FF8AC7C18AD54870065977B /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; 7FF8AC7D18AD54870065977B /* AIActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandler.h; sourceTree = ""; }; @@ -147,7 +146,6 @@ 7FF8AC7918AD54870065977B /* Adjust */ = { isa = PBXGroup; children = ( - 7FF8AC7A18AD54870065977B /* Adjust-Prefix.pch */, 7FF8AC7B18AD54870065977B /* Adjust.h */, 7FF8AC7C18AD54870065977B /* Adjust.m */, 7FF8AC7D18AD54870065977B /* AIActivityHandler.h */, @@ -471,7 +469,9 @@ "$(inherited)", /Users/pfms/GitHub/adjust_ios_sdk, ); + GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; OTHER_LDFLAGS = "-ObjC"; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -488,7 +488,9 @@ "$(inherited)", /Users/pfms/GitHub/adjust_ios_sdk, ); + GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; OTHER_LDFLAGS = "-ObjC"; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/AdjustIoTests/AIActivityHandlerTests.m b/AdjustIoTests/AIActivityHandlerTests.m index dc4a21de3..143afffd8 100644 --- a/AdjustIoTests/AIActivityHandlerTests.m +++ b/AdjustIoTests/AIActivityHandlerTests.m @@ -323,7 +323,7 @@ - (void)testEventsNotBuffered { // check the revenue suffix // note that the amount was rounded to the decimal cents - XCTAssert([revenuePackage.suffix isEqualToString:@" (0.0 cent, 'abc123')"], @"%@", revenuePackage.extendedString); + XCTAssert([revenuePackage.suffix isEqualToString:@" (0.0 cent)"], @"%@", revenuePackage.extendedString); NSDictionary *revenuePackageParameters = revenuePackage.parameters; @@ -354,6 +354,67 @@ - (void)testEventsNotBuffered { - (void)testChecks { // reseting to make the test order independent [self reset]; + + // activity handler without app token + id nilActivityHandler = [AIAdjustFactory activityHandlerWithAppToken:nil]; + + // trigger the nil app token a 2nd time for a subsession start + [nilActivityHandler trackSubsessionStart]; + + // trigger the nil app token a 3rd time for a subsession end + [nilActivityHandler trackSubsessionStart]; + + // trigger the nil app token a 4th time for a event + [nilActivityHandler trackEvent:@"ab123" withParameters:nil]; + + // trigger the nil app token a 5th time for a revenue + [nilActivityHandler trackRevenue:0 forEvent:@"abc123" withParameters:nil]; + + [NSThread sleepForTimeInterval:1]; + // activity with invalid app token + id invalidActivityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"12345678901"]; + + [NSThread sleepForTimeInterval:1]; + // activity with valid app token + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + + // track event with nil token + [activityHandler trackEvent:nil withParameters:nil]; + + // track event with invalid token + [activityHandler trackEvent:@"abc1234" withParameters:nil]; + + // track revenue with nil token + [activityHandler trackEvent:nil withParameters:nil]; + + // track revenue with invalid token + [activityHandler trackEvent:@"abc12" withParameters:nil]; + + [NSThread sleepForTimeInterval:1]; + + // check missing app token messages + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + + // check the invalid app token message + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed App Token '12345678901'"], @"%@", self.loggerMock); + + // check the nil event token + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing Event Token"], @"%@", self.loggerMock); + + // check the invalid event token + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed Event Token 'abc1234'"], @"%@", self.loggerMock); + + // check the nil revenue token + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing Event Token"], @"%@", self.loggerMock); + + // check the invalid revenue token + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed Event Token 'abc12'"], @"%@", self.loggerMock); + + } @end From e24b35f0b3ed8d1e46f94a4158f508c9b99cebfa Mon Sep 17 00:00:00 2001 From: Pedro Date: Mon, 17 Feb 2014 13:51:13 +0100 Subject: [PATCH 05/11] Test revenue invalid amount --- AdjustIoTests/AIActivityHandlerTests.m | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/AdjustIoTests/AIActivityHandlerTests.m b/AdjustIoTests/AIActivityHandlerTests.m index 143afffd8..d79797397 100644 --- a/AdjustIoTests/AIActivityHandlerTests.m +++ b/AdjustIoTests/AIActivityHandlerTests.m @@ -384,11 +384,11 @@ - (void)testChecks { // track event with invalid token [activityHandler trackEvent:@"abc1234" withParameters:nil]; - // track revenue with nil token - [activityHandler trackEvent:nil withParameters:nil]; + // track revenue with invalid amount token + [activityHandler trackRevenue:-0.1 forEvent:nil withParameters:nil]; // track revenue with invalid token - [activityHandler trackEvent:@"abc12" withParameters:nil]; + [activityHandler trackRevenue:0 forEvent:@"abc12" withParameters:nil]; [NSThread sleepForTimeInterval:1]; @@ -408,13 +408,12 @@ - (void)testChecks { // check the invalid event token XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed Event Token 'abc1234'"], @"%@", self.loggerMock); - // check the nil revenue token - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing Event Token"], @"%@", self.loggerMock); + // check the invalid revenue amount token + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Invalid amount -0.1"], @"%@", self.loggerMock); // check the invalid revenue token XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed Event Token 'abc12'"], @"%@", self.loggerMock); - } @end From 0f2f8e5f955f98c51ce95de748c30cf8c0f4e637 Mon Sep 17 00:00:00 2001 From: Christian Wellenbrock Date: Mon, 17 Feb 2014 14:14:04 +0100 Subject: [PATCH 06/11] Move Adjust-Prefix.pch file into test folder --- AdjustIo.xcodeproj/project.pbxproj | 4 +- .../xcshareddata/AdjustIo.xccheckout | 41 ------------------- 2 files changed, 2 insertions(+), 43 deletions(-) delete mode 100644 AdjustIo.xcodeproj/project.xcworkspace/xcshareddata/AdjustIo.xccheckout diff --git a/AdjustIo.xcodeproj/project.pbxproj b/AdjustIo.xcodeproj/project.pbxproj index c4e35efb2..aca005295 100644 --- a/AdjustIo.xcodeproj/project.pbxproj +++ b/AdjustIo.xcodeproj/project.pbxproj @@ -509,7 +509,7 @@ /Users/pfms/GitHub/adjust_ios_sdk, ); GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Adjust/Adjust-Prefix.pch"; + GCC_PREFIX_HEADER = "AdjustIoTests/Adjust-Prefix.pch"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -531,7 +531,7 @@ /Users/pfms/GitHub/adjust_ios_sdk, ); GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Adjust/Adjust-Prefix.pch"; + GCC_PREFIX_HEADER = "AdjustIoTests/Adjust-Prefix.pch"; INFOPLIST_FILE = "AdjustIoTests/AdjustIoTests-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = xctest; diff --git a/AdjustIo.xcodeproj/project.xcworkspace/xcshareddata/AdjustIo.xccheckout b/AdjustIo.xcodeproj/project.xcworkspace/xcshareddata/AdjustIo.xccheckout deleted file mode 100644 index 4b1a8df06..000000000 --- a/AdjustIo.xcodeproj/project.xcworkspace/xcshareddata/AdjustIo.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ - - - - - IDESourceControlProjectFavoriteDictionaryKey - - IDESourceControlProjectIdentifier - 13E048FD-E792-464F-AD3C-78F6DBFCB0DB - IDESourceControlProjectName - AdjustIo - IDESourceControlProjectOriginsDictionary - - 721308F3-3749-4DBE-A630-4BE178874714 - https://github.com/adeven/adjust_ios_sdk.git - - IDESourceControlProjectPath - AdjustIo.xcodeproj/project.xcworkspace - IDESourceControlProjectRelativeInstallPathDictionary - - 721308F3-3749-4DBE-A630-4BE178874714 - ../.. - - IDESourceControlProjectURL - https://github.com/adeven/adjust_ios_sdk.git - IDESourceControlProjectVersion - 110 - IDESourceControlProjectWCCIdentifier - 721308F3-3749-4DBE-A630-4BE178874714 - IDESourceControlProjectWCConfigurations - - - IDESourceControlRepositoryExtensionIdentifierKey - public.vcs.git - IDESourceControlWCCIdentifierKey - 721308F3-3749-4DBE-A630-4BE178874714 - IDESourceControlWCCName - adjust_ios_sdk - - - - From 8a87636074b15274512ace034af988859b1e8bd0 Mon Sep 17 00:00:00 2001 From: Christian Wellenbrock Date: Mon, 17 Feb 2014 14:25:06 +0100 Subject: [PATCH 07/11] Expect NSUIntegers in NSArray.count tests --- AdjustIoTests/AIActivityHandlerTests.m | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AdjustIoTests/AIActivityHandlerTests.m b/AdjustIoTests/AIActivityHandlerTests.m index d79797397..4db60e1ee 100644 --- a/AdjustIoTests/AIActivityHandlerTests.m +++ b/AdjustIoTests/AIActivityHandlerTests.m @@ -81,7 +81,7 @@ - (void)testFirstRun // checking the default values of the first session package // should only have one package - XCTAssertEqual(1, (NSInteger)[self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + XCTAssertEqual((NSUInteger)1, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); AIActivityPackage *activityPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[0]; @@ -157,7 +157,7 @@ - (void)testSessions { XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Session 2"], @"%@", self.loggerMock); // check that 2 packages were added to the package handler - XCTAssertEqual(2, (NSInteger)[self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + XCTAssertEqual((NSUInteger)2, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); // get the second session package and its parameters AIActivityPackage *activityPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; @@ -198,7 +198,7 @@ - (void)testEventsBuffered { //XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Event buffering is enabled"], @"%@", self.loggerMock); // check that the package builder added the session, event and revenue package - XCTAssertEqual(3, (NSInteger)[self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + XCTAssertEqual((NSUInteger)3, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); // check the first event AIActivityPackage *eventPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; @@ -284,7 +284,7 @@ - (void)testEventsNotBuffered { [NSThread sleepForTimeInterval:2]; // check that the package added the session, event and revenue package - XCTAssertEqual(3, (NSInteger)[self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + XCTAssertEqual((NSUInteger)3, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); // check the first event AIActivityPackage *eventPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; From aa8a2c6ab0f3b44b4eee38cabbbfc6123541d8fc Mon Sep 17 00:00:00 2001 From: Christian Wellenbrock Date: Mon, 17 Feb 2014 14:27:17 +0100 Subject: [PATCH 08/11] Fix some warnings by adding explicit type casts --- Adjust/AIAdditions/NSData+AIAdditions.m | 2 +- Adjust/AIAdditions/NSString+AIAdditions.m | 4 ++-- Adjust/AIUtil.m | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Adjust/AIAdditions/NSData+AIAdditions.m b/Adjust/AIAdditions/NSData+AIAdditions.m index 4cc847fc7..2fd5e9991 100644 --- a/Adjust/AIAdditions/NSData+AIAdditions.m +++ b/Adjust/AIAdditions/NSData+AIAdditions.m @@ -19,7 +19,7 @@ - (NSString *)aiEncodeBase64 { char * strResult; // Get the Raw Data length and ensure we actually have data - int intLength = self.length; + NSUInteger intLength = self.length; if (intLength == 0) return nil; // Setup the String-based Result placeholder and pointer within that placeholder diff --git a/Adjust/AIAdditions/NSString+AIAdditions.m b/Adjust/AIAdditions/NSString+AIAdditions.m index 340af566e..5a32e09af 100644 --- a/Adjust/AIAdditions/NSString+AIAdditions.m +++ b/Adjust/AIAdditions/NSString+AIAdditions.m @@ -30,7 +30,7 @@ - (NSString *)aiQuote { - (NSString *)aiMd5 { const char *cStr = [self UTF8String]; unsigned char digest[16]; - CC_MD5(cStr, strlen(cStr), digest); + CC_MD5(cStr, (CC_LONG)strlen(cStr), digest); NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { @@ -43,7 +43,7 @@ - (NSString *)aiSha1 { const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:self.length]; uint8_t digest[CC_SHA1_DIGEST_LENGTH]; - CC_SHA1(data.bytes, data.length, digest); + CC_SHA1(data.bytes, (CC_LONG)data.length, digest); NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) { diff --git a/Adjust/AIUtil.m b/Adjust/AIUtil.m index 137f51fc5..4f3f0765e 100644 --- a/Adjust/AIUtil.m +++ b/Adjust/AIUtil.m @@ -90,7 +90,7 @@ + (void)excludeFromBackup:(NSString *)path { } } else { // iOS 5.0 and higher // First try and remove the extended attribute if it is present - int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0); + ssize_t result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0); if (result != -1) { // The attribute exists, we need to remove it int removeResult = removexattr(filePath, attrName, 0); From fa134efa4cbf2b25aa99341c1509e80d2afe1903 Mon Sep 17 00:00:00 2001 From: Pedro Date: Mon, 24 Feb 2014 18:35:55 +0100 Subject: [PATCH 09/11] Renaming of project and tests --- Adjust.xcodeproj/project.pbxproj | 638 ++++++++++++++++++ .../contents.xcworkspacedata | 2 +- .../AdjustTests}/AIActivityHandlerMock.h | 0 .../AdjustTests}/AIActivityHandlerMock.m | 0 .../AdjustTests}/AIActivityHandlerTests.m | 0 .../AdjustTests}/AILoggerMock.h | 0 .../AdjustTests}/AILoggerMock.m | 0 .../AdjustTests}/AIPackageHandlerMock.h | 0 .../AdjustTests}/AIPackageHandlerMock.m | 0 .../AdjustTests}/AIPackageHandlerTests.m | 0 .../AdjustTests}/AIRequestHandlerMock.h | 0 .../AdjustTests}/AIRequestHandlerMock.m | 0 .../AdjustTests}/AIRequestHandlerTests.m | 0 .../AdjustTests}/AITestsUtil.h | 0 .../AdjustTests}/AITestsUtil.m | 0 .../AdjustTests/AdjustTests-Info.plist | 0 ...NSURLConnectionSynchronousLoadingMocking.h | 0 ...NSURLConnectionSynchronousLoadingMocking.m | 0 .../AdjustTests}/en.lproj/InfoPlist.strings | 0 AdjustIo.xcodeproj/project.pbxproj | 574 ---------------- .../xcschemes/AdjustIo.xcscheme | 69 -- .../xcschemes/xcschememanagement.plist | 27 - AdjustTests/AIActivityHandlerMock.h | 13 + AdjustTests/AIActivityHandlerMock.m | 67 ++ AdjustTests/AIActivityHandlerTests.m | 419 ++++++++++++ AdjustTests/AILoggerMock.h | 17 + AdjustTests/AILoggerMock.m | 116 ++++ AdjustTests/AIPackageHandlerMock.h | 18 + AdjustTests/AIPackageHandlerMock.m | 75 ++ AdjustTests/AIPackageHandlerTests.m | 177 +++++ AdjustTests/AIRequestHandlerMock.h | 16 + AdjustTests/AIRequestHandlerMock.m | 60 ++ AdjustTests/AIRequestHandlerTests.m | 159 +++++ AdjustTests/AITestsUtil.h | 22 + AdjustTests/AITestsUtil.m | 57 ++ AdjustTests/AdjustTests-Info.plist | 22 + ...NSURLConnectionSynchronousLoadingMocking.h | 18 + ...NSURLConnectionSynchronousLoadingMocking.m | 57 ++ AdjustTests/en.lproj/InfoPlist.strings | 2 + 39 files changed, 1954 insertions(+), 671 deletions(-) create mode 100644 Adjust.xcodeproj/project.pbxproj rename {AdjustIo.xcodeproj => Adjust.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (71%) rename {AdjustIoTests => Adjust/AdjustTests}/AIActivityHandlerMock.h (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AIActivityHandlerMock.m (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AIActivityHandlerTests.m (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AILoggerMock.h (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AILoggerMock.m (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AIPackageHandlerMock.h (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AIPackageHandlerMock.m (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AIPackageHandlerTests.m (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AIRequestHandlerMock.h (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AIRequestHandlerMock.m (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AIRequestHandlerTests.m (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AITestsUtil.h (100%) rename {AdjustIoTests => Adjust/AdjustTests}/AITestsUtil.m (100%) rename AdjustIoTests/AdjustIoTests-Info.plist => Adjust/AdjustTests/AdjustTests-Info.plist (100%) rename {AdjustIoTests => Adjust/AdjustTests}/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h (100%) rename {AdjustIoTests => Adjust/AdjustTests}/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m (100%) rename {AdjustIoTests => Adjust/AdjustTests}/en.lproj/InfoPlist.strings (100%) delete mode 100644 AdjustIo.xcodeproj/project.pbxproj delete mode 100644 AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/AdjustIo.xcscheme delete mode 100644 AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 AdjustTests/AIActivityHandlerMock.h create mode 100644 AdjustTests/AIActivityHandlerMock.m create mode 100644 AdjustTests/AIActivityHandlerTests.m create mode 100644 AdjustTests/AILoggerMock.h create mode 100644 AdjustTests/AILoggerMock.m create mode 100644 AdjustTests/AIPackageHandlerMock.h create mode 100644 AdjustTests/AIPackageHandlerMock.m create mode 100644 AdjustTests/AIPackageHandlerTests.m create mode 100644 AdjustTests/AIRequestHandlerMock.h create mode 100644 AdjustTests/AIRequestHandlerMock.m create mode 100644 AdjustTests/AIRequestHandlerTests.m create mode 100644 AdjustTests/AITestsUtil.h create mode 100644 AdjustTests/AITestsUtil.m create mode 100644 AdjustTests/AdjustTests-Info.plist create mode 100644 AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h create mode 100644 AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m create mode 100644 AdjustTests/en.lproj/InfoPlist.strings diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj new file mode 100644 index 000000000..5595b0cad --- /dev/null +++ b/Adjust.xcodeproj/project.pbxproj @@ -0,0 +1,638 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9679921118BBAE2800394606 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9679921018BBAE2800394606 /* Foundation.framework */; }; + 9679921F18BBAE2800394606 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9679921E18BBAE2800394606 /* XCTest.framework */; }; + 9679922018BBAE2800394606 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9679921018BBAE2800394606 /* Foundation.framework */; }; + 9679922218BBAE2800394606 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9679922118BBAE2800394606 /* UIKit.framework */; }; + 9679922518BBAE2800394606 /* libAdjust.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9679920D18BBAE2800394606 /* libAdjust.a */; }; + 96E5E38118BBB48A008E7B30 /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E34D18BBB48A008E7B30 /* Adjust.m */; }; + 96E5E38218BBB48A008E7B30 /* AIActivityHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35218BBB48A008E7B30 /* AIActivityHandlerMock.m */; }; + 96E5E38318BBB48A008E7B30 /* AIActivityHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35318BBB48A008E7B30 /* AIActivityHandlerTests.m */; }; + 96E5E38418BBB48A008E7B30 /* AILoggerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35518BBB48A008E7B30 /* AILoggerMock.m */; }; + 96E5E38518BBB48A008E7B30 /* AIPackageHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35718BBB48A008E7B30 /* AIPackageHandlerMock.m */; }; + 96E5E38618BBB48A008E7B30 /* AIPackageHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35818BBB48A008E7B30 /* AIPackageHandlerTests.m */; }; + 96E5E38718BBB48A008E7B30 /* AIRequestHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35A18BBB48A008E7B30 /* AIRequestHandlerMock.m */; }; + 96E5E38818BBB48A008E7B30 /* AIRequestHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35B18BBB48A008E7B30 /* AIRequestHandlerTests.m */; }; + 96E5E38918BBB48A008E7B30 /* AITestsUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35D18BBB48A008E7B30 /* AITestsUtil.m */; }; + 96E5E38A18BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36118BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */; }; + 96E5E38B18BBB48A008E7B30 /* AIActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36318BBB48A008E7B30 /* AIActivityHandler.m */; }; + 96E5E38C18BBB48A008E7B30 /* AIActivityKind.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36518BBB48A008E7B30 /* AIActivityKind.m */; }; + 96E5E38D18BBB48A008E7B30 /* AIActivityPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36718BBB48A008E7B30 /* AIActivityPackage.m */; }; + 96E5E38E18BBB48A008E7B30 /* AIActivityState.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36918BBB48A008E7B30 /* AIActivityState.m */; }; + 96E5E38F18BBB48A008E7B30 /* NSData+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36C18BBB48A008E7B30 /* NSData+AIAdditions.m */; }; + 96E5E39018BBB48A008E7B30 /* NSString+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36E18BBB48A008E7B30 /* NSString+AIAdditions.m */; }; + 96E5E39118BBB48A008E7B30 /* UIDevice+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E37018BBB48A008E7B30 /* UIDevice+AIAdditions.m */; }; + 96E5E39218BBB48A008E7B30 /* AIAdjustFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E37218BBB48A008E7B30 /* AIAdjustFactory.m */; }; + 96E5E39318BBB48A008E7B30 /* AILogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E37418BBB48A008E7B30 /* AILogger.m */; }; + 96E5E39418BBB48A008E7B30 /* AIPackageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E37618BBB48A008E7B30 /* AIPackageBuilder.m */; }; + 96E5E39518BBB48A008E7B30 /* AIPackageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E37818BBB48A008E7B30 /* AIPackageHandler.m */; }; + 96E5E39618BBB48A008E7B30 /* AIRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E37A18BBB48A008E7B30 /* AIRequestHandler.m */; }; + 96E5E39718BBB48A008E7B30 /* AIResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E37C18BBB48A008E7B30 /* AIResponseData.m */; }; + 96E5E39818BBB48A008E7B30 /* AITimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E37E18BBB48A008E7B30 /* AITimer.m */; }; + 96E5E39918BBB48A008E7B30 /* AIUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E38018BBB48A008E7B30 /* AIUtil.m */; }; + 96E5E3AE18BBB49E008E7B30 /* AdjustTests-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 96E5E39C18BBB49E008E7B30 /* AdjustTests-Info.plist */; }; + 96E5E3AF18BBB49E008E7B30 /* AIActivityHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E39E18BBB49E008E7B30 /* AIActivityHandlerMock.m */; }; + 96E5E3B018BBB49E008E7B30 /* AIActivityHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E39F18BBB49E008E7B30 /* AIActivityHandlerTests.m */; }; + 96E5E3B118BBB49E008E7B30 /* AILoggerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E3A118BBB49E008E7B30 /* AILoggerMock.m */; }; + 96E5E3B218BBB49E008E7B30 /* AIPackageHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E3A318BBB49E008E7B30 /* AIPackageHandlerMock.m */; }; + 96E5E3B318BBB49E008E7B30 /* AIPackageHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E3A418BBB49E008E7B30 /* AIPackageHandlerTests.m */; }; + 96E5E3B418BBB49E008E7B30 /* AIRequestHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E3A618BBB49E008E7B30 /* AIRequestHandlerMock.m */; }; + 96E5E3B518BBB49E008E7B30 /* AIRequestHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E3A718BBB49E008E7B30 /* AIRequestHandlerTests.m */; }; + 96E5E3B618BBB49E008E7B30 /* AITestsUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E3A918BBB49E008E7B30 /* AITestsUtil.m */; }; + 96E5E3B718BBB49E008E7B30 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 96E5E3AA18BBB49E008E7B30 /* InfoPlist.strings */; }; + 96E5E3B818BBB49E008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E3AD18BBB49E008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */; }; + 96E5E3B918BBB75F008E7B30 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9679921E18BBAE2800394606 /* XCTest.framework */; }; + 96E5E3BB18BBB989008E7B30 /* NSString+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36E18BBB48A008E7B30 /* NSString+AIAdditions.m */; }; + 96E5E3BC18BBB98C008E7B30 /* NSData+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36C18BBB48A008E7B30 /* NSData+AIAdditions.m */; }; + 96E5E3BD18BBB992008E7B30 /* UIDevice+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E37018BBB48A008E7B30 /* UIDevice+AIAdditions.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 9679922318BBAE2800394606 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9679920518BBAE2800394606 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9679920C18BBAE2800394606; + remoteInfo = Adjust; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9679920B18BBAE2800394606 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 9679920D18BBAE2800394606 /* libAdjust.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAdjust.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 9679921018BBAE2800394606 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 9679921D18BBAE2800394606 /* AdjustTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AdjustTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 9679921E18BBAE2800394606 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 9679922118BBAE2800394606 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 96E5E34C18BBB48A008E7B30 /* Adjust.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Adjust.h; sourceTree = ""; }; + 96E5E34D18BBB48A008E7B30 /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; + 96E5E34F18BBB48A008E7B30 /* Adjust-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Adjust-Prefix.pch"; sourceTree = ""; }; + 96E5E35018BBB48A008E7B30 /* AdjustTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "AdjustTests-Info.plist"; sourceTree = ""; }; + 96E5E35118BBB48A008E7B30 /* AIActivityHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandlerMock.h; sourceTree = ""; }; + 96E5E35218BBB48A008E7B30 /* AIActivityHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerMock.m; sourceTree = ""; }; + 96E5E35318BBB48A008E7B30 /* AIActivityHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerTests.m; sourceTree = ""; }; + 96E5E35418BBB48A008E7B30 /* AILoggerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AILoggerMock.h; sourceTree = ""; }; + 96E5E35518BBB48A008E7B30 /* AILoggerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AILoggerMock.m; sourceTree = ""; }; + 96E5E35618BBB48A008E7B30 /* AIPackageHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageHandlerMock.h; sourceTree = ""; }; + 96E5E35718BBB48A008E7B30 /* AIPackageHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerMock.m; sourceTree = ""; }; + 96E5E35818BBB48A008E7B30 /* AIPackageHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerTests.m; sourceTree = ""; }; + 96E5E35918BBB48A008E7B30 /* AIRequestHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIRequestHandlerMock.h; sourceTree = ""; }; + 96E5E35A18BBB48A008E7B30 /* AIRequestHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerMock.m; sourceTree = ""; }; + 96E5E35B18BBB48A008E7B30 /* AIRequestHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerTests.m; sourceTree = ""; }; + 96E5E35C18BBB48A008E7B30 /* AITestsUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AITestsUtil.h; sourceTree = ""; }; + 96E5E35D18BBB48A008E7B30 /* AITestsUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AITestsUtil.m; sourceTree = ""; }; + 96E5E35F18BBB48A008E7B30 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 96E5E36018BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h"; sourceTree = ""; }; + 96E5E36118BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m"; sourceTree = ""; }; + 96E5E36218BBB48A008E7B30 /* AIActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandler.h; sourceTree = ""; }; + 96E5E36318BBB48A008E7B30 /* AIActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandler.m; sourceTree = ""; }; + 96E5E36418BBB48A008E7B30 /* AIActivityKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityKind.h; sourceTree = ""; }; + 96E5E36518BBB48A008E7B30 /* AIActivityKind.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityKind.m; sourceTree = ""; }; + 96E5E36618BBB48A008E7B30 /* AIActivityPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityPackage.h; sourceTree = ""; }; + 96E5E36718BBB48A008E7B30 /* AIActivityPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityPackage.m; sourceTree = ""; }; + 96E5E36818BBB48A008E7B30 /* AIActivityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityState.h; sourceTree = ""; }; + 96E5E36918BBB48A008E7B30 /* AIActivityState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityState.m; sourceTree = ""; }; + 96E5E36B18BBB48A008E7B30 /* NSData+AIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+AIAdditions.h"; sourceTree = ""; }; + 96E5E36C18BBB48A008E7B30 /* NSData+AIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+AIAdditions.m"; sourceTree = ""; }; + 96E5E36D18BBB48A008E7B30 /* NSString+AIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+AIAdditions.h"; sourceTree = ""; }; + 96E5E36E18BBB48A008E7B30 /* NSString+AIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+AIAdditions.m"; sourceTree = ""; }; + 96E5E36F18BBB48A008E7B30 /* UIDevice+AIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+AIAdditions.h"; sourceTree = ""; }; + 96E5E37018BBB48A008E7B30 /* UIDevice+AIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+AIAdditions.m"; sourceTree = ""; }; + 96E5E37118BBB48A008E7B30 /* AIAdjustFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIAdjustFactory.h; sourceTree = ""; }; + 96E5E37218BBB48A008E7B30 /* AIAdjustFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIAdjustFactory.m; sourceTree = ""; }; + 96E5E37318BBB48A008E7B30 /* AILogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AILogger.h; sourceTree = ""; }; + 96E5E37418BBB48A008E7B30 /* AILogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AILogger.m; sourceTree = ""; }; + 96E5E37518BBB48A008E7B30 /* AIPackageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageBuilder.h; sourceTree = ""; }; + 96E5E37618BBB48A008E7B30 /* AIPackageBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageBuilder.m; sourceTree = ""; }; + 96E5E37718BBB48A008E7B30 /* AIPackageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageHandler.h; sourceTree = ""; }; + 96E5E37818BBB48A008E7B30 /* AIPackageHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandler.m; sourceTree = ""; }; + 96E5E37918BBB48A008E7B30 /* AIRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIRequestHandler.h; sourceTree = ""; }; + 96E5E37A18BBB48A008E7B30 /* AIRequestHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandler.m; sourceTree = ""; }; + 96E5E37B18BBB48A008E7B30 /* AIResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIResponseData.h; sourceTree = ""; }; + 96E5E37C18BBB48A008E7B30 /* AIResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIResponseData.m; sourceTree = ""; }; + 96E5E37D18BBB48A008E7B30 /* AITimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AITimer.h; sourceTree = ""; }; + 96E5E37E18BBB48A008E7B30 /* AITimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AITimer.m; sourceTree = ""; }; + 96E5E37F18BBB48A008E7B30 /* AIUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIUtil.h; sourceTree = ""; }; + 96E5E38018BBB48A008E7B30 /* AIUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIUtil.m; sourceTree = ""; }; + 96E5E39B18BBB49E008E7B30 /* Adjust-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Adjust-Prefix.pch"; sourceTree = ""; }; + 96E5E39C18BBB49E008E7B30 /* AdjustTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "AdjustTests-Info.plist"; sourceTree = ""; }; + 96E5E39D18BBB49E008E7B30 /* AIActivityHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandlerMock.h; sourceTree = ""; }; + 96E5E39E18BBB49E008E7B30 /* AIActivityHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerMock.m; sourceTree = ""; }; + 96E5E39F18BBB49E008E7B30 /* AIActivityHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerTests.m; sourceTree = ""; }; + 96E5E3A018BBB49E008E7B30 /* AILoggerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AILoggerMock.h; sourceTree = ""; }; + 96E5E3A118BBB49E008E7B30 /* AILoggerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AILoggerMock.m; sourceTree = ""; }; + 96E5E3A218BBB49E008E7B30 /* AIPackageHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageHandlerMock.h; sourceTree = ""; }; + 96E5E3A318BBB49E008E7B30 /* AIPackageHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerMock.m; sourceTree = ""; }; + 96E5E3A418BBB49E008E7B30 /* AIPackageHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerTests.m; sourceTree = ""; }; + 96E5E3A518BBB49E008E7B30 /* AIRequestHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIRequestHandlerMock.h; sourceTree = ""; }; + 96E5E3A618BBB49E008E7B30 /* AIRequestHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerMock.m; sourceTree = ""; }; + 96E5E3A718BBB49E008E7B30 /* AIRequestHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerTests.m; sourceTree = ""; }; + 96E5E3A818BBB49E008E7B30 /* AITestsUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AITestsUtil.h; sourceTree = ""; }; + 96E5E3A918BBB49E008E7B30 /* AITestsUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AITestsUtil.m; sourceTree = ""; }; + 96E5E3AB18BBB49E008E7B30 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 96E5E3AC18BBB49E008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h"; sourceTree = ""; }; + 96E5E3AD18BBB49E008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9679920A18BBAE2800394606 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9679921118BBAE2800394606 /* Foundation.framework in Frameworks */, + 96E5E3B918BBB75F008E7B30 /* XCTest.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9679921A18BBAE2800394606 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9679922518BBAE2800394606 /* libAdjust.a in Frameworks */, + 9679921F18BBAE2800394606 /* XCTest.framework in Frameworks */, + 9679922218BBAE2800394606 /* UIKit.framework in Frameworks */, + 9679922018BBAE2800394606 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9679920418BBAE2800394606 = { + isa = PBXGroup; + children = ( + 96E5E39A18BBB49E008E7B30 /* AdjustTests */, + 96E5E34B18BBB48A008E7B30 /* Adjust */, + 9679920F18BBAE2800394606 /* Frameworks */, + 9679920E18BBAE2800394606 /* Products */, + ); + sourceTree = ""; + }; + 9679920E18BBAE2800394606 /* Products */ = { + isa = PBXGroup; + children = ( + 9679920D18BBAE2800394606 /* libAdjust.a */, + 9679921D18BBAE2800394606 /* AdjustTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 9679920F18BBAE2800394606 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 9679921018BBAE2800394606 /* Foundation.framework */, + 9679921E18BBAE2800394606 /* XCTest.framework */, + 9679922118BBAE2800394606 /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 96E5E34B18BBB48A008E7B30 /* Adjust */ = { + isa = PBXGroup; + children = ( + 96E5E34C18BBB48A008E7B30 /* Adjust.h */, + 96E5E34D18BBB48A008E7B30 /* Adjust.m */, + 96E5E34E18BBB48A008E7B30 /* AdjustTests */, + 96E5E36218BBB48A008E7B30 /* AIActivityHandler.h */, + 96E5E36318BBB48A008E7B30 /* AIActivityHandler.m */, + 96E5E36418BBB48A008E7B30 /* AIActivityKind.h */, + 96E5E36518BBB48A008E7B30 /* AIActivityKind.m */, + 96E5E36618BBB48A008E7B30 /* AIActivityPackage.h */, + 96E5E36718BBB48A008E7B30 /* AIActivityPackage.m */, + 96E5E36818BBB48A008E7B30 /* AIActivityState.h */, + 96E5E36918BBB48A008E7B30 /* AIActivityState.m */, + 96E5E36A18BBB48A008E7B30 /* AIAdditions */, + 96E5E37118BBB48A008E7B30 /* AIAdjustFactory.h */, + 96E5E37218BBB48A008E7B30 /* AIAdjustFactory.m */, + 96E5E37318BBB48A008E7B30 /* AILogger.h */, + 96E5E37418BBB48A008E7B30 /* AILogger.m */, + 96E5E37518BBB48A008E7B30 /* AIPackageBuilder.h */, + 96E5E37618BBB48A008E7B30 /* AIPackageBuilder.m */, + 96E5E37718BBB48A008E7B30 /* AIPackageHandler.h */, + 96E5E37818BBB48A008E7B30 /* AIPackageHandler.m */, + 96E5E37918BBB48A008E7B30 /* AIRequestHandler.h */, + 96E5E37A18BBB48A008E7B30 /* AIRequestHandler.m */, + 96E5E37B18BBB48A008E7B30 /* AIResponseData.h */, + 96E5E37C18BBB48A008E7B30 /* AIResponseData.m */, + 96E5E37D18BBB48A008E7B30 /* AITimer.h */, + 96E5E37E18BBB48A008E7B30 /* AITimer.m */, + 96E5E37F18BBB48A008E7B30 /* AIUtil.h */, + 96E5E38018BBB48A008E7B30 /* AIUtil.m */, + ); + path = Adjust; + sourceTree = ""; + }; + 96E5E34E18BBB48A008E7B30 /* AdjustTests */ = { + isa = PBXGroup; + children = ( + 96E5E34F18BBB48A008E7B30 /* Adjust-Prefix.pch */, + 96E5E35018BBB48A008E7B30 /* AdjustTests-Info.plist */, + 96E5E35118BBB48A008E7B30 /* AIActivityHandlerMock.h */, + 96E5E35218BBB48A008E7B30 /* AIActivityHandlerMock.m */, + 96E5E35318BBB48A008E7B30 /* AIActivityHandlerTests.m */, + 96E5E35418BBB48A008E7B30 /* AILoggerMock.h */, + 96E5E35518BBB48A008E7B30 /* AILoggerMock.m */, + 96E5E35618BBB48A008E7B30 /* AIPackageHandlerMock.h */, + 96E5E35718BBB48A008E7B30 /* AIPackageHandlerMock.m */, + 96E5E35818BBB48A008E7B30 /* AIPackageHandlerTests.m */, + 96E5E35918BBB48A008E7B30 /* AIRequestHandlerMock.h */, + 96E5E35A18BBB48A008E7B30 /* AIRequestHandlerMock.m */, + 96E5E35B18BBB48A008E7B30 /* AIRequestHandlerTests.m */, + 96E5E35C18BBB48A008E7B30 /* AITestsUtil.h */, + 96E5E35D18BBB48A008E7B30 /* AITestsUtil.m */, + 96E5E35E18BBB48A008E7B30 /* InfoPlist.strings */, + 96E5E36018BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */, + 96E5E36118BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */, + ); + path = AdjustTests; + sourceTree = ""; + }; + 96E5E36A18BBB48A008E7B30 /* AIAdditions */ = { + isa = PBXGroup; + children = ( + 96E5E36B18BBB48A008E7B30 /* NSData+AIAdditions.h */, + 96E5E36C18BBB48A008E7B30 /* NSData+AIAdditions.m */, + 96E5E36D18BBB48A008E7B30 /* NSString+AIAdditions.h */, + 96E5E36E18BBB48A008E7B30 /* NSString+AIAdditions.m */, + 96E5E36F18BBB48A008E7B30 /* UIDevice+AIAdditions.h */, + 96E5E37018BBB48A008E7B30 /* UIDevice+AIAdditions.m */, + ); + path = AIAdditions; + sourceTree = ""; + }; + 96E5E39A18BBB49E008E7B30 /* AdjustTests */ = { + isa = PBXGroup; + children = ( + 96E5E39B18BBB49E008E7B30 /* Adjust-Prefix.pch */, + 96E5E39C18BBB49E008E7B30 /* AdjustTests-Info.plist */, + 96E5E39D18BBB49E008E7B30 /* AIActivityHandlerMock.h */, + 96E5E39E18BBB49E008E7B30 /* AIActivityHandlerMock.m */, + 96E5E39F18BBB49E008E7B30 /* AIActivityHandlerTests.m */, + 96E5E3A018BBB49E008E7B30 /* AILoggerMock.h */, + 96E5E3A118BBB49E008E7B30 /* AILoggerMock.m */, + 96E5E3A218BBB49E008E7B30 /* AIPackageHandlerMock.h */, + 96E5E3A318BBB49E008E7B30 /* AIPackageHandlerMock.m */, + 96E5E3A418BBB49E008E7B30 /* AIPackageHandlerTests.m */, + 96E5E3A518BBB49E008E7B30 /* AIRequestHandlerMock.h */, + 96E5E3A618BBB49E008E7B30 /* AIRequestHandlerMock.m */, + 96E5E3A718BBB49E008E7B30 /* AIRequestHandlerTests.m */, + 96E5E3A818BBB49E008E7B30 /* AITestsUtil.h */, + 96E5E3A918BBB49E008E7B30 /* AITestsUtil.m */, + 96E5E3AA18BBB49E008E7B30 /* InfoPlist.strings */, + 96E5E3AC18BBB49E008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */, + 96E5E3AD18BBB49E008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */, + ); + path = AdjustTests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 9679920C18BBAE2800394606 /* Adjust */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9679923018BBAE2800394606 /* Build configuration list for PBXNativeTarget "Adjust" */; + buildPhases = ( + 9679920918BBAE2800394606 /* Sources */, + 9679920A18BBAE2800394606 /* Frameworks */, + 9679920B18BBAE2800394606 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Adjust; + productName = Adjust; + productReference = 9679920D18BBAE2800394606 /* libAdjust.a */; + productType = "com.apple.product-type.library.static"; + }; + 9679921C18BBAE2800394606 /* AdjustTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9679923318BBAE2800394606 /* Build configuration list for PBXNativeTarget "AdjustTests" */; + buildPhases = ( + 9679921918BBAE2800394606 /* Sources */, + 9679921A18BBAE2800394606 /* Frameworks */, + 9679921B18BBAE2800394606 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 9679922418BBAE2800394606 /* PBXTargetDependency */, + ); + name = AdjustTests; + productName = AdjustTests; + productReference = 9679921D18BBAE2800394606 /* AdjustTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 9679920518BBAE2800394606 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + ORGANIZATIONNAME = adjust; + }; + buildConfigurationList = 9679920818BBAE2800394606 /* Build configuration list for PBXProject "Adjust" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 9679920418BBAE2800394606; + productRefGroup = 9679920E18BBAE2800394606 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 9679920C18BBAE2800394606 /* Adjust */, + 9679921C18BBAE2800394606 /* AdjustTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 9679921B18BBAE2800394606 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 96E5E3AE18BBB49E008E7B30 /* AdjustTests-Info.plist in Resources */, + 96E5E3B718BBB49E008E7B30 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 9679920918BBAE2800394606 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 96E5E38118BBB48A008E7B30 /* Adjust.m in Sources */, + 96E5E38618BBB48A008E7B30 /* AIPackageHandlerTests.m in Sources */, + 96E5E38B18BBB48A008E7B30 /* AIActivityHandler.m in Sources */, + 96E5E38718BBB48A008E7B30 /* AIRequestHandlerMock.m in Sources */, + 96E5E39618BBB48A008E7B30 /* AIRequestHandler.m in Sources */, + 96E5E39918BBB48A008E7B30 /* AIUtil.m in Sources */, + 96E5E38418BBB48A008E7B30 /* AILoggerMock.m in Sources */, + 96E5E38218BBB48A008E7B30 /* AIActivityHandlerMock.m in Sources */, + 96E5E39818BBB48A008E7B30 /* AITimer.m in Sources */, + 96E5E39718BBB48A008E7B30 /* AIResponseData.m in Sources */, + 96E5E38518BBB48A008E7B30 /* AIPackageHandlerMock.m in Sources */, + 96E5E38818BBB48A008E7B30 /* AIRequestHandlerTests.m in Sources */, + 96E5E38F18BBB48A008E7B30 /* NSData+AIAdditions.m in Sources */, + 96E5E39118BBB48A008E7B30 /* UIDevice+AIAdditions.m in Sources */, + 96E5E38C18BBB48A008E7B30 /* AIActivityKind.m in Sources */, + 96E5E38D18BBB48A008E7B30 /* AIActivityPackage.m in Sources */, + 96E5E38E18BBB48A008E7B30 /* AIActivityState.m in Sources */, + 96E5E38318BBB48A008E7B30 /* AIActivityHandlerTests.m in Sources */, + 96E5E39018BBB48A008E7B30 /* NSString+AIAdditions.m in Sources */, + 96E5E39518BBB48A008E7B30 /* AIPackageHandler.m in Sources */, + 96E5E38918BBB48A008E7B30 /* AITestsUtil.m in Sources */, + 96E5E38A18BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */, + 96E5E39318BBB48A008E7B30 /* AILogger.m in Sources */, + 96E5E39418BBB48A008E7B30 /* AIPackageBuilder.m in Sources */, + 96E5E39218BBB48A008E7B30 /* AIAdjustFactory.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9679921918BBAE2800394606 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 96E5E3B118BBB49E008E7B30 /* AILoggerMock.m in Sources */, + 96E5E3BC18BBB98C008E7B30 /* NSData+AIAdditions.m in Sources */, + 96E5E3AF18BBB49E008E7B30 /* AIActivityHandlerMock.m in Sources */, + 96E5E3BD18BBB992008E7B30 /* UIDevice+AIAdditions.m in Sources */, + 96E5E3B318BBB49E008E7B30 /* AIPackageHandlerTests.m in Sources */, + 96E5E3B618BBB49E008E7B30 /* AITestsUtil.m in Sources */, + 96E5E3B018BBB49E008E7B30 /* AIActivityHandlerTests.m in Sources */, + 96E5E3BB18BBB989008E7B30 /* NSString+AIAdditions.m in Sources */, + 96E5E3B818BBB49E008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */, + 96E5E3B418BBB49E008E7B30 /* AIRequestHandlerMock.m in Sources */, + 96E5E3B518BBB49E008E7B30 /* AIRequestHandlerTests.m in Sources */, + 96E5E3B218BBB49E008E7B30 /* AIPackageHandlerMock.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 9679922418BBAE2800394606 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 9679920C18BBAE2800394606 /* Adjust */; + targetProxy = 9679922318BBAE2800394606 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 96E5E35E18BBB48A008E7B30 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 96E5E35F18BBB48A008E7B30 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 96E5E3AA18BBB49E008E7B30 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 96E5E3AB18BBB49E008E7B30 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 9679922E18BBAE2800394606 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 9679922F18BBAE2800394606 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 9679923118BBAE2800394606 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = /tmp/Adjust.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "AdjustTests/Adjust-Prefix.pch"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 9679923218BBAE2800394606 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DSTROOT = /tmp/Adjust.dst; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "AdjustTests/Adjust-Prefix.pch"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 9679923418BBAE2800394606 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "AdjustTests/Adjust-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "AdjustTests/AdjustTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + 9679923518BBAE2800394606 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "AdjustTests/Adjust-Prefix.pch"; + INFOPLIST_FILE = "AdjustTests/AdjustTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 9679920818BBAE2800394606 /* Build configuration list for PBXProject "Adjust" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9679922E18BBAE2800394606 /* Debug */, + 9679922F18BBAE2800394606 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9679923018BBAE2800394606 /* Build configuration list for PBXNativeTarget "Adjust" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9679923118BBAE2800394606 /* Debug */, + 9679923218BBAE2800394606 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9679923318BBAE2800394606 /* Build configuration list for PBXNativeTarget "AdjustTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9679923418BBAE2800394606 /* Debug */, + 9679923518BBAE2800394606 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 9679920518BBAE2800394606 /* Project object */; +} diff --git a/AdjustIo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Adjust.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 71% rename from AdjustIo.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Adjust.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 2d94213e4..9c511c0f0 100644 --- a/AdjustIo.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Adjust.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:Adjust.xcodeproj"> diff --git a/AdjustIoTests/AIActivityHandlerMock.h b/Adjust/AdjustTests/AIActivityHandlerMock.h similarity index 100% rename from AdjustIoTests/AIActivityHandlerMock.h rename to Adjust/AdjustTests/AIActivityHandlerMock.h diff --git a/AdjustIoTests/AIActivityHandlerMock.m b/Adjust/AdjustTests/AIActivityHandlerMock.m similarity index 100% rename from AdjustIoTests/AIActivityHandlerMock.m rename to Adjust/AdjustTests/AIActivityHandlerMock.m diff --git a/AdjustIoTests/AIActivityHandlerTests.m b/Adjust/AdjustTests/AIActivityHandlerTests.m similarity index 100% rename from AdjustIoTests/AIActivityHandlerTests.m rename to Adjust/AdjustTests/AIActivityHandlerTests.m diff --git a/AdjustIoTests/AILoggerMock.h b/Adjust/AdjustTests/AILoggerMock.h similarity index 100% rename from AdjustIoTests/AILoggerMock.h rename to Adjust/AdjustTests/AILoggerMock.h diff --git a/AdjustIoTests/AILoggerMock.m b/Adjust/AdjustTests/AILoggerMock.m similarity index 100% rename from AdjustIoTests/AILoggerMock.m rename to Adjust/AdjustTests/AILoggerMock.m diff --git a/AdjustIoTests/AIPackageHandlerMock.h b/Adjust/AdjustTests/AIPackageHandlerMock.h similarity index 100% rename from AdjustIoTests/AIPackageHandlerMock.h rename to Adjust/AdjustTests/AIPackageHandlerMock.h diff --git a/AdjustIoTests/AIPackageHandlerMock.m b/Adjust/AdjustTests/AIPackageHandlerMock.m similarity index 100% rename from AdjustIoTests/AIPackageHandlerMock.m rename to Adjust/AdjustTests/AIPackageHandlerMock.m diff --git a/AdjustIoTests/AIPackageHandlerTests.m b/Adjust/AdjustTests/AIPackageHandlerTests.m similarity index 100% rename from AdjustIoTests/AIPackageHandlerTests.m rename to Adjust/AdjustTests/AIPackageHandlerTests.m diff --git a/AdjustIoTests/AIRequestHandlerMock.h b/Adjust/AdjustTests/AIRequestHandlerMock.h similarity index 100% rename from AdjustIoTests/AIRequestHandlerMock.h rename to Adjust/AdjustTests/AIRequestHandlerMock.h diff --git a/AdjustIoTests/AIRequestHandlerMock.m b/Adjust/AdjustTests/AIRequestHandlerMock.m similarity index 100% rename from AdjustIoTests/AIRequestHandlerMock.m rename to Adjust/AdjustTests/AIRequestHandlerMock.m diff --git a/AdjustIoTests/AIRequestHandlerTests.m b/Adjust/AdjustTests/AIRequestHandlerTests.m similarity index 100% rename from AdjustIoTests/AIRequestHandlerTests.m rename to Adjust/AdjustTests/AIRequestHandlerTests.m diff --git a/AdjustIoTests/AITestsUtil.h b/Adjust/AdjustTests/AITestsUtil.h similarity index 100% rename from AdjustIoTests/AITestsUtil.h rename to Adjust/AdjustTests/AITestsUtil.h diff --git a/AdjustIoTests/AITestsUtil.m b/Adjust/AdjustTests/AITestsUtil.m similarity index 100% rename from AdjustIoTests/AITestsUtil.m rename to Adjust/AdjustTests/AITestsUtil.m diff --git a/AdjustIoTests/AdjustIoTests-Info.plist b/Adjust/AdjustTests/AdjustTests-Info.plist similarity index 100% rename from AdjustIoTests/AdjustIoTests-Info.plist rename to Adjust/AdjustTests/AdjustTests-Info.plist diff --git a/AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h b/Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h similarity index 100% rename from AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h rename to Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h diff --git a/AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m b/Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m similarity index 100% rename from AdjustIoTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m rename to Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m diff --git a/AdjustIoTests/en.lproj/InfoPlist.strings b/Adjust/AdjustTests/en.lproj/InfoPlist.strings similarity index 100% rename from AdjustIoTests/en.lproj/InfoPlist.strings rename to Adjust/AdjustTests/en.lproj/InfoPlist.strings diff --git a/AdjustIo.xcodeproj/project.pbxproj b/AdjustIo.xcodeproj/project.pbxproj deleted file mode 100644 index aca005295..000000000 --- a/AdjustIo.xcodeproj/project.pbxproj +++ /dev/null @@ -1,574 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 7FF8AC9C18AD54870065977B /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC7C18AD54870065977B /* Adjust.m */; }; - 7FF8AC9D18AD54870065977B /* AIActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC7E18AD54870065977B /* AIActivityHandler.m */; }; - 7FF8AC9E18AD54870065977B /* AIActivityKind.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8018AD54870065977B /* AIActivityKind.m */; }; - 7FF8AC9F18AD54870065977B /* AIActivityPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8218AD54870065977B /* AIActivityPackage.m */; }; - 7FF8ACA018AD54870065977B /* AIActivityState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8418AD54870065977B /* AIActivityState.m */; }; - 7FF8ACA118AD54870065977B /* NSData+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8718AD54870065977B /* NSData+AIAdditions.m */; }; - 7FF8ACA218AD54870065977B /* NSString+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8918AD54870065977B /* NSString+AIAdditions.m */; }; - 7FF8ACA318AD54870065977B /* UIDevice+AIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8B18AD54870065977B /* UIDevice+AIAdditions.m */; }; - 7FF8ACA418AD54870065977B /* AIAdjustFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8D18AD54870065977B /* AIAdjustFactory.m */; }; - 7FF8ACA518AD54870065977B /* AILogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC8F18AD54870065977B /* AILogger.m */; }; - 7FF8ACA618AD54870065977B /* AIPackageBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9118AD54870065977B /* AIPackageBuilder.m */; }; - 7FF8ACA718AD54870065977B /* AIPackageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9318AD54870065977B /* AIPackageHandler.m */; }; - 7FF8ACA818AD54870065977B /* AIRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9518AD54870065977B /* AIRequestHandler.m */; }; - 7FF8ACA918AD54870065977B /* AIResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9718AD54870065977B /* AIResponseData.m */; }; - 7FF8ACAA18AD54870065977B /* AITimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9918AD54870065977B /* AITimer.m */; }; - 7FF8ACAB18AD54870065977B /* AIUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF8AC9B18AD54870065977B /* AIUtil.m */; }; - 9649D79F18A9053F0026AA0E /* AIPackageHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9649D79E18A9053F0026AA0E /* AIPackageHandlerMock.m */; }; - 9649D7A218A907280026AA0E /* AILoggerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9649D7A118A907280026AA0E /* AILoggerMock.m */; }; - 9649D7A518A91FA20026AA0E /* AIRequestHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9649D7A418A91FA20026AA0E /* AIRequestHandlerMock.m */; }; - 9695105018AA770C0072B6D7 /* AIActivityHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 9695104F18AA770C0072B6D7 /* AIActivityHandlerMock.m */; }; - 96E913D118A4F06B00F01294 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913D018A4F06B00F01294 /* Foundation.framework */; }; - 96E913DF18A4F06B00F01294 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913DE18A4F06B00F01294 /* XCTest.framework */; }; - 96E913E018A4F06B00F01294 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913D018A4F06B00F01294 /* Foundation.framework */; }; - 96E913E218A4F06B00F01294 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913E118A4F06B00F01294 /* UIKit.framework */; }; - 96E913E518A4F06B00F01294 /* libAdjustIo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 96E913CD18A4F06B00F01294 /* libAdjustIo.a */; }; - 96E913EB18A4F06B00F01294 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 96E913E918A4F06B00F01294 /* InfoPlist.strings */; }; - 96E9144618A5122A00F01294 /* AIActivityHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E9144518A5122A00F01294 /* AIActivityHandlerTests.m */; }; - 96E9144818A5124C00F01294 /* AIPackageHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E9144718A5124C00F01294 /* AIPackageHandlerTests.m */; }; - 96E9144A18A5126100F01294 /* AIRequestHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E9144918A5126100F01294 /* AIRequestHandlerTests.m */; }; - 96F0018D18ABC0C800612200 /* AITestsUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F0018C18ABC0C800612200 /* AITestsUtil.m */; }; - 96F0019618ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F0019518ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */; }; - 96F9050C18AE776F00DBEF2F /* AITestsUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F0018C18ABC0C800612200 /* AITestsUtil.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 96E913E318A4F06B00F01294 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 96E913C518A4F06B00F01294 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 96E913CC18A4F06B00F01294; - remoteInfo = AdjustIo; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 96E913CB18A4F06B00F01294 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 7FF8AC7B18AD54870065977B /* Adjust.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Adjust.h; sourceTree = ""; }; - 7FF8AC7C18AD54870065977B /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; - 7FF8AC7D18AD54870065977B /* AIActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandler.h; sourceTree = ""; }; - 7FF8AC7E18AD54870065977B /* AIActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandler.m; sourceTree = ""; }; - 7FF8AC7F18AD54870065977B /* AIActivityKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityKind.h; sourceTree = ""; }; - 7FF8AC8018AD54870065977B /* AIActivityKind.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityKind.m; sourceTree = ""; }; - 7FF8AC8118AD54870065977B /* AIActivityPackage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityPackage.h; sourceTree = ""; }; - 7FF8AC8218AD54870065977B /* AIActivityPackage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityPackage.m; sourceTree = ""; }; - 7FF8AC8318AD54870065977B /* AIActivityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityState.h; sourceTree = ""; }; - 7FF8AC8418AD54870065977B /* AIActivityState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityState.m; sourceTree = ""; }; - 7FF8AC8618AD54870065977B /* NSData+AIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+AIAdditions.h"; sourceTree = ""; }; - 7FF8AC8718AD54870065977B /* NSData+AIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+AIAdditions.m"; sourceTree = ""; }; - 7FF8AC8818AD54870065977B /* NSString+AIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+AIAdditions.h"; sourceTree = ""; }; - 7FF8AC8918AD54870065977B /* NSString+AIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+AIAdditions.m"; sourceTree = ""; }; - 7FF8AC8A18AD54870065977B /* UIDevice+AIAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+AIAdditions.h"; sourceTree = ""; }; - 7FF8AC8B18AD54870065977B /* UIDevice+AIAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+AIAdditions.m"; sourceTree = ""; }; - 7FF8AC8C18AD54870065977B /* AIAdjustFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIAdjustFactory.h; sourceTree = ""; }; - 7FF8AC8D18AD54870065977B /* AIAdjustFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIAdjustFactory.m; sourceTree = ""; }; - 7FF8AC8E18AD54870065977B /* AILogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AILogger.h; sourceTree = ""; }; - 7FF8AC8F18AD54870065977B /* AILogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AILogger.m; sourceTree = ""; }; - 7FF8AC9018AD54870065977B /* AIPackageBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageBuilder.h; sourceTree = ""; }; - 7FF8AC9118AD54870065977B /* AIPackageBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageBuilder.m; sourceTree = ""; }; - 7FF8AC9218AD54870065977B /* AIPackageHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageHandler.h; sourceTree = ""; }; - 7FF8AC9318AD54870065977B /* AIPackageHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandler.m; sourceTree = ""; }; - 7FF8AC9418AD54870065977B /* AIRequestHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIRequestHandler.h; sourceTree = ""; }; - 7FF8AC9518AD54870065977B /* AIRequestHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandler.m; sourceTree = ""; }; - 7FF8AC9618AD54870065977B /* AIResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIResponseData.h; sourceTree = ""; }; - 7FF8AC9718AD54870065977B /* AIResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIResponseData.m; sourceTree = ""; }; - 7FF8AC9818AD54870065977B /* AITimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AITimer.h; sourceTree = ""; }; - 7FF8AC9918AD54870065977B /* AITimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AITimer.m; sourceTree = ""; }; - 7FF8AC9A18AD54870065977B /* AIUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIUtil.h; sourceTree = ""; }; - 7FF8AC9B18AD54870065977B /* AIUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIUtil.m; sourceTree = ""; }; - 9649D79D18A9053F0026AA0E /* AIPackageHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageHandlerMock.h; sourceTree = ""; }; - 9649D79E18A9053F0026AA0E /* AIPackageHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerMock.m; sourceTree = ""; }; - 9649D7A018A907280026AA0E /* AILoggerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AILoggerMock.h; sourceTree = ""; }; - 9649D7A118A907280026AA0E /* AILoggerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AILoggerMock.m; sourceTree = ""; }; - 9649D7A318A91FA20026AA0E /* AIRequestHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIRequestHandlerMock.h; sourceTree = ""; }; - 9649D7A418A91FA20026AA0E /* AIRequestHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerMock.m; sourceTree = ""; }; - 9695104E18AA770C0072B6D7 /* AIActivityHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandlerMock.h; sourceTree = ""; }; - 9695104F18AA770C0072B6D7 /* AIActivityHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerMock.m; sourceTree = ""; }; - 96E913CD18A4F06B00F01294 /* libAdjustIo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAdjustIo.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 96E913D018A4F06B00F01294 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 96E913DD18A4F06B00F01294 /* AdjustIoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AdjustIoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 96E913DE18A4F06B00F01294 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 96E913E118A4F06B00F01294 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 96E913E818A4F06B00F01294 /* AdjustIoTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "AdjustIoTests-Info.plist"; sourceTree = ""; }; - 96E913EA18A4F06B00F01294 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 96E9144518A5122A00F01294 /* AIActivityHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerTests.m; sourceTree = ""; }; - 96E9144718A5124C00F01294 /* AIPackageHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerTests.m; sourceTree = ""; }; - 96E9144918A5126100F01294 /* AIRequestHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerTests.m; sourceTree = ""; }; - 96F0018B18ABC0C800612200 /* AITestsUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AITestsUtil.h; sourceTree = ""; }; - 96F0018C18ABC0C800612200 /* AITestsUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AITestsUtil.m; sourceTree = ""; }; - 96F0019418ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h"; sourceTree = ""; }; - 96F0019518ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 96E913CA18A4F06B00F01294 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 96E913D118A4F06B00F01294 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 96E913DA18A4F06B00F01294 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 96E913DF18A4F06B00F01294 /* XCTest.framework in Frameworks */, - 96E913E218A4F06B00F01294 /* UIKit.framework in Frameworks */, - 96E913E518A4F06B00F01294 /* libAdjustIo.a in Frameworks */, - 96E913E018A4F06B00F01294 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 7FF8AC7918AD54870065977B /* Adjust */ = { - isa = PBXGroup; - children = ( - 7FF8AC7B18AD54870065977B /* Adjust.h */, - 7FF8AC7C18AD54870065977B /* Adjust.m */, - 7FF8AC7D18AD54870065977B /* AIActivityHandler.h */, - 7FF8AC7E18AD54870065977B /* AIActivityHandler.m */, - 7FF8AC7F18AD54870065977B /* AIActivityKind.h */, - 7FF8AC8018AD54870065977B /* AIActivityKind.m */, - 7FF8AC8118AD54870065977B /* AIActivityPackage.h */, - 7FF8AC8218AD54870065977B /* AIActivityPackage.m */, - 7FF8AC8318AD54870065977B /* AIActivityState.h */, - 7FF8AC8418AD54870065977B /* AIActivityState.m */, - 7FF8AC8518AD54870065977B /* AIAdditions */, - 7FF8AC8C18AD54870065977B /* AIAdjustFactory.h */, - 7FF8AC8D18AD54870065977B /* AIAdjustFactory.m */, - 7FF8AC8E18AD54870065977B /* AILogger.h */, - 7FF8AC8F18AD54870065977B /* AILogger.m */, - 7FF8AC9018AD54870065977B /* AIPackageBuilder.h */, - 7FF8AC9118AD54870065977B /* AIPackageBuilder.m */, - 7FF8AC9218AD54870065977B /* AIPackageHandler.h */, - 7FF8AC9318AD54870065977B /* AIPackageHandler.m */, - 7FF8AC9418AD54870065977B /* AIRequestHandler.h */, - 7FF8AC9518AD54870065977B /* AIRequestHandler.m */, - 7FF8AC9618AD54870065977B /* AIResponseData.h */, - 7FF8AC9718AD54870065977B /* AIResponseData.m */, - 7FF8AC9818AD54870065977B /* AITimer.h */, - 7FF8AC9918AD54870065977B /* AITimer.m */, - 7FF8AC9A18AD54870065977B /* AIUtil.h */, - 7FF8AC9B18AD54870065977B /* AIUtil.m */, - ); - path = Adjust; - sourceTree = ""; - }; - 7FF8AC8518AD54870065977B /* AIAdditions */ = { - isa = PBXGroup; - children = ( - 7FF8AC8618AD54870065977B /* NSData+AIAdditions.h */, - 7FF8AC8718AD54870065977B /* NSData+AIAdditions.m */, - 7FF8AC8818AD54870065977B /* NSString+AIAdditions.h */, - 7FF8AC8918AD54870065977B /* NSString+AIAdditions.m */, - 7FF8AC8A18AD54870065977B /* UIDevice+AIAdditions.h */, - 7FF8AC8B18AD54870065977B /* UIDevice+AIAdditions.m */, - ); - path = AIAdditions; - sourceTree = ""; - }; - 96E913C418A4F06B00F01294 = { - isa = PBXGroup; - children = ( - 7FF8AC7918AD54870065977B /* Adjust */, - 96E913E618A4F06B00F01294 /* AdjustIoTests */, - 96E913CF18A4F06B00F01294 /* Frameworks */, - 96E913CE18A4F06B00F01294 /* Products */, - ); - sourceTree = ""; - }; - 96E913CE18A4F06B00F01294 /* Products */ = { - isa = PBXGroup; - children = ( - 96E913CD18A4F06B00F01294 /* libAdjustIo.a */, - 96E913DD18A4F06B00F01294 /* AdjustIoTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 96E913CF18A4F06B00F01294 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 96E913D018A4F06B00F01294 /* Foundation.framework */, - 96E913DE18A4F06B00F01294 /* XCTest.framework */, - 96E913E118A4F06B00F01294 /* UIKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 96E913E618A4F06B00F01294 /* AdjustIoTests */ = { - isa = PBXGroup; - children = ( - 96E913E718A4F06B00F01294 /* Supporting Files */, - 96E9144518A5122A00F01294 /* AIActivityHandlerTests.m */, - 96E9144718A5124C00F01294 /* AIPackageHandlerTests.m */, - 96E9144918A5126100F01294 /* AIRequestHandlerTests.m */, - 9649D79D18A9053F0026AA0E /* AIPackageHandlerMock.h */, - 9649D79E18A9053F0026AA0E /* AIPackageHandlerMock.m */, - 9649D7A018A907280026AA0E /* AILoggerMock.h */, - 9649D7A118A907280026AA0E /* AILoggerMock.m */, - 9649D7A318A91FA20026AA0E /* AIRequestHandlerMock.h */, - 9649D7A418A91FA20026AA0E /* AIRequestHandlerMock.m */, - 9695104E18AA770C0072B6D7 /* AIActivityHandlerMock.h */, - 9695104F18AA770C0072B6D7 /* AIActivityHandlerMock.m */, - 96F0018B18ABC0C800612200 /* AITestsUtil.h */, - 96F0018C18ABC0C800612200 /* AITestsUtil.m */, - 96F0019418ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */, - 96F0019518ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */, - ); - path = AdjustIoTests; - sourceTree = ""; - }; - 96E913E718A4F06B00F01294 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 96E913E818A4F06B00F01294 /* AdjustIoTests-Info.plist */, - 96E913E918A4F06B00F01294 /* InfoPlist.strings */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 96E913CC18A4F06B00F01294 /* AdjustIo */ = { - isa = PBXNativeTarget; - buildConfigurationList = 96E913F018A4F06B00F01294 /* Build configuration list for PBXNativeTarget "AdjustIo" */; - buildPhases = ( - 96E913C918A4F06B00F01294 /* Sources */, - 96E913CA18A4F06B00F01294 /* Frameworks */, - 96E913CB18A4F06B00F01294 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = AdjustIo; - productName = AdjustIo; - productReference = 96E913CD18A4F06B00F01294 /* libAdjustIo.a */; - productType = "com.apple.product-type.library.static"; - }; - 96E913DC18A4F06B00F01294 /* AdjustIoTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 96E913F318A4F06B00F01294 /* Build configuration list for PBXNativeTarget "AdjustIoTests" */; - buildPhases = ( - 96E913D918A4F06B00F01294 /* Sources */, - 96E913DA18A4F06B00F01294 /* Frameworks */, - 96E913DB18A4F06B00F01294 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 96E913E418A4F06B00F01294 /* PBXTargetDependency */, - ); - name = AdjustIoTests; - productName = AdjustIoTests; - productReference = 96E913DD18A4F06B00F01294 /* AdjustIoTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 96E913C518A4F06B00F01294 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0500; - ORGANIZATIONNAME = adeven; - }; - buildConfigurationList = 96E913C818A4F06B00F01294 /* Build configuration list for PBXProject "AdjustIo" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 96E913C418A4F06B00F01294; - productRefGroup = 96E913CE18A4F06B00F01294 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 96E913CC18A4F06B00F01294 /* AdjustIo */, - 96E913DC18A4F06B00F01294 /* AdjustIoTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 96E913DB18A4F06B00F01294 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 96E913EB18A4F06B00F01294 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 96E913C918A4F06B00F01294 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 96F9050C18AE776F00DBEF2F /* AITestsUtil.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 96E913D918A4F06B00F01294 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 96E9144818A5124C00F01294 /* AIPackageHandlerTests.m in Sources */, - 9649D7A218A907280026AA0E /* AILoggerMock.m in Sources */, - 7FF8AC9D18AD54870065977B /* AIActivityHandler.m in Sources */, - 96E9144A18A5126100F01294 /* AIRequestHandlerTests.m in Sources */, - 7FF8ACA818AD54870065977B /* AIRequestHandler.m in Sources */, - 7FF8ACAB18AD54870065977B /* AIUtil.m in Sources */, - 96F0019618ABD9F000612200 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */, - 7FF8AC9C18AD54870065977B /* Adjust.m in Sources */, - 7FF8ACAA18AD54870065977B /* AITimer.m in Sources */, - 7FF8ACA918AD54870065977B /* AIResponseData.m in Sources */, - 9695105018AA770C0072B6D7 /* AIActivityHandlerMock.m in Sources */, - 96F0018D18ABC0C800612200 /* AITestsUtil.m in Sources */, - 7FF8ACA118AD54870065977B /* NSData+AIAdditions.m in Sources */, - 7FF8ACA318AD54870065977B /* UIDevice+AIAdditions.m in Sources */, - 7FF8AC9E18AD54870065977B /* AIActivityKind.m in Sources */, - 7FF8AC9F18AD54870065977B /* AIActivityPackage.m in Sources */, - 7FF8ACA018AD54870065977B /* AIActivityState.m in Sources */, - 9649D79F18A9053F0026AA0E /* AIPackageHandlerMock.m in Sources */, - 7FF8ACA218AD54870065977B /* NSString+AIAdditions.m in Sources */, - 7FF8ACA718AD54870065977B /* AIPackageHandler.m in Sources */, - 9649D7A518A91FA20026AA0E /* AIRequestHandlerMock.m in Sources */, - 96E9144618A5122A00F01294 /* AIActivityHandlerTests.m in Sources */, - 7FF8ACA518AD54870065977B /* AILogger.m in Sources */, - 7FF8ACA618AD54870065977B /* AIPackageBuilder.m in Sources */, - 7FF8ACA418AD54870065977B /* AIAdjustFactory.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 96E913E418A4F06B00F01294 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 96E913CC18A4F06B00F01294 /* AdjustIo */; - targetProxy = 96E913E318A4F06B00F01294 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 96E913E918A4F06B00F01294 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 96E913EA18A4F06B00F01294 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 96E913EE18A4F06B00F01294 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - }; - name = Debug; - }; - 96E913EF18A4F06B00F01294 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 96E913F118A4F06B00F01294 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = NO; - DSTROOT = /tmp/Adjust.dst; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - /Users/pfms/GitHub/adjust_ios_sdk, - ); - GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - OTHER_LDFLAGS = "-ObjC"; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 96E913F218A4F06B00F01294 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = NO; - DSTROOT = /tmp/Adjust.dst; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - /Users/pfms/GitHub/adjust_ios_sdk, - ); - GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - OTHER_LDFLAGS = "-ObjC"; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 96E913F418A4F06B00F01294 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - /Users/pfms/GitHub/adjust_ios_sdk, - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "AdjustIoTests/Adjust-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = "AdjustIoTests/AdjustIoTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = xctest; - }; - name = Debug; - }; - 96E913F518A4F06B00F01294 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - /Users/pfms/GitHub/adjust_ios_sdk, - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "AdjustIoTests/Adjust-Prefix.pch"; - INFOPLIST_FILE = "AdjustIoTests/AdjustIoTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = xctest; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 96E913C818A4F06B00F01294 /* Build configuration list for PBXProject "AdjustIo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 96E913EE18A4F06B00F01294 /* Debug */, - 96E913EF18A4F06B00F01294 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 96E913F018A4F06B00F01294 /* Build configuration list for PBXNativeTarget "AdjustIo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 96E913F118A4F06B00F01294 /* Debug */, - 96E913F218A4F06B00F01294 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 96E913F318A4F06B00F01294 /* Build configuration list for PBXNativeTarget "AdjustIoTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 96E913F418A4F06B00F01294 /* Debug */, - 96E913F518A4F06B00F01294 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 96E913C518A4F06B00F01294 /* Project object */; -} diff --git a/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/AdjustIo.xcscheme b/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/AdjustIo.xcscheme deleted file mode 100644 index 5f02a8703..000000000 --- a/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/AdjustIo.xcscheme +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/xcschememanagement.plist b/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 152005229..000000000 --- a/AdjustIo.xcodeproj/xcuserdata/pfms.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,27 +0,0 @@ - - - - - SchemeUserState - - AdjustIo.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - 96E913CC18A4F06B00F01294 - - primary - - - 96E913DC18A4F06B00F01294 - - primary - - - - - diff --git a/AdjustTests/AIActivityHandlerMock.h b/AdjustTests/AIActivityHandlerMock.h new file mode 100644 index 000000000..4c91c426f --- /dev/null +++ b/AdjustTests/AIActivityHandlerMock.h @@ -0,0 +1,13 @@ +// +// AIActivityHandlerMock.h +// Adjust +// +// Created by Pedro Filipe on 11/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIActivityHandler.h" + +@interface AIActivityHandlerMock : NSObject + +@end diff --git a/AdjustTests/AIActivityHandlerMock.m b/AdjustTests/AIActivityHandlerMock.m new file mode 100644 index 000000000..082c3a9dd --- /dev/null +++ b/AdjustTests/AIActivityHandlerMock.m @@ -0,0 +1,67 @@ +// +// AIActivityHandlerMock.m +// Adjust +// +// Created by Pedro Filipe on 11/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIActivityHandlerMock.h" +#import "AILoggerMock.h" +#import "AIAdjustFactory.h" + +static NSString * const prefix = @"AIActivityHandler "; + +@interface AIActivityHandlerMock() + +@property (nonatomic, strong) AILoggerMock *loggerMock; + +@end + +@implementation AIActivityHandlerMock + +@synthesize environment; +@synthesize bufferEvents; +@synthesize trackMacMd5; +@synthesize delegate; + +- (id)initWithAppToken:(NSString *)yourAppToken { + self = [super init]; + if (self == nil) return nil; + + self.loggerMock = (AILoggerMock *) [AIAdjustFactory logger]; + + [self.loggerMock test:[prefix stringByAppendingFormat:@"initWithAppToken yourAppToken:%@", yourAppToken]]; + + return self; +} + +- (void)setSdkPrefix:(NSString *)sdkPrefix { + [self.loggerMock test:[prefix stringByAppendingFormat:@"setSdkPrefix sdkPrefix:%@", sdkPrefix]]; +} + +- (void)trackSubsessionStart { + [self.loggerMock test:[prefix stringByAppendingFormat:@"trackSubsessionStart"]]; +} +- (void)trackSubsessionEnd { + [self.loggerMock test:[prefix stringByAppendingFormat:@"trackSubsessionEnd"]]; +} + +- (void)trackEvent:(NSString *)eventToken + withParameters:(NSDictionary *)parameters { + [self.loggerMock test:[prefix stringByAppendingFormat:@"trackEvent eventToken:%@ parameters:%@", eventToken, parameters]]; +} + +- (void)trackRevenue:(double)amount + forEvent:(NSString *)eventToken + withParameters:(NSDictionary *)parameters { + [self.loggerMock test:[prefix stringByAppendingFormat:@"trackRevenue amount:%f eventToken:%@ parameters:%@", amount, eventToken, parameters]]; +} + +- (void)finishedTrackingWithResponse:(AIResponseData *)response { + [self.loggerMock test:[prefix stringByAppendingFormat:@"finishedTrackingWithResponse response:%@", response]]; +} + + + +@end diff --git a/AdjustTests/AIActivityHandlerTests.m b/AdjustTests/AIActivityHandlerTests.m new file mode 100644 index 000000000..4db60e1ee --- /dev/null +++ b/AdjustTests/AIActivityHandlerTests.m @@ -0,0 +1,419 @@ +// +// AIActivityHandlerTests.m +// Adjust +// +// Created by Pedro Filipe on 07/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AILoggerMock.h" +#import "AIPackageHandlerMock.h" +#import "AIAdjustFactory.h" +#import "AIActivityHandler.h" +#import "AIActivityPackage.h" +#import "AITestsUtil.h" + +@interface AIActivityHandlerTests : XCTestCase + +@property (atomic,strong) AILoggerMock *loggerMock; +@property (atomic,strong) AIPackageHandlerMock *packageHandlerMock; + +@end + +@implementation AIActivityHandlerTests + +- (void)setUp +{ + [super setUp]; + // Put setup code here; it will be run once, before the first test case. + +} + +- (void)tearDown +{ + [AIAdjustFactory setPackageHandler:nil]; + [AIAdjustFactory setLogger:nil]; + [AIAdjustFactory setSessionInterval:-1]; + [AIAdjustFactory setSubsessionInterval:-1]; + // Put teardown code here; it will be run once, after the last test case. + [super tearDown]; +} + +- (void)reset { + self.loggerMock = [[AILoggerMock alloc] init]; + [AIAdjustFactory setLogger:self.loggerMock]; + + self.packageHandlerMock = [AIPackageHandlerMock alloc]; + [AIAdjustFactory setPackageHandler:self.packageHandlerMock]; + + [AIAdjustFactory setSessionInterval:-1]; + [AIAdjustFactory setSubsessionInterval:-1]; +} + +- (void)testFirstRun +{ + // reseting to make the test order independent + [self reset]; + + // deleting the activity state file to simulate a first session + XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); + + // create handler and start the first session + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + + // set the delegate to be called at after sending the package + AITestsUtil * testsUtil = [[AITestsUtil alloc] init]; + [activityHandler setDelegate:testsUtil]; + + // it's necessary to sleep the activity for a while after each handler call + // to let the internal queue act + [NSThread sleepForTimeInterval:10.0]; + + // test that the file did not exist in the first run of the application + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Activity state file not found"], @"%@", self.loggerMock); + + // when a session package is being sent the package handler should resume sending + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler resumeSending"], @"%@", self.loggerMock); + + // if the package was build, it was sent to the Package Handler + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler addPackage"], @"%@", self.loggerMock); + + // checking the default values of the first session package + // should only have one package + XCTAssertEqual((NSUInteger)1, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + + AIActivityPackage *activityPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[0]; + + // check the Sdk version is being tested + XCTAssertEqual(@"ios3.0.0", activityPackage.clientSdk, @"%@", activityPackage.extendedString); + + // packageType should be SESSION_START + XCTAssertEqual(@"/startup", activityPackage.path, @"%@", activityPackage.extendedString); + + NSDictionary *parameters = activityPackage.parameters; + + // sessions attributes + // sessionCount 1, because is the first session + XCTAssertEqual(1, [(NSString *)parameters[@"session_count"] intValue], @"%@", activityPackage.extendedString); + + // subSessionCount -1, because we didn't had any subsessions yet + // because only values > 0 are added to parameters, therefore is not present + XCTAssertNil(parameters[@"subsession_count"], @"%@", activityPackage.extendedString); + + // sessionLenght -1, same as before + XCTAssertNil(parameters[@"session_length"], @"%@", activityPackage.extendedString); + + // timeSpent -1, same as before + XCTAssertNil(parameters[@"time_spent"], @"%@", activityPackage.extendedString); + + // lastInterval -1, same as before + XCTAssertNil(parameters[@"last_interval"], @"%@", activityPackage.extendedString); + + // after adding, the activity handler ping the Package handler to send the package + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendFirstPackage"], @"%@", self.loggerMock); + + // check that the package handler calls back with the delegate + //XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AdjustDelegate adjustFinishedTrackingWithResponse"], + // @"%@", self.loggerMock); + + // check that the activity state is written by the first session or timer + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: "], @"%@", self.loggerMock); + + // ending of first session + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"First session"], @"%@", self.loggerMock); +} + +- (void)testSessions { + // reseting to make the test order independent + [self reset]; + + // starting from a clean slate + XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); + + // adjust the intervals for testing + [AIAdjustFactory setSessionInterval:(2)]; // 2 seconds + [AIAdjustFactory setSubsessionInterval:(0.1)]; // 0.1 second + + // create handler to start the session + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + + // wait enough to be a new subsession, but not a new session + [NSThread sleepForTimeInterval:1.5]; + [activityHandler trackSubsessionStart]; + + // wait enough to be a new session + [NSThread sleepForTimeInterval:4]; + [activityHandler trackSubsessionStart]; + + // test the subsession end + [activityHandler trackSubsessionEnd]; + [NSThread sleepForTimeInterval:1]; + + // check that a new subsession was created + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Processed Subsession 2 of Session 1"], @"%@", self.loggerMock); + + // check that it's now on the 2nd session + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Session 2"], @"%@", self.loggerMock); + + // check that 2 packages were added to the package handler + XCTAssertEqual((NSUInteger)2, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + + // get the second session package and its parameters + AIActivityPackage *activityPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; + NSDictionary *parameters = activityPackage.parameters; + + // the session and subsession count should be 2 + // session_count + XCTAssertEqual(2, [(NSString *)parameters[@"session_count"] intValue], @"%@", activityPackage.extendedString); + + // subsession_count + XCTAssertEqual(2, [(NSString *)parameters[@"subsession_count"] intValue], @"%@", activityPackage.extendedString); + + // check that the package handler was paused + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler pauseSending"], @"%@", self.loggerMock); +} + +- (void)testEventsBuffered { + // reseting to make the test order independent + [self reset]; + + // starting from a clean slate + XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); + + // create handler to start the session + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + [activityHandler setBufferEvents:YES]; + + // construct the parameters of the the event + NSDictionary *eventParameters = @{@"key": @"value", @"foo": @"bar" }; + + // the first is a normal event has parameters, the second a revenue + [activityHandler trackEvent:@"abc123" withParameters:eventParameters]; + [activityHandler trackRevenue:4.45 forEvent:@"abc123" withParameters:eventParameters]; + + [NSThread sleepForTimeInterval:2]; + + // check that event buffering is enabled + //XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Event buffering is enabled"], @"%@", self.loggerMock); + + // check that the package builder added the session, event and revenue package + XCTAssertEqual((NSUInteger)3, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + + // check the first event + AIActivityPackage *eventPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; + + // check the event path + XCTAssert([eventPackage.path isEqualToString:@"/event"], @"%@", eventPackage.extendedString); + + // check the event suffix + XCTAssert([eventPackage.suffix isEqualToString:@" 'abc123'"], @"%@", eventPackage.extendedString); + + NSDictionary *eventPackageParameters = eventPackage.parameters; + + // check the event count in the package parameters + XCTAssertEqual(1, [(NSString *)eventPackageParameters[@"event_count"] intValue], @"%@", eventPackage.extendedString); + + // check the event token + XCTAssert([(NSString *)eventPackageParameters[@"event_token"] isEqualToString:@"abc123"], @"%@", eventPackage.extendedString); + + // check the injected parameters + XCTAssert([(NSString *)eventPackageParameters[@"params"] isEqualToString:@"eyJrZXkiOiJ2YWx1ZSIsImZvbyI6ImJhciJ9"], + @"%@", eventPackage.extendedString); + + // check that the event was buffered + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Buffered event 'abc123'"], @"%@", self.loggerMock); + + // check the event count in the written activity state + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:1"], @"%@", self.loggerMock); + + // check the event count in the logger + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 1"], @"%@", self.loggerMock); + + // check the second event/ first revenue + AIActivityPackage *revenuePackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[2]; + + // check the revenue path + XCTAssert([revenuePackage.path isEqualToString:@"/revenue"], @"%@", revenuePackage.extendedString); + + // check the revenue suffix + // note that the amount was rounded to the decimal cents + XCTAssert([revenuePackage.suffix isEqualToString:@" (4.5 cent, 'abc123')"], @"%@", revenuePackage.extendedString); + + NSDictionary *revenuePackageParameters = revenuePackage.parameters; + + // check the event count in the package parameters + XCTAssertEqual(2, [(NSString *)revenuePackageParameters[@"event_count"] intValue], @"%@", revenuePackage.extendedString); + + // check the amount, transforming cents into rounded decimal cents + // note that the 4.45 cents ~> 45 decimal cents + XCTAssertEqual(45, [(NSString *)revenuePackageParameters[@"amount"] intValue], @"%@", revenuePackage.extendedString); + + // check the event token + XCTAssert([(NSString *)revenuePackageParameters[@"event_token"] isEqualToString:@"abc123"], @"%@", revenuePackage.extendedString); + + // check the injected parameters + XCTAssert([(NSString *)revenuePackageParameters[@"params"] isEqualToString:@"eyJrZXkiOiJ2YWx1ZSIsImZvbyI6ImJhciJ9"], + @"%@", eventPackage.extendedString); + + // check that the revenue was buffered + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Buffered revenue (4.5 cent, 'abc123')"], @"%@", self.loggerMock); + + // check the event count in the written activity state + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:2"], @"%@", self.loggerMock); + + // check the event count in the logger + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 2 (revenue)"], @"%@", self.loggerMock); +} + +- (void)testEventsNotBuffered { + // reseting to make the test order independent + [self reset]; + + // starting from a clean slate + XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); + + // create handler to start the session + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + [activityHandler setBufferEvents:NO]; + + // the first is a normal event has parameters, the second a revenue + [activityHandler trackEvent:@"abc123" withParameters:nil]; + [activityHandler trackRevenue:0 forEvent:nil withParameters:nil]; + + [NSThread sleepForTimeInterval:2]; + + // check that the package added the session, event and revenue package + XCTAssertEqual((NSUInteger)3, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); + + // check the first event + AIActivityPackage *eventPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; + + // check the event path + XCTAssert([eventPackage.path isEqualToString:@"/event"], @"%@", eventPackage.extendedString); + + // check the event suffix + XCTAssert([eventPackage.suffix isEqualToString:@" 'abc123'"], @"%@", eventPackage.extendedString); + + NSDictionary *eventPackageParameters = eventPackage.parameters; + + // check the event count in the package parameters + XCTAssertEqual(1, [(NSString *)eventPackageParameters[@"event_count"] intValue], @"%@", eventPackage.extendedString); + + // check the event token + XCTAssert([(NSString *)eventPackageParameters[@"event_token"] isEqualToString:@"abc123"], @"%@", eventPackage.extendedString); + + // check the that the parameters were not injected + XCTAssertNil(eventPackageParameters[@"params"], @"%@", eventPackage.extendedString); + + // check that the package handler was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendFirstPackage"], @"%@", self.loggerMock); + + // check the event count in the written activity state + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:1"], @"%@", self.loggerMock); + + // check the event count in the logger + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 1"], @"%@", self.loggerMock); + + // check the second event/ first revenue + AIActivityPackage *revenuePackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[2]; + + // check the revenue path + XCTAssert([revenuePackage.path isEqualToString:@"/revenue"], @"%@", revenuePackage.extendedString); + + // check the revenue suffix + // note that the amount was rounded to the decimal cents + XCTAssert([revenuePackage.suffix isEqualToString:@" (0.0 cent)"], @"%@", revenuePackage.extendedString); + + NSDictionary *revenuePackageParameters = revenuePackage.parameters; + + // check the event count in the package parameters + XCTAssertEqual(2, [(NSString *)revenuePackageParameters[@"event_count"] intValue], @"%@", revenuePackage.extendedString); + + // check the amount, transforming cents into rounded decimal cents + // note that the 4.45 cents ~> 45 decimal cents + XCTAssertEqual(0, [(NSString *)revenuePackageParameters[@"amount"] intValue], @"%@", revenuePackage.extendedString); + + // check that the event token is nil + XCTAssertNil(revenuePackageParameters[@"event_token"], @"%@", revenuePackage.extendedString); + + // check the that the parameters were not injected + XCTAssertNil(eventPackageParameters[@"params"], @"%@", eventPackage.extendedString); + + // check that the package handler was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendFirstPackage"], @"%@", self.loggerMock); + + // check the event count in the written activity state + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:2"], @"%@", self.loggerMock); + + // check the event count in the logger + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 2 (revenue)"], @"%@", self.loggerMock); + +} + +- (void)testChecks { + // reseting to make the test order independent + [self reset]; + + // activity handler without app token + id nilActivityHandler = [AIAdjustFactory activityHandlerWithAppToken:nil]; + + // trigger the nil app token a 2nd time for a subsession start + [nilActivityHandler trackSubsessionStart]; + + // trigger the nil app token a 3rd time for a subsession end + [nilActivityHandler trackSubsessionStart]; + + // trigger the nil app token a 4th time for a event + [nilActivityHandler trackEvent:@"ab123" withParameters:nil]; + + // trigger the nil app token a 5th time for a revenue + [nilActivityHandler trackRevenue:0 forEvent:@"abc123" withParameters:nil]; + + [NSThread sleepForTimeInterval:1]; + // activity with invalid app token + id invalidActivityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"12345678901"]; + + [NSThread sleepForTimeInterval:1]; + // activity with valid app token + id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; + + // track event with nil token + [activityHandler trackEvent:nil withParameters:nil]; + + // track event with invalid token + [activityHandler trackEvent:@"abc1234" withParameters:nil]; + + // track revenue with invalid amount token + [activityHandler trackRevenue:-0.1 forEvent:nil withParameters:nil]; + + // track revenue with invalid token + [activityHandler trackRevenue:0 forEvent:@"abc12" withParameters:nil]; + + [NSThread sleepForTimeInterval:1]; + + // check missing app token messages + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); + + // check the invalid app token message + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed App Token '12345678901'"], @"%@", self.loggerMock); + + // check the nil event token + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing Event Token"], @"%@", self.loggerMock); + + // check the invalid event token + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed Event Token 'abc1234'"], @"%@", self.loggerMock); + + // check the invalid revenue amount token + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Invalid amount -0.1"], @"%@", self.loggerMock); + + // check the invalid revenue token + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed Event Token 'abc12'"], @"%@", self.loggerMock); + +} + +@end diff --git a/AdjustTests/AILoggerMock.h b/AdjustTests/AILoggerMock.h new file mode 100644 index 000000000..5f454ec95 --- /dev/null +++ b/AdjustTests/AILoggerMock.h @@ -0,0 +1,17 @@ +// +// AILoggerMock.h +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AILogger.h" + +static const int AILogLevelTest = 0; + +@interface AILoggerMock : NSObject + - (void)test:(NSString *)message, ...; + - (BOOL) containsMessage:(NSInteger)logLevel beginsWith:(NSString *)beginsWith; +@end diff --git a/AdjustTests/AILoggerMock.m b/AdjustTests/AILoggerMock.m new file mode 100644 index 000000000..7298ce370 --- /dev/null +++ b/AdjustTests/AILoggerMock.m @@ -0,0 +1,116 @@ +// +// AILoggerMock.m +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AILoggerMock.h" + +static NSString * const kLogTag = @"AdjustTests"; + +@interface AILoggerMock() + +@property (nonatomic, strong) NSMutableString *logBuffer; +@property (nonatomic, strong) NSDictionary *logMap; + +@end + +@implementation AILoggerMock + +- (id)init { + self = [super init]; + if (self == nil) return nil; + + self.logBuffer = [[NSMutableString alloc] init]; + self.logMap = @{ + @0 : [NSMutableArray array], + @1 : [NSMutableArray array], + @2 : [NSMutableArray array], + @3 : [NSMutableArray array], + @4 : [NSMutableArray array], + @5 : [NSMutableArray array], + @6 : [NSMutableArray array], + }; + + return self; +} + +- (NSString *)description { + return self.logBuffer; +} + +- (BOOL) containsMessage:(NSInteger)logLevel beginsWith:(NSString *)beginsWith { + NSMutableArray *logArray = (NSMutableArray *)self.logMap[@(logLevel)]; + for (int i = 0; i < [logArray count]; i++) { + NSString *logMessage = logArray[i]; + if ([logMessage hasPrefix:beginsWith]) { + [logArray removeObjectsInRange:NSMakeRange(0, i + 1)]; + NSLog(@"%@ found", beginsWith); + return YES; + } + } + NSLog(@"%@ not in (%@)", beginsWith, [logArray componentsJoinedByString:@","]); + return NO; +} + +- (void)setLogLevel:(AILogLevel)logLevel { + [self test:@"AILogger setLogLevel logLevel:%@", logLevel]; +} + +- (void)test:(NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelTest logPrefix:@"t" format:format parameters:parameters]; +} + + +- (void)verbose:(NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelVerbose logPrefix:@"v" format:format parameters:parameters]; +} + +- (void)debug: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelDebug logPrefix:@"d" format:format parameters:parameters]; +} + +- (void)info: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelInfo logPrefix:@"i" format:format parameters:parameters]; +} + +- (void)warn: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelWarn logPrefix:@"w" format:format parameters:parameters]; +} + +- (void)error: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelError logPrefix:@"e" format:format parameters:parameters]; +} + +- (void)assert: (NSString *)format, ... { + va_list parameters; va_start(parameters, format); + [self logLevel:AILogLevelAssert logPrefix:@"a" format:format parameters:parameters]; +} + +// private implementation +- (void)logLevel:(NSInteger)logLevel logPrefix:(NSString *)logPrefix format:(NSString *)format parameters:(va_list)parameters { + NSString *formatedMessage = [[NSString alloc] initWithFormat:format arguments:parameters]; + va_end(parameters); + + NSString *logMessage = [NSString stringWithFormat:@"\t[%@]%@: %@", kLogTag, logPrefix, formatedMessage]; + + [self.logBuffer appendString:logMessage]; + + NSMutableArray *logArray = (NSMutableArray *)self.logMap[@(logLevel)]; + [logArray addObject:formatedMessage]; + + NSArray *lines = [formatedMessage componentsSeparatedByString:@"\n"]; + for (NSString *line in lines) { + NSLog(@"\t[%@]%@: %@", kLogTag, logPrefix, line); + } +} + +@end diff --git a/AdjustTests/AIPackageHandlerMock.h b/AdjustTests/AIPackageHandlerMock.h new file mode 100644 index 000000000..b55bb010b --- /dev/null +++ b/AdjustTests/AIPackageHandlerMock.h @@ -0,0 +1,18 @@ +// +// AIPackageHandlerMock.h +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIPackageHandler.h" + +@interface AIPackageHandlerMock : NSObject + +@property (nonatomic, strong) NSMutableArray *packageQueue; + +@property (nonatomic, strong) AIResponseData *responseData; +@property (nonatomic, strong) AIActivityPackage * activityPackage; + +@end diff --git a/AdjustTests/AIPackageHandlerMock.m b/AdjustTests/AIPackageHandlerMock.m new file mode 100644 index 000000000..6a21f6b5c --- /dev/null +++ b/AdjustTests/AIPackageHandlerMock.m @@ -0,0 +1,75 @@ +// +// AIPackageHandlerMock.m +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIPackageHandlerMock.h" +#import "AILoggerMock.h" +#import "AIAdjustFactory.h" +#import "AIActivityHandler.h" +#import "AIResponseData.h" + +static NSString * const prefix = @"AIPackageHandler "; + +@interface AIPackageHandlerMock() + +@property (nonatomic, strong) AILoggerMock *loggerMock; +@property (nonatomic, assign) id activityHandler; + +@end + +@implementation AIPackageHandlerMock + +- (id)init { + return [self initWithActivityHandler:nil]; +} + +- (id)initWithActivityHandler:(id)activityHandler { + self = [super init]; + if (self == nil) return nil; + + self.activityHandler = activityHandler; + + self.loggerMock = (AILoggerMock *) AIAdjustFactory.logger; + self.packageQueue = [NSMutableArray array]; + + [self.loggerMock test:[prefix stringByAppendingString:@"initWithActivityHandler"]]; + + return self; +} + +- (void)addPackage:(AIActivityPackage *)package { + [self.loggerMock test:[prefix stringByAppendingString:@"addPackage"]]; + [self.packageQueue addObject:package]; +} + +- (void)sendFirstPackage { + [self.loggerMock test:[prefix stringByAppendingString:@"sendFirstPackage"]]; + [self.activityHandler finishedTrackingWithResponse:[[AIResponseData alloc] init]]; +} + +- (void)sendNextPackage { + [self.loggerMock test:[prefix stringByAppendingString:@"sendNextPackage"]]; +} + +- (void)closeFirstPackage { + [self.loggerMock test:[prefix stringByAppendingString:@"closeFirstPackage"]]; +} + +- (void)pauseSending { + [self.loggerMock test:[prefix stringByAppendingString:@"pauseSending"]]; +} + +- (void)resumeSending { + [self.loggerMock test:[prefix stringByAppendingString:@"resumeSending"]]; +} + +- (void)finishedTrackingActivity:(AIActivityPackage *)activityPackage withResponse:(AIResponseData *)response { + [self.loggerMock test:[prefix stringByAppendingString:@"finishedTrackingActivity"]]; + self.responseData = response; +} + +@end diff --git a/AdjustTests/AIPackageHandlerTests.m b/AdjustTests/AIPackageHandlerTests.m new file mode 100644 index 000000000..18ccb28f9 --- /dev/null +++ b/AdjustTests/AIPackageHandlerTests.m @@ -0,0 +1,177 @@ +// +// AIPackageHandlerTests.m +// Adjust +// +// Created by Pedro Filipe on 07/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AIAdjustFactory.h" +#import "AILoggerMock.h" +#import "AIActivityHandlerMock.h" +#import "AIRequestHandlerMock.h" +#import "AITestsUtil.h" + +@interface AIPackageHandlerTests : XCTestCase + +@property (atomic,strong) AILoggerMock *loggerMock; +@property (atomic,strong) AIRequestHandlerMock *requestHandlerMock; + +@end + +@implementation AIPackageHandlerTests + +- (void)setUp +{ + [super setUp]; + // Put setup code here; it will be run once, before the first test case. +} + +- (void)tearDown +{ + [AIAdjustFactory setRequestHandler:nil]; + [AIAdjustFactory setLogger:nil]; + + // Put teardown code here; it will be run once, after the last test case. + [super tearDown]; +} + +- (void)reset { + self.loggerMock = [[AILoggerMock alloc] init]; + [AIAdjustFactory setLogger:self.loggerMock]; + + self.requestHandlerMock = [AIRequestHandlerMock alloc]; + [AIAdjustFactory setRequestHandler:self.requestHandlerMock]; + +} + +- (void)testFirstPackage +{ + // reseting to make the test order independent + [self reset]; + + // delete previously created Package queue file to make a new queue + XCTAssert([AITestsUtil deleteFile:@"AdjustIoPackageQueue" logger:self.loggerMock], @"%@", self.loggerMock); + + // initialize Package Handler + AIActivityHandlerMock *activityHandler = [[AIActivityHandlerMock alloc] initWithAppToken:@"123456789012"]; + id packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; + + // enable sending packages to Request Handler + [packageHandler resumeSending]; + + // build and add the first package to the queue + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + + // send the first package in the queue to the mock request handler + [packageHandler sendFirstPackage]; + + // it's necessary to sleep the activity for a while after each handler call + // to let the internal queue act + [NSThread sleepForTimeInterval:1.0]; + + // check that the request handler mock was created + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler initWithPackageHandler"], @"%@", self.loggerMock); + + // test that the file did not exist in the first run of the application + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Package queue file not found"], @"%@", self.loggerMock); + + // check that added first package to a previous empty queue + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Added package 1 "], @"%@", self.loggerMock); + + //TODO add the verbose message + + // it should write the package queue with the first session package + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler wrote 1 packages"], @"%@", self.loggerMock); + + // check that the Request Handler was called to send the package + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler sendPackage"], @"%@", self.loggerMock); + + // check that the the request handler called the package callback, that foward it to the activity handler + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIActivityHandler finishedTrackingWithResponse"], + @"%@", self.loggerMock); + + // check that the package was removed from the queue and 0 packages were written + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler wrote 0 packages"], @"%@", self.loggerMock); +} + +- (void) testPaused { + // reseting to make the test order independent + [self reset]; + + // initialize Package Handler + AIActivityHandlerMock *activityHandler = [[AIActivityHandlerMock alloc] initWithAppToken:@"123456789012"]; + id packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; + + // disable sending packages to Request Handler + [packageHandler pauseSending]; + + // build and add a package the queue + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + + // try to send the first package in the queue to the mock request handler + [packageHandler sendFirstPackage]; + + [NSThread sleepForTimeInterval:1.0]; + + // check that the request handler mock was created + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler initWithPackageHandler"], @"%@", self.loggerMock); + + // check that a package was added + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Added package "], @"%@", self.loggerMock); + + // check that the mock request handler was NOT called to send the package + XCTAssertFalse([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler sendPackage"], @"%@", self.loggerMock); + + // check that the package handler is paused + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler is paused"], @"%@", self.loggerMock); +} + +- (void) testMultiplePackages { + // reseting to make the test order independent + [self reset]; + + // delete previously created Package queue file to make a new queue + XCTAssert([AITestsUtil deleteFile:@"AdjustIoPackageQueue" logger:self.loggerMock], @"%@", self.loggerMock); + + // initialize Package Handler + AIActivityHandlerMock *activityHandler = [[AIActivityHandlerMock alloc] initWithAppToken:@"123456789012"]; + id packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; + + // enable sending packages to Request Handler + [packageHandler resumeSending]; + + // build and add the 3 packages to the queue + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; + + // create a new package handler to simulate a new launch + [NSThread sleepForTimeInterval:1.0]; + packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; + + // try to send two packages without closing the first + [packageHandler sendFirstPackage]; + [packageHandler sendFirstPackage]; + + [NSThread sleepForTimeInterval:1.0]; + + // check that the request handler mock was created + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler initWithPackageHandler"], @"%@", self.loggerMock); + + // test that the file did not exist in the first run of the application + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Package queue file not found"], @"%@", self.loggerMock); + + // check that added the third package to the queue and wrote to a file + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Added package 3 "], @"%@", self.loggerMock); + + // check that it reads the same 3 packages in the file + XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler read 3 packages"], @"%@", self.loggerMock); + + // check that the package handler was already sending one package before + XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Package handler is already sending"], @"%@", self.loggerMock); + +} + +@end diff --git a/AdjustTests/AIRequestHandlerMock.h b/AdjustTests/AIRequestHandlerMock.h new file mode 100644 index 000000000..836c23791 --- /dev/null +++ b/AdjustTests/AIRequestHandlerMock.h @@ -0,0 +1,16 @@ +// +// AIRequestHandlerMock.h +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AIRequestHandler.h" + +@interface AIRequestHandlerMock : NSObject + +@property (nonatomic, assign) BOOL connectionError; + +@end diff --git a/AdjustTests/AIRequestHandlerMock.m b/AdjustTests/AIRequestHandlerMock.m new file mode 100644 index 000000000..be926adf0 --- /dev/null +++ b/AdjustTests/AIRequestHandlerMock.m @@ -0,0 +1,60 @@ +// +// AIRequestHandlerMock.m +// Adjust +// +// Created by Pedro Filipe on 10/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AIRequestHandlerMock.h" +#import "AILoggerMock.h" +#import "AIAdjustFactory.h" +#import "AIResponseData.h" + +static NSString * const prefix = @"AIRequestHandler "; + +@interface AIRequestHandlerMock() + +@property (nonatomic, assign) id packageHandler; +@property (nonatomic, assign) AILoggerMock *loggerMock; + +@end + +@implementation AIRequestHandlerMock + +- (id)initWithPackageHandler:(id) packageHandler { + self = [super init]; + if (self == nil) return nil; + + self.packageHandler = packageHandler; + self.loggerMock = (AILoggerMock *) [AIAdjustFactory logger]; + + [self.loggerMock test:[prefix stringByAppendingString:@"initWithPackageHandler"]]; + + self.connectionError = NO; + + return self; +} + +- (void)sendPackage:(AIActivityPackage *)activityPackage { + [self.loggerMock test:[prefix stringByAppendingString:@"sendPackage"]]; + + AIResponseData *responseData; + + if (self.connectionError) { + responseData = [[AIResponseData alloc] initWithError:@"connection error"]; + } else { + responseData = [[AIResponseData alloc] initWithJsonString:@"{\"tracker_token\":\"token\",\"tracker_name\":\"name\"}"]; + } + + [self.packageHandler finishedTrackingActivity:activityPackage withResponse:responseData]; + + if (self.connectionError) { + [self.packageHandler closeFirstPackage]; + } else { + [self.packageHandler sendNextPackage]; + } +} + + +@end diff --git a/AdjustTests/AIRequestHandlerTests.m b/AdjustTests/AIRequestHandlerTests.m new file mode 100644 index 000000000..935fefa69 --- /dev/null +++ b/AdjustTests/AIRequestHandlerTests.m @@ -0,0 +1,159 @@ +// +// AIRequestHandlerTests.m +// Adjust +// +// Created by Pedro Filipe on 07/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AIAdjustFactory.h" +#import "AILoggerMock.h" +#import "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h" +#import "AIPackageHandlerMock.h" +#import "AIRequestHandlerMock.h" +#import "AITestsUtil.h" +#import "AIResponseData.h" + +@interface AIRequestHandlerTests : XCTestCase + +@property (atomic,strong) AILoggerMock *loggerMock; +@property (atomic,strong) AIPackageHandlerMock *packageHandlerMock; +@property (atomic,strong) id requestHandler; + + +@end + +@implementation AIRequestHandlerTests + +- (void)setUp +{ + [super setUp]; + // Put setup code here; it will be run once, before the first test case. + + [self reset]; + +} + +- (void)tearDown +{ + [AIAdjustFactory setLogger:nil]; + + // Put teardown code here; it will be run once, after the last test case. + [super tearDown]; +} + +- (void)reset { + self.loggerMock = [[AILoggerMock alloc] init]; + [AIAdjustFactory setLogger:self.loggerMock]; + + self.packageHandlerMock = [[AIPackageHandlerMock alloc] init]; + self.requestHandler =[AIAdjustFactory requestHandlerForPackageHandler:self.packageHandlerMock]; +} + +- (void)testSendPackage +{ + // reseting to make the test order independent + [self reset]; + + // set the connection to respond OK + [NSURLConnection setConnectionError:NO]; + [NSURLConnection setResponseError:NO]; + + [self.requestHandler sendPackage:[AITestsUtil buildEmptyPackage]]; + + [NSThread sleepForTimeInterval:1.0]; + + NSLog(@"%@", self.loggerMock); + + // check the URL Connection was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"NSURLConnection sendSynchronousRequest"], + @"%@", self.loggerMock); + + // check that the package handler was pinged after sending + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler finishedTrackingActivity"], + @"%@", self.loggerMock); + + // check the response data, the kind is unknown because is set by the package handler + NSString *sresponseData= [NSString stringWithFormat:@"%@", self.packageHandlerMock.responseData]; + XCTAssert([sresponseData isEqualToString:@"[kind:unknown success:1 willRetry:0 error:(null) trackerToken:token trackerName:name]"], + @"%@", sresponseData); + + // check that the package was successfully sent + XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Tracked session"], + @"%@", self.loggerMock); + + // check that the package handler was called to send the next package + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendNextPackage"], + @"%@", self.loggerMock); + +} + +- (void)testConnectionError { + // reseting to make the test order independent + [self reset]; + + // set the connection to return error on the connection + [NSURLConnection setConnectionError:YES]; + [NSURLConnection setResponseError:NO]; + + [self.requestHandler sendPackage:[AITestsUtil buildEmptyPackage]]; + [NSThread sleepForTimeInterval:1.0]; + + // check the URL Connection was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"NSURLConnection sendSynchronousRequest"], + @"%@", self.loggerMock); + + // check that the package handler was pinged after sending + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler finishedTrackingActivity"], + @"%@", self.loggerMock); + + // check the response data, + NSString *sresponseData= [NSString stringWithFormat:@"%@", self.packageHandlerMock.responseData]; + XCTAssert([sresponseData isEqualToString:@"[kind:unknown success:0 willRetry:1 error:'connection error' trackerToken:(null) trackerName:(null)]"], @"%@", sresponseData); + + // check that the package was successfully sent + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Failed to track session. (connection error) Will retry later."], + @"%@", self.loggerMock); + + // check that the package handler was called to close the package to retry later + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler closeFirstPackage"], + @"%@", self.loggerMock); + +} + +- (void)testResponseError { + // reseting to make the test order independent + [self reset]; + + // set the response to return an error + [NSURLConnection setConnectionError:NO]; + [NSURLConnection setResponseError:YES]; + + [self.requestHandler sendPackage:[AITestsUtil buildEmptyPackage]]; + [NSThread sleepForTimeInterval:1.0]; + + // check the URL Connection was called + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"NSURLConnection sendSynchronousRequest"], + @"%@", self.loggerMock); + + // check that the package handler was pinged after sending + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler finishedTrackingActivity"], + @"%@", self.loggerMock); + + // check the response data, + NSString *sresponseData= [NSString stringWithFormat:@"%@", self.packageHandlerMock.responseData]; + XCTAssert([sresponseData isEqualToString:@"[kind:unknown success:0 willRetry:0 error:'response error' trackerToken:token trackerName:name]"], @"%@", sresponseData); + + // check that the package was successfully sent + XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Failed to track session. (response error)"], + @"%@", sresponseData); + + // check that the package handler was called to send the next package + XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendNextPackage"], + @"%@", self.loggerMock); + +} + + +@end diff --git a/AdjustTests/AITestsUtil.h b/AdjustTests/AITestsUtil.h new file mode 100644 index 000000000..0f5a0f48e --- /dev/null +++ b/AdjustTests/AITestsUtil.h @@ -0,0 +1,22 @@ +// +// AITestsUtil.h +// Adjust +// +// Created by Pedro Filipe on 12/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import +#import "AILoggerMock.h" +#import "AIActivityPackage.h" +#import "Adjust.h" + +@interface AITestsUtil : NSObject + ++ (NSString *)getFilename:(NSString *)filename; ++ (BOOL)deleteFile:(NSString *)filename logger:(AILoggerMock *)loggerMock; ++ (AIActivityPackage *)buildEmptyPackage; + +- (void)adjustFinishedTrackingWithResponse:(AIResponseData *)responseData; + +@end diff --git a/AdjustTests/AITestsUtil.m b/AdjustTests/AITestsUtil.m new file mode 100644 index 000000000..297a47c8b --- /dev/null +++ b/AdjustTests/AITestsUtil.m @@ -0,0 +1,57 @@ +// +// AITestsUtil.m +// Adjust +// +// Created by Pedro Filipe on 12/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import "AITestsUtil.h" +#import "AIPackageBuilder.h" +#import "AILoggerMock.h" +#import "AIAdjustFactory.h" + +@implementation AITestsUtil + ++ (NSString *)getFilename:(NSString *)filename { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *path = [paths objectAtIndex:0]; + NSString *filepath = [path stringByAppendingPathComponent:filename]; + return filepath; +} + ++ (BOOL)deleteFile:(NSString *)filename logger:(AILoggerMock *)loggerMock { + NSString *filepath = [AITestsUtil getFilename:filename]; + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSError *error = nil; + BOOL exists = [fileManager fileExistsAtPath:filepath]; + if (!exists) { + [loggerMock test:@"file %@ does not exist at path %@", filename, filepath]; + return YES; + } + BOOL deleted = [fileManager removeItemAtPath:filepath error:&error]; + + if (!deleted) { + [loggerMock test:@"unable to delete file %@ at path %@", filename, filepath]; + } + + if (error) { + [loggerMock test:@"error (%@) deleting file %@", [error localizedDescription], filename]; + } + + return deleted; +} + ++ (AIActivityPackage *)buildEmptyPackage { + AIPackageBuilder *sessionBuilder = [[AIPackageBuilder alloc] init]; + AIActivityPackage *sessionPackage = [sessionBuilder buildSessionPackage]; + return sessionPackage; +} + +- (void)adjustFinishedTrackingWithResponse:(AIResponseData *)responseData { + AILoggerMock *loggerMock = (AILoggerMock *)AIAdjustFactory.logger; + + [loggerMock test:@"AdjustDelegate adjustFinishedTrackingWithResponse"]; +} + +@end diff --git a/AdjustTests/AdjustTests-Info.plist b/AdjustTests/AdjustTests-Info.plist new file mode 100644 index 000000000..654db09eb --- /dev/null +++ b/AdjustTests/AdjustTests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + adeven.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h b/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h new file mode 100644 index 000000000..cfe3d4024 --- /dev/null +++ b/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h @@ -0,0 +1,18 @@ +// +// NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h +// Adjust +// +// Created by Pedro Filipe on 12/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// + +#import + +@interface NSURLConnection(NSURLConnectionSynchronousLoadingMock) + ++ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error; + ++ (void)setConnectionError:(BOOL)connection; ++ (void)setResponseError:(BOOL)response; + +@end diff --git a/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m b/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m new file mode 100644 index 000000000..440e19216 --- /dev/null +++ b/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m @@ -0,0 +1,57 @@ +// +// NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m +// Adjust +// +// Created by Pedro Filipe on 12/02/14. +// Copyright (c) 2014 adeven. All rights reserved. +// +#import "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h" +#import "AIAdjustFactory.h" +#import "AILoggerMock.h" + +static BOOL triggerConnectionError = NO; +static BOOL triggerResponseError = NO; + +@implementation NSURLConnection(NSURLConnectionSynchronousLoadingMock) + ++ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error { + AILoggerMock *loggerMock =(AILoggerMock *)AIAdjustFactory.logger; + [loggerMock test:@"NSURLConnection sendSynchronousRequest"]; + + if (triggerConnectionError) { + NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(@"connection error", nil) }; + (*error) = [NSError errorWithDomain:@"Adjust" + code:-57 + userInfo:userInfo]; + return nil; + } + NSInteger statusCode; + NSString * sResponseBase64; + if (triggerResponseError) { + statusCode = 0; + // encoded from "{"error":"response error","tracker_token":"token","tracker_name":"name"}" + sResponseBase64 = @"eyJlcnJvciI6InJlc3BvbnNlIGVycm9yIiwidHJhY2tlcl90b2tlbiI6InRva2VuIiwidHJhY2tlcl9uYW1lIjoibmFtZSJ9"; + } else { + statusCode = 200; + // encoded from "{"tracker_token":"token","tracker_name":"name"}" + sResponseBase64 = @"eyJ0cmFja2VyX3Rva2VuIjoidG9rZW4iLCJ0cmFja2VyX25hbWUiOiJuYW1lIn0="; + } + // build response + (*response) = [[NSHTTPURLResponse alloc] initWithURL:[[NSURL alloc] init] statusCode:statusCode HTTPVersion:@"" headerFields:nil]; + + NSData *responseData = [[NSData alloc] + initWithBase64EncodedString:sResponseBase64 + options:NSDataBase64DecodingIgnoreUnknownCharacters]; + + return responseData; +} + ++ (void)setConnectionError:(BOOL)connection { + triggerConnectionError = connection; +} + ++ (void)setResponseError:(BOOL)response { + triggerResponseError = response; +} + +@end diff --git a/AdjustTests/en.lproj/InfoPlist.strings b/AdjustTests/en.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/AdjustTests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + From 3b9b3bb27c860802df84219ddd33ec8b16f16aef Mon Sep 17 00:00:00 2001 From: Pedro Date: Mon, 24 Feb 2014 18:47:39 +0100 Subject: [PATCH 10/11] Fixed warning unused vars --- Adjust/AdjustTests/AIActivityHandlerTests.m | 2 +- AdjustTests/AIActivityHandlerTests.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Adjust/AdjustTests/AIActivityHandlerTests.m b/Adjust/AdjustTests/AIActivityHandlerTests.m index 4db60e1ee..61b402c27 100644 --- a/Adjust/AdjustTests/AIActivityHandlerTests.m +++ b/Adjust/AdjustTests/AIActivityHandlerTests.m @@ -372,7 +372,7 @@ - (void)testChecks { [NSThread sleepForTimeInterval:1]; // activity with invalid app token - id invalidActivityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"12345678901"]; + [AIAdjustFactory activityHandlerWithAppToken:@"12345678901"]; [NSThread sleepForTimeInterval:1]; // activity with valid app token diff --git a/AdjustTests/AIActivityHandlerTests.m b/AdjustTests/AIActivityHandlerTests.m index 4db60e1ee..61b402c27 100644 --- a/AdjustTests/AIActivityHandlerTests.m +++ b/AdjustTests/AIActivityHandlerTests.m @@ -372,7 +372,7 @@ - (void)testChecks { [NSThread sleepForTimeInterval:1]; // activity with invalid app token - id invalidActivityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"12345678901"]; + [AIAdjustFactory activityHandlerWithAppToken:@"12345678901"]; [NSThread sleepForTimeInterval:1]; // activity with valid app token From f40cd39c34e029f97df8008a429348c2f5ff6630 Mon Sep 17 00:00:00 2001 From: Pedro Date: Tue, 25 Feb 2014 11:29:26 +0100 Subject: [PATCH 11/11] Fixed gitignore and mis copied folder --- .gitignore | 1 - Adjust.xcodeproj/project.pbxproj | 70 --- Adjust/AdjustTests/AIActivityHandlerMock.h | 13 - Adjust/AdjustTests/AIActivityHandlerMock.m | 67 --- Adjust/AdjustTests/AIActivityHandlerTests.m | 419 ------------------ Adjust/AdjustTests/AILoggerMock.h | 17 - Adjust/AdjustTests/AILoggerMock.m | 116 ----- Adjust/AdjustTests/AIPackageHandlerMock.h | 18 - Adjust/AdjustTests/AIPackageHandlerMock.m | 75 ---- Adjust/AdjustTests/AIPackageHandlerTests.m | 177 -------- Adjust/AdjustTests/AIRequestHandlerMock.h | 16 - Adjust/AdjustTests/AIRequestHandlerMock.m | 60 --- Adjust/AdjustTests/AIRequestHandlerTests.m | 159 ------- Adjust/AdjustTests/AITestsUtil.h | 22 - Adjust/AdjustTests/AITestsUtil.m | 57 --- Adjust/AdjustTests/AdjustTests-Info.plist | 22 - ...NSURLConnectionSynchronousLoadingMocking.h | 18 - ...NSURLConnectionSynchronousLoadingMocking.m | 57 --- Adjust/AdjustTests/en.lproj/InfoPlist.strings | 2 - AdjustTests/Adjust-Prefix.pch | 9 + 20 files changed, 9 insertions(+), 1386 deletions(-) delete mode 100644 Adjust/AdjustTests/AIActivityHandlerMock.h delete mode 100644 Adjust/AdjustTests/AIActivityHandlerMock.m delete mode 100644 Adjust/AdjustTests/AIActivityHandlerTests.m delete mode 100644 Adjust/AdjustTests/AILoggerMock.h delete mode 100644 Adjust/AdjustTests/AILoggerMock.m delete mode 100644 Adjust/AdjustTests/AIPackageHandlerMock.h delete mode 100644 Adjust/AdjustTests/AIPackageHandlerMock.m delete mode 100644 Adjust/AdjustTests/AIPackageHandlerTests.m delete mode 100644 Adjust/AdjustTests/AIRequestHandlerMock.h delete mode 100644 Adjust/AdjustTests/AIRequestHandlerMock.m delete mode 100644 Adjust/AdjustTests/AIRequestHandlerTests.m delete mode 100644 Adjust/AdjustTests/AITestsUtil.h delete mode 100644 Adjust/AdjustTests/AITestsUtil.m delete mode 100644 Adjust/AdjustTests/AdjustTests-Info.plist delete mode 100644 Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h delete mode 100644 Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m delete mode 100644 Adjust/AdjustTests/en.lproj/InfoPlist.strings create mode 100644 AdjustTests/Adjust-Prefix.pch diff --git a/.gitignore b/.gitignore index eb6655971..144b934da 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,6 @@ profile DerivedData *.hmap *.ipa -*-Prefix.pch # CocoaPods Pods diff --git a/Adjust.xcodeproj/project.pbxproj b/Adjust.xcodeproj/project.pbxproj index 5595b0cad..92fef10fb 100644 --- a/Adjust.xcodeproj/project.pbxproj +++ b/Adjust.xcodeproj/project.pbxproj @@ -13,15 +13,6 @@ 9679922218BBAE2800394606 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9679922118BBAE2800394606 /* UIKit.framework */; }; 9679922518BBAE2800394606 /* libAdjust.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9679920D18BBAE2800394606 /* libAdjust.a */; }; 96E5E38118BBB48A008E7B30 /* Adjust.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E34D18BBB48A008E7B30 /* Adjust.m */; }; - 96E5E38218BBB48A008E7B30 /* AIActivityHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35218BBB48A008E7B30 /* AIActivityHandlerMock.m */; }; - 96E5E38318BBB48A008E7B30 /* AIActivityHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35318BBB48A008E7B30 /* AIActivityHandlerTests.m */; }; - 96E5E38418BBB48A008E7B30 /* AILoggerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35518BBB48A008E7B30 /* AILoggerMock.m */; }; - 96E5E38518BBB48A008E7B30 /* AIPackageHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35718BBB48A008E7B30 /* AIPackageHandlerMock.m */; }; - 96E5E38618BBB48A008E7B30 /* AIPackageHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35818BBB48A008E7B30 /* AIPackageHandlerTests.m */; }; - 96E5E38718BBB48A008E7B30 /* AIRequestHandlerMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35A18BBB48A008E7B30 /* AIRequestHandlerMock.m */; }; - 96E5E38818BBB48A008E7B30 /* AIRequestHandlerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35B18BBB48A008E7B30 /* AIRequestHandlerTests.m */; }; - 96E5E38918BBB48A008E7B30 /* AITestsUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E35D18BBB48A008E7B30 /* AITestsUtil.m */; }; - 96E5E38A18BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36118BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */; }; 96E5E38B18BBB48A008E7B30 /* AIActivityHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36318BBB48A008E7B30 /* AIActivityHandler.m */; }; 96E5E38C18BBB48A008E7B30 /* AIActivityKind.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36518BBB48A008E7B30 /* AIActivityKind.m */; }; 96E5E38D18BBB48A008E7B30 /* AIActivityPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E5E36718BBB48A008E7B30 /* AIActivityPackage.m */; }; @@ -84,24 +75,6 @@ 9679922118BBAE2800394606 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 96E5E34C18BBB48A008E7B30 /* Adjust.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Adjust.h; sourceTree = ""; }; 96E5E34D18BBB48A008E7B30 /* Adjust.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Adjust.m; sourceTree = ""; }; - 96E5E34F18BBB48A008E7B30 /* Adjust-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Adjust-Prefix.pch"; sourceTree = ""; }; - 96E5E35018BBB48A008E7B30 /* AdjustTests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "AdjustTests-Info.plist"; sourceTree = ""; }; - 96E5E35118BBB48A008E7B30 /* AIActivityHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandlerMock.h; sourceTree = ""; }; - 96E5E35218BBB48A008E7B30 /* AIActivityHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerMock.m; sourceTree = ""; }; - 96E5E35318BBB48A008E7B30 /* AIActivityHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandlerTests.m; sourceTree = ""; }; - 96E5E35418BBB48A008E7B30 /* AILoggerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AILoggerMock.h; sourceTree = ""; }; - 96E5E35518BBB48A008E7B30 /* AILoggerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AILoggerMock.m; sourceTree = ""; }; - 96E5E35618BBB48A008E7B30 /* AIPackageHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIPackageHandlerMock.h; sourceTree = ""; }; - 96E5E35718BBB48A008E7B30 /* AIPackageHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerMock.m; sourceTree = ""; }; - 96E5E35818BBB48A008E7B30 /* AIPackageHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIPackageHandlerTests.m; sourceTree = ""; }; - 96E5E35918BBB48A008E7B30 /* AIRequestHandlerMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIRequestHandlerMock.h; sourceTree = ""; }; - 96E5E35A18BBB48A008E7B30 /* AIRequestHandlerMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerMock.m; sourceTree = ""; }; - 96E5E35B18BBB48A008E7B30 /* AIRequestHandlerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIRequestHandlerTests.m; sourceTree = ""; }; - 96E5E35C18BBB48A008E7B30 /* AITestsUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AITestsUtil.h; sourceTree = ""; }; - 96E5E35D18BBB48A008E7B30 /* AITestsUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AITestsUtil.m; sourceTree = ""; }; - 96E5E35F18BBB48A008E7B30 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 96E5E36018BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h"; sourceTree = ""; }; - 96E5E36118BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m"; sourceTree = ""; }; 96E5E36218BBB48A008E7B30 /* AIActivityHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityHandler.h; sourceTree = ""; }; 96E5E36318BBB48A008E7B30 /* AIActivityHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIActivityHandler.m; sourceTree = ""; }; 96E5E36418BBB48A008E7B30 /* AIActivityKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIActivityKind.h; sourceTree = ""; }; @@ -210,7 +183,6 @@ children = ( 96E5E34C18BBB48A008E7B30 /* Adjust.h */, 96E5E34D18BBB48A008E7B30 /* Adjust.m */, - 96E5E34E18BBB48A008E7B30 /* AdjustTests */, 96E5E36218BBB48A008E7B30 /* AIActivityHandler.h */, 96E5E36318BBB48A008E7B30 /* AIActivityHandler.m */, 96E5E36418BBB48A008E7B30 /* AIActivityKind.h */, @@ -240,31 +212,6 @@ path = Adjust; sourceTree = ""; }; - 96E5E34E18BBB48A008E7B30 /* AdjustTests */ = { - isa = PBXGroup; - children = ( - 96E5E34F18BBB48A008E7B30 /* Adjust-Prefix.pch */, - 96E5E35018BBB48A008E7B30 /* AdjustTests-Info.plist */, - 96E5E35118BBB48A008E7B30 /* AIActivityHandlerMock.h */, - 96E5E35218BBB48A008E7B30 /* AIActivityHandlerMock.m */, - 96E5E35318BBB48A008E7B30 /* AIActivityHandlerTests.m */, - 96E5E35418BBB48A008E7B30 /* AILoggerMock.h */, - 96E5E35518BBB48A008E7B30 /* AILoggerMock.m */, - 96E5E35618BBB48A008E7B30 /* AIPackageHandlerMock.h */, - 96E5E35718BBB48A008E7B30 /* AIPackageHandlerMock.m */, - 96E5E35818BBB48A008E7B30 /* AIPackageHandlerTests.m */, - 96E5E35918BBB48A008E7B30 /* AIRequestHandlerMock.h */, - 96E5E35A18BBB48A008E7B30 /* AIRequestHandlerMock.m */, - 96E5E35B18BBB48A008E7B30 /* AIRequestHandlerTests.m */, - 96E5E35C18BBB48A008E7B30 /* AITestsUtil.h */, - 96E5E35D18BBB48A008E7B30 /* AITestsUtil.m */, - 96E5E35E18BBB48A008E7B30 /* InfoPlist.strings */, - 96E5E36018BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h */, - 96E5E36118BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m */, - ); - path = AdjustTests; - sourceTree = ""; - }; 96E5E36A18BBB48A008E7B30 /* AIAdditions */ = { isa = PBXGroup; children = ( @@ -386,27 +333,18 @@ buildActionMask = 2147483647; files = ( 96E5E38118BBB48A008E7B30 /* Adjust.m in Sources */, - 96E5E38618BBB48A008E7B30 /* AIPackageHandlerTests.m in Sources */, 96E5E38B18BBB48A008E7B30 /* AIActivityHandler.m in Sources */, - 96E5E38718BBB48A008E7B30 /* AIRequestHandlerMock.m in Sources */, 96E5E39618BBB48A008E7B30 /* AIRequestHandler.m in Sources */, 96E5E39918BBB48A008E7B30 /* AIUtil.m in Sources */, - 96E5E38418BBB48A008E7B30 /* AILoggerMock.m in Sources */, - 96E5E38218BBB48A008E7B30 /* AIActivityHandlerMock.m in Sources */, 96E5E39818BBB48A008E7B30 /* AITimer.m in Sources */, 96E5E39718BBB48A008E7B30 /* AIResponseData.m in Sources */, - 96E5E38518BBB48A008E7B30 /* AIPackageHandlerMock.m in Sources */, - 96E5E38818BBB48A008E7B30 /* AIRequestHandlerTests.m in Sources */, 96E5E38F18BBB48A008E7B30 /* NSData+AIAdditions.m in Sources */, 96E5E39118BBB48A008E7B30 /* UIDevice+AIAdditions.m in Sources */, 96E5E38C18BBB48A008E7B30 /* AIActivityKind.m in Sources */, 96E5E38D18BBB48A008E7B30 /* AIActivityPackage.m in Sources */, 96E5E38E18BBB48A008E7B30 /* AIActivityState.m in Sources */, - 96E5E38318BBB48A008E7B30 /* AIActivityHandlerTests.m in Sources */, 96E5E39018BBB48A008E7B30 /* NSString+AIAdditions.m in Sources */, 96E5E39518BBB48A008E7B30 /* AIPackageHandler.m in Sources */, - 96E5E38918BBB48A008E7B30 /* AITestsUtil.m in Sources */, - 96E5E38A18BBB48A008E7B30 /* NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m in Sources */, 96E5E39318BBB48A008E7B30 /* AILogger.m in Sources */, 96E5E39418BBB48A008E7B30 /* AIPackageBuilder.m in Sources */, 96E5E39218BBB48A008E7B30 /* AIAdjustFactory.m in Sources */, @@ -443,14 +381,6 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 96E5E35E18BBB48A008E7B30 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 96E5E35F18BBB48A008E7B30 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; 96E5E3AA18BBB49E008E7B30 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( diff --git a/Adjust/AdjustTests/AIActivityHandlerMock.h b/Adjust/AdjustTests/AIActivityHandlerMock.h deleted file mode 100644 index 4c91c426f..000000000 --- a/Adjust/AdjustTests/AIActivityHandlerMock.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// AIActivityHandlerMock.h -// Adjust -// -// Created by Pedro Filipe on 11/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import "AIActivityHandler.h" - -@interface AIActivityHandlerMock : NSObject - -@end diff --git a/Adjust/AdjustTests/AIActivityHandlerMock.m b/Adjust/AdjustTests/AIActivityHandlerMock.m deleted file mode 100644 index 082c3a9dd..000000000 --- a/Adjust/AdjustTests/AIActivityHandlerMock.m +++ /dev/null @@ -1,67 +0,0 @@ -// -// AIActivityHandlerMock.m -// Adjust -// -// Created by Pedro Filipe on 11/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import "AIActivityHandlerMock.h" -#import "AILoggerMock.h" -#import "AIAdjustFactory.h" - -static NSString * const prefix = @"AIActivityHandler "; - -@interface AIActivityHandlerMock() - -@property (nonatomic, strong) AILoggerMock *loggerMock; - -@end - -@implementation AIActivityHandlerMock - -@synthesize environment; -@synthesize bufferEvents; -@synthesize trackMacMd5; -@synthesize delegate; - -- (id)initWithAppToken:(NSString *)yourAppToken { - self = [super init]; - if (self == nil) return nil; - - self.loggerMock = (AILoggerMock *) [AIAdjustFactory logger]; - - [self.loggerMock test:[prefix stringByAppendingFormat:@"initWithAppToken yourAppToken:%@", yourAppToken]]; - - return self; -} - -- (void)setSdkPrefix:(NSString *)sdkPrefix { - [self.loggerMock test:[prefix stringByAppendingFormat:@"setSdkPrefix sdkPrefix:%@", sdkPrefix]]; -} - -- (void)trackSubsessionStart { - [self.loggerMock test:[prefix stringByAppendingFormat:@"trackSubsessionStart"]]; -} -- (void)trackSubsessionEnd { - [self.loggerMock test:[prefix stringByAppendingFormat:@"trackSubsessionEnd"]]; -} - -- (void)trackEvent:(NSString *)eventToken - withParameters:(NSDictionary *)parameters { - [self.loggerMock test:[prefix stringByAppendingFormat:@"trackEvent eventToken:%@ parameters:%@", eventToken, parameters]]; -} - -- (void)trackRevenue:(double)amount - forEvent:(NSString *)eventToken - withParameters:(NSDictionary *)parameters { - [self.loggerMock test:[prefix stringByAppendingFormat:@"trackRevenue amount:%f eventToken:%@ parameters:%@", amount, eventToken, parameters]]; -} - -- (void)finishedTrackingWithResponse:(AIResponseData *)response { - [self.loggerMock test:[prefix stringByAppendingFormat:@"finishedTrackingWithResponse response:%@", response]]; -} - - - -@end diff --git a/Adjust/AdjustTests/AIActivityHandlerTests.m b/Adjust/AdjustTests/AIActivityHandlerTests.m deleted file mode 100644 index 61b402c27..000000000 --- a/Adjust/AdjustTests/AIActivityHandlerTests.m +++ /dev/null @@ -1,419 +0,0 @@ -// -// AIActivityHandlerTests.m -// Adjust -// -// Created by Pedro Filipe on 07/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import -#import "AILoggerMock.h" -#import "AIPackageHandlerMock.h" -#import "AIAdjustFactory.h" -#import "AIActivityHandler.h" -#import "AIActivityPackage.h" -#import "AITestsUtil.h" - -@interface AIActivityHandlerTests : XCTestCase - -@property (atomic,strong) AILoggerMock *loggerMock; -@property (atomic,strong) AIPackageHandlerMock *packageHandlerMock; - -@end - -@implementation AIActivityHandlerTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here; it will be run once, before the first test case. - -} - -- (void)tearDown -{ - [AIAdjustFactory setPackageHandler:nil]; - [AIAdjustFactory setLogger:nil]; - [AIAdjustFactory setSessionInterval:-1]; - [AIAdjustFactory setSubsessionInterval:-1]; - // Put teardown code here; it will be run once, after the last test case. - [super tearDown]; -} - -- (void)reset { - self.loggerMock = [[AILoggerMock alloc] init]; - [AIAdjustFactory setLogger:self.loggerMock]; - - self.packageHandlerMock = [AIPackageHandlerMock alloc]; - [AIAdjustFactory setPackageHandler:self.packageHandlerMock]; - - [AIAdjustFactory setSessionInterval:-1]; - [AIAdjustFactory setSubsessionInterval:-1]; -} - -- (void)testFirstRun -{ - // reseting to make the test order independent - [self reset]; - - // deleting the activity state file to simulate a first session - XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); - - // create handler and start the first session - id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; - - // set the delegate to be called at after sending the package - AITestsUtil * testsUtil = [[AITestsUtil alloc] init]; - [activityHandler setDelegate:testsUtil]; - - // it's necessary to sleep the activity for a while after each handler call - // to let the internal queue act - [NSThread sleepForTimeInterval:10.0]; - - // test that the file did not exist in the first run of the application - XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Activity state file not found"], @"%@", self.loggerMock); - - // when a session package is being sent the package handler should resume sending - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler resumeSending"], @"%@", self.loggerMock); - - // if the package was build, it was sent to the Package Handler - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler addPackage"], @"%@", self.loggerMock); - - // checking the default values of the first session package - // should only have one package - XCTAssertEqual((NSUInteger)1, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); - - AIActivityPackage *activityPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[0]; - - // check the Sdk version is being tested - XCTAssertEqual(@"ios3.0.0", activityPackage.clientSdk, @"%@", activityPackage.extendedString); - - // packageType should be SESSION_START - XCTAssertEqual(@"/startup", activityPackage.path, @"%@", activityPackage.extendedString); - - NSDictionary *parameters = activityPackage.parameters; - - // sessions attributes - // sessionCount 1, because is the first session - XCTAssertEqual(1, [(NSString *)parameters[@"session_count"] intValue], @"%@", activityPackage.extendedString); - - // subSessionCount -1, because we didn't had any subsessions yet - // because only values > 0 are added to parameters, therefore is not present - XCTAssertNil(parameters[@"subsession_count"], @"%@", activityPackage.extendedString); - - // sessionLenght -1, same as before - XCTAssertNil(parameters[@"session_length"], @"%@", activityPackage.extendedString); - - // timeSpent -1, same as before - XCTAssertNil(parameters[@"time_spent"], @"%@", activityPackage.extendedString); - - // lastInterval -1, same as before - XCTAssertNil(parameters[@"last_interval"], @"%@", activityPackage.extendedString); - - // after adding, the activity handler ping the Package handler to send the package - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendFirstPackage"], @"%@", self.loggerMock); - - // check that the package handler calls back with the delegate - //XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AdjustDelegate adjustFinishedTrackingWithResponse"], - // @"%@", self.loggerMock); - - // check that the activity state is written by the first session or timer - XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: "], @"%@", self.loggerMock); - - // ending of first session - XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"First session"], @"%@", self.loggerMock); -} - -- (void)testSessions { - // reseting to make the test order independent - [self reset]; - - // starting from a clean slate - XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); - - // adjust the intervals for testing - [AIAdjustFactory setSessionInterval:(2)]; // 2 seconds - [AIAdjustFactory setSubsessionInterval:(0.1)]; // 0.1 second - - // create handler to start the session - id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; - - // wait enough to be a new subsession, but not a new session - [NSThread sleepForTimeInterval:1.5]; - [activityHandler trackSubsessionStart]; - - // wait enough to be a new session - [NSThread sleepForTimeInterval:4]; - [activityHandler trackSubsessionStart]; - - // test the subsession end - [activityHandler trackSubsessionEnd]; - [NSThread sleepForTimeInterval:1]; - - // check that a new subsession was created - XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Processed Subsession 2 of Session 1"], @"%@", self.loggerMock); - - // check that it's now on the 2nd session - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Session 2"], @"%@", self.loggerMock); - - // check that 2 packages were added to the package handler - XCTAssertEqual((NSUInteger)2, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); - - // get the second session package and its parameters - AIActivityPackage *activityPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; - NSDictionary *parameters = activityPackage.parameters; - - // the session and subsession count should be 2 - // session_count - XCTAssertEqual(2, [(NSString *)parameters[@"session_count"] intValue], @"%@", activityPackage.extendedString); - - // subsession_count - XCTAssertEqual(2, [(NSString *)parameters[@"subsession_count"] intValue], @"%@", activityPackage.extendedString); - - // check that the package handler was paused - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler pauseSending"], @"%@", self.loggerMock); -} - -- (void)testEventsBuffered { - // reseting to make the test order independent - [self reset]; - - // starting from a clean slate - XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); - - // create handler to start the session - id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; - [activityHandler setBufferEvents:YES]; - - // construct the parameters of the the event - NSDictionary *eventParameters = @{@"key": @"value", @"foo": @"bar" }; - - // the first is a normal event has parameters, the second a revenue - [activityHandler trackEvent:@"abc123" withParameters:eventParameters]; - [activityHandler trackRevenue:4.45 forEvent:@"abc123" withParameters:eventParameters]; - - [NSThread sleepForTimeInterval:2]; - - // check that event buffering is enabled - //XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Event buffering is enabled"], @"%@", self.loggerMock); - - // check that the package builder added the session, event and revenue package - XCTAssertEqual((NSUInteger)3, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); - - // check the first event - AIActivityPackage *eventPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; - - // check the event path - XCTAssert([eventPackage.path isEqualToString:@"/event"], @"%@", eventPackage.extendedString); - - // check the event suffix - XCTAssert([eventPackage.suffix isEqualToString:@" 'abc123'"], @"%@", eventPackage.extendedString); - - NSDictionary *eventPackageParameters = eventPackage.parameters; - - // check the event count in the package parameters - XCTAssertEqual(1, [(NSString *)eventPackageParameters[@"event_count"] intValue], @"%@", eventPackage.extendedString); - - // check the event token - XCTAssert([(NSString *)eventPackageParameters[@"event_token"] isEqualToString:@"abc123"], @"%@", eventPackage.extendedString); - - // check the injected parameters - XCTAssert([(NSString *)eventPackageParameters[@"params"] isEqualToString:@"eyJrZXkiOiJ2YWx1ZSIsImZvbyI6ImJhciJ9"], - @"%@", eventPackage.extendedString); - - // check that the event was buffered - XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Buffered event 'abc123'"], @"%@", self.loggerMock); - - // check the event count in the written activity state - XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:1"], @"%@", self.loggerMock); - - // check the event count in the logger - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 1"], @"%@", self.loggerMock); - - // check the second event/ first revenue - AIActivityPackage *revenuePackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[2]; - - // check the revenue path - XCTAssert([revenuePackage.path isEqualToString:@"/revenue"], @"%@", revenuePackage.extendedString); - - // check the revenue suffix - // note that the amount was rounded to the decimal cents - XCTAssert([revenuePackage.suffix isEqualToString:@" (4.5 cent, 'abc123')"], @"%@", revenuePackage.extendedString); - - NSDictionary *revenuePackageParameters = revenuePackage.parameters; - - // check the event count in the package parameters - XCTAssertEqual(2, [(NSString *)revenuePackageParameters[@"event_count"] intValue], @"%@", revenuePackage.extendedString); - - // check the amount, transforming cents into rounded decimal cents - // note that the 4.45 cents ~> 45 decimal cents - XCTAssertEqual(45, [(NSString *)revenuePackageParameters[@"amount"] intValue], @"%@", revenuePackage.extendedString); - - // check the event token - XCTAssert([(NSString *)revenuePackageParameters[@"event_token"] isEqualToString:@"abc123"], @"%@", revenuePackage.extendedString); - - // check the injected parameters - XCTAssert([(NSString *)revenuePackageParameters[@"params"] isEqualToString:@"eyJrZXkiOiJ2YWx1ZSIsImZvbyI6ImJhciJ9"], - @"%@", eventPackage.extendedString); - - // check that the revenue was buffered - XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Buffered revenue (4.5 cent, 'abc123')"], @"%@", self.loggerMock); - - // check the event count in the written activity state - XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:2"], @"%@", self.loggerMock); - - // check the event count in the logger - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 2 (revenue)"], @"%@", self.loggerMock); -} - -- (void)testEventsNotBuffered { - // reseting to make the test order independent - [self reset]; - - // starting from a clean slate - XCTAssert([AITestsUtil deleteFile:@"AdjustIoActivityState" logger:self.loggerMock], @"%@", self.loggerMock); - - // create handler to start the session - id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; - [activityHandler setBufferEvents:NO]; - - // the first is a normal event has parameters, the second a revenue - [activityHandler trackEvent:@"abc123" withParameters:nil]; - [activityHandler trackRevenue:0 forEvent:nil withParameters:nil]; - - [NSThread sleepForTimeInterval:2]; - - // check that the package added the session, event and revenue package - XCTAssertEqual((NSUInteger)3, [self.packageHandlerMock.packageQueue count], @"%@", self.loggerMock); - - // check the first event - AIActivityPackage *eventPackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[1]; - - // check the event path - XCTAssert([eventPackage.path isEqualToString:@"/event"], @"%@", eventPackage.extendedString); - - // check the event suffix - XCTAssert([eventPackage.suffix isEqualToString:@" 'abc123'"], @"%@", eventPackage.extendedString); - - NSDictionary *eventPackageParameters = eventPackage.parameters; - - // check the event count in the package parameters - XCTAssertEqual(1, [(NSString *)eventPackageParameters[@"event_count"] intValue], @"%@", eventPackage.extendedString); - - // check the event token - XCTAssert([(NSString *)eventPackageParameters[@"event_token"] isEqualToString:@"abc123"], @"%@", eventPackage.extendedString); - - // check the that the parameters were not injected - XCTAssertNil(eventPackageParameters[@"params"], @"%@", eventPackage.extendedString); - - // check that the package handler was called - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendFirstPackage"], @"%@", self.loggerMock); - - // check the event count in the written activity state - XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:1"], @"%@", self.loggerMock); - - // check the event count in the logger - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 1"], @"%@", self.loggerMock); - - // check the second event/ first revenue - AIActivityPackage *revenuePackage = (AIActivityPackage *) self.packageHandlerMock.packageQueue[2]; - - // check the revenue path - XCTAssert([revenuePackage.path isEqualToString:@"/revenue"], @"%@", revenuePackage.extendedString); - - // check the revenue suffix - // note that the amount was rounded to the decimal cents - XCTAssert([revenuePackage.suffix isEqualToString:@" (0.0 cent)"], @"%@", revenuePackage.extendedString); - - NSDictionary *revenuePackageParameters = revenuePackage.parameters; - - // check the event count in the package parameters - XCTAssertEqual(2, [(NSString *)revenuePackageParameters[@"event_count"] intValue], @"%@", revenuePackage.extendedString); - - // check the amount, transforming cents into rounded decimal cents - // note that the 4.45 cents ~> 45 decimal cents - XCTAssertEqual(0, [(NSString *)revenuePackageParameters[@"amount"] intValue], @"%@", revenuePackage.extendedString); - - // check that the event token is nil - XCTAssertNil(revenuePackageParameters[@"event_token"], @"%@", revenuePackage.extendedString); - - // check the that the parameters were not injected - XCTAssertNil(eventPackageParameters[@"params"], @"%@", eventPackage.extendedString); - - // check that the package handler was called - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendFirstPackage"], @"%@", self.loggerMock); - - // check the event count in the written activity state - XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Wrote activity state: ec:2"], @"%@", self.loggerMock); - - // check the event count in the logger - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Event 2 (revenue)"], @"%@", self.loggerMock); - -} - -- (void)testChecks { - // reseting to make the test order independent - [self reset]; - - // activity handler without app token - id nilActivityHandler = [AIAdjustFactory activityHandlerWithAppToken:nil]; - - // trigger the nil app token a 2nd time for a subsession start - [nilActivityHandler trackSubsessionStart]; - - // trigger the nil app token a 3rd time for a subsession end - [nilActivityHandler trackSubsessionStart]; - - // trigger the nil app token a 4th time for a event - [nilActivityHandler trackEvent:@"ab123" withParameters:nil]; - - // trigger the nil app token a 5th time for a revenue - [nilActivityHandler trackRevenue:0 forEvent:@"abc123" withParameters:nil]; - - [NSThread sleepForTimeInterval:1]; - // activity with invalid app token - [AIAdjustFactory activityHandlerWithAppToken:@"12345678901"]; - - [NSThread sleepForTimeInterval:1]; - // activity with valid app token - id activityHandler = [AIAdjustFactory activityHandlerWithAppToken:@"123456789012"]; - - // track event with nil token - [activityHandler trackEvent:nil withParameters:nil]; - - // track event with invalid token - [activityHandler trackEvent:@"abc1234" withParameters:nil]; - - // track revenue with invalid amount token - [activityHandler trackRevenue:-0.1 forEvent:nil withParameters:nil]; - - // track revenue with invalid token - [activityHandler trackRevenue:0 forEvent:@"abc12" withParameters:nil]; - - [NSThread sleepForTimeInterval:1]; - - // check missing app token messages - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing App Token"], @"%@", self.loggerMock); - - // check the invalid app token message - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed App Token '12345678901'"], @"%@", self.loggerMock); - - // check the nil event token - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Missing Event Token"], @"%@", self.loggerMock); - - // check the invalid event token - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed Event Token 'abc1234'"], @"%@", self.loggerMock); - - // check the invalid revenue amount token - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Invalid amount -0.1"], @"%@", self.loggerMock); - - // check the invalid revenue token - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Malformed Event Token 'abc12'"], @"%@", self.loggerMock); - -} - -@end diff --git a/Adjust/AdjustTests/AILoggerMock.h b/Adjust/AdjustTests/AILoggerMock.h deleted file mode 100644 index 5f454ec95..000000000 --- a/Adjust/AdjustTests/AILoggerMock.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// AILoggerMock.h -// Adjust -// -// Created by Pedro Filipe on 10/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import -#import "AILogger.h" - -static const int AILogLevelTest = 0; - -@interface AILoggerMock : NSObject - - (void)test:(NSString *)message, ...; - - (BOOL) containsMessage:(NSInteger)logLevel beginsWith:(NSString *)beginsWith; -@end diff --git a/Adjust/AdjustTests/AILoggerMock.m b/Adjust/AdjustTests/AILoggerMock.m deleted file mode 100644 index 7298ce370..000000000 --- a/Adjust/AdjustTests/AILoggerMock.m +++ /dev/null @@ -1,116 +0,0 @@ -// -// AILoggerMock.m -// Adjust -// -// Created by Pedro Filipe on 10/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import "AILoggerMock.h" - -static NSString * const kLogTag = @"AdjustTests"; - -@interface AILoggerMock() - -@property (nonatomic, strong) NSMutableString *logBuffer; -@property (nonatomic, strong) NSDictionary *logMap; - -@end - -@implementation AILoggerMock - -- (id)init { - self = [super init]; - if (self == nil) return nil; - - self.logBuffer = [[NSMutableString alloc] init]; - self.logMap = @{ - @0 : [NSMutableArray array], - @1 : [NSMutableArray array], - @2 : [NSMutableArray array], - @3 : [NSMutableArray array], - @4 : [NSMutableArray array], - @5 : [NSMutableArray array], - @6 : [NSMutableArray array], - }; - - return self; -} - -- (NSString *)description { - return self.logBuffer; -} - -- (BOOL) containsMessage:(NSInteger)logLevel beginsWith:(NSString *)beginsWith { - NSMutableArray *logArray = (NSMutableArray *)self.logMap[@(logLevel)]; - for (int i = 0; i < [logArray count]; i++) { - NSString *logMessage = logArray[i]; - if ([logMessage hasPrefix:beginsWith]) { - [logArray removeObjectsInRange:NSMakeRange(0, i + 1)]; - NSLog(@"%@ found", beginsWith); - return YES; - } - } - NSLog(@"%@ not in (%@)", beginsWith, [logArray componentsJoinedByString:@","]); - return NO; -} - -- (void)setLogLevel:(AILogLevel)logLevel { - [self test:@"AILogger setLogLevel logLevel:%@", logLevel]; -} - -- (void)test:(NSString *)format, ... { - va_list parameters; va_start(parameters, format); - [self logLevel:AILogLevelTest logPrefix:@"t" format:format parameters:parameters]; -} - - -- (void)verbose:(NSString *)format, ... { - va_list parameters; va_start(parameters, format); - [self logLevel:AILogLevelVerbose logPrefix:@"v" format:format parameters:parameters]; -} - -- (void)debug: (NSString *)format, ... { - va_list parameters; va_start(parameters, format); - [self logLevel:AILogLevelDebug logPrefix:@"d" format:format parameters:parameters]; -} - -- (void)info: (NSString *)format, ... { - va_list parameters; va_start(parameters, format); - [self logLevel:AILogLevelInfo logPrefix:@"i" format:format parameters:parameters]; -} - -- (void)warn: (NSString *)format, ... { - va_list parameters; va_start(parameters, format); - [self logLevel:AILogLevelWarn logPrefix:@"w" format:format parameters:parameters]; -} - -- (void)error: (NSString *)format, ... { - va_list parameters; va_start(parameters, format); - [self logLevel:AILogLevelError logPrefix:@"e" format:format parameters:parameters]; -} - -- (void)assert: (NSString *)format, ... { - va_list parameters; va_start(parameters, format); - [self logLevel:AILogLevelAssert logPrefix:@"a" format:format parameters:parameters]; -} - -// private implementation -- (void)logLevel:(NSInteger)logLevel logPrefix:(NSString *)logPrefix format:(NSString *)format parameters:(va_list)parameters { - NSString *formatedMessage = [[NSString alloc] initWithFormat:format arguments:parameters]; - va_end(parameters); - - NSString *logMessage = [NSString stringWithFormat:@"\t[%@]%@: %@", kLogTag, logPrefix, formatedMessage]; - - [self.logBuffer appendString:logMessage]; - - NSMutableArray *logArray = (NSMutableArray *)self.logMap[@(logLevel)]; - [logArray addObject:formatedMessage]; - - NSArray *lines = [formatedMessage componentsSeparatedByString:@"\n"]; - for (NSString *line in lines) { - NSLog(@"\t[%@]%@: %@", kLogTag, logPrefix, line); - } -} - -@end diff --git a/Adjust/AdjustTests/AIPackageHandlerMock.h b/Adjust/AdjustTests/AIPackageHandlerMock.h deleted file mode 100644 index b55bb010b..000000000 --- a/Adjust/AdjustTests/AIPackageHandlerMock.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AIPackageHandlerMock.h -// Adjust -// -// Created by Pedro Filipe on 10/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import "AIPackageHandler.h" - -@interface AIPackageHandlerMock : NSObject - -@property (nonatomic, strong) NSMutableArray *packageQueue; - -@property (nonatomic, strong) AIResponseData *responseData; -@property (nonatomic, strong) AIActivityPackage * activityPackage; - -@end diff --git a/Adjust/AdjustTests/AIPackageHandlerMock.m b/Adjust/AdjustTests/AIPackageHandlerMock.m deleted file mode 100644 index 6a21f6b5c..000000000 --- a/Adjust/AdjustTests/AIPackageHandlerMock.m +++ /dev/null @@ -1,75 +0,0 @@ -// -// AIPackageHandlerMock.m -// Adjust -// -// Created by Pedro Filipe on 10/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import "AIPackageHandlerMock.h" -#import "AILoggerMock.h" -#import "AIAdjustFactory.h" -#import "AIActivityHandler.h" -#import "AIResponseData.h" - -static NSString * const prefix = @"AIPackageHandler "; - -@interface AIPackageHandlerMock() - -@property (nonatomic, strong) AILoggerMock *loggerMock; -@property (nonatomic, assign) id activityHandler; - -@end - -@implementation AIPackageHandlerMock - -- (id)init { - return [self initWithActivityHandler:nil]; -} - -- (id)initWithActivityHandler:(id)activityHandler { - self = [super init]; - if (self == nil) return nil; - - self.activityHandler = activityHandler; - - self.loggerMock = (AILoggerMock *) AIAdjustFactory.logger; - self.packageQueue = [NSMutableArray array]; - - [self.loggerMock test:[prefix stringByAppendingString:@"initWithActivityHandler"]]; - - return self; -} - -- (void)addPackage:(AIActivityPackage *)package { - [self.loggerMock test:[prefix stringByAppendingString:@"addPackage"]]; - [self.packageQueue addObject:package]; -} - -- (void)sendFirstPackage { - [self.loggerMock test:[prefix stringByAppendingString:@"sendFirstPackage"]]; - [self.activityHandler finishedTrackingWithResponse:[[AIResponseData alloc] init]]; -} - -- (void)sendNextPackage { - [self.loggerMock test:[prefix stringByAppendingString:@"sendNextPackage"]]; -} - -- (void)closeFirstPackage { - [self.loggerMock test:[prefix stringByAppendingString:@"closeFirstPackage"]]; -} - -- (void)pauseSending { - [self.loggerMock test:[prefix stringByAppendingString:@"pauseSending"]]; -} - -- (void)resumeSending { - [self.loggerMock test:[prefix stringByAppendingString:@"resumeSending"]]; -} - -- (void)finishedTrackingActivity:(AIActivityPackage *)activityPackage withResponse:(AIResponseData *)response { - [self.loggerMock test:[prefix stringByAppendingString:@"finishedTrackingActivity"]]; - self.responseData = response; -} - -@end diff --git a/Adjust/AdjustTests/AIPackageHandlerTests.m b/Adjust/AdjustTests/AIPackageHandlerTests.m deleted file mode 100644 index 18ccb28f9..000000000 --- a/Adjust/AdjustTests/AIPackageHandlerTests.m +++ /dev/null @@ -1,177 +0,0 @@ -// -// AIPackageHandlerTests.m -// Adjust -// -// Created by Pedro Filipe on 07/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import -#import "AIAdjustFactory.h" -#import "AILoggerMock.h" -#import "AIActivityHandlerMock.h" -#import "AIRequestHandlerMock.h" -#import "AITestsUtil.h" - -@interface AIPackageHandlerTests : XCTestCase - -@property (atomic,strong) AILoggerMock *loggerMock; -@property (atomic,strong) AIRequestHandlerMock *requestHandlerMock; - -@end - -@implementation AIPackageHandlerTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here; it will be run once, before the first test case. -} - -- (void)tearDown -{ - [AIAdjustFactory setRequestHandler:nil]; - [AIAdjustFactory setLogger:nil]; - - // Put teardown code here; it will be run once, after the last test case. - [super tearDown]; -} - -- (void)reset { - self.loggerMock = [[AILoggerMock alloc] init]; - [AIAdjustFactory setLogger:self.loggerMock]; - - self.requestHandlerMock = [AIRequestHandlerMock alloc]; - [AIAdjustFactory setRequestHandler:self.requestHandlerMock]; - -} - -- (void)testFirstPackage -{ - // reseting to make the test order independent - [self reset]; - - // delete previously created Package queue file to make a new queue - XCTAssert([AITestsUtil deleteFile:@"AdjustIoPackageQueue" logger:self.loggerMock], @"%@", self.loggerMock); - - // initialize Package Handler - AIActivityHandlerMock *activityHandler = [[AIActivityHandlerMock alloc] initWithAppToken:@"123456789012"]; - id packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; - - // enable sending packages to Request Handler - [packageHandler resumeSending]; - - // build and add the first package to the queue - [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; - - // send the first package in the queue to the mock request handler - [packageHandler sendFirstPackage]; - - // it's necessary to sleep the activity for a while after each handler call - // to let the internal queue act - [NSThread sleepForTimeInterval:1.0]; - - // check that the request handler mock was created - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler initWithPackageHandler"], @"%@", self.loggerMock); - - // test that the file did not exist in the first run of the application - XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Package queue file not found"], @"%@", self.loggerMock); - - // check that added first package to a previous empty queue - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Added package 1 "], @"%@", self.loggerMock); - - //TODO add the verbose message - - // it should write the package queue with the first session package - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler wrote 1 packages"], @"%@", self.loggerMock); - - // check that the Request Handler was called to send the package - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler sendPackage"], @"%@", self.loggerMock); - - // check that the the request handler called the package callback, that foward it to the activity handler - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIActivityHandler finishedTrackingWithResponse"], - @"%@", self.loggerMock); - - // check that the package was removed from the queue and 0 packages were written - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler wrote 0 packages"], @"%@", self.loggerMock); -} - -- (void) testPaused { - // reseting to make the test order independent - [self reset]; - - // initialize Package Handler - AIActivityHandlerMock *activityHandler = [[AIActivityHandlerMock alloc] initWithAppToken:@"123456789012"]; - id packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; - - // disable sending packages to Request Handler - [packageHandler pauseSending]; - - // build and add a package the queue - [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; - - // try to send the first package in the queue to the mock request handler - [packageHandler sendFirstPackage]; - - [NSThread sleepForTimeInterval:1.0]; - - // check that the request handler mock was created - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler initWithPackageHandler"], @"%@", self.loggerMock); - - // check that a package was added - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Added package "], @"%@", self.loggerMock); - - // check that the mock request handler was NOT called to send the package - XCTAssertFalse([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler sendPackage"], @"%@", self.loggerMock); - - // check that the package handler is paused - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler is paused"], @"%@", self.loggerMock); -} - -- (void) testMultiplePackages { - // reseting to make the test order independent - [self reset]; - - // delete previously created Package queue file to make a new queue - XCTAssert([AITestsUtil deleteFile:@"AdjustIoPackageQueue" logger:self.loggerMock], @"%@", self.loggerMock); - - // initialize Package Handler - AIActivityHandlerMock *activityHandler = [[AIActivityHandlerMock alloc] initWithAppToken:@"123456789012"]; - id packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; - - // enable sending packages to Request Handler - [packageHandler resumeSending]; - - // build and add the 3 packages to the queue - [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; - [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; - [packageHandler addPackage:[AITestsUtil buildEmptyPackage]]; - - // create a new package handler to simulate a new launch - [NSThread sleepForTimeInterval:1.0]; - packageHandler = [AIAdjustFactory packageHandlerForActivityHandler:activityHandler]; - - // try to send two packages without closing the first - [packageHandler sendFirstPackage]; - [packageHandler sendFirstPackage]; - - [NSThread sleepForTimeInterval:1.0]; - - // check that the request handler mock was created - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIRequestHandler initWithPackageHandler"], @"%@", self.loggerMock); - - // test that the file did not exist in the first run of the application - XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Package queue file not found"], @"%@", self.loggerMock); - - // check that added the third package to the queue and wrote to a file - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Added package 3 "], @"%@", self.loggerMock); - - // check that it reads the same 3 packages in the file - XCTAssert([self.loggerMock containsMessage:AILogLevelDebug beginsWith:@"Package handler read 3 packages"], @"%@", self.loggerMock); - - // check that the package handler was already sending one package before - XCTAssert([self.loggerMock containsMessage:AILogLevelVerbose beginsWith:@"Package handler is already sending"], @"%@", self.loggerMock); - -} - -@end diff --git a/Adjust/AdjustTests/AIRequestHandlerMock.h b/Adjust/AdjustTests/AIRequestHandlerMock.h deleted file mode 100644 index 836c23791..000000000 --- a/Adjust/AdjustTests/AIRequestHandlerMock.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AIRequestHandlerMock.h -// Adjust -// -// Created by Pedro Filipe on 10/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import -#import "AIRequestHandler.h" - -@interface AIRequestHandlerMock : NSObject - -@property (nonatomic, assign) BOOL connectionError; - -@end diff --git a/Adjust/AdjustTests/AIRequestHandlerMock.m b/Adjust/AdjustTests/AIRequestHandlerMock.m deleted file mode 100644 index be926adf0..000000000 --- a/Adjust/AdjustTests/AIRequestHandlerMock.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// AIRequestHandlerMock.m -// Adjust -// -// Created by Pedro Filipe on 10/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import "AIRequestHandlerMock.h" -#import "AILoggerMock.h" -#import "AIAdjustFactory.h" -#import "AIResponseData.h" - -static NSString * const prefix = @"AIRequestHandler "; - -@interface AIRequestHandlerMock() - -@property (nonatomic, assign) id packageHandler; -@property (nonatomic, assign) AILoggerMock *loggerMock; - -@end - -@implementation AIRequestHandlerMock - -- (id)initWithPackageHandler:(id) packageHandler { - self = [super init]; - if (self == nil) return nil; - - self.packageHandler = packageHandler; - self.loggerMock = (AILoggerMock *) [AIAdjustFactory logger]; - - [self.loggerMock test:[prefix stringByAppendingString:@"initWithPackageHandler"]]; - - self.connectionError = NO; - - return self; -} - -- (void)sendPackage:(AIActivityPackage *)activityPackage { - [self.loggerMock test:[prefix stringByAppendingString:@"sendPackage"]]; - - AIResponseData *responseData; - - if (self.connectionError) { - responseData = [[AIResponseData alloc] initWithError:@"connection error"]; - } else { - responseData = [[AIResponseData alloc] initWithJsonString:@"{\"tracker_token\":\"token\",\"tracker_name\":\"name\"}"]; - } - - [self.packageHandler finishedTrackingActivity:activityPackage withResponse:responseData]; - - if (self.connectionError) { - [self.packageHandler closeFirstPackage]; - } else { - [self.packageHandler sendNextPackage]; - } -} - - -@end diff --git a/Adjust/AdjustTests/AIRequestHandlerTests.m b/Adjust/AdjustTests/AIRequestHandlerTests.m deleted file mode 100644 index 935fefa69..000000000 --- a/Adjust/AdjustTests/AIRequestHandlerTests.m +++ /dev/null @@ -1,159 +0,0 @@ -// -// AIRequestHandlerTests.m -// Adjust -// -// Created by Pedro Filipe on 07/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import -#import "AIAdjustFactory.h" -#import "AILoggerMock.h" -#import "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h" -#import "AIPackageHandlerMock.h" -#import "AIRequestHandlerMock.h" -#import "AITestsUtil.h" -#import "AIResponseData.h" - -@interface AIRequestHandlerTests : XCTestCase - -@property (atomic,strong) AILoggerMock *loggerMock; -@property (atomic,strong) AIPackageHandlerMock *packageHandlerMock; -@property (atomic,strong) id requestHandler; - - -@end - -@implementation AIRequestHandlerTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here; it will be run once, before the first test case. - - [self reset]; - -} - -- (void)tearDown -{ - [AIAdjustFactory setLogger:nil]; - - // Put teardown code here; it will be run once, after the last test case. - [super tearDown]; -} - -- (void)reset { - self.loggerMock = [[AILoggerMock alloc] init]; - [AIAdjustFactory setLogger:self.loggerMock]; - - self.packageHandlerMock = [[AIPackageHandlerMock alloc] init]; - self.requestHandler =[AIAdjustFactory requestHandlerForPackageHandler:self.packageHandlerMock]; -} - -- (void)testSendPackage -{ - // reseting to make the test order independent - [self reset]; - - // set the connection to respond OK - [NSURLConnection setConnectionError:NO]; - [NSURLConnection setResponseError:NO]; - - [self.requestHandler sendPackage:[AITestsUtil buildEmptyPackage]]; - - [NSThread sleepForTimeInterval:1.0]; - - NSLog(@"%@", self.loggerMock); - - // check the URL Connection was called - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"NSURLConnection sendSynchronousRequest"], - @"%@", self.loggerMock); - - // check that the package handler was pinged after sending - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler finishedTrackingActivity"], - @"%@", self.loggerMock); - - // check the response data, the kind is unknown because is set by the package handler - NSString *sresponseData= [NSString stringWithFormat:@"%@", self.packageHandlerMock.responseData]; - XCTAssert([sresponseData isEqualToString:@"[kind:unknown success:1 willRetry:0 error:(null) trackerToken:token trackerName:name]"], - @"%@", sresponseData); - - // check that the package was successfully sent - XCTAssert([self.loggerMock containsMessage:AILogLevelInfo beginsWith:@"Tracked session"], - @"%@", self.loggerMock); - - // check that the package handler was called to send the next package - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendNextPackage"], - @"%@", self.loggerMock); - -} - -- (void)testConnectionError { - // reseting to make the test order independent - [self reset]; - - // set the connection to return error on the connection - [NSURLConnection setConnectionError:YES]; - [NSURLConnection setResponseError:NO]; - - [self.requestHandler sendPackage:[AITestsUtil buildEmptyPackage]]; - [NSThread sleepForTimeInterval:1.0]; - - // check the URL Connection was called - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"NSURLConnection sendSynchronousRequest"], - @"%@", self.loggerMock); - - // check that the package handler was pinged after sending - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler finishedTrackingActivity"], - @"%@", self.loggerMock); - - // check the response data, - NSString *sresponseData= [NSString stringWithFormat:@"%@", self.packageHandlerMock.responseData]; - XCTAssert([sresponseData isEqualToString:@"[kind:unknown success:0 willRetry:1 error:'connection error' trackerToken:(null) trackerName:(null)]"], @"%@", sresponseData); - - // check that the package was successfully sent - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Failed to track session. (connection error) Will retry later."], - @"%@", self.loggerMock); - - // check that the package handler was called to close the package to retry later - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler closeFirstPackage"], - @"%@", self.loggerMock); - -} - -- (void)testResponseError { - // reseting to make the test order independent - [self reset]; - - // set the response to return an error - [NSURLConnection setConnectionError:NO]; - [NSURLConnection setResponseError:YES]; - - [self.requestHandler sendPackage:[AITestsUtil buildEmptyPackage]]; - [NSThread sleepForTimeInterval:1.0]; - - // check the URL Connection was called - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"NSURLConnection sendSynchronousRequest"], - @"%@", self.loggerMock); - - // check that the package handler was pinged after sending - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler finishedTrackingActivity"], - @"%@", self.loggerMock); - - // check the response data, - NSString *sresponseData= [NSString stringWithFormat:@"%@", self.packageHandlerMock.responseData]; - XCTAssert([sresponseData isEqualToString:@"[kind:unknown success:0 willRetry:0 error:'response error' trackerToken:token trackerName:name]"], @"%@", sresponseData); - - // check that the package was successfully sent - XCTAssert([self.loggerMock containsMessage:AILogLevelError beginsWith:@"Failed to track session. (response error)"], - @"%@", sresponseData); - - // check that the package handler was called to send the next package - XCTAssert([self.loggerMock containsMessage:AILogLevelTest beginsWith:@"AIPackageHandler sendNextPackage"], - @"%@", self.loggerMock); - -} - - -@end diff --git a/Adjust/AdjustTests/AITestsUtil.h b/Adjust/AdjustTests/AITestsUtil.h deleted file mode 100644 index 0f5a0f48e..000000000 --- a/Adjust/AdjustTests/AITestsUtil.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// AITestsUtil.h -// Adjust -// -// Created by Pedro Filipe on 12/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import -#import "AILoggerMock.h" -#import "AIActivityPackage.h" -#import "Adjust.h" - -@interface AITestsUtil : NSObject - -+ (NSString *)getFilename:(NSString *)filename; -+ (BOOL)deleteFile:(NSString *)filename logger:(AILoggerMock *)loggerMock; -+ (AIActivityPackage *)buildEmptyPackage; - -- (void)adjustFinishedTrackingWithResponse:(AIResponseData *)responseData; - -@end diff --git a/Adjust/AdjustTests/AITestsUtil.m b/Adjust/AdjustTests/AITestsUtil.m deleted file mode 100644 index 297a47c8b..000000000 --- a/Adjust/AdjustTests/AITestsUtil.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// AITestsUtil.m -// Adjust -// -// Created by Pedro Filipe on 12/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import "AITestsUtil.h" -#import "AIPackageBuilder.h" -#import "AILoggerMock.h" -#import "AIAdjustFactory.h" - -@implementation AITestsUtil - -+ (NSString *)getFilename:(NSString *)filename { - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - NSString *path = [paths objectAtIndex:0]; - NSString *filepath = [path stringByAppendingPathComponent:filename]; - return filepath; -} - -+ (BOOL)deleteFile:(NSString *)filename logger:(AILoggerMock *)loggerMock { - NSString *filepath = [AITestsUtil getFilename:filename]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSError *error = nil; - BOOL exists = [fileManager fileExistsAtPath:filepath]; - if (!exists) { - [loggerMock test:@"file %@ does not exist at path %@", filename, filepath]; - return YES; - } - BOOL deleted = [fileManager removeItemAtPath:filepath error:&error]; - - if (!deleted) { - [loggerMock test:@"unable to delete file %@ at path %@", filename, filepath]; - } - - if (error) { - [loggerMock test:@"error (%@) deleting file %@", [error localizedDescription], filename]; - } - - return deleted; -} - -+ (AIActivityPackage *)buildEmptyPackage { - AIPackageBuilder *sessionBuilder = [[AIPackageBuilder alloc] init]; - AIActivityPackage *sessionPackage = [sessionBuilder buildSessionPackage]; - return sessionPackage; -} - -- (void)adjustFinishedTrackingWithResponse:(AIResponseData *)responseData { - AILoggerMock *loggerMock = (AILoggerMock *)AIAdjustFactory.logger; - - [loggerMock test:@"AdjustDelegate adjustFinishedTrackingWithResponse"]; -} - -@end diff --git a/Adjust/AdjustTests/AdjustTests-Info.plist b/Adjust/AdjustTests/AdjustTests-Info.plist deleted file mode 100644 index 654db09eb..000000000 --- a/Adjust/AdjustTests/AdjustTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - adeven.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h b/Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h deleted file mode 100644 index cfe3d4024..000000000 --- a/Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h -// Adjust -// -// Created by Pedro Filipe on 12/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// - -#import - -@interface NSURLConnection(NSURLConnectionSynchronousLoadingMock) - -+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error; - -+ (void)setConnectionError:(BOOL)connection; -+ (void)setResponseError:(BOOL)response; - -@end diff --git a/Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m b/Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m deleted file mode 100644 index 440e19216..000000000 --- a/Adjust/AdjustTests/NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// NSURLConnection+NSURLConnectionSynchronousLoadingMocking.m -// Adjust -// -// Created by Pedro Filipe on 12/02/14. -// Copyright (c) 2014 adeven. All rights reserved. -// -#import "NSURLConnection+NSURLConnectionSynchronousLoadingMocking.h" -#import "AIAdjustFactory.h" -#import "AILoggerMock.h" - -static BOOL triggerConnectionError = NO; -static BOOL triggerResponseError = NO; - -@implementation NSURLConnection(NSURLConnectionSynchronousLoadingMock) - -+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error { - AILoggerMock *loggerMock =(AILoggerMock *)AIAdjustFactory.logger; - [loggerMock test:@"NSURLConnection sendSynchronousRequest"]; - - if (triggerConnectionError) { - NSDictionary *userInfo = @{ NSLocalizedDescriptionKey: NSLocalizedString(@"connection error", nil) }; - (*error) = [NSError errorWithDomain:@"Adjust" - code:-57 - userInfo:userInfo]; - return nil; - } - NSInteger statusCode; - NSString * sResponseBase64; - if (triggerResponseError) { - statusCode = 0; - // encoded from "{"error":"response error","tracker_token":"token","tracker_name":"name"}" - sResponseBase64 = @"eyJlcnJvciI6InJlc3BvbnNlIGVycm9yIiwidHJhY2tlcl90b2tlbiI6InRva2VuIiwidHJhY2tlcl9uYW1lIjoibmFtZSJ9"; - } else { - statusCode = 200; - // encoded from "{"tracker_token":"token","tracker_name":"name"}" - sResponseBase64 = @"eyJ0cmFja2VyX3Rva2VuIjoidG9rZW4iLCJ0cmFja2VyX25hbWUiOiJuYW1lIn0="; - } - // build response - (*response) = [[NSHTTPURLResponse alloc] initWithURL:[[NSURL alloc] init] statusCode:statusCode HTTPVersion:@"" headerFields:nil]; - - NSData *responseData = [[NSData alloc] - initWithBase64EncodedString:sResponseBase64 - options:NSDataBase64DecodingIgnoreUnknownCharacters]; - - return responseData; -} - -+ (void)setConnectionError:(BOOL)connection { - triggerConnectionError = connection; -} - -+ (void)setResponseError:(BOOL)response { - triggerResponseError = response; -} - -@end diff --git a/Adjust/AdjustTests/en.lproj/InfoPlist.strings b/Adjust/AdjustTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8..000000000 --- a/Adjust/AdjustTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/AdjustTests/Adjust-Prefix.pch b/AdjustTests/Adjust-Prefix.pch new file mode 100644 index 000000000..eb2007ecd --- /dev/null +++ b/AdjustTests/Adjust-Prefix.pch @@ -0,0 +1,9 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import +#endif