bee 0.3.0 → 0.3.1

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.
data/README CHANGED
@@ -25,4 +25,4 @@ or go to URL http://www.apache.org/licenses/LICENSE-2.0).
25
25
 
26
26
  = Copyright
27
27
 
28
- bee version 0.3.0 (C) Michel Casabianca - 2006
28
+ bee version 0.3.1 (C) Michel Casabianca - 2006
@@ -69,11 +69,17 @@ end
69
69
  # Make a directory and parent directories if necessary. Doesn't complain if
70
70
  # directory already exists.
71
71
  # - dir: directory to create.
72
- def mkdir(dir)
73
- dir = evaluate_object(dir)
74
- error "Parameter must be a String" unless dir.kind_of?(String)
75
- require "fileutils"
76
- FileUtils.makedirs(dir)
72
+ def mkdir(dirs)
73
+ require 'fileutils'
74
+ dirs = evaluate_object(dirs)
75
+ error "mkdir parameter must a String or an array of Strings" unless
76
+ dirs.kind_of?(String) or dirs.kind_of?(Array)
77
+ for dir in dirs
78
+ dir = evaluate_object(dir)
79
+ error "mkdir parameter must a String or an array of Strings" unless
80
+ dir.kind_of?(String)
81
+ FileUtils.makedirs(dir)
82
+ end
77
83
  end
78
84
 
79
85
  # Copy a files or directoris to destination file or directory. Parameter is a
@@ -88,14 +94,19 @@ def cp(params)
88
94
  }
89
95
  check_task_parameters(params, params_desc)
90
96
  src = evaluate_object(params['src'])
97
+ error "cp 'src' parameter must a glob or a list of globs" unless
98
+ src.kind_of?(String) or src.kind_of?(Array)
91
99
  dest = evaluate_object(params['dest'])
100
+ error "cp 'dest' parameter must a glob or a list of globs" unless
101
+ dest.kind_of?(String)
92
102
  files = []
93
103
  for element in src
104
+ error "cp 'src' parameter must a glob or a list of globs" unless
105
+ element.kind_of?(String)
94
106
  files += Dir.glob(element)
95
107
  end
96
- for file in files
97
- FileUtils.cp_r(file, dest)
98
- end
108
+ files = files[0] if files.length == 1
109
+ FileUtils.cp_r(files, dest)
99
110
  end
100
111
 
101
112
  # Move source file(s) or directories to dest file or directory. Parameter is
@@ -110,37 +121,50 @@ def mv(params)
110
121
  }
111
122
  check_task_parameters(params, params_desc)
112
123
  src = evaluate_object(params['src'])
124
+ error "mv 'src' parameter must a glob or a list of globs" unless
125
+ src.kind_of?(String) or src.kind_of?(Array)
113
126
  dest = evaluate_object(params['dest'])
127
+ error "mv 'dest' parameter must a glob or a list of globs" unless
128
+ dest.kind_of?(String)
114
129
  files = []
115
130
  for element in src
131
+ error "mv 'src' parameter must a glob or a list of globs" unless
132
+ element.kind_of?(String)
116
133
  files += Dir.glob(element)
117
134
  end
118
- for file in files
119
- FileUtils.mv(file, dest)
120
- end
135
+ files = files[0] if files.length == 1
136
+ FileUtils.mv(files, dest)
121
137
  end
122
138
 
123
139
  # Delete files for a given glob. Parameter is a string for glob of files
124
140
  # to delete.
125
- def rm(glob)
141
+ def rm(globs)
126
142
  require 'fileutils'
127
- glob = evaluate_object(glob)
128
- error "rm parameter is a String" unless glob.kind_of?(String)
129
- files = Dir.glob(glob)
130
- for file in files
131
- FileUtils.rm_f(file)
143
+ globs = evaluate_object(globs)
144
+ error "rm parameter is a String or Array of Strings" unless
145
+ globs.kind_of?(String) or globs.kind_of?(Array)
146
+ for glob in globs
147
+ files = Dir.glob(glob)
148
+ for file in files
149
+ FileUtils.rm_f(file)
150
+ end
132
151
  end
133
152
  end
