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-5...@2x.png in Resources */ 
= {isa = PBXBuildFile; fileRef = 7EF33BD61911ABA20048544E /* 
default-5...@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-5...@2x.png */ = {isa = 
PBXFileReference; lastKnownFileType = image.png; path = "default-5...@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-5...@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-5...@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-5...@2x.png
----------------------------------------------------------------------
diff --git a/CordovaLibTests/default-5...@2x.png 
b/CordovaLibTests/default-5...@2x.png
deleted file mode 100644
index 0891b7a..0000000
Binary files a/CordovaLibTests/default-5...@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:d...@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-unsubscr...@cordova.apache.org
For additional commands, e-mail: commits-h...@cordova.apache.org

Reply via email to