You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by sh...@apache.org on 2014/10/10 01:05:20 UTC

[2/3] Move CordovaLibTests into tests/

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/CordovaLibTests/CordovaTests.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/CordovaLibTests/CordovaTests.xcodeproj/project.pbxproj b/CordovaLibTests/CordovaTests.xcodeproj/project.pbxproj
deleted file mode 100644
index e1bab9e..0000000
--- a/CordovaLibTests/CordovaTests.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,715 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		3019D58D1918C00C00D72DCC /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3019D58B1918BFF800D72DCC /* XCTest.framework */; };
-		302193F91745430F00BC8D2B /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 302193F81745430F00BC8D2B /* ImageIO.framework */; };
-		3035621714104C34006C2D43 /* CDVWhitelistTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 30356213141049E1006C2D43 /* CDVWhitelistTests.m */; };
-		303A406A152124BB00182201 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357AA141002F100DF4CF2 /* UIKit.framework */; };
-		303A406B152124BB00182201 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357AC141002F100DF4CF2 /* Foundation.framework */; };
-		303A406C152124BB00182201 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357AE141002F100DF4CF2 /* CoreGraphics.framework */; };
-		303A4072152124BB00182201 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 303A4070152124BB00182201 /* InfoPlist.strings */; };
-		303A4074152124BB00182201 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 303A4073152124BB00182201 /* main.m */; };
-		303A4078152124BB00182201 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 303A4077152124BB00182201 /* AppDelegate.m */; };
-		303A407B152124BB00182201 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 303A407A152124BB00182201 /* ViewController.m */; };
-		30610C9219AD9B95000B3781 /* CDVCommandDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 30610C9119AD9B95000B3781 /* CDVCommandDelegateTests.m */; };
-		3062D1AE151D4D9D000D9128 /* CDVLocalStorageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3062D1AD151D4D9D000D9128 /* CDVLocalStorageTests.m */; };
-		30B342F515224B360070E6A5 /* CDVWebViewTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B342F415224B360070E6A5 /* CDVWebViewTest.m */; };
-		30D1B08C15A2B36D0060C291 /* CDVBase64Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 30D1B08B15A2B36D0060C291 /* CDVBase64Tests.m */; };
-		30F8AE0515212587006625B3 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68A32D7414103017006B237C /* AddressBook.framework */; };
-		30F8AE0615212587006625B3 /* AddressBookUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357CC14100AAD00DF4CF2 /* AddressBookUI.framework */; };
-		30F8AE0715212587006625B3 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357CE14100ADA00DF4CF2 /* AudioToolbox.framework */; };
-		30F8AE0815212587006625B3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357CF14100ADB00DF4CF2 /* AVFoundation.framework */; };
-		30F8AE0915212587006625B3 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357D014100ADE00DF4CF2 /* CoreLocation.framework */; };
-		30F8AE0A15212587006625B3 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357DC14100B1600DF4CF2 /* CoreMedia.framework */; };
-		30F8AE0B15212587006625B3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357D414100AF200DF4CF2 /* SystemConfiguration.framework */; };
-		30F8AE0C152125B6006625B3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357D214100AE700DF4CF2 /* MobileCoreServices.framework */; };
-		30F8AE1D152129DA006625B3 /* www in Resources */ = {isa = PBXBuildFile; fileRef = 30F8AE1C152129DA006625B3 /* www */; };
-		686357B5141002F200DF4CF2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 686357B3141002F200DF4CF2 /* InfoPlist.strings */; };
-		686357BA141002F200DF4CF2 /* CDVPluginResultJSONSerializationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 686357B9141002F200DF4CF2 /* CDVPluginResultJSONSerializationTests.m */; };
-		68A32D7514103017006B237C /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68A32D7414103017006B237C /* AddressBook.framework */; };
-		68A32D7614103078006B237C /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357DC14100B1600DF4CF2 /* CoreMedia.framework */; };
-		68A32D7714103082006B237C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357CE14100ADA00DF4CF2 /* AudioToolbox.framework */; };
-		68A32D781410308B006B237C /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357CF14100ADB00DF4CF2 /* AVFoundation.framework */; };
-		68A32D7914103097006B237C /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357D014100ADE00DF4CF2 /* CoreLocation.framework */; };
-		68A32D7A141030AB006B237C /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357D214100AE700DF4CF2 /* MobileCoreServices.framework */; };
-		68A32D7B141030C8006B237C /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357D414100AF200DF4CF2 /* SystemConfiguration.framework */; };
-		68A32D7C141030D0006B237C /* AddressBookUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357CC14100AAD00DF4CF2 /* AddressBookUI.framework */; };
-		68A32D7D141030E4006B237C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357AE141002F100DF4CF2 /* CoreGraphics.framework */; };
-		68A32D7E141030EB006B237C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357AA141002F100DF4CF2 /* UIKit.framework */; };
-		68A32D7F141030F3006B237C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 686357AC141002F100DF4CF2 /* Foundation.framework */; };
-		7E91406017711D88002C6A3F /* CDVWebViewDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E91405F17711D88002C6A3F /* CDVWebViewDelegateTests.m */; };
-		7EF33BD71911ABA20048544E /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7EF33BD61911ABA20048544E /* Default-568h@2x.png */; };
-		8220B5C216D541BD00EC3921 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8220B5C116D541BD00EC3921 /* AssetsLibrary.framework */; };
-		8220B5C616D542F500EC3921 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8220B5C116D541BD00EC3921 /* AssetsLibrary.framework */; };
-		EB3B34E9161B5532003DBE7D /* libCordova.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EB3B34E6161B5454003DBE7D /* libCordova.a */; };
-		EB89634A15FE66EA00E12277 /* CDVInvokedUrlCommandTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB89634915FE66EA00E12277 /* CDVInvokedUrlCommandTests.m */; };
-		EB96677216ADBCF500D86CDF /* CDVUserAgentTest.m in Sources */ = {isa = PBXBuildFile; fileRef = EB96677116ADBCF500D86CDF /* CDVUserAgentTest.m */; };
-		EBA3554615A731F100F4DE24 /* CDVFakeFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA3554515A731F100F4DE24 /* CDVFakeFileManager.m */; };
-		EBA7F20517962CCD001A0CE6 /* CDVStartPageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EBA7F20417962CCD001A0CE6 /* CDVStartPageTests.m */; };
-		F8EB14D1165FFD3200616F39 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = F8EB14D0165FFD3200616F39 /* config.xml */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		30F8AE3215212F07006625B3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 303A4067152124BB00182201;
-			remoteInfo = CordovaLibApp;
-		};
-		7E73351317E27B4E00AB7A3F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = EB37018115D18B2D00BEBC43 /* CordovaLib.xcodeproj */;
-			proxyType = 1;
-			remoteGlobalIDString = D2AAC07D0554694100DB518D;
-			remoteInfo = CordovaLib;
-		};
-		EB3B34E5161B5454003DBE7D /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = EB37018115D18B2D00BEBC43 /* CordovaLib.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = 68A32D7114102E1C006B237C;
-			remoteInfo = CordovaLib;
-		};
-		EB3B34E7161B552E003DBE7D /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = EB37018115D18B2D00BEBC43 /* CordovaLib.xcodeproj */;
-			proxyType = 1;
-			remoteGlobalIDString = D2AAC07D0554694100DB518D;
-			remoteInfo = CordovaLib;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
-		3019D58B1918BFF800D72DCC /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
-		302193F81745430F00BC8D2B /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
-		30356213141049E1006C2D43 /* CDVWhitelistTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVWhitelistTests.m; sourceTree = "<group>"; };
-		303A4068152124BB00182201 /* CordovaLibApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CordovaLibApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		303A406F152124BB00182201 /* CordovaLibApp-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "CordovaLibApp-Info.plist"; sourceTree = "<group>"; };
-		303A4071152124BB00182201 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		303A4073152124BB00182201 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
-		303A4076152124BB00182201 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
-		303A4077152124BB00182201 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
-		303A4079152124BB00182201 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
-		303A407A152124BB00182201 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
-		30610C9119AD9B95000B3781 /* CDVCommandDelegateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVCommandDelegateTests.m; sourceTree = "<group>"; };
-		3062D1AD151D4D9D000D9128 /* CDVLocalStorageTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVLocalStorageTests.m; sourceTree = "<group>"; };
-		30B342F415224B360070E6A5 /* CDVWebViewTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVWebViewTest.m; sourceTree = "<group>"; };
-		30D1B08B15A2B36D0060C291 /* CDVBase64Tests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVBase64Tests.m; sourceTree = "<group>"; };
-		30F8AE1C152129DA006625B3 /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; path = www; sourceTree = "<group>"; };
-		686357A9141002F100DF4CF2 /* CordovaLibTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CordovaLibTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-		686357AA141002F100DF4CF2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
-		686357AC141002F100DF4CF2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
-		686357AE141002F100DF4CF2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
-		686357B2141002F200DF4CF2 /* CordovaLibTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CordovaLibTests-Info.plist"; sourceTree = "<group>"; };
-		686357B4141002F200DF4CF2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		686357B9141002F200DF4CF2 /* CDVPluginResultJSONSerializationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CDVPluginResultJSONSerializationTests.m; sourceTree = "<group>"; };
-		686357CC14100AAD00DF4CF2 /* AddressBookUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBookUI.framework; path = System/Library/Frameworks/AddressBookUI.framework; sourceTree = SDKROOT; };
-		686357CE14100ADA00DF4CF2 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
-		686357CF14100ADB00DF4CF2 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
-		686357D014100ADE00DF4CF2 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
-		686357D214100AE700DF4CF2 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
-		686357D414100AF200DF4CF2 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
-		686357DC14100B1600DF4CF2 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
-		68A32D7414103017006B237C /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; };
-		7E91405F17711D88002C6A3F /* CDVWebViewDelegateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVWebViewDelegateTests.m; sourceTree = "<group>"; };
-		7EF33BD61911ABA20048544E /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
-		8220B5C116D541BD00EC3921 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; };
-		EB37018115D18B2D00BEBC43 /* CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CordovaLib.xcodeproj; path = ../CordovaLib/CordovaLib.xcodeproj; sourceTree = "<group>"; };
-		EB89634915FE66EA00E12277 /* CDVInvokedUrlCommandTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVInvokedUrlCommandTests.m; sourceTree = "<group>"; };
-		EB96677116ADBCF500D86CDF /* CDVUserAgentTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVUserAgentTest.m; sourceTree = "<group>"; };
-		EBA3550F15A5F18900F4DE24 /* CDVWebViewTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CDVWebViewTest.h; sourceTree = "<group>"; };
-		EBA3554415A731F100F4DE24 /* CDVFakeFileManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDVFakeFileManager.h; sourceTree = "<group>"; };
-		EBA3554515A731F100F4DE24 /* CDVFakeFileManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVFakeFileManager.m; sourceTree = "<group>"; };
-		EBA7F20417962CCD001A0CE6 /* CDVStartPageTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDVStartPageTests.m; sourceTree = "<group>"; };
-		F8EB14D0165FFD3200616F39 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = CordovaLibApp/config.xml; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		303A4065152124BB00182201 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				302193F91745430F00BC8D2B /* ImageIO.framework in Frameworks */,
-				EB3B34E9161B5532003DBE7D /* libCordova.a in Frameworks */,
-				8220B5C216D541BD00EC3921 /* AssetsLibrary.framework in Frameworks */,
-				30F8AE0C152125B6006625B3 /* MobileCoreServices.framework in Frameworks */,
-				30F8AE0515212587006625B3 /* AddressBook.framework in Frameworks */,
-				30F8AE0615212587006625B3 /* AddressBookUI.framework in Frameworks */,
-				30F8AE0715212587006625B3 /* AudioToolbox.framework in Frameworks */,
-				30F8AE0815212587006625B3 /* AVFoundation.framework in Frameworks */,
-				30F8AE0915212587006625B3 /* CoreLocation.framework in Frameworks */,
-				30F8AE0A15212587006625B3 /* CoreMedia.framework in Frameworks */,
-				303A406B152124BB00182201 /* Foundation.framework in Frameworks */,
-				30F8AE0B15212587006625B3 /* SystemConfiguration.framework in Frameworks */,
-				303A406A152124BB00182201 /* UIKit.framework in Frameworks */,
-				303A406C152124BB00182201 /* CoreGraphics.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		686357A5141002F100DF4CF2 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3019D58D1918C00C00D72DCC /* XCTest.framework in Frameworks */,
-				68A32D7514103017006B237C /* AddressBook.framework in Frameworks */,
-				8220B5C616D542F500EC3921 /* AssetsLibrary.framework in Frameworks */,
-				68A32D7614103078006B237C /* CoreMedia.framework in Frameworks */,
-				68A32D7714103082006B237C /* AudioToolbox.framework in Frameworks */,
-				68A32D781410308B006B237C /* AVFoundation.framework in Frameworks */,
-				68A32D7914103097006B237C /* CoreLocation.framework in Frameworks */,
-				68A32D7A141030AB006B237C /* MobileCoreServices.framework in Frameworks */,
-				68A32D7B141030C8006B237C /* SystemConfiguration.framework in Frameworks */,
-				68A32D7C141030D0006B237C /* AddressBookUI.framework in Frameworks */,
-				68A32D7D141030E4006B237C /* CoreGraphics.framework in Frameworks */,
-				68A32D7E141030EB006B237C /* UIKit.framework in Frameworks */,
-				68A32D7F141030F3006B237C /* Foundation.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		034768DFFF38A50411DB9C8B /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				686357A9141002F100DF4CF2 /* CordovaLibTests.xctest */,
-				303A4068152124BB00182201 /* CordovaLibApp.app */,
-			);
-			name = Products;
-			sourceTree = CORDOVALIB;
-		};
-		0867D691FE84028FC02AAC07 /* CordovaLib */ = {
-			isa = PBXGroup;
-			children = (
-				7EF33BD61911ABA20048544E /* Default-568h@2x.png */,
-				F8EB14D0165FFD3200616F39 /* config.xml */,
-				EB37018115D18B2D00BEBC43 /* CordovaLib.xcodeproj */,
-				EB3B34F4161B585D003DBE7D /* CordovaLibTests */,
-				303A406D152124BB00182201 /* CordovaLibApp */,
-				0867D69AFE84028FC02AAC07 /* Frameworks */,
-				034768DFFF38A50411DB9C8B /* Products */,
-			);
-			name = CordovaLib;
-			sourceTree = "<group>";
-		};
-		0867D69AFE84028FC02AAC07 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				3019D58B1918BFF800D72DCC /* XCTest.framework */,
-				302193F81745430F00BC8D2B /* ImageIO.framework */,
-				68A32D7414103017006B237C /* AddressBook.framework */,
-				8220B5C116D541BD00EC3921 /* AssetsLibrary.framework */,
-				686357DC14100B1600DF4CF2 /* CoreMedia.framework */,
-				686357CE14100ADA00DF4CF2 /* AudioToolbox.framework */,
-				686357CF14100ADB00DF4CF2 /* AVFoundation.framework */,
-				686357D014100ADE00DF4CF2 /* CoreLocation.framework */,
-				686357D214100AE700DF4CF2 /* MobileCoreServices.framework */,
-				686357D414100AF200DF4CF2 /* SystemConfiguration.framework */,
-				686357CC14100AAD00DF4CF2 /* AddressBookUI.framework */,
-				686357AA141002F100DF4CF2 /* UIKit.framework */,
-				686357AC141002F100DF4CF2 /* Foundation.framework */,
-				686357AE141002F100DF4CF2 /* CoreGraphics.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		303A406D152124BB00182201 /* CordovaLibApp */ = {
-			isa = PBXGroup;
-			children = (
-				30F8AE1C152129DA006625B3 /* www */,
-				303A4076152124BB00182201 /* AppDelegate.h */,
-				303A4077152124BB00182201 /* AppDelegate.m */,
-				303A4079152124BB00182201 /* ViewController.h */,
-				303A407A152124BB00182201 /* ViewController.m */,
-				303A406E152124BB00182201 /* Supporting Files */,
-			);
-			path = CordovaLibApp;
-			sourceTree = "<group>";
-		};
-		303A406E152124BB00182201 /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				303A406F152124BB00182201 /* CordovaLibApp-Info.plist */,
-				303A4070152124BB00182201 /* InfoPlist.strings */,
-				303A4073152124BB00182201 /* main.m */,
-			);
-			name = "Supporting Files";
-			sourceTree = "<group>";
-		};
-		686357B1141002F200DF4CF2 /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				686357B2141002F200DF4CF2 /* CordovaLibTests-Info.plist */,
-				686357B3141002F200DF4CF2 /* InfoPlist.strings */,
-			);
-			name = "Supporting Files";
-			sourceTree = "<group>";
-		};
-		EB3B34E2161B5454003DBE7D /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				EB3B34E6161B5454003DBE7D /* libCordova.a */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		EB3B34F4161B585D003DBE7D /* CordovaLibTests */ = {
-			isa = PBXGroup;
-			children = (
-				30610C9119AD9B95000B3781 /* CDVCommandDelegateTests.m */,
-				EBA7F20417962CCD001A0CE6 /* CDVStartPageTests.m */,
-				7E91405F17711D88002C6A3F /* CDVWebViewDelegateTests.m */,
-				EB96677116ADBCF500D86CDF /* CDVUserAgentTest.m */,
-				EBA3554415A731F100F4DE24 /* CDVFakeFileManager.h */,
-				EBA3554515A731F100F4DE24 /* CDVFakeFileManager.m */,
-				EBA3550F15A5F18900F4DE24 /* CDVWebViewTest.h */,
-				30B342F415224B360070E6A5 /* CDVWebViewTest.m */,
-				30D1B08B15A2B36D0060C291 /* CDVBase64Tests.m */,
-				EB89634915FE66EA00E12277 /* CDVInvokedUrlCommandTests.m */,
-				3062D1AD151D4D9D000D9128 /* CDVLocalStorageTests.m */,
-				686357B9141002F200DF4CF2 /* CDVPluginResultJSONSerializationTests.m */,
-				30356213141049E1006C2D43 /* CDVWhitelistTests.m */,
-				686357B1141002F200DF4CF2 /* Supporting Files */,
-			);
-			name = CordovaLibTests;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		303A4067152124BB00182201 /* CordovaLibApp */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 303A4082152124BB00182201 /* Build configuration list for PBXNativeTarget "CordovaLibApp" */;
-			buildPhases = (
-				303A4064152124BB00182201 /* Sources */,
-				303A4065152124BB00182201 /* Frameworks */,
-				303A4066152124BB00182201 /* Resources */,
-				30F8AE1615212883006625B3 /* Copy cordova.js into www directory */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				EB3B34E8161B552E003DBE7D /* PBXTargetDependency */,
-			);
-			name = CordovaLibApp;
-			productName = CordovaLibApp;
-			productReference = 303A4068152124BB00182201 /* CordovaLibApp.app */;
-			productType = "com.apple.product-type.application";
-		};
-		686357A8141002F100DF4CF2 /* CordovaLibTests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 686357BD141002F200DF4CF2 /* Build configuration list for PBXNativeTarget "CordovaLibTests" */;
-			buildPhases = (
-				686357A4141002F100DF4CF2 /* Sources */,
-				686357A5141002F100DF4CF2 /* Frameworks */,
-				686357A6141002F100DF4CF2 /* Resources */,
-				686357A7141002F100DF4CF2 /* ShellScript */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				7E73351417E27B4E00AB7A3F /* PBXTargetDependency */,
-				30F8AE3315212F07006625B3 /* PBXTargetDependency */,
-			);
-			name = CordovaLibTests;
-			productName = CordovaLibTests;
-			productReference = 686357A9141002F100DF4CF2 /* CordovaLibTests.xctest */;
-			productType = "com.apple.product-type.bundle.unit-test";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		0867D690FE84028FC02AAC07 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0510;
-			};
-			buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "CordovaTests" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 1;
-			knownRegions = (
-				English,
-				Japanese,
-				French,
-				German,
-				en,
-			);
-			mainGroup = 0867D691FE84028FC02AAC07 /* CordovaLib */;
-			productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
-			projectDirPath = "";
-			projectReferences = (
-				{
-					ProductGroup = EB3B34E2161B5454003DBE7D /* Products */;
-					ProjectRef = EB37018115D18B2D00BEBC43 /* CordovaLib.xcodeproj */;
-				},
-			);
-			projectRoot = "";
-			targets = (
-				686357A8141002F100DF4CF2 /* CordovaLibTests */,
-				303A4067152124BB00182201 /* CordovaLibApp */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXReferenceProxy section */
-		EB3B34E6161B5454003DBE7D /* libCordova.a */ = {
-			isa = PBXReferenceProxy;
-			fileType = archive.ar;
-			path = libCordova.a;
-			remoteRef = EB3B34E5161B5454003DBE7D /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-/* End PBXReferenceProxy section */
-
-/* Begin PBXResourcesBuildPhase section */
-		303A4066152124BB00182201 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				F8EB14D1165FFD3200616F39 /* config.xml in Resources */,
-				7EF33BD71911ABA20048544E /* Default-568h@2x.png in Resources */,
-				303A4072152124BB00182201 /* InfoPlist.strings in Resources */,
-				30F8AE1D152129DA006625B3 /* www in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		686357A6141002F100DF4CF2 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				686357B5141002F200DF4CF2 /* InfoPlist.strings in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		30F8AE1615212883006625B3 /* Copy cordova.js into www directory */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-				"",
-			);
-			name = "Copy cordova.js into www directory";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "cp ../CordovaLib/cordova.js \"$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME/www/cordova.js\"";
-			showEnvVarsInLog = 0;
-		};
-		686357A7141002F100DF4CF2 /* ShellScript */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
-		};
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		303A4064152124BB00182201 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				303A4074152124BB00182201 /* main.m in Sources */,
-				303A4078152124BB00182201 /* AppDelegate.m in Sources */,
-				303A407B152124BB00182201 /* ViewController.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		686357A4141002F100DF4CF2 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3035621714104C34006C2D43 /* CDVWhitelistTests.m in Sources */,
-				686357BA141002F200DF4CF2 /* CDVPluginResultJSONSerializationTests.m in Sources */,
-				3062D1AE151D4D9D000D9128 /* CDVLocalStorageTests.m in Sources */,
-				30B342F515224B360070E6A5 /* CDVWebViewTest.m in Sources */,
-				30D1B08C15A2B36D0060C291 /* CDVBase64Tests.m in Sources */,
-				EBA3554615A731F100F4DE24 /* CDVFakeFileManager.m in Sources */,
-				EB89634A15FE66EA00E12277 /* CDVInvokedUrlCommandTests.m in Sources */,
-				EB96677216ADBCF500D86CDF /* CDVUserAgentTest.m in Sources */,
-				7E91406017711D88002C6A3F /* CDVWebViewDelegateTests.m in Sources */,
-				30610C9219AD9B95000B3781 /* CDVCommandDelegateTests.m in Sources */,
-				EBA7F20517962CCD001A0CE6 /* CDVStartPageTests.m in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		30F8AE3315212F07006625B3 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 303A4067152124BB00182201 /* CordovaLibApp */;
-			targetProxy = 30F8AE3215212F07006625B3 /* PBXContainerItemProxy */;
-		};
-		7E73351417E27B4E00AB7A3F /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = CordovaLib;
-			targetProxy = 7E73351317E27B4E00AB7A3F /* PBXContainerItemProxy */;
-		};
-		EB3B34E8161B552E003DBE7D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			name = CordovaLib;
-			targetProxy = EB3B34E7161B552E003DBE7D /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
-		303A4070152124BB00182201 /* InfoPlist.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				303A4071152124BB00182201 /* en */,
-			);
-			name = InfoPlist.strings;
-			sourceTree = "<group>";
-		};
-		686357B3141002F200DF4CF2 /* InfoPlist.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				686357B4141002F200DF4CF2 /* en */,
-			);
-			name = InfoPlist.strings;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		1DEB922308733DC00010E9CD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = "";
-				GCC_THUMB_SUPPORT = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
-				LIBRARY_SEARCH_PATHS = "${DT_TOOLCHAIN_DIR}/usr/lib/arc";
-				ONLY_ACTIVE_ARCH = YES;
-				OTHER_CFLAGS = "-DDEBUG";
-				OTHER_LDFLAGS = (
-					"-all_load",
-					"-ObjC",
-				);
-				"OTHER_LDFLAGS[sdk=iphonesimulator*]" = (
-					"-all_load",
-					"-ObjC",
-					"-larclite_iphonesimulator",
-				);
-				PUBLIC_HEADERS_FOLDER_PATH = include/Cordova;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				USER_HEADER_SEARCH_PATHS = "Classes/**";
-			};
-			name = Debug;
-		};
-		1DEB922408733DC00010E9CD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				GCC_C_LANGUAGE_STANDARD = c99;
-				GCC_PREPROCESSOR_DEFINITIONS = "";
-				GCC_THUMB_SUPPORT = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
-				LIBRARY_SEARCH_PATHS = "${DT_TOOLCHAIN_DIR}/usr/lib/arc";
-				ONLY_ACTIVE_ARCH = NO;
-				OTHER_LDFLAGS = (
-					"-all_load",
-					"-ObjC",
-				);
-				"OTHER_LDFLAGS[sdk=iphonesimulator*]" = (
-					"-all_load",
-					"-ObjC",
-					"-larclite_iphonesimulator",
-				);
-				PUBLIC_HEADERS_FOLDER_PATH = include/Cordova;
-				SDKROOT = iphoneos;
-				SKIP_INSTALL = YES;
-				TARGETED_DEVICE_FAMILY = "1,2";
-				USER_HEADER_SEARCH_PATHS = "Classes/**";
-			};
-			name = Release;
-		};
-		303A4083152124BB00182201 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				COPY_PHASE_STRIP = NO;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(DEVELOPER_FRAMEWORKS_DIR)",
-				);
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				INFOPLIST_FILE = "CordovaLibApp/CordovaLibApp-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				USER_HEADER_SEARCH_PATHS = "Classes/** ../CordovaLib/Classes/**";
-				WRAPPER_EXTENSION = app;
-			};
-			name = Debug;
-		};
-		303A4084152124BB00182201 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				COPY_PHASE_STRIP = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(DEVELOPER_FRAMEWORKS_DIR)",
-				);
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_SYMBOLS_PRIVATE_EXTERN = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				INFOPLIST_FILE = "CordovaLibApp/CordovaLibApp-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
-				OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				USER_HEADER_SEARCH_PATHS = "Classes/** ../CordovaLib/Classes/**";
-				VALIDATE_PRODUCT = YES;
-				WRAPPER_EXTENSION = app;
-			};
-			name = Release;
-		};
-		686357BB141002F200DF4CF2 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/CordovaLibApp.app/CordovaLibApp";
-				CLANG_ENABLE_OBJC_ARC = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(SDKROOT)/Developer/Library/Frameworks",
-					"$(inherited)",
-					"$(DEVELOPER_FRAMEWORKS_DIR)",
-				);
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_THUMB_SUPPORT = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				INFOPLIST_FILE = "CordovaLibTests-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
-				ONLY_ACTIVE_ARCH = YES;
-				OTHER_LDFLAGS = (
-					"-all_load",
-					"-ObjC",
-				);
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUNDLE_LOADER)";
-				USER_HEADER_SEARCH_PATHS = "Classes/** ../CordovaLib/Classes/**";
-			};
-			name = Debug;
-		};
-		686357BC141002F200DF4CF2 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/CordovaLibApp.app/CordovaLibApp";
-				CLANG_ENABLE_OBJC_ARC = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(SDKROOT)/Developer/Library/Frameworks",
-					"$(inherited)",
-					"$(DEVELOPER_FRAMEWORKS_DIR)",
-				);
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_THUMB_SUPPORT = NO;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				INFOPLIST_FILE = "CordovaLibTests-Info.plist";
-				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
-				ONLY_ACTIVE_ARCH = NO;
-				OTHER_LDFLAGS = (
-					"-all_load",
-					"-ObjC",
-				);
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				TEST_HOST = "$(BUNDLE_LOADER)";
-				USER_HEADER_SEARCH_PATHS = "Classes/** ../CordovaLib/Classes/**";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "CordovaTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1DEB922308733DC00010E9CD /* Debug */,
-				1DEB922408733DC00010E9CD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		303A4082152124BB00182201 /* Build configuration list for PBXNativeTarget "CordovaLibApp" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				303A4083152124BB00182201 /* Debug */,
-				303A4084152124BB00182201 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		686357BD141002F200DF4CF2 /* Build configuration list for PBXNativeTarget "CordovaLibTests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				686357BB141002F200DF4CF2 /* Debug */,
-				686357BC141002F200DF4CF2 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
-}

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/CordovaLibTests/CordovaTests.xcodeproj/xcshareddata/xcschemes/CordovaLibApp.xcscheme
----------------------------------------------------------------------
diff --git a/CordovaLibTests/CordovaTests.xcodeproj/xcshareddata/xcschemes/CordovaLibApp.xcscheme b/CordovaLibTests/CordovaTests.xcodeproj/xcshareddata/xcschemes/CordovaLibApp.xcscheme
deleted file mode 100644
index 7f8499a..0000000
--- a/CordovaLibTests/CordovaTests.xcodeproj/xcshareddata/xcschemes/CordovaLibApp.xcscheme
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "303A4067152124BB00182201"
-               BuildableName = "CordovaLibApp.app"
-               BlueprintName = "CordovaLibApp"
-               ReferencedContainer = "container:CordovaTests.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "686357A8141002F100DF4CF2"
-               BuildableName = "CordovaLibTests.xctest"
-               BlueprintName = "CordovaLibTests"
-               ReferencedContainer = "container:CordovaTests.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "303A4067152124BB00182201"
-            BuildableName = "CordovaLibApp.app"
-            BlueprintName = "CordovaLibApp"
-            ReferencedContainer = "container:CordovaTests.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Debug"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      allowLocationSimulation = "YES">
-      <BuildableProductRunnable>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "303A4067152124BB00182201"
-            BuildableName = "CordovaLibApp.app"
-            BlueprintName = "CordovaLibApp"
-            ReferencedContainer = "container:CordovaTests.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-      <AdditionalOptions>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Release"
-      debugDocumentVersioning = "YES">
-      <BuildableProductRunnable>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "303A4067152124BB00182201"
-            BuildableName = "CordovaLibApp.app"
-            BlueprintName = "CordovaLibApp"
-            ReferencedContainer = "container:CordovaTests.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/CordovaLibTests/CordovaTests.xcodeproj/xcshareddata/xcschemes/CordovaLibTests.xcscheme
----------------------------------------------------------------------
diff --git a/CordovaLibTests/CordovaTests.xcodeproj/xcshareddata/xcschemes/CordovaLibTests.xcscheme b/CordovaLibTests/CordovaTests.xcodeproj/xcshareddata/xcschemes/CordovaLibTests.xcscheme
deleted file mode 100644
index 3557154..0000000
--- a/CordovaLibTests/CordovaTests.xcodeproj/xcshareddata/xcschemes/CordovaLibTests.xcscheme
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-   </BuildAction>
-   <TestAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      buildConfiguration = "Debug">
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "686357A8141002F100DF4CF2"
-               BuildableName = "CordovaLibTests.xctest"
-               BlueprintName = "CordovaLibTests"
-               ReferencedContainer = "container:CordovaTests.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Debug"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      allowLocationSimulation = "YES">
-      <AdditionalOptions>
-         <AdditionalOption
-            key = "DYLD_INSERT_LIBRARIES"
-            value = "/usr/lib/libgmalloc.dylib"
-            isEnabled = "YES">
-         </AdditionalOption>
-         <AdditionalOption
-            key = "NSZombieEnabled"
-            value = "YES"
-            isEnabled = "YES">
-         </AdditionalOption>
-      </AdditionalOptions>
-   </LaunchAction>
-   <ProfileAction
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Release"
-      debugDocumentVersioning = "YES">
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/CordovaLibTests/Default-568h@2x.png
----------------------------------------------------------------------
diff --git a/CordovaLibTests/Default-568h@2x.png b/CordovaLibTests/Default-568h@2x.png
deleted file mode 100644
index 0891b7a..0000000
Binary files a/CordovaLibTests/Default-568h@2x.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/CordovaLibTests/en.lproj/InfoPlist.strings
----------------------------------------------------------------------
diff --git a/CordovaLibTests/en.lproj/InfoPlist.strings b/CordovaLibTests/en.lproj/InfoPlist.strings
deleted file mode 100644
index 01d5c8c..0000000
--- a/CordovaLibTests/en.lproj/InfoPlist.strings
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
- 
- http://www.apache.org/licenses/LICENSE-2.0
- 
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
- */
-/* Localized versions of Info.plist keys */
-

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVBase64Tests.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVBase64Tests.m b/tests/CordovaLibTests/CDVBase64Tests.m
new file mode 100644
index 0000000..744601f
--- /dev/null
+++ b/tests/CordovaLibTests/CDVBase64Tests.m
@@ -0,0 +1,64 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <XCTest/XCTest.h>
+
+#import "NSData+Base64.h"
+
+@interface CDVBase64Tests : XCTestCase
+@end
+
+@implementation CDVBase64Tests
+
+- (void)setUp
+{
+    [super setUp];
+
+    // setup code here
+}
+
+- (void)tearDown
+{
+    // Tear-down code here.
+
+    [super tearDown];
+}
+
+- (void)testBase64Encode
+{
+    NSString* decodedString = @"abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&";
+    NSData* decodedData = [decodedString dataUsingEncoding:NSUTF8StringEncoding];
+
+    NSString* expectedEncodedString = @"YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwIUAjJCVeJg==";
+    NSString* actualEncodedString = [decodedData base64EncodedString];
+
+    XCTAssertTrue([expectedEncodedString isEqualToString:actualEncodedString]);
+}
+
+- (void)testBase64Decode
+{
+    NSString* encodedString = @"YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwIUAjJCVeJg==";
+    NSString* decodedString = @"abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&";
+    NSData* encodedData = [decodedString dataUsingEncoding:NSUTF8StringEncoding];
+    NSData* decodedData = [NSData dataFromBase64String:encodedString];
+
+    XCTAssertTrue([encodedData isEqualToData:decodedData]);
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVCommandDelegateTests.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVCommandDelegateTests.m b/tests/CordovaLibTests/CDVCommandDelegateTests.m
new file mode 100644
index 0000000..85768a9
--- /dev/null
+++ b/tests/CordovaLibTests/CDVCommandDelegateTests.m
@@ -0,0 +1,57 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <XCTest/XCTest.h>
+#import <Cordova/CDVCommandDelegateImpl.h>
+
+@interface CDVCommandDelegateTests : XCTestCase
+
+@end
+
+@interface CDVCommandDelegateImpl ()
+
+// expose private interface
+- (BOOL)isValidCallbackId:(NSString*)callbackId;
+
+@end
+
+@implementation CDVCommandDelegateTests
+
+- (void)setUp
+{
+    [super setUp];
+    // Put setup code here. This method is called before the invocation of each test method in the class.
+}
+
+- (void)tearDown
+{
+    // Put teardown code here. This method is called after the invocation of each test method in the class.
+    [super tearDown];
+}
+
+- (void)testNullCallbackId
+{
+    CDVCommandDelegateImpl* impl = [[CDVCommandDelegateImpl alloc] initWithViewController:nil];
+
+    NSString* callbackId = nil;
+
+    XCTAssertFalse([impl isValidCallbackId:callbackId], @"A nil callbackId should be not valid");
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVFakeFileManager.h
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVFakeFileManager.h b/tests/CordovaLibTests/CDVFakeFileManager.h
new file mode 100644
index 0000000..f9300a0
--- /dev/null
+++ b/tests/CordovaLibTests/CDVFakeFileManager.h
@@ -0,0 +1,35 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+typedef BOOL (^ CDVFileExistsBlock)(NSString*);
+
+// Used in place of an NSFileManager for unit tests. It implements only those functions
+// which are required by the tests that use it.
+@interface CDVFakeFileManager : NSObject {
+    @private
+    CDVFileExistsBlock _fileExistsBlock;
+}
+
+- (id)initWithFileExistsBlock:(CDVFileExistsBlock)fileExistsBlock;
++ (id)managerWithFileExistsBlock:(CDVFileExistsBlock)fileExistsBlock;
+
+- (BOOL)fileExistsAtPath:(NSString*)path;
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVFakeFileManager.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVFakeFileManager.m b/tests/CordovaLibTests/CDVFakeFileManager.m
new file mode 100644
index 0000000..50ecd43
--- /dev/null
+++ b/tests/CordovaLibTests/CDVFakeFileManager.m
@@ -0,0 +1,43 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import "CDVFakeFileManager.h"
+
+@implementation CDVFakeFileManager
+
+- (id)initWithFileExistsBlock:(CDVFileExistsBlock)fileExistsBlock
+{
+    self = [super init];
+    if (self != nil) {
+        _fileExistsBlock = [fileExistsBlock copy];
+    }
+    return self;
+}
+
++ (id)managerWithFileExistsBlock:(CDVFileExistsBlock)fileExistsBlock
+{
+    return [[CDVFakeFileManager alloc] initWithFileExistsBlock:fileExistsBlock];
+}
+
+- (BOOL)fileExistsAtPath:(NSString*)path
+{
+    return _fileExistsBlock(path);
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVInvokedUrlCommandTests.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVInvokedUrlCommandTests.m b/tests/CordovaLibTests/CDVInvokedUrlCommandTests.m
new file mode 100644
index 0000000..3f8dd18
--- /dev/null
+++ b/tests/CordovaLibTests/CDVInvokedUrlCommandTests.m
@@ -0,0 +1,51 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <XCTest/XCTest.h>
+
+#import "CDVInvokedUrlCommand.h"
+
+@interface CDVInvokedUrlCommandTests : XCTestCase
+@end
+
+@implementation CDVInvokedUrlCommandTests
+
+- (void)testInitWithNoArgs
+{
+    NSArray* jsonArr = [NSArray arrayWithObjects:@"callbackId", @"className", @"methodName", [NSArray array], nil];
+    CDVInvokedUrlCommand* command = [CDVInvokedUrlCommand commandFromJson:jsonArr];
+
+    XCTAssertEqual(@"callbackId", command.callbackId);
+    XCTAssertEqual(@"className", command.className);
+    XCTAssertEqual(@"methodName", command.methodName);
+    XCTAssertEqual([NSArray array], command.arguments);
+}
+
+- (void)testArgumentAtIndex
+{
+    NSArray* jsonArr = [NSArray arrayWithObjects:[NSNull null], @"className", @"methodName", [NSArray array], nil];
+    CDVInvokedUrlCommand* command = [CDVInvokedUrlCommand commandFromJson:jsonArr];
+
+    XCTAssertNil([command argumentAtIndex:0], @"NSNull to nil");
+    XCTAssertNil([command argumentAtIndex:100], @"Invalid index to nil");
+    XCTAssertEqual(@"default", [command argumentAtIndex:0 withDefault:@"default"], @"NSNull to default");
+    XCTAssertEqual(@"default", [command argumentAtIndex:100 withDefault:@"default"], @"Invalid index to default");
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVLocalStorageTests.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVLocalStorageTests.m b/tests/CordovaLibTests/CDVLocalStorageTests.m
new file mode 100644
index 0000000..f664508
--- /dev/null
+++ b/tests/CordovaLibTests/CDVLocalStorageTests.m
@@ -0,0 +1,146 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <XCTest/XCTest.h>
+
+#import "CDVLocalStorage.h"
+#import "CDVWebViewTest.h"
+#import "CDVFakeFileManager.h"
+#import "ViewController.h"
+
+@interface CDVLocalStorageTests : CDVWebViewTest
+                                  // Deletes LocalStorage files from disk.
+- (void)deleteOriginals:(BOOL)originals backups:(BOOL)backups;
+// Returns the CDVLocalStorage instance from the plugins dict.
+- (CDVLocalStorage*)localStorage;
+@end
+
+@implementation CDVLocalStorageTests
+
+- (void)setUp
+{
+    [super setUp];
+    // Clear these on setUp as well in case they were left around.
+    [self deleteOriginals:YES backups:YES];
+}
+
+- (void)tearDown
+{
+    // Don't leave any localStorage files around.
+    [self deleteOriginals:YES backups:YES];
+    [super tearDown];
+}
+
+- (CDVLocalStorage*)localStorage
+{
+    return [self pluginInstance:@"LocalStorage"];
+}
+
+- (void)deleteOriginals:(BOOL)originals backups:(BOOL)backups
+{
+    NSFileManager* fileManager = [NSFileManager defaultManager];
+
+    for (CDVBackupInfo* info in [self localStorage].backupInfo) {
+        if (originals) {
+            [fileManager removeItemAtPath:info.original error:nil];
+        }
+        if (backups) {
+            [fileManager removeItemAtPath:info.backup error:nil];
+        }
+    }
+}
+
+- (void)disabled_testBackupAndRestore
+{
+    CDVLocalStorage* localStorage = [self localStorage];
+
+    [self waitForConditionName:@"shouldBackup" block:^{
+        [self evalJs:@"localStorage.setItem('foo', 'bar')"];
+        return [localStorage shouldBackup];
+    }];
+    [localStorage backup:[CDVInvokedUrlCommand new]];
+    XCTAssertFalse([localStorage shouldBackup], @"Should have backed up.");
+
+    // It would be nice to be able to test that the restore functionality
+    // alters what localStorage.getItem('foo') returns, but it seems as though
+    // the WebView maintains an in-memory cache of what's in LocalStorage even
+    // after we delete the underlying files and recreate the view.
+
+    // Instead, we just test the file copying logic.
+    [self deleteOriginals:YES backups:NO];
+    XCTAssertTrue([localStorage shouldRestore], @"Should restore after deleting originals");
+    [localStorage restore:[CDVInvokedUrlCommand new]];
+    XCTAssertFalse([localStorage shouldRestore], @"Restore did not complete successfully");
+}
+
+- (void)testVerifyAndFixDatabaseLocations_noChangeRequired
+{
+    NSString* const kBundlePath = @"/bpath";
+    id fakeFileManager = [CDVFakeFileManager managerWithFileExistsBlock:^(NSString* path) {
+            XCTFail(@"fileExists called.");
+            return NO;
+        }];
+    NSMutableDictionary* appPlistDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+        @"/bpath/foo", @"WebKitLocalStorageDatabasePathPreferenceKey",
+        @"/bpath/foo", @"WebDatabaseDirectory",
+        nil];
+    BOOL modified = [CDVLocalStorage __verifyAndFixDatabaseLocationsWithAppPlistDict:appPlistDict
+                                                                          bundlePath:kBundlePath
+                                                                         fileManager:fakeFileManager];
+
+    XCTAssertFalse(modified, @"Should not have applied fix.");
+}
+
+- (void)testVerifyAndFixDatabaseLocations_changeRequired1
+{
+    NSString* const kBundlePath = @"/bpath";
+    id fakeFileManager = [CDVFakeFileManager managerWithFileExistsBlock:^(NSString* path) {
+            return YES;
+        }];
+    NSMutableDictionary* appPlistDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+        @"/foo", @"WebKitLocalStorageDatabasePathPreferenceKey",
+        nil];
+    BOOL modified = [CDVLocalStorage __verifyAndFixDatabaseLocationsWithAppPlistDict:appPlistDict
+                                                                          bundlePath:kBundlePath
+                                                                         fileManager:fakeFileManager];
+
+    XCTAssertTrue(modified, @"Should have applied fix.");
+    NSString* newPath = [appPlistDict objectForKey:@"WebKitLocalStorageDatabasePathPreferenceKey"];
+    XCTAssertTrue([@"/bpath/Library/Caches" isEqualToString: newPath]);
+}
+
+- (void)testVerifyAndFixDatabaseLocations_changeRequired2
+{
+    NSString* const kBundlePath = @"/bpath";
+    id fakeFileManager = [CDVFakeFileManager managerWithFileExistsBlock:^(NSString* path) {
+            return NO;
+        }];
+    NSMutableDictionary* appPlistDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+        @"/foo", @"WebDatabaseDirectory",
+        nil];
+    BOOL modified = [CDVLocalStorage __verifyAndFixDatabaseLocationsWithAppPlistDict:appPlistDict
+                                                                          bundlePath:kBundlePath
+                                                                         fileManager:fakeFileManager];
+
+    XCTAssertTrue(modified, @"Should have applied fix.");
+    NSString* newPath = [appPlistDict objectForKey:@"WebDatabaseDirectory"];
+    XCTAssertTrue([@"/bpath/Library/WebKit" isEqualToString: newPath]);
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVPluginResultJSONSerializationTests.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVPluginResultJSONSerializationTests.m b/tests/CordovaLibTests/CDVPluginResultJSONSerializationTests.m
new file mode 100644
index 0000000..48eaa82
--- /dev/null
+++ b/tests/CordovaLibTests/CDVPluginResultJSONSerializationTests.m
@@ -0,0 +1,144 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import <XCTest/XCTest.h>
+
+#import "CDVPluginResult.h"
+#import "CDVJSON.h"
+
+@interface CDVPluginResultJSONSerializationTests : XCTestCase
+@end
+
+@implementation CDVPluginResultJSONSerializationTests
+
+- (void)testSerializingMessageAsInt
+{
+    int val = 5;
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:val];
+
+    XCTAssertTrue([[NSNumber numberWithInt:val] isEqual:[[result argumentsAsJSON] JSONFragment]]);
+}
+
+- (void)testSerializingMessageAsDouble
+{
+    double val = 5.5;
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDouble:val];
+
+    XCTAssertTrue([[NSNumber numberWithDouble:val] isEqual:[[result argumentsAsJSON] JSONFragment]]);
+}
+
+- (void)testSerializingMessageAsBool
+{
+    BOOL val = YES;
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:val];
+
+    XCTAssertTrue([[NSNumber numberWithBool:val] isEqual:[[result argumentsAsJSON] JSONFragment]]);
+}
+
+- (void)testSerializingMessageAsArray
+{
+    NSArray* testValues = [NSArray arrayWithObjects:
+        [NSNull null],
+        @"string",
+        [NSNumber numberWithInt:5],
+        [NSNumber numberWithDouble:5.5],
+        [NSNumber numberWithBool:true],
+        nil];
+
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:testValues];
+    NSArray* arr = [[result argumentsAsJSON] JSONObject];
+
+    XCTAssertTrue([arr isKindOfClass:[NSArray class]]);
+    XCTAssertTrue([testValues count] == [arr count]);
+
+    for (NSInteger i = 0; i < [testValues count]; i++) {
+        XCTAssertTrue([[testValues objectAtIndex:i] isEqual:[arr objectAtIndex:i]]);
+    }
+}
+
+- (void)__testDictionary:(NSDictionary*)dictA withDictionary:(NSDictionary*)dictB
+{
+    XCTAssertTrue([dictA isKindOfClass:[NSDictionary class]]);
+    XCTAssertTrue([dictB isKindOfClass:[NSDictionary class]]);
+
+    XCTAssertTrue([[dictA allKeys] count] == [[dictB allKeys] count]);
+
+    for (NSInteger i = 0; i < [dictA count]; i++) {
+        id keyA = [[dictA allKeys] objectAtIndex:i];
+        id objA = [dictA objectForKey:keyA];
+        id objB = [dictB objectForKey:keyA];
+
+        XCTAssertTrue([[dictB allKeys] containsObject:keyA]); // key exists
+        if ([objA isKindOfClass:[NSDictionary class]]) {
+            [self __testDictionary:objA withDictionary:objB];
+        } else {
+            XCTAssertTrue([objA isEqual:objB]); // key's value equality
+        }
+    }
+}
+
+- (void)testSerializingMessageAsDictionary
+{
+    NSMutableDictionary* testValues = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+        [NSNull null], @"nullItem",
+        @"string", @"stringItem",
+        [NSNumber numberWithInt:5], @"intItem",
+        [NSNumber numberWithDouble:5.5], @"doubleItem",
+        [NSNumber numberWithBool:true], @"boolItem",
+        nil];
+
+    NSDictionary* nestedDict = [testValues copy];
+
+    [testValues setValue:nestedDict forKey:@"nestedDict"];
+
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:testValues];
+    NSDictionary* dic = [[result argumentsAsJSON] JSONObject];
+
+    [self __testDictionary:testValues withDictionary:dic];
+}
+
+- (void)testSerializingMessageAsErrorCode
+{
+    NSMutableDictionary* testValues = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+        [NSNumber numberWithInt:1], @"code",
+        nil];
+
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageToErrorObject:1];
+
+    [self __testDictionary:testValues withDictionary:[[result argumentsAsJSON] JSONObject]];
+}
+
+- (void)testSerializingMessageAsStringContainingQuotes
+{
+    NSString* quotedString = @"\"quoted\"";
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:quotedString];
+
+    XCTAssertTrue([quotedString isEqualToString:[[result argumentsAsJSON] JSONFragment]]);
+}
+
+- (void)testSerializingMessageAsStringThatIsNil
+{
+    NSString* nilString = nil;
+    CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:nilString];
+
+    XCTAssertTrue([[NSNull null] isEqual:[[result argumentsAsJSON] JSONFragment]]);
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVStartPageTests.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVStartPageTests.m b/tests/CordovaLibTests/CDVStartPageTests.m
new file mode 100644
index 0000000..452e4f8
--- /dev/null
+++ b/tests/CordovaLibTests/CDVStartPageTests.m
@@ -0,0 +1,95 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <XCTest/XCTest.h>
+
+#import "CDVWebViewTest.h"
+#import "CDVViewController.h"
+#import "AppDelegate.h"
+
+@interface CDVStartPageTestViewController : UIViewController
+@property (strong, nonatomic) CDVViewController* vc1;
+@property (strong, nonatomic) CDVViewController* vc2;
+@end
+
+@implementation CDVStartPageTestViewController
+@synthesize vc1 = _vc1, vc2 = _vc2;
+
+- (void)loadView
+{
+    _vc1 = [[CDVViewController alloc] init];
+    _vc1.wwwFolderName = @"www";
+    _vc1.startPage = @"index.html";
+    [self addChildViewController:_vc1];
+
+    _vc2 = [[CDVViewController alloc] init];
+    _vc2.wwwFolderName = @"www";
+    _vc2.startPage = @"index.html?delta=true";
+    [self addChildViewController:_vc2];
+
+    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
+    UIView* contentView = [[UIView alloc] initWithFrame:applicationFrame];
+
+    CGRect sub1, sub2;
+    CGRectDivide(applicationFrame, &sub1, &sub2, applicationFrame.size.height / 2, CGRectMinYEdge);
+    [_vc1.view setBounds:sub1];
+    [_vc2.view setBounds:sub2];
+
+    [contentView addSubview:_vc1.view];
+    [contentView addSubview:_vc2.view];
+
+    self.view = contentView;
+}
+
+@end
+
+@interface CDVStartPageTest : CDVWebViewTest
+@end
+
+@implementation CDVStartPageTest
+
+- (void)setUp
+{
+    [super setUp];
+}
+
+- (void)tearDown
+{
+    [super tearDown];
+}
+
+- (void)testParametersInStartPage
+{
+    CDVStartPageTestViewController* rootVc = [[CDVStartPageTestViewController alloc] init];
+
+    self.appDelegate.window.rootViewController = rootVc;
+
+    NSString* geHREF = @"window.location.href";
+    [self waitForConditionName:@"getting href" block:^{
+        return (BOOL)(rootVc.vc1.webView.request != nil && rootVc.vc1.webView.request != nil);
+    }];
+
+    NSString* href = [rootVc.vc1.webView stringByEvaluatingJavaScriptFromString:geHREF];
+    XCTAssertTrue([href hasSuffix:@"index.html"], @"href should point to index.html");
+
+    href = [rootVc.vc2.webView stringByEvaluatingJavaScriptFromString:geHREF];
+    XCTAssertTrue([href hasSuffix:@"index.html?delta=true"], @"href should point to index.html?delta=true");
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVUserAgentTest.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVUserAgentTest.m b/tests/CordovaLibTests/CDVUserAgentTest.m
new file mode 100644
index 0000000..1a68364
--- /dev/null
+++ b/tests/CordovaLibTests/CDVUserAgentTest.m
@@ -0,0 +1,93 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <XCTest/XCTest.h>
+
+#import "CDVWebViewTest.h"
+#import "CDVViewController.h"
+#import "AppDelegate.h"
+
+@interface CDVUserAgentTestViewController : UIViewController
+@property (nonatomic) CDVViewController* vc1;
+@property (nonatomic) CDVViewController* vc2;
+@end
+
+@implementation CDVUserAgentTestViewController
+@synthesize vc1 = _vc1, vc2 = _vc2;
+
+- (void)loadView
+{
+    _vc1 = [[CDVViewController alloc] init];
+    _vc1.wwwFolderName = @"www";
+    _vc1.startPage = @"index.html";
+    [self addChildViewController:_vc1];
+
+    _vc2 = [[CDVViewController alloc] init];
+    _vc2.wwwFolderName = @"www";
+    _vc2.startPage = @"index.html";
+    [self addChildViewController:_vc2];
+
+    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
+    UIView* contentView = [[UIView alloc] initWithFrame:applicationFrame];
+
+    CGRect sub1, sub2;
+    CGRectDivide(applicationFrame, &sub1, &sub2, applicationFrame.size.height / 2, CGRectMinYEdge);
+    [_vc1.view setBounds:sub1];
+    [_vc2.view setBounds:sub2];
+
+    [contentView addSubview:_vc1.view];
+    [contentView addSubview:_vc2.view];
+
+    self.view = contentView;
+}
+
+@end
+
+@interface CDVUserAgentTest : CDVWebViewTest
+@end
+
+@implementation CDVUserAgentTest
+
+- (void)setUp
+{
+    [super setUp];
+}
+
+- (void)tearDown
+{
+    [super tearDown];
+}
+
+- (void)testMultipleViews
+{
+    CDVUserAgentTestViewController* rootVc = [[CDVUserAgentTestViewController alloc] init];
+
+    self.appDelegate.window.rootViewController = rootVc;
+
+    NSString* getUserAgentCode = @"navigator.userAgent";
+    [self waitForConditionName:@"getting user-agents" block:^{
+        return (BOOL)(rootVc.vc1.webView.request != nil && rootVc.vc2.webView.request != nil);
+    }];
+    NSString* ua1 = [rootVc.vc1.webView stringByEvaluatingJavaScriptFromString:getUserAgentCode];
+    NSString* ua2 = [rootVc.vc2.webView stringByEvaluatingJavaScriptFromString:getUserAgentCode];
+
+    XCTAssertFalse([ua1 isEqual:ua2], @"User-Agents should be different.");
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVWebViewDelegateTests.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVWebViewDelegateTests.m b/tests/CordovaLibTests/CDVWebViewDelegateTests.m
new file mode 100644
index 0000000..7edd189
--- /dev/null
+++ b/tests/CordovaLibTests/CDVWebViewDelegateTests.m
@@ -0,0 +1,103 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <XCTest/XCTest.h>
+
+#import <Cordova/CDVWebViewDelegate.h>
+
+@interface CDVWebViewDelegate ()
+
+// expose private interface
+- (BOOL)shouldLoadRequest:(NSURLRequest*)request;
+
+@end
+
+@interface CDVWebViewDelegateTests : XCTestCase
+@end
+
+@implementation CDVWebViewDelegateTests
+
+- (void)setUp
+{
+    [super setUp];
+}
+
+- (void)tearDown
+{
+    [super tearDown];
+}
+
+- (void)testShouldLoadRequest
+{
+    CDVWebViewDelegate* wvd = [[CDVWebViewDelegate alloc] initWithDelegate:nil]; // not really testing delegate handling
+
+    NSURLRequest* mailtoUrl = [NSURLRequest requestWithURL:[NSURL URLWithString:@"mailto:dev@cordova.apache.org"]];
+    NSURLRequest* telUrl = [NSURLRequest requestWithURL:[NSURL URLWithString:@"tel:12345"]];
+    NSURLRequest* plainUrl = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://apache.org"]];
+
+    XCTAssertTrue([wvd shouldLoadRequest:mailtoUrl], @"mailto urls should be allowed");
+    XCTAssertTrue([wvd shouldLoadRequest:telUrl], @"tel urls should be allowed");
+    // as long as this is in the whitelist it should pass
+    XCTAssertTrue([wvd shouldLoadRequest:plainUrl], @"http urls should be allowed");
+}
+
+- (void)testFragmentIdentifiersWithHttpUrl
+{
+    [self doTestFragmentIdentifiersWithBaseUrl:@"http://cordova.apache.org" fragment:@"myfragment"];
+}
+
+- (void)testFragmentIdentifiersWithFileUrl
+{
+    [self doTestFragmentIdentifiersWithBaseUrl:@"file:///var/mobile/GASGEQGQsdga3313/www/index.html" fragment:@"myfragment"];
+}
+
+- (void)testFragmentIdentifiersWithFileUrlAndMalformedFragment
+{
+    [self doTestFragmentIdentifiersWithBaseUrl:@"file:///var/mobile/GASGEQGQsdga3313/www/index.html" fragment:@"/var/mobile/GASGEQGQsdga3313/www/index.html"];
+}
+
+- (void)doTestFragmentIdentifiersWithBaseUrl:(NSString*)baseUrl fragment:(NSString*)fragment
+{
+    CDVWebViewDelegate* wvd = [[CDVWebViewDelegate alloc] initWithDelegate:nil]; // not really testing delegate handling
+
+    NSString* originalUrlString = baseUrl;
+    NSURL* originalUrl = [NSURL URLWithString:originalUrlString];
+    NSURL* originalUrlWithFragmentOnly = [NSURL URLWithString:[NSString stringWithFormat:@"%@#%@", originalUrlString, fragment]];
+    NSURL* originalUrlWithFragmentOnlyNoIdentifier = [NSURL URLWithString:[NSString stringWithFormat:@"%@#", originalUrlString]];
+    NSURL* originalUrlWithQueryParamsAndFragment = [NSURL URLWithString:[NSString stringWithFormat:@"%@?foo=bar#%@", originalUrlString, fragment]];
+
+    NSURLRequest* originalRequest = [NSURLRequest requestWithURL:originalUrl];
+    NSURLRequest* originalRequestWithFragmentOnly = [NSURLRequest requestWithURL:originalUrlWithFragmentOnly];
+    NSURLRequest* originalRequestWithFragmentOnlyNoIdentifier = [NSURLRequest requestWithURL:originalUrlWithFragmentOnlyNoIdentifier];
+    NSURLRequest* originalRequestWithQueryParamsAndFragment = [NSURLRequest requestWithURL:originalUrlWithQueryParamsAndFragment];
+    NSURLRequest* notOriginalRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://httpd.apache.org"]];
+
+    XCTAssertTrue([wvd request:originalRequest isEqualToRequestAfterStrippingFragments:originalRequest], @"originalRequest should be a be equal to originalRequest after stripping fragments");
+    XCTAssertTrue([wvd request:originalRequestWithFragmentOnly isEqualToRequestAfterStrippingFragments:originalRequest], @"originalRequestWithFragment should be equal to originalRequest after stripping fragment");
+    XCTAssertTrue([wvd request:originalRequestWithFragmentOnlyNoIdentifier isEqualToRequestAfterStrippingFragments:originalRequest], @"originalRequestWithFragmentNoIdentifier should be equal to originalRequest after stripping fragment");
+    XCTAssertFalse([wvd request:originalRequestWithQueryParamsAndFragment isEqualToRequestAfterStrippingFragments:originalRequest], @"originalRequestWithQueryParamsAndFragment should not be equal to originalRequest after stripping fragment");
+    XCTAssertFalse([wvd request:notOriginalRequest isEqualToRequestAfterStrippingFragments:originalRequest], @"notOriginalRequest should not be equal to originalRequest after stripping fragment");
+
+    // equality tests
+    XCTAssertTrue([wvd request:originalRequestWithFragmentOnly isEqualToRequestAfterStrippingFragments:originalRequestWithFragmentOnly], @"originalRequestWithFragment should be a equal to itself after stripping fragments");
+    XCTAssertTrue([wvd request:originalRequestWithFragmentOnlyNoIdentifier isEqualToRequestAfterStrippingFragments:originalRequestWithFragmentOnlyNoIdentifier], @"originalRequestWithFragmentNoIdentifier should be a equal to itself after stripping fragments");
+    XCTAssertTrue([wvd request:originalRequestWithQueryParamsAndFragment isEqualToRequestAfterStrippingFragments:originalRequestWithQueryParamsAndFragment], @"originalRequestWithQueryParamsAndFragment should be equal to itself after stripping fragments");
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVWebViewTest.h
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVWebViewTest.h b/tests/CordovaLibTests/CDVWebViewTest.h
new file mode 100644
index 0000000..e11b825
--- /dev/null
+++ b/tests/CordovaLibTests/CDVWebViewTest.h
@@ -0,0 +1,43 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import <XCTest/XCTest.h>
+#import <UIKit/UIKit.h>
+
+@class AppDelegate;
+@class CDVViewController;
+
+@interface CDVWebViewTest : XCTestCase
+
+@property (nonatomic, strong) UIWebView* webView;
+
+- (AppDelegate*)appDelegate;
+- (CDVViewController*)viewController;
+- (UIWebView*)webView;
+
+// Returns the already registered plugin object for the given class.
+- (id)pluginInstance:(NSString*)pluginName;
+// Destroys the existing webview and creates a new one.
+- (void)reloadWebView;
+// Runs the run loop until the given block returns true, or until a timeout
+// occurs.
+- (void)waitForConditionName:(NSString*)conditionName block:(BOOL (^)())block;
+// Convenience function for stringByEvaluatingJavaScriptFromString.
+- (NSString*)evalJs:(NSString*)code;
+@end

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/cba612ff/tests/CordovaLibTests/CDVWebViewTest.m
----------------------------------------------------------------------
diff --git a/tests/CordovaLibTests/CDVWebViewTest.m b/tests/CordovaLibTests/CDVWebViewTest.m
new file mode 100644
index 0000000..c395f48
--- /dev/null
+++ b/tests/CordovaLibTests/CDVWebViewTest.m
@@ -0,0 +1,122 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+#import "CDVWebViewTest.h"
+
+#import "AppDelegate.h"
+#import "ViewController.h"
+
+@interface CDVWebViewTest ()
+// Runs the run loop until the webview has finished loading.
+- (void)waitForPageLoad;
+@end
+
+@implementation CDVWebViewTest
+
+@synthesize webView;
+
+- (void)setUp
+{
+    [super setUp];
+    // Stop tests on the first failed assertion. Having the test stop on the
+    // first exception makes it much easier to identify the source of the error.
+    // On iOS < 5 there is a bug in SenTestingKit where the exception is
+    // uncaught and the app crashes upon a failed STAssert (oh well).
+    //[self raiseAfterFailure];
+}
+
+- (void)tearDown
+{
+    // Enforce that the view controller is released between tests to ensure
+    // tests don't affect each other.
+    [self.appDelegate destroyViewController];
+    [super tearDown];
+}
+
+- (AppDelegate*)appDelegate
+{
+    return [[UIApplication sharedApplication] delegate];
+}
+
+- (CDVViewController*)viewController
+{
+    // Lazily create the view controller so that tests that do not require it
+    // are not slowed down by it.
+    if (self.appDelegate.viewController == nil) {
+        [self.appDelegate createViewController];
+        // Things break if tearDown is called before the page has finished
+        // loading (a JS error happens and an alert pops up), so enforce a wait
+        // here.
+        [self waitForPageLoad];
+    }
+    XCTAssertNotNil(self.appDelegate.viewController, @"createViewController failed");
+    return self.appDelegate.viewController;
+}
+
+- (UIWebView*)webView
+{
+    return self.viewController.webView;
+}
+
+- (id)pluginInstance:(NSString*)pluginName
+{
+    id ret = [self.viewController getCommandInstance:pluginName];
+
+    XCTAssertNotNil(ret, @"Missing plugin %@", pluginName);
+    return ret;
+}
+
+- (void)reloadWebView
+{
+    [self.appDelegate destroyViewController];
+    [self.appDelegate createViewController];
+}
+
+- (void)waitForConditionName:(NSString*)conditionName block:(BOOL (^)())block
+{
+    // Number of seconds to wait for a condition to become true before giving up.
+    const NSTimeInterval kConditionTimeout = 5.0;
+    // Useful when debugging so that it does not timeout after one loop.
+    const int kMinIterations = 4;
+
+    NSDate* startTime = [NSDate date];
+    int i = 0;
+
+    while (!block()) {
+        [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
+        NSTimeInterval elapsed = -[startTime timeIntervalSinceNow];
+        XCTAssertTrue(i < kMinIterations || elapsed < kConditionTimeout,
+            @"Timed out waiting for condition %@", conditionName);
+        ++i;
+    }
+}
+
+- (void)waitForPageLoad
+{
+    [self waitForConditionName:@"PageLoad" block:^{
+        return [@"true" isEqualToString :[self evalJs:@"window.pageIsLoaded"]];
+    }];
+}
+
+- (NSString*)evalJs:(NSString*)code
+{
+    return [self.webView stringByEvaluatingJavaScriptFromString:code];
+}
+
+@end


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org