You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by an...@apache.org on 2013/07/11 23:50:13 UTC
[13/43] git commit: Added tests for windows phone
Added tests for windows phone
Project: http://git-wip-us.apache.org/repos/asf/cordova-plugman/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugman/commit/a13d5f5e
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/a13d5f5e
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/a13d5f5e
Branch: refs/heads/plugman-registry
Commit: a13d5f5e2c7922f739e11dbbd07948ca8eb74d52
Parents: 84d14f8
Author: bennmapes <be...@gmail.com>
Authored: Thu Jul 4 15:00:17 2013 -0700
Committer: Benn Mapes <Be...@host49-67.wifi.ubc.ca>
Committed: Thu Jul 4 15:16:05 2013 -0700
----------------------------------------------------------------------
spec/platforms/wp7.spec.js | 128 ++++++++++++
spec/platforms/wp8.spec.js | 128 ++++++++++++
spec/plugins/DummyPlugin/plugin.xml | 25 +++
spec/plugins/DummyPlugin/src/wp7/DummyPlugin.cs | 19 ++
spec/plugins/DummyPlugin/src/wp8/DummyPlugin.cs | 19 ++
spec/plugins/FaultyPlugin/plugin.xml | 28 +++
.../FaultyPlugin/src/wp7/FaultyPlugin.cs | 19 ++
.../FaultyPlugin/src/wp8/FaultyPlugin.cs | 19 ++
spec/projects/wp7/CordovaAppProj.csproj | 105 ----------
spec/projects/wp7/Properties/WMAppManifest.xml | 28 +++
spec/projects/wp8/An_App.csproj | 201 +++++++++++++++++++
spec/projects/wp8/Properties/WMAppManifest.xml | 39 ++++
spec/util/csproj.spec.js | 80 +++++++-
13 files changed, 729 insertions(+), 109 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/platforms/wp7.spec.js
----------------------------------------------------------------------
diff --git a/spec/platforms/wp7.spec.js b/spec/platforms/wp7.spec.js
new file mode 100644
index 0000000..dbbc8b2
--- /dev/null
+++ b/spec/platforms/wp7.spec.js
@@ -0,0 +1,128 @@
+var wp7 = require('../../src/platforms/wp7'),
+ common = require('../../src/platforms/common'),
+ install = require('../../src/install'),
+ path = require('path'),
+ fs = require('fs'),
+ shell = require('shelljs'),
+ et = require('elementtree'),
+ os = require('osenv'),
+ temp = path.join(os.tmpdir(), 'plugman'),
+ plugins_dir = path.join(temp, 'cordova', 'plugins'),
+ xml_helpers = require('../../src/util/xml-helpers'),
+ plugins_module = require('../../src/util/plugins'),
+ dummyplugin = path.join(__dirname, '..', 'plugins', 'DummyPlugin'),
+ faultyplugin = path.join(__dirname, '..', 'plugins', 'FaultyPlugin'),
+ wp7_project = path.join(__dirname, '..', 'projects', 'wp7');
+
+var xml_path = path.join(dummyplugin, 'plugin.xml')
+ , xml_text = fs.readFileSync(xml_path, 'utf-8')
+ , plugin_et = new et.ElementTree(et.XML(xml_text));
+
+var platformTag = plugin_et.find('./platform[@name="wp7"]');
+var dummy_id = plugin_et._root.attrib['id'];
+var valid_source = platformTag.findall('./source-file'),
+ assets = plugin_et.findall('./asset'),
+ configChanges = platformTag.findall('./config-file');
+xml_path = path.join(faultyplugin, 'plugin.xml')
+xml_text = fs.readFileSync(xml_path, 'utf-8')
+plugin_et = new et.ElementTree(et.XML(xml_text));
+
+platformTag = plugin_et.find('./platform[@name="wp7"]');
+var invalid_source = platformTag.findall('./source-file');
+var faulty_id = plugin_et._root.attrib['id'];
+
+shell.mkdir('-p', temp);
+shell.cp('-rf', path.join(wp7_project, '*'), temp);
+var proj_files = wp7.parseWP7ProjectFile(temp);
+shell.rm('-rf', temp);
+
+function copyArray(arr) {
+ return Array.prototype.slice.call(arr, 0);
+}
+
+describe('wp7 project handler', function() {
+
+ beforeEach(function() {
+ shell.mkdir('-p', temp);
+ shell.mkdir('-p', plugins_dir);
+ });
+ afterEach(function() {
+ shell.rm('-rf', temp);
+ });
+
+ describe('www_dir method', function() {
+ it('should return cordova-wp7 project www location using www_dir', function() {
+ expect(wp7.www_dir(path.sep)).toEqual(path.sep + 'www');
+ });
+ });
+ describe('package_name method', function() {
+ it('should return a wp7 project\'s proper package name', function() {
+ expect(wp7.package_name(wp7_project)).toEqual("{5FC10D78-8779-4EDB-9B61-1D04F0A755D4}");
+ });
+ });
+
+ describe('parseWP7ProjectFile method', function() {
+ it('should throw if project is not an wp7 project', function() {
+ expect(function() {
+ wp7.parseWP7ProjectFile(temp);
+ }).toThrow('does not appear to be a Windows Phone project (no .csproj file)');
+ });
+ });
+
+ describe('installation', function() {
+ beforeEach(function() {
+ shell.mkdir('-p', temp);
+ });
+ afterEach(function() {
+ shell.rm('-rf', temp);
+ });
+ describe('of <source-file> elements', function() {
+ beforeEach(function() {
+ shell.cp('-rf', path.join(wp7_project, '*'), temp);
+ });
+ it('should copy stuff from one location to another by calling common.copyFile', function() {
+ var source = copyArray(valid_source);
+ var s = spyOn(common, 'copyFile');
+ wp7['source-file'].install(source[0], dummyplugin, temp, dummy_id, proj_files);
+ expect(s).toHaveBeenCalledWith(dummyplugin, 'src/wp7/DummyPlugin.cs', temp, path.join('Plugins', 'com.phonegap.plugins.dummyplugin', 'DummyPlugin.cs'));
+ });
+ it('should throw if source-file src cannot be found', function() {
+ var source = copyArray(invalid_source);
+ expect(function() {
+ wp7['source-file'].install(source[1], faultyplugin, temp, faulty_id, proj_files);
+ }).toThrow('"' + path.resolve(faultyplugin, 'src/wp7/NotHere.cs') + '" not found!');
+ });
+ it('should throw if source-file target already exists', function() {
+ var source = copyArray(valid_source);
+ var target = path.join(temp, 'Plugins', dummy_id, 'DummyPlugin.cs');
+ shell.mkdir('-p', path.dirname(target));
+ fs.writeFileSync(target, 'some bs', 'utf-8');
+ expect(function() {
+ wp7['source-file'].install(source[0], dummyplugin, temp, dummy_id, proj_files);
+ }).toThrow('"' + target + '" already exists!');
+ });
+ });
+ });
+
+ describe('uninstallation', function() {
+ beforeEach(function() {
+ shell.mkdir('-p', temp);
+ shell.mkdir('-p', plugins_dir);
+ shell.cp('-rf', path.join(wp7_project, '*'), temp);
+ });
+ afterEach(function() {
+ shell.rm('-rf', temp);
+ });
+ describe('of <source-file> elements', function() {
+ it('should remove stuff by calling common.removeFile', function(done) {
+ var s = spyOn(common, 'removeFile');
+ install('wp7', temp, dummyplugin, plugins_dir, {}, function() {
+ var source = copyArray(valid_source);
+ wp7['source-file'].uninstall(source[0], temp, dummy_id, proj_files);
+ expect(s).toHaveBeenCalledWith(temp, path.join('Plugins', 'com.phonegap.plugins.dummyplugin', 'DummyPlugin.cs'));
+ done();
+ });
+ });
+ });
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/platforms/wp8.spec.js
----------------------------------------------------------------------
diff --git a/spec/platforms/wp8.spec.js b/spec/platforms/wp8.spec.js
new file mode 100644
index 0000000..89e9562
--- /dev/null
+++ b/spec/platforms/wp8.spec.js
@@ -0,0 +1,128 @@
+var wp8 = require('../../src/platforms/wp8'),
+ common = require('../../src/platforms/common'),
+ install = require('../../src/install'),
+ path = require('path'),
+ fs = require('fs'),
+ shell = require('shelljs'),
+ et = require('elementtree'),
+ os = require('osenv'),
+ temp = path.join(os.tmpdir(), 'plugman'),
+ plugins_dir = path.join(temp, 'cordova', 'plugins'),
+ xml_helpers = require('../../src/util/xml-helpers'),
+ plugins_module = require('../../src/util/plugins'),
+ dummyplugin = path.join(__dirname, '..', 'plugins', 'DummyPlugin'),
+ faultyplugin = path.join(__dirname, '..', 'plugins', 'FaultyPlugin'),
+ wp8_project = path.join(__dirname, '..', 'projects', 'wp8');
+
+var xml_path = path.join(dummyplugin, 'plugin.xml')
+ , xml_text = fs.readFileSync(xml_path, 'utf-8')
+ , plugin_et = new et.ElementTree(et.XML(xml_text));
+
+var platformTag = plugin_et.find('./platform[@name="wp8"]');
+var dummy_id = plugin_et._root.attrib['id'];
+var valid_source = platformTag.findall('./source-file'),
+ assets = plugin_et.findall('./asset'),
+ configChanges = platformTag.findall('./config-file');
+xml_path = path.join(faultyplugin, 'plugin.xml')
+xml_text = fs.readFileSync(xml_path, 'utf-8')
+plugin_et = new et.ElementTree(et.XML(xml_text));
+
+platformTag = plugin_et.find('./platform[@name="wp8"]');
+var invalid_source = platformTag.findall('./source-file');
+var faulty_id = plugin_et._root.attrib['id'];
+
+shell.mkdir('-p', temp);
+shell.cp('-rf', path.join(wp8_project, '*'), temp);
+var proj_files = wp8.parseWP8ProjectFile(temp);
+shell.rm('-rf', temp);
+
+function copyArray(arr) {
+ return Array.prototype.slice.call(arr, 0);
+}
+
+describe('wp8 project handler', function() {
+
+ beforeEach(function() {
+ shell.mkdir('-p', temp);
+ shell.mkdir('-p', plugins_dir);
+ });
+ afterEach(function() {
+ shell.rm('-rf', temp);
+ });
+
+ describe('www_dir method', function() {
+ it('should return cordova-wp8 project www location using www_dir', function() {
+ expect(wp8.www_dir(path.sep)).toEqual(path.sep + 'www');
+ });
+ });
+ describe('package_name method', function() {
+ it('should return a wp8 project\'s proper package name', function() {
+ expect(wp8.package_name(wp8_project)).toEqual("{F3A8197B-6B16-456D-B5F4-DD4F04AC0BEC}");
+ });
+ });
+
+ describe('parsewp8ProjectFile method', function() {
+ it('should throw if project is not an wp8 project', function() {
+ expect(function() {
+ wp8.parseWP8ProjectFile(temp);
+ }).toThrow('does not appear to be a Windows Phone project (no .csproj file)');
+ });
+ });
+
+ describe('installation', function() {
+ beforeEach(function() {
+ shell.mkdir('-p', temp);
+ });
+ afterEach(function() {
+ shell.rm('-rf', temp);
+ });
+ describe('of <source-file> elements', function() {
+ beforeEach(function() {
+ shell.cp('-rf', path.join(wp8_project, '*'), temp);
+ });
+ it('should copy stuff from one location to another by calling common.copyFile', function() {
+ var source = copyArray(valid_source);
+ var s = spyOn(common, 'copyFile');
+ wp8['source-file'].install(source[0], dummyplugin, temp, dummy_id, proj_files);
+ expect(s).toHaveBeenCalledWith(dummyplugin, 'src/wp8/DummyPlugin.cs', temp, path.join('Plugins', 'com.phonegap.plugins.dummyplugin', 'DummyPlugin.cs'));
+ });
+ it('should throw if source-file src cannot be found', function() {
+ var source = copyArray(invalid_source);
+ expect(function() {
+ wp8['source-file'].install(source[1], faultyplugin, temp, faulty_id, proj_files);
+ }).toThrow('"' + path.resolve(faultyplugin, 'src/wp8/NotHere.cs') + '" not found!');
+ });
+ it('should throw if source-file target already exists', function() {
+ var source = copyArray(valid_source);
+ var target = path.join(temp, 'Plugins', dummy_id, 'DummyPlugin.cs');
+ shell.mkdir('-p', path.dirname(target));
+ fs.writeFileSync(target, 'some bs', 'utf-8');
+ expect(function() {
+ wp8['source-file'].install(source[0], dummyplugin, temp, dummy_id, proj_files);
+ }).toThrow('"' + target + '" already exists!');
+ });
+ });
+ });
+
+ describe('uninstallation', function() {
+ beforeEach(function() {
+ shell.mkdir('-p', temp);
+ shell.mkdir('-p', plugins_dir);
+ shell.cp('-rf', path.join(wp8_project, '*'), temp);
+ });
+ afterEach(function() {
+ shell.rm('-rf', temp);
+ });
+ describe('of <source-file> elements', function() {
+ it('should remove stuff by calling common.removeFile', function(done) {
+ var s = spyOn(common, 'removeFile');
+ install('wp8', temp, dummyplugin, plugins_dir, {}, function() {
+ var source = copyArray(valid_source);
+ wp8['source-file'].uninstall(source[0], temp, dummy_id, proj_files);
+ expect(s).toHaveBeenCalledWith(temp, path.join('Plugins', 'com.phonegap.plugins.dummyplugin', 'DummyPlugin.cs'));
+ done();
+ });
+ });
+ });
+ });
+});
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/plugins/DummyPlugin/plugin.xml
----------------------------------------------------------------------
diff --git a/spec/plugins/DummyPlugin/plugin.xml b/spec/plugins/DummyPlugin/plugin.xml
index 87935ba..deba345 100644
--- a/spec/plugins/DummyPlugin/plugin.xml
+++ b/spec/plugins/DummyPlugin/plugin.xml
@@ -98,4 +98,29 @@
<framework src="src/ios/libsqlite3.dylib" />
<framework src="src/ios/libsqlite3.dylib" weak="true" />
</platform>
+
+ <!-- wp7 -->
+ <platform name="wp7">
+ <config-file target="config.xml" parent="/*">
+ <feature id="dummyPlugin" required="true" version="1.0.0.0"/>
+ </config-file>
+
+ <source-file src="src/wp7/DummyPlugin.cs"/>
+ <js-module src="www/dummyplugin.js" name="Dummy">
+ <clobbers target="dummy" />
+ </js-module>
+ </platform>
+
+ <!-- wp8 -->
+ <platform name="wp8">
+ <config-file target="config.xml" parent="/*">
+ <feature id="dummyPlugin" required="true" version="1.0.0.0"/>
+ </config-file>
+
+ <source-file src="src/wp8/DummyPlugin.cs"/>
+ <js-module src="www/dummyplugin.js" name="Dummy">
+ <clobbers target="dummy" />
+ </js-module>
+ </platform>
+
</plugin>
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/plugins/DummyPlugin/src/wp7/DummyPlugin.cs
----------------------------------------------------------------------
diff --git a/spec/plugins/DummyPlugin/src/wp7/DummyPlugin.cs b/spec/plugins/DummyPlugin/src/wp7/DummyPlugin.cs
new file mode 100644
index 0000000..273dc3b
--- /dev/null
+++ b/spec/plugins/DummyPlugin/src/wp7/DummyPlugin.cs
@@ -0,0 +1,19 @@
+/*
+ *
+ * Copyright 2013 Benn Mapes
+ *
+ * Licensed 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.
+ *
+*/
+
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/plugins/DummyPlugin/src/wp8/DummyPlugin.cs
----------------------------------------------------------------------
diff --git a/spec/plugins/DummyPlugin/src/wp8/DummyPlugin.cs b/spec/plugins/DummyPlugin/src/wp8/DummyPlugin.cs
new file mode 100644
index 0000000..273dc3b
--- /dev/null
+++ b/spec/plugins/DummyPlugin/src/wp8/DummyPlugin.cs
@@ -0,0 +1,19 @@
+/*
+ *
+ * Copyright 2013 Benn Mapes
+ *
+ * Licensed 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.
+ *
+*/
+
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/plugins/FaultyPlugin/plugin.xml
----------------------------------------------------------------------
diff --git a/spec/plugins/FaultyPlugin/plugin.xml b/spec/plugins/FaultyPlugin/plugin.xml
index b705b48..29ab0c6 100644
--- a/spec/plugins/FaultyPlugin/plugin.xml
+++ b/spec/plugins/FaultyPlugin/plugin.xml
@@ -88,4 +88,32 @@
<lib-file src="src/blackberry10/device/echoJnext.so" target-dir="ext-qnx/cordova.echo/device" />
<lib-file src="src/blackberry10/simulator/echoJnext.so" target-dir="ext-qnx/cordova.echo/simulator" />
</platform>
+
+ <!-- wp7 -->
+ <platform name="wp7">
+ <config-file target="config.xml" parent="/*">
+ <feature name="FaultyPlugin">
+ <param name="wp-package" value="FaultyPlugin"/>
+ </feature>
+ </config-file>
+
+ <source-file src="src/wp7/FaultyPlugin.cs" />
+
+ <!-- this desn't exist -->
+ <source-file src="src/wp7/NotHere.cs" />
+ </platform>
+
+ <!-- wp8 -->
+ <platform name="wp8">
+ <config-file target="config.xml" parent="/*">
+ <feature name="FaultyPlugin">
+ <param name="wp-package" value="FaultyPlugin"/>
+ </feature>
+ </config-file>
+
+ <source-file src="src/wp8/FaultyPlugin.cs" />
+
+ <!-- this desn't exist -->
+ <source-file src="src/wp8/NotHere.cs" />
+ </platform>
</plugin>
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/plugins/FaultyPlugin/src/wp7/FaultyPlugin.cs
----------------------------------------------------------------------
diff --git a/spec/plugins/FaultyPlugin/src/wp7/FaultyPlugin.cs b/spec/plugins/FaultyPlugin/src/wp7/FaultyPlugin.cs
new file mode 100644
index 0000000..5263b0c
--- /dev/null
+++ b/spec/plugins/FaultyPlugin/src/wp7/FaultyPlugin.cs
@@ -0,0 +1,19 @@
+/*
+ *
+ * Copyright 2013 Anis Kadri
+ *
+ * Licensed 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.
+ *
+*/
+
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/plugins/FaultyPlugin/src/wp8/FaultyPlugin.cs
----------------------------------------------------------------------
diff --git a/spec/plugins/FaultyPlugin/src/wp8/FaultyPlugin.cs b/spec/plugins/FaultyPlugin/src/wp8/FaultyPlugin.cs
new file mode 100644
index 0000000..5263b0c
--- /dev/null
+++ b/spec/plugins/FaultyPlugin/src/wp8/FaultyPlugin.cs
@@ -0,0 +1,19 @@
+/*
+ *
+ * Copyright 2013 Anis Kadri
+ *
+ * Licensed 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.
+ *
+*/
+
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/projects/wp7/CordovaAppProj.csproj
----------------------------------------------------------------------
diff --git a/spec/projects/wp7/CordovaAppProj.csproj b/spec/projects/wp7/CordovaAppProj.csproj
index 560c1d7..879bd1e 100644
--- a/spec/projects/wp7/CordovaAppProj.csproj
+++ b/spec/projects/wp7/CordovaAppProj.csproj
@@ -80,111 +80,6 @@
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
- <ItemGroup>
- <Compile Include="App.xaml.cs">
- <DependentUpon>App.xaml</DependentUpon>
- </Compile>
- <Compile Include="cordovalib\BrowserMouseHelper.cs" />
- <Compile Include="cordovalib\CommandFactory.cs" />
- <Compile Include="cordovalib\Commands\BaseCommand.cs" />
- <Compile Include="cordovalib\ConfigHandler.cs" />
- <Compile Include="cordovalib\CordovaCommandCall.cs" />
- <Compile Include="cordovalib\CordovaView.xaml.cs">
- <DependentUpon>CordovaView.xaml</DependentUpon>
- </Compile>
- <Compile Include="cordovalib\DOMStorageHelper.cs" />
- <Compile Include="cordovalib\JSON\JsonHelper.cs" />
- <Compile Include="cordovalib\NativeExecution.cs" />
- <Compile Include="cordovalib\OrientationHelper.cs" />
- <Compile Include="cordovalib\PluginResult.cs" />
- <Compile Include="cordovalib\ScriptCallback.cs" />
- <Compile Include="MainPage.xaml.cs">
- <DependentUpon>MainPage.xaml</DependentUpon>
- </Compile>
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <ApplicationDefinition Include="App.xaml">
- <SubType>Designer</SubType>
- <Generator>MSBuild:Compile</Generator>
- </ApplicationDefinition>
- <Page Include="cordovalib\CordovaView.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="MainPage.xaml">
- <SubType>Designer</SubType>
- <Generator>MSBuild:Compile</Generator>
- </Page>
- <Page Include="Plugins\UI\AudioRecorder.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="Plugins\UI\ImageCapture.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="Plugins\UI\NotificationBox.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- <Page Include="Plugins\UI\VideoRecorder.xaml">
- <Generator>MSBuild:Compile</Generator>
- <SubType>Designer</SubType>
- </Page>
- </ItemGroup>
- <ItemGroup>
- <None Include="cordova\lib\build.js" />
- <None Include="cordova\lib\clean.js" />
- <None Include="cordova\lib\deploy.js" />
- <None Include="cordova\lib\log.js" />
- <None Include="cordova\lib\target-list.js" />
- <Content Include="www\**" />
- <Content Include="config.xml" />
- <Content Include="Images\**" />
- <Content Include="resources\notification-beep.wav" />
- <None Include="cordova\build.bat" />
- <None Include="cordova\clean.bat" />
- <None Include="cordova\lib\install-device.bat" />
- <None Include="cordova\lib\install-emulator.bat" />
- <None Include="cordova\lib\list-devices.bat" />
- <None Include="cordova\lib\list-emulator-images.bat" />
- <None Include="cordova\lib\list-started-emulators.bat" />
- <None Include="cordova\lib\start-emulator.bat" />
- <None Include="cordova\log.bat" />
- <None Include="cordova\run.bat" />
- <None Include="cordova\version.bat" />
- <None Include="VERSION" />
- <Content Include="CordovaSourceDictionary.xml">
- <SubType>Designer</SubType>
- </Content>
- <None Include="BuildManifestProcessor.js" />
- <None Include="Properties\AppManifest.xml">
- <SubType>Designer</SubType>
- </None>
- <None Include="Properties\WMAppManifest.xml">
- <SubType>Designer</SubType>
- </None>
- </ItemGroup>
- <ItemGroup>
- <Content Include="ApplicationIcon.png">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- <Content Include="Background.png">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- <Content Include="SplashScreenImage.jpg" />
- </ItemGroup>
- <ItemGroup>
- <WCFMetadata Include="Service References\" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Plugins\*" />
- <Compile Include="Plugins\UI\*.cs" />
- </ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\$(TargetFrameworkVersion)\Microsoft.Silverlight.$(TargetFrameworkProfile).Overrides.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Silverlight for Phone\$(TargetFrameworkVersion)\Microsoft.Silverlight.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/projects/wp7/Properties/WMAppManifest.xml
----------------------------------------------------------------------
diff --git a/spec/projects/wp7/Properties/WMAppManifest.xml b/spec/projects/wp7/Properties/WMAppManifest.xml
new file mode 100644
index 0000000..b218fcb
--- /dev/null
+++ b/spec/projects/wp7/Properties/WMAppManifest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.1">
+ <App xmlns="" ProductID="{5FC10D78-8779-4EDB-9B61-1D04F0A755D4}" Title="An App"
+ RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal"
+ Author="An App author"
+ BitsPerPixel="32"
+ Description="Apache Cordova for Windows Phone 7"
+ Publisher="An App">
+
+ <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath>
+ <Capabilities>
+ <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
+ </Capabilities>
+
+ <Tasks>
+ <DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
+ </Tasks>
+ <Tokens>
+ <PrimaryToken TokenID="An AppToken" TaskName="_default">
+ <TemplateType5>
+ <BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI>
+ <Count>0</Count>
+ <Title>An App</Title>
+ </TemplateType5>
+ </PrimaryToken>
+ </Tokens>
+ </App>
+</Deployment>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/projects/wp8/An_App.csproj
----------------------------------------------------------------------
diff --git a/spec/projects/wp8/An_App.csproj b/spec/projects/wp8/An_App.csproj
new file mode 100644
index 0000000..7be41c9
--- /dev/null
+++ b/spec/projects/wp8/An_App.csproj
@@ -0,0 +1,201 @@
+<?xml version='1.0' encoding='utf-8'?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>10.0.20506</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{3677C1B7-D68B-4CF9-BF8A-E869D437A6DF}</ProjectGuid>
+ <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>my.test.project</RootNamespace>
+ <AssemblyName>my.test.project</AssemblyName>
+ <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
+ <SilverlightVersion>
+ </SilverlightVersion>
+ <TargetFrameworkProfile>
+ </TargetFrameworkProfile>
+ <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier>
+ <SilverlightApplication>true</SilverlightApplication>
+ <SupportedCultures>en-US</SupportedCultures>
+ <XapOutputs>true</XapOutputs>
+ <GenerateSilverlightManifest>true</GenerateSilverlightManifest>
+ <XapFilename>CordovaAppProj_$(Configuration)_$(Platform).xap</XapFilename>
+ <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>
+ <SilverlightAppEntry>my.test.project.App</SilverlightAppEntry>
+ <ValidateXaml>true</ValidateXaml>
+ <ThrowErrorsInValidation>true</ThrowErrorsInValidation>
+ <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
+ <BackgroundAgentType />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>Bin\Debug</OutputPath>
+ <DefineConstants>TRACE;DEBUG;SILVERLIGHT;WINDOWS_PHONE;WP8</DefineConstants>
+ <NoStdLib>true</NoStdLib>
+ <NoConfig>true</NoConfig>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <Prefer32Bit>false</Prefer32Bit>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>Bin\Release</OutputPath>
+ <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE;WP8</DefineConstants>
+ <NoStdLib>true</NoStdLib>
+ <NoConfig>true</NoConfig>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <Prefer32Bit>false</Prefer32Bit>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>Bin\x86\Debug</OutputPath>
+ <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+ <NoStdLib>true</NoStdLib>
+ <DebugType>full</DebugType>
+ <PlatformTarget>
+ </PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+ <OutputPath>Bin\x86\Release</OutputPath>
+ <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+ <Optimize>true</Optimize>
+ <NoStdLib>true</NoStdLib>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>
+ </PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
+ <Prefer32Bit>false</Prefer32Bit>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
+ <DebugSymbols>true</DebugSymbols>
+ <OutputPath>Bin\ARM\Debug</OutputPath>
+ <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+ <NoStdLib>true</NoStdLib>
+ <DebugType>full</DebugType>
+ <PlatformTarget>
+ </PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
+ <Prefer32Bit>false</Prefer32Bit>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
+ <OutputPath>Bin\ARM\Release</OutputPath>
+ <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
+ <Optimize>true</Optimize>
+ <NoStdLib>true</NoStdLib>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>
+ </PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>ManagedMinimumRules.ruleset</CodeAnalysisRuleSet>
+ <Prefer32Bit>false</Prefer32Bit>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="App.xaml.cs">
+ <DependentUpon>App.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="cordovalib\BrowserMouseHelper.cs" />
+ <Compile Include="cordovalib\CommandFactory.cs" />
+ <Compile Include="cordovalib\Commands\BaseCommand.cs" />
+ <Compile Include="cordovalib\ConfigHandler.cs" />
+ <Compile Include="cordovalib\CordovaCommandCall.cs" />
+ <Compile Include="cordovalib\CordovaView.xaml.cs">
+ <DependentUpon>CordovaView.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="cordovalib\IBrowserDecorator.cs" />
+ <Compile Include="cordovalib\ImageExifHelper.cs" />
+ <Compile Include="cordovalib\JSON\JsonHelper.cs" />
+ <Compile Include="cordovalib\NativeExecution.cs" />
+ <Compile Include="cordovalib\OrientationHelper.cs" />
+ <Compile Include="cordovalib\PluginResult.cs" />
+ <Compile Include="cordovalib\ScriptCallback.cs" />
+ <Compile Include="cordovalib\XHRHelper.cs" />
+ <Compile Include="cordovalib\MimeTypeMapper.cs" />
+ <Compile Include="Plugins\DebugConsole.cs" />
+ <Compile Include="MainPage.xaml.cs">
+ <DependentUpon>MainPage.xaml</DependentUpon>
+ </Compile>
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ApplicationDefinition Include="App.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </ApplicationDefinition>
+ <Page Include="cordovalib\CordovaView.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ <SubType>Designer</SubType>
+ </Page>
+ <Page Include="MainPage.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="www\**" />
+ <None Include="cordova\lib\build.js" />
+ <None Include="cordova\lib\clean.js" />
+ <None Include="cordova\lib\deploy.js" />
+ <None Include="cordova\lib\log.js" />
+ <None Include="cordova\lib\target-list.js" />
+ <Content Include="config.xml" />
+ <Content Include="Images\**" />
+ <Content Include="resources\notification-beep.wav" />
+ <None Include="cordova\build.bat" />
+ <None Include="cordova\clean.bat" />
+ <None Include="cordova\lib\install-device.bat" />
+ <None Include="cordova\lib\install-emulator.bat" />
+ <None Include="cordova\lib\list-devices.bat" />
+ <None Include="cordova\lib\list-emulator-images.bat" />
+ <None Include="cordova\lib\list-started-emulators.bat" />
+ <None Include="cordova\lib\start-emulator.bat" />
+ <None Include="cordova\log.bat" />
+ <None Include="cordova\run.bat" />
+ <None Include="cordova\version.bat" />
+ <None Include="VERSION" />
+ <None Include="Properties\AppManifest.xml">
+ <SubType>Designer</SubType>
+ </None>
+ <None Include="Properties\WMAppManifest.xml">
+ <SubType>Designer</SubType>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="ApplicationIcon.png">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="Background.png">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ <Content Include="SplashScreenImage.jpg" />
+ </ItemGroup>
+ <ItemGroup>
+ <WCFMetadata Include="Service References\" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
+ </ItemGroup>
+ <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" />
+ <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" />
+ <ProjectExtensions />
+ <PropertyGroup>
+ </PropertyGroup>
+ <PropertyGroup>
+ <PostBuildEvent>
+ </PostBuildEvent>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="Plugins\org.apache.cordova.core.InAppBrowser\InAppBrowser.cs" />
+ </ItemGroup>
+</Project>
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/projects/wp8/Properties/WMAppManifest.xml
----------------------------------------------------------------------
diff --git a/spec/projects/wp8/Properties/WMAppManifest.xml b/spec/projects/wp8/Properties/WMAppManifest.xml
new file mode 100644
index 0000000..5b37a95
--- /dev/null
+++ b/spec/projects/wp8/Properties/WMAppManifest.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2012/deployment" AppPlatformVersion="8.0">
+ <DefaultLanguage xmlns="" code="en-US" />
+ <Languages xmlns="">
+ <Language code="en-US" />
+ </Languages>
+ <App xmlns="" ProductID="{F3A8197B-6B16-456D-B5F4-DD4F04AC0BEC}" Title="An App" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="An App author" BitsPerPixel="32" Description="Apache Cordova for Windows Phone" Publisher="An App" PublisherID="{db093ed5-53b1-45f7-af72-751e8f36ab80}">
+ <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath>
+ <Capabilities>
+ <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
+ </Capabilities>
+ <Tasks>
+ <DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
+ </Tasks>
+ <Tokens>
+ <PrimaryToken TokenID="An AppToken" TaskName="_default">
+ <TemplateFlip>
+ <SmallImageURI IsResource="false" IsRelative="true">Background.png</SmallImageURI>
+ <Count>0</Count>
+ <BackgroundImageURI IsResource="false" IsRelative="true">Background.png</BackgroundImageURI>
+ <Title>An App</Title>
+ <BackContent></BackContent>
+ <BackBackgroundImageURI></BackBackgroundImageURI>
+ <BackTitle></BackTitle>
+ <LargeBackgroundImageURI></LargeBackgroundImageURI>
+ <LargeBackContent></LargeBackContent>
+ <LargeBackBackgroundImageURI></LargeBackBackgroundImageURI>
+ <DeviceLockImageURI></DeviceLockImageURI>
+ <HasLarge>false</HasLarge>
+ </TemplateFlip>
+ </PrimaryToken>
+ </Tokens>
+ <ScreenResolutions>
+ <ScreenResolution Name="ID_RESOLUTION_WVGA" />
+ <ScreenResolution Name="ID_RESOLUTION_WXGA" />
+ <ScreenResolution Name="ID_RESOLUTION_HD720P" />
+ </ScreenResolutions>
+ </App>
+</Deployment>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/a13d5f5e/spec/util/csproj.spec.js
----------------------------------------------------------------------
diff --git a/spec/util/csproj.spec.js b/spec/util/csproj.spec.js
index b1bdcb2..fb66f6c 100644
--- a/spec/util/csproj.spec.js
+++ b/spec/util/csproj.spec.js
@@ -1,8 +1,14 @@
-var csproj = require('../../src/util/csproj'),
- path = require('path');
+var csproj = require('../../src/util/csproj'),
+ path = require('path'),
+ os = require('osenv'),
+ et = require('elementtree'),
+ fs = require('fs'),
+ xml_helpers = require('../../src/util/xml-helpers');
-var wp7_project = path.join(__dirname, '..', 'projects', 'wp7'),
- example_csproj = path.join(wp7_project, 'CordovaAppProj.csproj');
+var wp7_project = path.join(__dirname, '..', 'projects', 'wp7'),
+ temp = path.join(os.tmpdir(), 'plugman'),
+ example_csproj = path.join(wp7_project, 'CordovaAppProj.csproj'),
+ wpcsproj = path.join(__dirname, '..', 'plugins', 'WPcsproj');
describe('csproj', function() {
it('should throw if passed in an invalid xml file path ref', function() {
@@ -21,4 +27,70 @@ describe('csproj', function() {
describe('write method', function() {
});
+
+ describe('source file', function() {
+ var test_csproj = new csproj(example_csproj);
+ var page_test = path.join('src', 'UI', 'PageTest.xaml');
+ var page_test_cs = path.join('src', 'UI', 'PageTest.xaml.cs');
+ var lib_test = path.join('lib', 'LibraryTest.dll');
+ var file_test = path.join('src', 'FileTest.cs');
+
+ describe('add method', function() {
+
+ it('should properly add .xaml files', function() {
+ test_csproj.addSourceFile(page_test);
+ console.log(test_csproj.xml.getroot().findall('.//Page'));
+ expect(test_csproj.xml.getroot().find('.//Page[@Include="src\\UI\\PageTest.xaml"]')).toBeTruthy();
+ expect(test_csproj.xml.getroot().find('.//Page[@Include="src\\UI\\PageTest.xaml"]/Generator').text).toEqual('MSBuild:Compile');
+ expect(test_csproj.xml.getroot().find('.//Page[@Include="src\\UI\\PageTest.xaml"]/SubType').text).toEqual('Designer');
+ });
+ it('should properly add .xaml.cs files', function() {
+ test_csproj.addSourceFile(page_test_cs);
+ expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\UI\\PageTest.xaml.cs"]')).toBeTruthy();
+ expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\UI\\PageTest.xaml.cs"]/DependentUpon').text).toEqual('PageTest.xaml');
+ });
+ it('should properly add .dll references', function() {
+ test_csproj.addSourceFile(lib_test);
+ expect(test_csproj.xml.getroot().find('.//Reference[@Include="LibraryTest"]')).toBeTruthy();
+ expect(test_csproj.xml.getroot().find('.//Reference[@Include="LibraryTest"]/HintPath').text).toEqual('lib\\LibraryTest.dll');
+ });
+ it('should properly add .cs files', function() {
+ test_csproj.addSourceFile(file_test);
+ expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\FileTest.cs"]')).toBeTruthy();
+ });
+
+ });
+
+ describe('remove method', function() {
+
+ it('should properly remove .xaml pages', function() {
+ test_csproj.removeSourceFile(page_test);
+ expect(test_csproj.xml.getroot().find('.//Page[@Include="src\\UI\\PageTest.xaml"]')).toBeFalsy();
+ });
+ it('should properly remove .xaml.cs files', function() {
+ test_csproj.removeSourceFile(page_test_cs);
+ expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\UI\\PageTest.xaml.cs"]')).toBeFalsy();
+ });
+ it('should properly remove .dll references', function() {
+ test_csproj.removeSourceFile(lib_test);
+ expect(test_csproj.xml.getroot().find('.//Reference[@Include="LibraryTest"]')).toBeFalsy();
+ });
+ it('should properly remove .cs files', function() {
+ test_csproj.removeSourceFile(file_test);
+ expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\FileTest.cs"]')).toBeFalsy();
+ });
+ it('should remove all empty ItemGroup\'s', function() {
+ test_csproj.removeSourceFile(page_test);
+ test_csproj.removeSourceFile(page_test_cs);
+ test_csproj.removeSourceFile(lib_test);
+ test_csproj.removeSourceFile(file_test);
+ var item_groups = test_csproj.xml.findall('ItemGroup');
+ for (var i = 0, l = item_groups.length; i < l; i++) {
+ var group = item_groups[i];
+ expect(group._children.length).toBeGreaterThan(0);
+ }
+ })
+
+ });
+ });
});