134
153
 
135
154
  # Delete directories recursively. Parameter is a string for glob of directories
136
155
  # to delete.
137
- def rmdir(glob)
156
+ def rmdir(globs)
138
157
  require 'fileutils'
139
- glob = evaluate_object(glob)
140
- error "rm parameter is a String" unless glob.kind_of?(String)
141
- dirs = Dir.glob(glob)
142
- for dir in dirs
143
- FileUtils.rm_rf(dir)
158
+ globs = evaluate_object(globs)
159
+ error "rm parameter is a String or an Array of Strings" unless
160
+ globs.kind_of?(String) or globs.kind_of?(Array)
161
+ for glob in globs
162
+ error "rm parameter is a String or an Array of Strings" unless
163
+ glob.kind_of?(String)
164
+ dirs = Dir.glob(glob)
165
+ for dir in dirs
166
+ FileUtils.rm_rf(dir)
167
+ end
144
168
  end
145
169
  end
146
170
 
@@ -155,9 +179,13 @@ def find(parameters)
155
179
  }
156
180
  check_task_parameters(parameters, params_desc)
157
181
  files = []
158
- globs = parameters['files']
182
+ globs = evaluate_object(parameters['files'])
183
+ error "find 'files' parameter is a String or an Array of Strings" unless
184
+ globs.kind_of?(String) or globs.kind_of?(Array)
159
185
  toprop = evaluate_object(parameters['toprop'])
160
186
  for glob in globs
187
+ error "find 'files' parameter is a String or an Array of Strings" unless
188
+ glob.kind_of?(String)
161
189
  files += Dir.glob(evaluate_object(glob))
162
190
  end
163
191
  set(toprop, files)
@@ -321,11 +349,13 @@ Example:
321
349
 
322
350
  "mkdir" =>
323
351
  "Make a directory and parent directories if necessary. Doesn't complain if
324
- directory already exists. Parameter is directory to create as a String.
352
+ directory already exists. Parameter is directory to create as a String or a
353
+ list of directories as Strings.
325
354
 
326
355
  Example:
327
356
 
