Bgerstle has uploaded a new change for review. https://gerrit.wikimedia.org/r/187828
Change subject: add unit testing target ...................................................................... add unit testing target - adds test for NSArray+Predicate to (partially) test pods integration into test target - remove unnecessary MediaWikiKit.m - rename scheme from Wikipedia-iOS to Wikipedia Change-Id: Ibe635c95d1a0cc37dd09ac17b5fa50ac643b75ab --- M MediaWikiKit/MediaWikiKit.xcodeproj/project.pbxproj M MediaWikiKit/MediaWikiKit/MediaWikiKit.h D MediaWikiKit/MediaWikiKit/MediaWikiKit.m M Podfile M Podfile.lock M Wikipedia.xcodeproj/project.pbxproj R Wikipedia.xcodeproj/xcshareddata/xcschemes/Wikipedia.xcscheme A WikipediaUnitTests/Info.plist A WikipediaUnitTests/Utilities/NSArray+PredicateTests.m M wikipedia/Categories/NSArray+Predicate.m 10 files changed, 273 insertions(+), 82 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/ios/wikipedia refs/changes/28/187828/1 diff --git a/MediaWikiKit/MediaWikiKit.xcodeproj/project.pbxproj b/MediaWikiKit/MediaWikiKit.xcodeproj/project.pbxproj index 249fa67..5d22f52 100644 --- a/MediaWikiKit/MediaWikiKit.xcodeproj/project.pbxproj +++ b/MediaWikiKit/MediaWikiKit.xcodeproj/project.pbxproj @@ -21,7 +21,6 @@ D47F56281A1A89B4004D9856 /* MWKHistoryList.m in Sources */ = {isa = PBXBuildFile; fileRef = D47F56271A1A89B4004D9856 /* MWKHistoryList.m */; }; D47F56291A1A89B4004D9856 /* MWKHistoryList.m in Sources */ = {isa = PBXBuildFile; fileRef = D47F56271A1A89B4004D9856 /* MWKHistoryList.m */; }; D48405A619E473E6006F4139 /* MediaWikiKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = D48405A519E473E6006F4139 /* MediaWikiKit.h */; }; - D48405A819E473E6006F4139 /* MediaWikiKit.m in Sources */ = {isa = PBXBuildFile; fileRef = D48405A719E473E6006F4139 /* MediaWikiKit.m */; }; D48405BF19E47526006F4139 /* MWKSection.m in Sources */ = {isa = PBXBuildFile; fileRef = D48405BE19E47526006F4139 /* MWKSection.m */; }; D48405C019E47526006F4139 /* MWKSection.m in Sources */ = {isa = PBXBuildFile; fileRef = D48405BE19E47526006F4139 /* MWKSection.m */; }; D48405C319E47535006F4139 /* MWKArticle.m in Sources */ = {isa = PBXBuildFile; fileRef = D48405C219E47535006F4139 /* MWKArticle.m */; }; @@ -98,7 +97,6 @@ D47F56271A1A89B4004D9856 /* MWKHistoryList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWKHistoryList.m; sourceTree = "<group>"; }; D48405A219E473E6006F4139 /* libMediaWikiKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMediaWikiKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; D48405A519E473E6006F4139 /* MediaWikiKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaWikiKit.h; sourceTree = "<group>"; }; - D48405A719E473E6006F4139 /* MediaWikiKit.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MediaWikiKit.m; sourceTree = "<group>"; }; D48405AD19E473E7006F4139 /* MediaWikiKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MediaWikiKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D48405B019E473E7006F4139 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; D48405BD19E47526006F4139 /* MWKSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWKSection.h; sourceTree = "<group>"; }; @@ -190,7 +188,6 @@ isa = PBXGroup; children = ( D48405A519E473E6006F4139 /* MediaWikiKit.h */, - D48405A719E473E6006F4139 /* MediaWikiKit.m */, D4C3FA5719E478C200EB08CC /* Metadata classes */, D4C3FA5619E478AA00EB08CC /* Data classes */, D4C3FA5819E478CC00EB08CC /* Data i/o */, @@ -409,7 +406,6 @@ D44EA78D1A1BCD2600631A1D /* MWKRecentSearchList.m in Sources */, D44EA7851A1BCC0300631A1D /* MWKUserDataStore.m in Sources */, D48405C319E47535006F4139 /* MWKArticle.m in Sources */, - D48405A819E473E6006F4139 /* MediaWikiKit.m in Sources */, D494A6FE19F6C7C30098AA18 /* MWKProtectionStatus.m in Sources */, D494A70E19F6E8F20098AA18 /* MWKDataStore.m in Sources */, D47F56281A1A89B4004D9856 /* MWKHistoryList.m in Sources */, diff --git a/MediaWikiKit/MediaWikiKit/MediaWikiKit.h b/MediaWikiKit/MediaWikiKit/MediaWikiKit.h index cadd7f4..ca5817b 100644 --- a/MediaWikiKit/MediaWikiKit/MediaWikiKit.h +++ b/MediaWikiKit/MediaWikiKit/MediaWikiKit.h @@ -39,7 +39,3 @@ #import "MWKImageList.h" #import "MWKUserDataStore.h" - -@interface MediaWikiKit : NSObject - -@end diff --git a/MediaWikiKit/MediaWikiKit/MediaWikiKit.m b/MediaWikiKit/MediaWikiKit/MediaWikiKit.m deleted file mode 100644 index 51d4223..0000000 --- a/MediaWikiKit/MediaWikiKit/MediaWikiKit.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MediaWikiKit.m -// MediaWikiKit -// -// Created by Brion on 10/7/14. -// Copyright (c) 2014 Wikimedia Foundation. All rights reserved. -// - -#import "MediaWikiKit.h" - -@implementation MediaWikiKit - -@end diff --git a/Podfile b/Podfile index 5f046a6..fd18f8a 100644 --- a/Podfile +++ b/Podfile @@ -1,4 +1,10 @@ source 'https://github.com/CocoaPods/Specs.git' platform :ios, :deployment_target => '6.0' + pod 'AFNetworking', '< 2.6' -pod 'hpple', '< 0.3' \ No newline at end of file +pod 'hpple', '< 0.3' + +target 'WikipediaUnitTests', :exclusive => false do + pod 'OCMockito', '< 1.5' + pod 'OCHamcrest', '< 4.2' +end diff --git a/Podfile.lock b/Podfile.lock index 8ff46c9..a667c0b 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -21,13 +21,20 @@ - AFNetworking/NSURLConnection - AFNetworking/NSURLSession - hpple (0.2.0) + - OCHamcrest (4.1.1) + - OCMockito (1.4.0): + - OCHamcrest (~> 4.0) DEPENDENCIES: - AFNetworking (< 2.6) - hpple (< 0.3) + - OCHamcrest (< 4.2) + - OCMockito (< 1.5) SPEC CHECKSUMS: AFNetworking: 0f54cb5d16ce38c1b76948faffb8d5fb705021c7 hpple: f4eb7c21a8db83ec264e5d614ec7509e10e5adec + OCHamcrest: af1c7c5ea345de69ea6c9c2958f65f3044e5c420 + OCMockito: 991936bb775cc4c27f063d38f5e17b9161fbd21c COCOAPODS: 0.35.0 diff --git a/Wikipedia.xcodeproj/project.pbxproj b/Wikipedia.xcodeproj/project.pbxproj index dde3063..7e554fd 100644 --- a/Wikipedia.xcodeproj/project.pbxproj +++ b/Wikipedia.xcodeproj/project.pbxproj @@ -178,7 +178,10 @@ 04F27B7618FE0F2E00EDD838 /* PageHistoryResultPrototypeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 04F27B7018FE0F2E00EDD838 /* PageHistoryResultPrototypeView.xib */; }; 04F27B7818FE0F2E00EDD838 /* PageHistoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 04F27B7418FE0F2E00EDD838 /* PageHistoryViewController.m */; }; 04F39590186CF80100B0D6FC /* TOCViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 04F3958F186CF80100B0D6FC /* TOCViewController.m */; }; + 41D22A1AE1138DFBCA72FDD4 /* libPods-WikipediaUnitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CE61C6963F825760822A28A /* libPods-WikipediaUnitTests.a */; }; 701FF5EE601DEA3FCAB7EFD3 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D82982ED992F47428037BDF2 /* libPods.a */; }; + BC8309C91A7C370B003FC5C7 /* NSArray+PredicateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8309C81A7C370B003FC5C7 /* NSArray+PredicateTests.m */; }; + BC8309CA1A7C3BBD003FC5C7 /* NSArray+Predicate.m in Sources */ = {isa = PBXBuildFile; fileRef = 04CBAC7219A9B786009F3D7E /* NSArray+Predicate.m */; }; C9180EC418AED30C006C1DCA /* WikipediaAppUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = C9180EC318AED30C006C1DCA /* WikipediaAppUtils.m */; }; D407E6411A51DBDA00CCC8B1 /* SchemaConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = D407E6401A51DBDA00CCC8B1 /* SchemaConverter.m */; }; D42E75EB18D11237002EA7E5 /* MWLanguageInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = D42E75EA18D11237002EA7E5 /* MWLanguageInfo.m */; }; @@ -574,7 +577,12 @@ 04F3958E186CF80100B0D6FC /* TOCViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TOCViewController.h; sourceTree = "<group>"; }; 04F3958F186CF80100B0D6FC /* TOCViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TOCViewController.m; sourceTree = "<group>"; }; 15847B39C337F6CC5C052C54 /* Pods.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.test.xcconfig; path = "Pods/Target Support Files/Pods/Pods.test.xcconfig"; sourceTree = "<group>"; }; + 17A2F22335C5256576CEDBDD /* Pods-WikipediaUnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WikipediaUnitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-WikipediaUnitTests/Pods-WikipediaUnitTests.release.xcconfig"; sourceTree = "<group>"; }; 357504E50DA104E39C6ACFEB /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; }; + 8CE61C6963F825760822A28A /* libPods-WikipediaUnitTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WikipediaUnitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + BC8309961A7BF935003FC5C7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; + BC8309B01A7BFBE4003FC5C7 /* WikipediaUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WikipediaUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + BC8309C81A7C370B003FC5C7 /* NSArray+PredicateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSArray+PredicateTests.m"; path = "Utilities/NSArray+PredicateTests.m"; sourceTree = "<group>"; }; C9180EC218AED30C006C1DCA /* WikipediaAppUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WikipediaAppUtils.h; sourceTree = "<group>"; }; C9180EC318AED30C006C1DCA /* WikipediaAppUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WikipediaAppUtils.m; sourceTree = "<group>"; }; D407E63F1A51DBDA00CCC8B1 /* SchemaConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SchemaConverter.h; path = wikipedia/Data/SchemaConverter.h; sourceTree = SOURCE_ROOT; }; @@ -805,10 +813,19 @@ D4F277FD194235B50032BA38 /* ToCInteractionFunnel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ToCInteractionFunnel.m; path = EventLogging/ToCInteractionFunnel.m; sourceTree = "<group>"; }; D4F478441A48CD8500D8043C /* OldDataSchema.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OldDataSchema.xcodeproj; path = OldDataSchema/OldDataSchema.xcodeproj; sourceTree = "<group>"; }; D82982ED992F47428037BDF2 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + DC96DA4AAD521D734849D20F /* Pods-WikipediaUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WikipediaUnitTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WikipediaUnitTests/Pods-WikipediaUnitTests.debug.xcconfig"; sourceTree = "<group>"; }; EDA528BC357952A7D914F8E0 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + BC8309AD1A7BFBE4003FC5C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 41D22A1AE1138DFBCA72FDD4 /* libPods-WikipediaUnitTests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D4991432181D51DE00E6073C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1559,6 +1576,23 @@ path = TableOfContents; sourceTree = "<group>"; }; + BC8309941A7BF935003FC5C7 /* WikipediaUnitTests */ = { + isa = PBXGroup; + children = ( + BC8309951A7BF935003FC5C7 /* Supporting Files */, + BC8309C81A7C370B003FC5C7 /* NSArray+PredicateTests.m */, + ); + path = WikipediaUnitTests; + sourceTree = "<group>"; + }; + BC8309951A7BF935003FC5C7 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + BC8309961A7BF935003FC5C7 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = "<group>"; + }; C9180EC118AED30C006C1DCA /* mw-utils */ = { isa = PBXGroup; children = ( @@ -1583,6 +1617,7 @@ D499143E181D51DE00E6073C /* Wikipedia */, 04E9A78218F73C7200F7ECF7 /* www */, D4991453181D51DE00E6073C /* Images.xcassets */, + BC8309941A7BF935003FC5C7 /* WikipediaUnitTests */, D4991437181D51DE00E6073C /* Frameworks */, D4991436181D51DE00E6073C /* Products */, D4F478441A48CD8500D8043C /* OldDataSchema.xcodeproj */, @@ -1596,6 +1631,7 @@ isa = PBXGroup; children = ( D4991435181D51DE00E6073C /* Wikipedia.app */, + BC8309B01A7BFBE4003FC5C7 /* WikipediaUnitTests.xctest */, ); name = Products; sourceTree = "<group>"; @@ -1613,6 +1649,7 @@ D499143C181D51DE00E6073C /* UIKit.framework */, D499145A181D51DF00E6073C /* XCTest.framework */, D82982ED992F47428037BDF2 /* libPods.a */, + 8CE61C6963F825760822A28A /* libPods-WikipediaUnitTests.a */, ); name = Frameworks; sourceTree = "<group>"; @@ -1739,6 +1776,8 @@ EDA528BC357952A7D914F8E0 /* Pods.debug.xcconfig */, 15847B39C337F6CC5C052C54 /* Pods.test.xcconfig */, 357504E50DA104E39C6ACFEB /* Pods.release.xcconfig */, + DC96DA4AAD521D734849D20F /* Pods-WikipediaUnitTests.debug.xcconfig */, + 17A2F22335C5256576CEDBDD /* Pods-WikipediaUnitTests.release.xcconfig */, ); name = Pods; sourceTree = "<group>"; @@ -1746,6 +1785,25 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + BC8309AF1A7BFBE4003FC5C7 /* WikipediaUnitTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = BC8309B61A7BFBE4003FC5C7 /* Build configuration list for PBXNativeTarget "WikipediaUnitTests" */; + buildPhases = ( + 47E108C0DA61EAC98870C454 /* Check Pods Manifest.lock */, + BC8309AC1A7BFBE4003FC5C7 /* Sources */, + BC8309AD1A7BFBE4003FC5C7 /* Frameworks */, + BC8309AE1A7BFBE4003FC5C7 /* Resources */, + A1EA1217DE65ED73E01F98E7 /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WikipediaUnitTests; + productName = WikipediaUnitTests; + productReference = BC8309B01A7BFBE4003FC5C7 /* WikipediaUnitTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; D4991434181D51DE00E6073C /* Wikipedia */ = { isa = PBXNativeTarget; buildConfigurationList = D499146A181D51DF00E6073C /* Build configuration list for PBXNativeTarget "Wikipedia" */; @@ -1782,6 +1840,9 @@ LastUpgradeCheck = 0600; ORGANIZATIONNAME = "Wikimedia Foundation"; TargetAttributes = { + BC8309AF1A7BFBE4003FC5C7 = { + CreatedOnToolsVersion = 6.1.1; + }; D4991434181D51DE00E6073C = { DevelopmentTeam = AKK7J2GV64; }; @@ -1885,6 +1946,7 @@ projectRoot = ""; targets = ( D4991434181D51DE00E6073C /* Wikipedia */, + BC8309AF1A7BFBE4003FC5C7 /* WikipediaUnitTests */, ); }; /* End PBXProject section */ @@ -1921,6 +1983,13 @@ /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ + BC8309AE1A7BFBE4003FC5C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; D4991433181D51DE00E6073C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -2045,6 +2114,36 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; showEnvVarsInLog = 0; }; + 47E108C0DA61EAC98870C454 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + A1EA1217DE65ED73E01F98E7 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-WikipediaUnitTests/Pods-WikipediaUnitTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; D4C16A621970946900CD91AD /* update-storyboard-strings */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -2096,6 +2195,15 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + BC8309AC1A7BFBE4003FC5C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BC8309CA1A7C3BBD003FC5C7 /* NSArray+Predicate.m in Sources */, + BC8309C91A7C370B003FC5C7 /* NSArray+PredicateTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D4991431181D51DE00E6073C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2480,72 +2588,47 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 04C43B0F1839DAEE006C643B /* Test */ = { + BC8309B71A7BFBE4003FC5C7 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DC96DA4AAD521D734849D20F /* Pods-WikipediaUnitTests.debug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - 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; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; + CLANG_WARN_UNREACHABLE_CODE = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = WikipediaUnitTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; }; - name = Test; + name = Debug; }; - 04C43B101839DAEE006C643B /* Test */ = { + BC8309B81A7BFBE4003FC5C7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 15847B39C337F6CC5C052C54 /* Pods.test.xcconfig */; + baseConfigurationReference = 17A2F22335C5256576CEDBDD /* Pods-WikipediaUnitTests.release.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "wikipedia/Wikipedia-Prefix.pch"; - HEADER_SEARCH_PATHS = ( + CLANG_WARN_UNREACHABLE_CODE = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", - "$(SDKROOT)/usr/include/libxml2", - "$(PROJECT_DIR)/cocoapods/Pods/Headers/Public/AFNetworking", - "$(PROJECT_DIR)/cocoapods/Pods/Headers/Public/hpple", - "$(PROJECT_DIR)/MediaWikiKit/MediaWikiKit", - "$(PROJECT_DIR)/OldDataSchema/**", ); - INFOPLIST_FILE = "Wikipedia/Wikipedia-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LIBRARY_SEARCH_PATHS = "$(inherited)"; - OTHER_LDFLAGS = "$(inherited)"; - PRODUCT_NAME = Wikipedia; - PROVISIONING_PROFILE = ""; - WRAPPER_EXTENSION = app; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = WikipediaUnitTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; }; - name = Test; + name = Release; }; D4991468181D51DF00E6073C /* Debug */ = { isa = XCBuildConfiguration; @@ -2683,11 +2766,19 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + BC8309B61A7BFBE4003FC5C7 /* Build configuration list for PBXNativeTarget "WikipediaUnitTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC8309B71A7BFBE4003FC5C7 /* Debug */, + BC8309B81A7BFBE4003FC5C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; D4991430181D51DE00E6073C /* Build configuration list for PBXProject "Wikipedia" */ = { isa = XCConfigurationList; buildConfigurations = ( D4991468181D51DF00E6073C /* Debug */, - 04C43B0F1839DAEE006C643B /* Test */, D4991469181D51DF00E6073C /* Release */, ); defaultConfigurationIsVisible = 0; @@ -2697,7 +2788,6 @@ isa = XCConfigurationList; buildConfigurations = ( D499146B181D51DF00E6073C /* Debug */, - 04C43B101839DAEE006C643B /* Test */, D499146C181D51DF00E6073C /* Release */, ); defaultConfigurationIsVisible = 0; diff --git a/Wikipedia.xcodeproj/xcshareddata/xcschemes/Wikipedia-iOS.xcscheme b/Wikipedia.xcodeproj/xcshareddata/xcschemes/Wikipedia.xcscheme similarity index 70% rename from Wikipedia.xcodeproj/xcshareddata/xcschemes/Wikipedia-iOS.xcscheme rename to Wikipedia.xcodeproj/xcshareddata/xcschemes/Wikipedia.xcscheme index 3bbc795..9910729 100644 --- a/Wikipedia.xcodeproj/xcshareddata/xcschemes/Wikipedia-iOS.xcscheme +++ b/Wikipedia.xcodeproj/xcshareddata/xcschemes/Wikipedia.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> <BuildableReference BuildableIdentifier = "primary" - BlueprintIdentifier = "A0E9D3B0EB568914B646A37B" + BlueprintIdentifier = "C4FBC6125AA700D0D169471B" BuildableName = "libPods.a" BlueprintName = "Pods" ReferencedContainer = "container:Pods/Pods.xcodeproj"> @@ -48,21 +48,59 @@ ReferencedContainer = "container:OldDataSchema/OldDataSchema.xcodeproj"> </BuildableReference> </BuildActionEntry> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "NO" + buildForArchiving = "NO" + buildForAnalyzing = "NO"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "D48405AC19E473E7006F4139" + BuildableName = "MediaWikiKitTests.xctest" + BlueprintName = "MediaWikiKitTests" + ReferencedContainer = "container:MediaWikiKit/MediaWikiKit.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "NO" + buildForArchiving = "NO" + buildForAnalyzing = "NO"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "BC8309AF1A7BFBE4003FC5C7" + BuildableName = "WikipediaUnitTests.xctest" + BlueprintName = "WikipediaUnitTests" + ReferencedContainer = "container:Wikipedia.xcodeproj"> + </BuildableReference> + </BuildActionEntry> </BuildActionEntries> </BuildAction> <TestAction selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES" - buildConfiguration = "Test"> + buildConfiguration = "Debug"> <Testables> <TestableReference skipped = "NO"> <BuildableReference BuildableIdentifier = "primary" - BlueprintIdentifier = "D4991458181D51DF00E6073C" - BuildableName = "Wikipedia-iOSTests.xctest" - BlueprintName = "Wikipedia-iOSTests" + BlueprintIdentifier = "D48405AC19E473E7006F4139" + BuildableName = "MediaWikiKitTests.xctest" + BlueprintName = "MediaWikiKitTests" + ReferencedContainer = "container:MediaWikiKit/MediaWikiKit.xcodeproj"> + </BuildableReference> + </TestableReference> + <TestableReference + skipped = "NO"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "BC8309AF1A7BFBE4003FC5C7" + BuildableName = "WikipediaUnitTests.xctest" + BlueprintName = "WikipediaUnitTests" ReferencedContainer = "container:Wikipedia.xcodeproj"> </BuildableReference> </TestableReference> diff --git a/WikipediaUnitTests/Info.plist b/WikipediaUnitTests/Info.plist new file mode 100644 index 0000000..24444e6 --- /dev/null +++ b/WikipediaUnitTests/Info.plist @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>en</string> + <key>CFBundleExecutable</key> + <string>$(EXECUTABLE_NAME)</string> + <key>CFBundleIdentifier</key> + <string>wikimedia.$(PRODUCT_NAME:rfc1034identifier)</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>$(PRODUCT_NAME)</string> + <key>CFBundlePackageType</key> + <string>BNDL</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1</string> +</dict> +</plist> diff --git a/WikipediaUnitTests/Utilities/NSArray+PredicateTests.m b/WikipediaUnitTests/Utilities/NSArray+PredicateTests.m new file mode 100644 index 0000000..9aa43d7 --- /dev/null +++ b/WikipediaUnitTests/Utilities/NSArray+PredicateTests.m @@ -0,0 +1,46 @@ +// +// NSArray+PredicateTests.m +// Wikipedia +// +// Created by Brian Gerstle on 1/30/15. +// Copyright (c) 2015 Wikimedia Foundation. All rights reserved. +// + +#import <Foundation/Foundation.h> +#import <XCTest/XCTest.h> + +#define HC_SHORTHAND 1 +#import <OCHamcrest/OCHamcrest.h> + +#import "NSArray+Predicate.h" + +@interface NSArray_PredicateTests : XCTestCase + +@end + +@implementation NSArray_PredicateTests + +- (void)testEmptyArray +{ + assertThat([@[] firstMatchForPredicate:[NSPredicate predicateWithValue:YES]], is(nilValue())); + assertThat([@[] firstMatchForPredicate:[NSPredicate predicateWithValue:NO]], is(nilValue())); +} + +- (void)testFindsCorrectObject +{ + NSArray *testArray = @[@"foo", @"bar", @"baz"]; + for (id element in testArray) { + NSPredicate *isElement = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bindings) { + return [obj isEqual:element]; + }]; + assertThat([testArray firstMatchForPredicate:isElement], is(element)); + } +} + + +- (void)testFalsePredicate +{ + assertThat(([@[@1, @2, @3] firstMatchForPredicate:[NSPredicate predicateWithValue:NO]]), is(nilValue())); +} + +@end diff --git a/wikipedia/Categories/NSArray+Predicate.m b/wikipedia/Categories/NSArray+Predicate.m index 0534a73..908b821 100644 --- a/wikipedia/Categories/NSArray+Predicate.m +++ b/wikipedia/Categories/NSArray+Predicate.m @@ -6,6 +6,7 @@ @implementation NSArray (Predicate) -(id)firstMatchForPredicate:(NSPredicate *)predicate { + // FIXME: this is likely O(n), search/sort should be O(log(n)) __block id matchingObject = nil; [self enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) { -- To view, visit https://gerrit.wikimedia.org/r/187828 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibe635c95d1a0cc37dd09ac17b5fa50ac643b75ab Gerrit-PatchSet: 1 Gerrit-Project: apps/ios/wikipedia Gerrit-Branch: master Gerrit-Owner: Bgerstle <bgers...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits