andparcel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. data/.document +5 -0
  2. data/.gitignore +23 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +7 -0
  5. data/Rakefile +60 -0
  6. data/TODO +92 -0
  7. data/VERSION +1 -0
  8. data/andparcel.gemspec +103 -0
  9. data/bin/parcel +161 -0
  10. data/lib/andparcel/base.rb +22 -0
  11. data/lib/andparcel/catalog.rb +75 -0
  12. data/lib/andparcel/fileref.rb +21 -0
  13. data/lib/andparcel/parcel.rb +533 -0
  14. data/lib/andparcel.rb +3 -0
  15. data/test/ParcelReceiver/AndroidManifest.xml +15 -0
  16. data/test/ParcelReceiver/build.properties +17 -0
  17. data/test/ParcelReceiver/build.xml +67 -0
  18. data/test/ParcelReceiver/default.properties +11 -0
  19. data/test/ParcelReceiver/local.properties +10 -0
  20. data/test/ParcelReceiver/res/layout/main.xml +13 -0
  21. data/test/ParcelReceiver/res/values/strings.xml +4 -0
  22. data/test/ParcelReceiver/src/com/commonsware/android/pr/ParcelReceiver.java +15 -0
  23. data/test/ParcelToPackage/AndroidManifest.xml +15 -0
  24. data/test/ParcelToPackage/build.properties +17 -0
  25. data/test/ParcelToPackage/build.xml +67 -0
  26. data/test/ParcelToPackage/default.properties +11 -0
  27. data/test/ParcelToPackage/docs/README +1 -0
  28. data/test/ParcelToPackage/docs/SomeOtherFile +0 -0
  29. data/test/ParcelToPackage/libs/one.jar +0 -0
  30. data/test/ParcelToPackage/libs/two.jar +0 -0
  31. data/test/ParcelToPackage/local.properties +10 -0
  32. data/test/ParcelToPackage/parcel.json +17 -0
  33. data/test/ParcelToPackage/res/layout/andParcel_test_row.xml +13 -0
  34. data/test/ParcelToPackage/res/values/strings.xml +4 -0
  35. data/test/ParcelToPackage/src/com/commonsware/android/p2pkg/ParcelToPackage.java +15 -0
  36. data/test/ParcelToPackage/tmp/andParcel-test_0.1.0.zip +0 -0
  37. data/test/test_init.rb +42 -0
  38. data/test/test_install.rb +170 -0
  39. data/test/test_package.rb +218 -0
  40. data/test/test_remove.rb +86 -0
  41. metadata +158 -0
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ package="com.commonsware.android.p2pkg"
4
+ android:versionCode="1"
5
+ android:versionName="1.0">
6
+ <application android:label="@string/app_name">
7
+ <activity android:name="ParcelToPackage"
8
+ android:label="@string/app_name">
9
+ <intent-filter>
10
+ <action android:name="android.intent.action.MAIN" />
11
+ <category android:name="android.intent.category.LAUNCHER" />
12
+ </intent-filter>
13
+ </activity>
14
+ </application>
15
+ </manifest>
@@ -0,0 +1,17 @@
1
+ # This file is used to override default values used by the Ant build system.
2
+ #
3
+ # This file must be checked in Version Control Systems, as it is
4
+ # integral to the build system of your project.
5
+
6
+ # This file is only used by the Ant script.
7
+
8
+ # You can use this to override default values such as
9
+ # 'source.dir' for the location of your java source folder and
10
+ # 'out.dir' for the location of your output folder.
11
+
12
+ # You can also use it define how the release builds are signed by declaring
13
+ # the following properties:
14
+ # 'key.store' for the location of your keystore and
15
+ # 'key.alias' for the name of the key to use.
16
+ # The password will be asked during the build when you use the 'release' target.
17
+
@@ -0,0 +1,67 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project name="ParcelToPackage" default="help">
3
+
4
+ <!-- The local.properties file is created and updated by the 'android' tool.
5
+ It contains the path to the SDK. It should *NOT* be checked in in Version
6
+ Control Systems. -->
7
+ <property file="local.properties" />
8
+
9
+ <!-- The build.properties file can be created by you and is never touched
10
+ by the 'android' tool. This is the place to change some of the default property values
11
+ used by the Ant rules.
12
+ Here are some properties you may want to change/update:
13
+
14
+ application.package
15
+ the name of your application package as defined in the manifest. Used by the
16
+ 'uninstall' rule.
17
+ source.dir
18
+ the name of the source directory. Default is 'src'.
19
+ out.dir
20
+ the name of the output directory. Default is 'bin'.
21
+
22
+ Properties related to the SDK location or the project target should be updated
23
+ using the 'android' tool with the 'update' action.
24
+
25
+ This file is an integral part of the build system for your application and
26
+ should be checked in in Version Control Systems.
27
+
28
+ -->
29
+ <property file="build.properties" />
30
+
31
+ <!-- The default.properties file is created and updated by the 'android' tool, as well
32
+ as ADT.
33
+ This file is an integral part of the build system for your application and
34
+ should be checked in in Version Control Systems. -->
35
+ <property file="default.properties" />
36
+
37
+ <!-- Custom Android task to deal with the project target, and import the proper rules.
38
+ This requires ant 1.6.0 or above. -->
39
+ <path id="android.antlibs">
40
+ <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
41
+ <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
42
+ <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
43
+ <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
44
+ <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
45
+ </path>
46
+
47
+ <taskdef name="setup"
48
+ classname="com.android.ant.SetupTask"
49
+ classpathref="android.antlibs" />
50
+
51
+ <!-- Execute the Android Setup task that will setup some properties specific to the target,
52
+ and import the build rules files.
53
+
54
+ The rules file is imported from
55
+ <SDK>/platforms/<target_platform>/templates/android_rules.xml
56
+
57
+ To customize some build steps for your project:
58
+ - copy the content of the main node <project> from android_rules.xml
59
+ - paste it in this build.xml below the <setup /> task.
60
+ - disable the import by changing the setup task below to <setup import="false" />
61
+
62
+ This will ensure that the properties are setup correctly but that your customized
63
+ build steps are used.
64
+ -->
65
+ <setup />
66
+
67
+ </project>
@@ -0,0 +1,11 @@
1
+ # This file is automatically generated by Android Tools.
2
+ # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3
+ #
4
+ # This file must be checked in Version Control Systems.
5
+ #
6
+ # To customize properties used by the Ant build system use,
7
+ # "build.properties", and override values to adapt the script to your
8
+ # project structure.
9
+
10
+ # Project target.
11
+ target=android-4
@@ -0,0 +1 @@
1
+ Hi, Mom!
File without changes
Binary file
Binary file
@@ -0,0 +1,10 @@
1
+ # This file is automatically generated by Android Tools.
2
+ # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3
+ #
4
+ # This file must *NOT* be checked in Version Control Systems,
5
+ # as it contains information specific to your local configuration.
6
+
7
+ # location of the SDK. This is only used by Ant
8
+ # For customization when using a Version Control System, please read the
9
+ # header note.
10
+ sdk.dir=/opt/android-sdk-linux_x86-1.6_r1
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "andParcel-test",
3
+ "description": "A test parcel for testing the parcel engine for Android",
4
+ "version": "0.1.0",
5
+ "maintainers": [
6
+ {
7
+ "name": "Mark Murphy",
8
+ "web": "http://commonsware.com"
9
+ }
10
+ ],
11
+ "licenses": [
12
+ {
13
+ "type": "Apache License, 2.0",
14
+ "url": "http://www.apache.org/licenses/LICENSE-2.0"
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+ android:orientation="vertical"
4
+ android:layout_width="fill_parent"
5
+ android:layout_height="fill_parent"
6
+ >
7
+ <TextView
8
+ android:layout_width="fill_parent"
9
+ android:layout_height="wrap_content"
10
+ android:text="Hello World, ParcelToPackage"
11
+ />
12
+ </LinearLayout>
13
+
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources>
3
+ <string name="andParcel_test_sumthin">sumthin</string>
4
+ </resources>
@@ -0,0 +1,15 @@
1
+ package com.commonsware.android.p2pkg;
2
+
3
+ import android.app.Activity;
4
+ import android.os.Bundle;
5
+
6
+ public class ParcelToPackage extends Activity
7
+ {
8
+ /** Called when the activity is first created. */
9
+ @Override
10
+ public void onCreate(Bundle savedInstanceState)
11
+ {
12
+ super.onCreate(savedInstanceState);
13
+ setContentView(R.layout.main);
14
+ }
15
+ }
data/test/test_init.rb ADDED
@@ -0,0 +1,42 @@
1
+ require "lib/andparcel"
2
+ require "rubygems"
3
+ require "protest"
4
+
5
+ Protest.context("The parcel engine") do
6
+ setup do
7
+ `rm -rf #{AndParcel.home}`
8
+ end
9
+
10
+ test "should properly initialize" do
11
+ assert !File.exists?(AndParcel.home)
12
+ AndParcel.init
13
+ assert File.exists?(AndParcel.home)
14
+ assert File.directory?(AndParcel.home)
15
+ end
16
+
17
+ test "should properly list the catalogs in a new environment" do
18
+ assert !File.exists?(AndParcel.home)
19
+ catalogs=AndParcel.catalogs
20
+ assert catalogs.size==1
21
+ end
22
+
23
+ test "should support adding a new catalog" do
24
+ assert !File.exists?(AndParcel.home)
25
+ catalogs=AndParcel.catalogs
26
+ catalogs.add('test', 'http://pub.andparcel.com/foo.json')
27
+ assert catalogs.size==2
28
+ assert catalogs.names.include?('test')
29
+ end
30
+
31
+ test "should support removing an existing catalog" do
32
+ assert !File.exists?(AndParcel.home)
33
+ catalogs=AndParcel.catalogs
34
+ assert catalogs.size==1
35
+ cat=catalogs.add('test', 'http://pub.andparcel.com/foo.json')
36
+ assert catalogs.size==2
37
+ assert catalogs.names.include?('test')
38
+ catalogs.remove('test')
39
+ assert catalogs.size==1
40
+ assert !catalogs.names.include?('test')
41
+ end
42
+ end
@@ -0,0 +1,170 @@
1
+ require 'fileutils'
2
+ require 'rubygems'
3
+ require "protest"
4
+ require "lib/andparcel"
5
+
6
+ Protest.context("The parcel engine") do
7
+ def clone_receiver
8
+ FileUtils.cp_r 'test/ParcelReceiver', 'tmp2'
9
+ end
10
+
11
+ def assert_exists(*items)
12
+ items.each do |f|
13
+ assert File.exists?(f)
14
+ end
15
+ end
16
+
17
+ def install_test(files=[], opts={})
18
+ begin
19
+ opts[:dir]='tmp'
20
+ opts[:manifest]='AndroidManifest.xml'
21
+ clone_receiver
22
+ FileUtils.mkdir 'tmp'
23
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
24
+ opts)
25
+ assert target=='tmp/andParcel-test_0.1.0.zip'
26
+ AndParcel::Parcel.install('tmp/andParcel-test_0.1.0.zip',
27
+ :dir=>'tmp2')
28
+ assert_exists(*files)
29
+ assert_exists('tmp2/parcels',
30
+ 'tmp2/parcels/andParcel-test/andParcel-test_0.1.0.zip')
31
+
32
+ doc=Nokogiri::XML(open('tmp2/AndroidManifest.xml'))
33
+ app=doc.search('application')[0]
34
+ existing=app.xpath("*[@android:name='ParcelToPackage']",
35
+ 'android'=>"http://schemas.android.com/apk/res/android")
36
+
37
+ assert existing[0].name=='activity'
38
+ ensure
39
+ FileUtils.rm_rf 'tmp'
40
+ FileUtils.rm_rf 'tmp2'
41
+ end
42
+ end
43
+
44
+ context("when installing a parcel into a project") do
45
+ test "should support a parcel with no meaningful content" do
46
+ install_test
47
+ end
48
+
49
+ test "should support a parcel with JARs" do
50
+ install_test(['tmp2/libs/one.jar',
51
+ 'tmp2/libs/two.jar'],
52
+ :jars=>'libs')
53
+ end
54
+
55
+ test "should support a parcel with documentation" do
56
+ install_test(['tmp2/parcels/andParcel-test/docs/README'],
57
+ :docs=>'docs')
58
+ end
59
+
60
+ test "should support a parcel with resources" do
61
+ install_test(['tmp2/res/layout/andParcel_test_row.xml',
62
+ 'tmp2/res/values/strings.xml'],
63
+ :res=>'res')
64
+ end
65
+
66
+ test "should support a parcel with all sorts of stuff" do
67
+ install_test(['tmp2/res/layout/andParcel_test_row.xml',
68
+ 'tmp2/res/values/strings.xml',
69
+ 'tmp2/libs/one.jar',
70
+ 'tmp2/libs/two.jar',
71
+ 'tmp2/parcels/andParcel-test/docs/README'],
72
+ :res=>'res',
73
+ :jars=>'libs',
74
+ :docs=>['docs/README', 'docs/SomeOtherFile'])
75
+ end
76
+
77
+ test "should install a parcel off the network" do
78
+ begin
79
+ clone_receiver
80
+ FileUtils.mkdir 'tmp'
81
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
82
+ :dir=>'tmp')
83
+ assert target=='tmp/andParcel-test_0.1.0.zip'
84
+ AndParcel::Parcel.install('cwac-parcel',
85
+ :dir=>'tmp2')
86
+ assert_exists('tmp2/parcels/cwac-parcel')
87
+ ensure
88
+ FileUtils.rm_rf 'tmp'
89
+ FileUtils.rm_rf 'tmp2'
90
+ end
91
+ end
92
+
93
+ test "should replace a parcel with all sorts of stuff" do
94
+ begin
95
+ opts={:res=>'res',
96
+ :jars=>'libs',
97
+ :docs=>'docs'}
98
+ opts[:dir]='tmp'
99
+ opts[:manifest]='AndroidManifest.xml'
100
+ clone_receiver
101
+ FileUtils.mkdir 'tmp'
102
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
103
+ opts)
104
+ assert target=='tmp/andParcel-test_0.1.0.zip'
105
+ AndParcel::Parcel.install('tmp/andParcel-test_0.1.0.zip',
106
+ :dir=>'tmp2')
107
+ assert_exists('tmp2/res/layout/andParcel_test_row.xml',
108
+ 'tmp2/res/values/strings.xml',
109
+ 'tmp2/libs/one.jar',
110
+ 'tmp2/libs/two.jar',
111
+ 'tmp2/parcels/andParcel-test/docs/README')
112
+ assert_exists('tmp2/parcels',
113
+ 'tmp2/parcels/andParcel-test/andParcel-test_0.1.0.zip')
114
+
115
+ doc=Nokogiri::XML(open('tmp2/AndroidManifest.xml'))
116
+ app=doc.search('application')[0]
117
+ existing=app.xpath("*[@android:name='ParcelToPackage']",
118
+ 'android'=>"http://schemas.android.com/apk/res/android")
119
+
120
+ assert existing[0].name=='activity'
121
+ AndParcel::Parcel.install('tmp/andParcel-test_0.1.0.zip',
122
+ :dir=>'tmp2', :replace=>true)
123
+ assert_exists('tmp2/res/layout/andParcel_test_row.xml',
124
+ 'tmp2/res/values/strings.xml',
125
+ 'tmp2/libs/one.jar',
126
+ 'tmp2/libs/two.jar',
127
+ 'tmp2/parcels/andParcel-test/docs/README')
128
+ ensure
129
+ FileUtils.rm_rf 'tmp'
130
+ FileUtils.rm_rf 'tmp2'
131
+ end
132
+ end
133
+
134
+ test "should fail to install a parcel that is already installed" do
135
+ begin
136
+ clone_receiver
137
+ FileUtils.mkdir 'tmp'
138
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
139
+ :dir=>'tmp')
140
+ assert target=='tmp/andParcel-test_0.1.0.zip'
141
+ AndParcel::Parcel.install('tmp/andParcel-test_0.1.0.zip',
142
+ :dir=>'tmp2')
143
+
144
+ begin
145
+ AndParcel::Parcel.install('tmp/andParcel-test_0.1.0.zip',
146
+ :dir=>'tmp2')
147
+ assert false
148
+ rescue
149
+ # OK, life is good
150
+ end
151
+ ensure
152
+ FileUtils.rm_rf 'tmp'
153
+ FileUtils.rm_rf 'tmp2'
154
+ end
155
+ end
156
+
157
+ test "should fail to install a parcel that does not exist" do
158
+ begin
159
+ clone_receiver
160
+ AndParcel::Parcel.install('tmp/andParcel-test_0.1.0.zip',
161
+ :dir=>'tmp2')
162
+ assert false
163
+ rescue
164
+ # OK, life is good
165
+ ensure
166
+ FileUtils.rm_rf 'tmp2'
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,218 @@
1
+ require 'fileutils'
2
+ require 'rubygems'
3
+ require "protest"
4
+ require "lib/andparcel"
5
+
6
+ Protest.context("The parcel engine") do
7
+ def load_config(target)
8
+ Zip::ZipFile.open(target) do |zf|
9
+ JSON.parse(zf.read('parcel.json'))
10
+ end
11
+ end
12
+
13
+ def config_assert(config)
14
+ assert config['name']=='andParcel-test'
15
+ assert config['version']=='0.1.0'
16
+ assert config['parcel-version']==AndParcel.version
17
+ assert config['dependencies']==nil
18
+ end
19
+
20
+ context("when packaging a parcel") do
21
+ test "should support a parcel with no meaningful content" do
22
+ begin
23
+ FileUtils.mkdir 'tmp'
24
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
25
+ :dir=>'tmp')
26
+ assert target=='tmp/andParcel-test_0.1.0.zip'
27
+ assert File.exists?(target)
28
+ config=load_config(target)
29
+ config_assert(config)
30
+ ensure
31
+ FileUtils.rm_rf 'tmp'
32
+ end
33
+ end
34
+
35
+ test "should support a parcel with JARs" do
36
+ begin
37
+ FileUtils.mkdir 'tmp'
38
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
39
+ :dir=>'tmp',
40
+ :jars=>'libs')
41
+ assert target=='tmp/andParcel-test_0.1.0.zip'
42
+ assert File.exists?(target)
43
+ config=load_config(target)
44
+ config_assert(config)
45
+
46
+ matches=0
47
+ Zip::ZipFile.open(target) do |zf|
48
+ zf.entries.each do |entry|
49
+ if ('libs/one.jar'==entry.name ||
50
+ 'libs/two.jar'==entry.name)
51
+ matches+=1
52
+ end
53
+ end
54
+ end
55
+ assert matches==2
56
+ ensure
57
+ FileUtils.rm_rf 'tmp'
58
+ end
59
+ end
60
+
61
+ test "should support a parcel with documentation" do
62
+ begin
63
+ FileUtils.mkdir 'tmp'
64
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
65
+ :dir=>'tmp',
66
+ :docs=>'docs')
67
+ assert target=='tmp/andParcel-test_0.1.0.zip'
68
+ assert File.exists?(target)
69
+ config=load_config(target)
70
+ config_assert(config)
71
+
72
+ matches=0
73
+ Zip::ZipFile.open(target) do |zf|
74
+ zf.entries.each do |entry|
75
+ if ('docs/README'==entry.name)
76
+ matches+=1
77
+ end
78
+ end
79
+ end
80
+ assert matches==1
81
+ ensure
82
+ FileUtils.rm_rf 'tmp'
83
+ end
84
+ end
85
+
86
+ test "should support a parcel with resources" do
87
+ begin
88
+ FileUtils.mkdir 'tmp'
89
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
90
+ :dir=>'tmp',
91
+ :res=>'res')
92
+ assert target=='tmp/andParcel-test_0.1.0.zip'
93
+ assert File.exists?(target)
94
+ config=load_config(target)
95
+ config_assert(config)
96
+
97
+ matches=0
98
+ Zip::ZipFile.open(target) do |zf|
99
+ zf.entries.each do |entry|
100
+ if ('res/layout/andParcel_test_row.xml'==entry.name ||
101
+ 'res/values/strings.xml'==entry.name)
102
+ matches+=1
103
+ end
104
+ end
105
+ end
106
+ assert matches==2
107
+ ensure
108
+ FileUtils.rm_rf 'tmp'
109
+ end
110
+ end
111
+
112
+ # test "should support a parcel with dependencies"
113
+
114
+ test "should support a parcel with all sorts of stuff" do
115
+ begin
116
+ FileUtils.mkdir 'tmp'
117
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
118
+ :dir=>'tmp',
119
+ :jars=>'libs',
120
+ :docs=>'docs')
121
+ assert target=='tmp/andParcel-test_0.1.0.zip'
122
+ assert File.exists?(target)
123
+ config=load_config(target)
124
+ config_assert(config)
125
+
126
+ matches=0
127
+ Zip::ZipFile.open(target) do |zf|
128
+ zf.entries.each do |entry|
129
+ if ('libs/one.jar'==entry.name ||
130
+ 'libs/two.jar'==entry.name)
131
+ matches+=1
132
+ end
133
+ end
134
+ end
135
+ assert matches==2
136
+
137
+ matches=0
138
+ Zip::ZipFile.open(target) do |zf|
139
+ zf.entries.each do |entry|
140
+ if ('docs/README'==entry.name)
141
+ matches+=1
142
+ end
143
+ end
144
+ end
145
+ assert matches==1
146
+ ensure
147
+ FileUtils.rm_rf 'tmp'
148
+ end
149
+ end
150
+
151
+ test "should fail if try to package with missing parcel.json" do
152
+ begin
153
+ FileUtils.mkdir 'tmp'
154
+
155
+ begin
156
+ target=AndParcel::Parcel.package('test/ThisDoesNotExist/parcel.json',
157
+ :dir=>'tmp')
158
+ assert false
159
+ rescue
160
+ assert Dir['tmp/*'].empty?
161
+ end
162
+ ensure
163
+ FileUtils.rm_rf 'tmp'
164
+ end
165
+ end
166
+
167
+ test "should fail if try to package with missing JARs" do
168
+ begin
169
+ FileUtils.mkdir 'tmp'
170
+
171
+ begin
172
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
173
+ :dir=>'tmp',
174
+ :jars=>'libs-fake')
175
+ assert false
176
+ rescue
177
+ assert Dir['tmp/*'].empty?
178
+ end
179
+ ensure
180
+ FileUtils.rm_rf 'tmp'
181
+ end
182
+ end
183
+
184
+ test "should fail if try to package with missing documentation" do
185
+ begin
186
+ FileUtils.mkdir 'tmp'
187
+
188
+ begin
189
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
190
+ :dir=>'tmp',
191
+ :docs=>'docs-fake')
192
+ assert false
193
+ rescue
194
+ assert Dir['tmp/*'].empty?
195
+ end
196
+ ensure
197
+ FileUtils.rm_rf 'tmp'
198
+ end
199
+ end
200
+
201
+ test "should fail if try to package with missing resources" do
202
+ begin
203
+ FileUtils.mkdir 'tmp'
204
+
205
+ begin
206
+ target=AndParcel::Parcel.package('test/ParcelToPackage/parcel.json',
207
+ :dir=>'tmp',
208
+ :res=>'res-fake')
209
+ assert false
210
+ rescue
211
+ assert Dir['tmp/*'].empty?
212
+ end
213
+ ensure
214
+ FileUtils.rm_rf 'tmp'
215
+ end
216
+ end
217
+ end
218
+ end