328
- - mkdir \"foo/bar\"",
357
+ - mkdir: \"foo/bar\"
358
+ - mkdir: [\"foo\", \"bar\"]",
329
359
 
330
360
  "cp" =>
331
361
  "Copy files or directories to destination file or directory. Parameter is a
@@ -341,23 +371,24 @@ Example:
341
371
  dest: :doc",
342
372
 
343
373
  "mv" =>
344
- "Move source file(s) or directories to dest file or directory. Parameter is
345
- a Hahs with following entries:
374
+ "Move source file(s) or directory(ies) to dest file or directory. Parameter is
375
+ a Hash with following entries:
346
376
 
347
377
  - src: glob for files and directories to move.
348
378
  - dest: file or directory to move file(s) to.
349
379
 
350
380
  Example:
351
381
 
352
- - mv: { src: :gem_package, dest: :build }",
382
+ - mv: { src: \"**/*.java\", dest: \"trash\" }",
353
383
 
354
384
  "rm" =>
355
- "Delete files for a given glob. Parameter is a String or list of Strings for
356
- glob(s) of files to delete.
385
+ "Delete files for a given glob or list of globs. Parameter is a glob or list
386
+ of globs for files to delete.
357
387
 
358
388
  Example:
359
389
 
360
- - rm: \"**/*~\"",
390
+ - rm: \"**/*~\"
391
+ - rm: [\"**/*~\", \"**/.DS_Store\"]",
361
392
 
362
393
  "rmdir" =>
363
394
  "Delete directories recursively. Parameter is a string for glob of directories
@@ -368,8 +399,8 @@ Example:
368
399
  - rmdir: :build",
369
400
 
370
401
  "find" =>
371
- "Find files for a given glob and store list in a property. Parameter is
372
- a Hash with entries:
402
+ "Find files for a glob or list of globs and store list in a property.
403
+ Parameter is a Hash with entries:
373
404
 
374
405
  - files: glob or list of globs for files to look for.
375
406
  - toprop: name of the property to set.
@@ -0,0 +1,298 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2006 Michel Casabianca <casa@sweetohm.net>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test/unit'
18
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
19
+ require 'bee.rb'
20
+ require 'fileutils'
21
+
22
+ class TestBeeDefaultTasks < Test::Unit::TestCase
23
+
24
+ # Temporary directory.
25
+ TEMP_DIR = 'tmp'
26
+
27
+ # Constructor.
28
+ def initialize(*args)
29
+ super(*args)
30
+ @home = File.expand_path(File.dirname(__FILE__))
31
+ @working_dir = Dir.getwd
32
+ @tmp_dir = File.join(@home, TEMP_DIR)
33
+ # try to create temporary directory and disable tests if we can't
34
+ begin
35
+ FileUtils.makedirs(@tmp_dir)
36
+ @run_tests = true
37
+ rescue
38
+ @run_tests = false
39
+ end
40
+ end
41
+
42
+ # Run before any test:
43
+ # - Create temporary directory.
44
+ # - Create a context object and load tasks in it.
45
+ def setup
46
+ FileUtils.makedirs(@tmp_dir)
47
+ @context = Bee::Context.new
48
+ script = File.read(File.join(@home, '..', 'lib', 'bee_default_context.rb'))
49
+ @context.evaluate_script(script)
50
+ end
51
+
52
+ # Run after any test: delete temporary directory.
53
+ def teardown
54
+ FileUtils.rm_rf(@tmp_dir)
55
+ Dir.chdir(@working_dir)
56
+ end
57
+
58
+ ############################ UTILITY FUNCTIONS ##########################
59
+
60
+ # Clean temporary directory.
61
+ def clean_tmp
62
+ FileUtils.rm_rf(@tmp_dir)
63
+ FileUtils.makedirs(@tmp_dir)
64
+ end
65
+
66
+ # Create a given file in tmp directory with its name as contents.
67
+ # - name: file name, relative to temporary directory.
68
+ def create_file(name)
69
+ File.open(name, 'w') { |file| file.write(name) }
70
+ end
71
+
72
+ # Assert file exists and test its contents.
73
+ def assert_file(file, contents)
74
+ assert(File.exists?(file))
75
+ text = File.read(file)
76
+ assert_equal(contents, text)
77
+ end
78
+
79
+ ############################ TEST FUNCTIONS #############################
80
+
81
+ # Test task print.
82
+ # TODO: implement.
83
+ def test_task_print
84
+ return unless @run_tests
85
+ end
86
+
87
+ # Test task cat.
88
+ # TODO: implement.
89
+ def test_task_cat
90
+ return unless @run_tests
91
+ end
92
+
93
+ # Test task cd.
94
+ def test_task_cd
95
+ return unless @run_tests
96
+ working_dir = File.expand_path(File.dirname(__FILE__))
97
+ # test nominal case
98
+ @context.cd(@tmp_dir)
99
+ expected = @tmp_dir
100
+ actual = Dir.getwd
101
+ assert_equal(expected, actual)
102
+ # test changing to a directory that doesn't exists
103
+ begin
104
+ dir = File.join(@tmp_dir, 'lkjqzcjv')
105
+ @context.cd(dir)
106
+ flunk "Should have raised an Errno::ENOENT"
107
+ rescue Errno::ENOENT
108
+ end
109
+ # test bad arguments
110
+ begin
111
+ @context.cd(Object.new)
112
+ flunk "Should have raised a BuildError"
113
+ rescue Bee::BuildError
114
+ expected = 'cd parameter is a String'
115
+ actual = $!.message
116
+ assert_equal(expected, actual)
117
+ end
118
+ end
119
+
120
+ # Test task mkdir.
121
+ def test_task_mkdir
122
+ return unless @run_tests
123
+ # nominal case with a single recursive dir
124
+ dir = File.join(@tmp_dir, 'foo', 'bar')
125
+ @context.mkdir(dir)
126
+ expected = true
127
+ actual = File.exists?(dir) and File.directory?(dir)
128
+ assert_equal(expected, actual)
129
+ # nominal case with a list of directories
130
+ dirs = [File.join(@tmp_dir, 'toto'), File.join(@tmp_dir, 'titi')]
131
+ @context.mkdir(dirs)
132
+ found = Dir.entries(@tmp_dir)
133
+ assert(found.member?('toto'))
134
+ assert(found.member?('titi'))
135
+ # error case
136
+ dir = Object.new
137
+ begin
138
+ @context.mkdir(dir)
139
+ flunk "Should have raised a BuildError"
140
+ rescue Bee::BuildError => e
141
+ expected = 'mkdir parameter must a String or an array of Strings'
142
+ actual = $!.message
143
+ assert_equal(expected, actual)
144
+ end
145
+ # another error case
146
+ dirs = [File.join(@tmp_dir, 'foo'), Object.new]
147
+ begin
148
+ @context.mkdir(dirs)
149
+ flunk "Should have raised a BuildError"
150
+ rescue Bee::BuildError => e
151
+ expected = 'mkdir parameter must a String or an array of Strings'
152
+ actual = $!.message
153
+ assert_equal(expected, actual)
154
+ end
155
+ end
156
+
157
+ # Test task cp.
158
+ def test_task_cp
159
+ return unless @run_tests
160
+ # nominal case for a src and dest file
161
+ src = File.join(@tmp_dir, 'src.txt')
162
+ create_file(src)
163
+ dest = File.join(@tmp_dir, 'dest.txt')
164
+ @context.cp({ 'src' => src, 'dest' => dest })
165
+ assert_file(dest, src)
166
+ # nominal case for src files and destination directory
167
+ clean_tmp
168
+ src2 = File.join(@tmp_dir, 'src2.txt')
169
+ dest = File.join(@tmp_dir, 'dir')
170
+ create_file(src)
171
+ create_file(src2)
172
+ FileUtils.makedirs(dest)
173
+ @context.cp({ 'src' => [src, src2], 'dest' => dest })
174
+ assert_file(File.join(dest, 'src.txt'), src)
175
+ assert_file(File.join(dest, 'src2.txt'), src2)
176
+ # nominal case for src and dest directory
177
+ clean_tmp
178
+ src = File.join(@tmp_dir, 'dir')
179
+ dest = File.join(@tmp_dir, 'todir')
180
+ FileUtils.makedirs(src)
181
+ FileUtils.makedirs(dest)
182
+ file1 = File.join(src, 'file1.txt')
183
+ file2 = File.join(src, 'file2.txt')
184
+ create_file(file1)
185
+ create_file(file2)
186
+ @context.cp({ 'src' => src, 'dest' => dest })
187
+ assert_file(File.join(dest, 'dir', 'file1.txt'), file1)
188
+ assert_file(File.join(dest, 'dir', 'file2.txt'), file2)
189
+ end
190
+
191
+ # Test task mv.
192
+ def test_task_mv
193
+ return unless @run_tests
194
+ # nominal case for a src and dest file
195
+ src = File.join(@tmp_dir, 'src.txt')
196
+ create_file(src)
197
+ dest = File.join(@tmp_dir, 'dest.txt')
198
+ @context.mv({ 'src' => src, 'dest' => dest })
199
+ assert_file(dest, src)
200
+ assert(!File.exists?(File.join(@tmp_dir, src)))
201
+ # nominal case with two source files
202
+ clean_tmp
203
+ src = File.join(@tmp_dir, 'src.txt')
204
+ src2 = File.join(@tmp_dir, 'src2.txt')
205
+ dest = File.join(@tmp_dir, 'dir')
206
+ create_file(src)
207
+ create_file(src2)
208
+ FileUtils.makedirs(dest)
209
+ @context.mv({ 'src' => File.join(@tmp_dir, '*.txt'), 'dest' => dest })
210
+ assert_file(File.join(dest, 'src.txt'), src)
211
+ assert_file(File.join(dest, 'src2.txt'), src2)
212
+ assert(!File.exists?(src))
213
+ assert(!File.exists?(src2))
214
+ # nominal case with directory for src and dest
215
+ clean_tmp
216
+ src = File.join(@tmp_dir, 'dir1')
217
+ dest = File.join(@tmp_dir, 'dir2')
218
+ FileUtils.makedirs(src)
219
+ create_file(File.join(src, 'test.txt'))
220
+ @context.mv({ 'src' => src, 'dest' => dest })
221
+ assert(File.exists?(dest))
222
+ assert(File.directory?(dest))
223
+ assert_file(File.join(dest, 'test.txt'), File.join(src, 'test.txt'))
224
+ assert(!File.exists?(src))
225
+ end
226
+
227
+ # Test task rm.
228
+ def test_task_rm
229
+ return unless @run_tests
230
+ # nominal case with a glob
231
+ file = File.join(@tmp_dir, 'test.txt')
232
+ create_file(file)
233
+ @context.rm(File.join(@tmp_dir, file))
234
+ assert(!File.exists?(File.join(@tmp_dir, file)))
235
+ # nominal case with two globs and three files
236
+ clean_tmp
237
+ file1 = File.join(@tmp_dir, 'test1.txt')
238
+ file2 = File.join(@tmp_dir, 'test2.txt')
239
+ file3 = File.join(@tmp_dir, 'test3.log')
240
+ create_file(file1)
241
+ create_file(file2)
242
+ create_file(file3)
243
+ @context.rm([File.join(@tmp_dir, '**/*.txt'),
244
+ File.join(@tmp_dir, '**/*.log')])
245
+ assert(!File.exists?(file1))
246
+ assert(!File.exists?(file2))
247
+ assert(!File.exists?(file3))
248
+ end
249
+
250
+ # Test task rmdir.
251
+ def test_task_rmdir
252
+ return unless @run_tests
253
+ # nominal case with one dir
254
+ dir = File.join(@tmp_dir, 'dir')
255
+ FileUtils.makedirs(dir)
256
+ @context.rmdir(dir)
257
+ assert(!File.exists?(dir))
258
+ # nominal case with two dirs
259
+ clean_tmp
260
+ dir1 = File.join(@tmp_dir, 'dir1')
261
+ dir2 = File.join(@tmp_dir, 'dir2')
262
+ FileUtils.makedirs(dir1)
263
+ FileUtils.makedirs(dir2)
264
+ @context.rmdir([dir1, dir2])
265
+ assert(!File.exists?(dir1))
266
+ assert(!File.exists?(dir2))
267
+ end
268
+
269
+ # Test task find.
270
+ def test_task_find
271
+ return unless @run_tests
272
+ file1 = File.join(@tmp_dir, 'file1.txt')
273
+ file2 = File.join(@tmp_dir, 'file2.txt')
274
+ dir = File.join(@tmp_dir, 'dir')
275
+ file3 = File.join(dir, 'file3.txt')
276
+ create_file(file1)
277
+ create_file(file2)
278
+ FileUtils.makedirs(dir)
279
+ create_file(file3)
280
+ @context.find({ 'files' => "#{File.join(@tmp_dir, '**/*.txt')}",
281
+ 'toprop' => 'list'})
282
+ list = @context.get('list').sort
283
+ expected = [file1, file2, file3].sort
284
+ assert_equal(expected, list)
285
+ end
286
+
287
+ # Test task erb.
288
+ def test_task_erb
289
+ return unless @run_tests
290
+ @context.set('test', 'TEST')
291
+ source = 'This is a <%= test %>'
292
+ @context.erb({ 'source' => source, 'toprop' => 'result' })
293
+ actual = @context.get('result')
294
+ expected = 'This is a TEST'
295
+ assert_equal(expected, actual)
296
+ end
297
+
298
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: bee
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.3.0
7
- date: 2006-11-08 00:00:00 +01:00
6
+ version: 0.3.1
7
+ date: 2006-11-10 00:00:00 +01:00
8
8
  summary: bee is a build tool
9
9
  require_paths:
10
10
  - lib
@@ -34,6 +34,7 @@ files:
34
34
  - lib/bee_console.rb
35
35
  - lib/bee_default_context.rb
36
36
  - test/tc_bee_console_formatter.rb
37
+ - test/tc_bee_default_tasks.rb
37
38
  - test/ts_bee.rb
38
39
  - README
39
40
  - LICENSE