core_ex 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/NEWS +39 -1
  2. data/SPEC.dyn.yml +6 -6
  3. data/SPEC.gemspec +13 -0
  4. data/SPEC.yml +3 -3
  5. data/lib/core_ex/dependencies_ext/constant_load_path.rb +23 -0
  6. data/lib/core_ex/embedded_tests.rb +29 -23
  7. data/lib/core_ex/enumerable.rb +10 -18
  8. data/lib/core_ex/exception.rb +24 -21
  9. data/lib/core_ex/file_utils.rb +51 -0
  10. data/lib/core_ex/module/attr_once.rb +41 -0
  11. data/lib/core_ex/module/import.rb +28 -0
  12. data/lib/core_ex/module/mix_in_with_args.rb +267 -0
  13. data/lib/core_ex/object/instance_eval_with_args.rb +56 -0
  14. data/lib/core_ex/object/singleton_class.rb +78 -0
  15. data/lib/core_ex/object/the_first_time.rb +32 -0
  16. data/lib/core_ex/pathname.rb +268 -164
  17. data/lib/core_ex/proc.rb +77 -0
  18. data/lib/core_ex/rakefile_base.rf +93 -51
  19. data/lib/core_ex/require.rb +43 -384
  20. data/lib/core_ex/string.rb +52 -41
  21. data/lib/core_ex/time.rb +26 -41
  22. data/lib/core_ex/try_dup.rb +68 -0
  23. data/lib/core_ex/yaml.rb +103 -100
  24. data/lib/core_ex.rb +246 -35
  25. data/lib/{core_ex/dtime.rb → d_time.rb} +36 -22
  26. data/lib/{core_ex/dumpable_proc.rb → dumpable_proc.rb} +1 -2
  27. data/lib/{core_ex/pathlist.rb → path_list.rb} +111 -63
  28. data/lib/{core_ex/temp_path.rb → temp_path.rb} +55 -41
  29. data/lib/{core_ex/test/unit/ui/yaml/testrunner.rb → test/unit/u_i/yaml/test_runner.rb} +7 -10
  30. data/lib/{core_ex/version.rb → version.rb} +4 -7
  31. data/lib/yaml_extension.rb +78 -0
  32. data/test/check-core_ex.yml +6 -8
  33. data/test/check-pkg-core_ex.yml +3 -6
  34. data/test/sanity/multiple-requires.yml +41 -17
  35. data/test/sanity/single-requires.yml +36 -20
  36. data/test/sanity-suite.yml +5 -7
  37. data/test/test-unit-setup.rb +11 -3
  38. data/test/unit-suite.yml +8 -9
  39. metadata +35 -13
  40. data/lib/core_ex/attr_once.rb +0 -36
  41. data/lib/core_ex/fileutils.rb +0 -44
@@ -1,7 +1,7 @@
1
1
  # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
2
  # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
3
  # License:: Gnu General Public License.
4
- # Revision:: $Id: pathlist.rb 295 2005-06-18 11:22:24Z ertai $
4
+ # Revision:: $Id: path_list.rb 336 2005-09-06 20:32:49Z ertai $
5
5
  #--
6
6
  # Copyright (c) 2003, 2004 Jim Weirich
7
7
  #
@@ -26,48 +26,6 @@
26
26
  #++
27
27
  #
28
28
 
29
- # Some objects are dupable, some are not. So we define a version of
30
- # dup (called rake_dup) that returns self on the handful of classes
31
- # that are not dupable.
32
-
33
- unless respond_to? :rake_dup
34
- module Kernel
35
- # Duplicate an object if it can be duplicated. If it can not be
36
- # cloned or duplicated, then just return the original object.
37
- def rake_dup()
38
- dup
39
- end
40
- end
41
-
42
- [NilClass, FalseClass, TrueClass, Fixnum, Symbol].each do |clazz|
43
- clazz.class_eval {
44
- # Duplicate an object if it can be duplicated. If it can not be
45
- # cloned or duplicated, then just return the original object.
46
- def rake_dup() self end
47
- }
48
- end
49
- end
50
-
51
- ######################################################################
52
- # User defined methods to be added to String.
53
- #
54
- class String
55
- unless instance_methods.include? "ext"
56
- # Replace the file extension with +newext+. If there is no
57
- # extenson on the string, append the new extension to the end. If
58
- # the new extension is not given, or is the empty string, remove
59
- # any existing extension.
60
- #
61
- # +ext+ is a user added method for the String class.
62
- def ext(newext='')
63
- return self.dup if ['.', '..'].include? self
64
- if newext != ''
65
- newext = (newext =~ /^\./) ? newext : ("." + newext)
66
- end
67
- dup.sub!(%r(([^/\\])\.[^./\\]*$)) { $1 + newext } || self + newext
68
- end
69
- end
70
- end
71
29
 
72
30
  #
73
31
  # PathList is essentially based on FileList from Rake.
@@ -88,17 +46,17 @@ end
88
46
  # element of the PathList/Array is requested, the pending patterns
89
47
  # are resolved into a real list of file names.
90
48
  #
91
- class PathList
49
+ class PathList
92
50
 
93
51
  def clone
94
52
  sibling = self.class.new
95
53
  instance_variables.each do |ivar|
96
54
  value = self.instance_variable_get(ivar)
97
- sibling.instance_variable_set(ivar, value.rake_dup)
55
+ sibling.instance_variable_set(ivar, value.try_dup)
98
56
  end
99
57
  sibling
100
58
  end
101
- alias dup clone
59
+ alias_method :dup, :clone
102
60
 
103
61
  # == Method Delegation
104
62
  #
@@ -137,9 +95,9 @@ class PathList
137
95
  compact flatten uniq values_at
138
96
  + - & |
139
97
  ]
140
-
98
+
141
99
  DELEGATING_METHODS = (ARRAY_METHODS + MUST_DEFINE - MUST_NOT_DEFINE).sort.uniq
142
-
100
+
143
101
  # Now do the delegation.
144
102
  DELEGATING_METHODS.each_with_index do |sym, i|
145
103
  if SPECIAL_RETURN.include?(sym)
@@ -148,7 +106,7 @@ class PathList
148
106
  def #{sym}(*args, &block)
149
107
  resolve if @pending
150
108
  result = @items.send(:#{sym}, *args, &block)
151
- PathList.new.import(result)
109
+ PathList.import result
152
110
  end
153
111
  }, __FILE__, ln
154
112
  else
@@ -203,8 +161,8 @@ class PathList
203
161
  @pending = true
204
162
  self
205
163
  end
206
- alias :add :include
207
-
164
+ alias_method :add, :include
165
+
208
166
  # Register a list of file name patterns that should be excluded
209
167
  # from the list. Patterns may be regular expressions, glob
210
168
  # patterns or regular strings.
@@ -235,7 +193,7 @@ class PathList
235
193
 
236
194
 
237
195
 
238
-
196
+
239
197
  # Clear all the exclude patterns so that we exclude nothing.
240
198
  def clear_exclude
241
199
  @exclude_patterns = []
@@ -264,7 +222,7 @@ class PathList
264
222
  result = @items * other
265
223
  case result
266
224
  when Array
267
- PathList.new.import(result)
225
+ PathList.import result
268
226
  else
269
227
  result
270
228
  end
@@ -305,7 +263,7 @@ class PathList
305
263
  case fn
306
264
  when Array
307
265
  fn.each { |f| self.resolve_add(f) }
308
- when %r{[*?]}
266
+ when %r{[*?\{]}
309
267
  add_matching(fn)
310
268
  else
311
269
  # >>>>
@@ -368,7 +326,7 @@ class PathList
368
326
  self
369
327
  end
370
328
 
371
- # Return a new array with <tt>String#ext</tt> method applied to
329
+ # Return a new array with <tt>Pathname#ext</tt> method applied to
372
330
  # each member of the array.
373
331
  #
374
332
  # This method is a shortcut for:
@@ -383,32 +341,61 @@ class PathList
383
341
 
384
342
  # PathList version of partition. Needed because the nested arrays
385
343
  # should be PathLists in this version.
386
- def partition(&block) # :nodoc:
344
+ def partition(&block) # :nodoc:
387
345
  resolve
388
346
  result = @items.partition(&block)
389
347
  [
390
- PathList.new.import(result[0]),
391
- PathList.new.import(result[1]),
348
+ PathList.import(result[0]),
349
+ PathList.import(result[1]),
392
350
  ]
393
351
  end
394
-
352
+
395
353
  # Convert a PathList to a string by joining all elements with a space.
396
354
  def to_s
397
355
  resolve if @pending
398
356
  self.join(' ')
399
357
  end
400
358
 
359
+ have YamlExtension, :pathlist, :filelist
360
+
361
+ def self.yaml_load ( val )
362
+ new(val)
363
+ end
364
+
401
365
  def to_yaml ( opts={} )
402
366
  resolve if @pending
403
367
  to_a.to_yaml(opts)
404
368
  end
405
369
 
370
+ class PathAndMatchData < Pathname
371
+ attr_reader :match
372
+ def initialize ( path, match )
373
+ super(path)
374
+ @match = match
375
+ end
376
+ end
377
+
406
378
  # Add matching glob patterns.
407
379
  def add_matching(pattern)
408
380
  # <<<<
381
+ pattern = pattern.to_s
382
+ re = Regexp.quote(pattern)
383
+ re.gsub!(/\\\{([^}]+)\\\}/) do
384
+ '(?:' + $1.gsub(/,/, '|') + ')'
385
+ end
386
+ re.gsub!(/\\\*\\\*\//, '(?:.+/)?')
387
+ re.gsub!(/\\\*/, '[^/]*')
388
+ re.gsub!(/\\\?/, '[^/]')
389
+ re.gsub!(/\\([()])/, '\1')
390
+ pattern.gsub!(/[()]/, '')
409
391
  Pathname.glob(pattern) do |fn|
410
392
  # >>>>
411
- self << fn unless exclude?(fn)
393
+ next if exclude?(fn)
394
+ if match_data = Regexp.new(re).match(fn.to_s)
395
+ self << PathAndMatchData.new(fn, match_data)
396
+ else
397
+ self << fn
398
+ end
412
399
  end
413
400
  end
414
401
  # <<<<
@@ -446,6 +433,10 @@ class PathList
446
433
  new(*args)
447
434
  end
448
435
 
436
+ def import(array)
437
+ new.import(array)
438
+ end
439
+
449
440
  # Set the ignore patterns back to the default value. The
450
441
  # default patterns will ignore files
451
442
  # * containing "CVS" in the file path
@@ -468,12 +459,69 @@ class PathList
468
459
  end
469
460
 
470
461
  # <<<<
471
- def require
472
- each { |x| x.require }
462
+ alias_method :traditional_each, :each
463
+ def each ( &block )
464
+ traditional_each do |x|
465
+ if x.is_a? PathAndMatchData
466
+ block[x, *x.match.to_a[1..-1]]
467
+ else
468
+ block[x]
469
+ end
470
+ end
471
+ end
472
+
473
+ def import!
474
+ traditional_each { |x| x.import! }
475
+ end
476
+
477
+ def load_path!
478
+ traditional_each { |x| x.load_path! }
473
479
  end
474
480
 
475
- def to_strings
481
+ def stringify
476
482
  map { |path| path.to_s }
477
483
  end
478
484
  # >>>>
479
485
  end
486
+
487
+ test_section __FILE__ do
488
+
489
+ class PathListTest < Test::Unit::TestCase
490
+ include YamlExtension::Assertions
491
+
492
+ def setup
493
+ @r = TempPath.new
494
+ @r.mkpath
495
+ @l = PathList[]
496
+ @args = []
497
+ @mo = lambda { |*a| @args << a }
498
+ %w[ foo barbar bazfoo foo/a foo/b ].each do |x|
499
+ (@r/x).mkpath
500
+ @l << @r/x
501
+ end
502
+ @l2 = PathList[@r/'(f?o)', @r/'b(a*)', @r/'fo,',
503
+ @r/'f.o', @r/'**/({a,b})']
504
+ @l3 = PathList[@r/'ba{rbar,zfoo}']
505
+ end
506
+
507
+ def test_each
508
+ @l.each(&@mo)
509
+ @l2.each(&@mo)
510
+ @l3.each(&@mo)
511
+ assert_equal([
512
+ [@r/'foo'], [@r/'barbar'], [@r/'bazfoo'], [@r/'foo/a'], [@r/'foo/b'],
513
+ [@r/'foo', 'foo'], [@r/'barbar', 'arbar'], [@r/'bazfoo', 'azfoo'],
514
+ [@r/'fo,'], [@r/'f.o'], [@r/'foo/a', 'a'], [@r/'foo/b', 'b'],
515
+ [@r/'barbar'], [@r/'bazfoo']
516
+ ], @args)
517
+ end
518
+
519
+ def test_pathlist
520
+ ls = __FILE__.to_path.dirname + '*.rb'
521
+ assert_yaml_load "--- !filelist #{ls}", PathList, PathList[ls]
522
+ assert_yaml_dump @val, @val.to_a.to_yaml
523
+ end
524
+
525
+ end # class PathListTest
526
+
527
+ end
@@ -2,25 +2,17 @@
2
2
  # Author: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
3
  # License: Gnu General Public License.
4
4
 
5
- # $LastChangedBy: polrop $
6
- # $Id: temp_path.rb 287 2005-06-10 13:25:50Z polrop $
5
+ # $LastChangedBy: ertai $
6
+ # $Id: temp_path.rb 351 2005-09-14 08:33:42Z ertai $
7
7
 
8
- require 'core_ex'
9
8
  require 'tempfile'
10
9
  require 'tmpdir'
11
- require 'set'
12
10
  require 'thread'
13
11
 
14
12
  class TempPath < Pathname
15
13
 
16
- @@tmps = Set.new
17
- @@mutex = Mutex.new
18
- @@progname = Pathname.new($0).basename
19
- @@tmpdir = Pathname.new(Dir.tmpdir) + "#{@@progname}.#{$$}"
20
- @@tmpdir.freeze
21
14
  @@initialized = false
22
- @@clean_planned = false
23
- @@auto_clean = true
15
+ @@mutex = Mutex.new
24
16
 
25
17
  # You can use a temporary pathname like that:
26
18
  #
@@ -58,11 +50,12 @@ class TempPath < Pathname
58
50
  # which follow this format:
59
51
  # => 'base.pid.uniq.ext
60
52
  #
61
- def initialize ( base=@@progname, ext='' )
62
- if base.to_s =~ /\//
53
+ def initialize ( base=nil, ext='' )
54
+ if base and base.to_s =~ /\//
63
55
  raise ArgumentError, "bad basename, you give me a pathname #{base}"
64
56
  end
65
57
  self.class.init
58
+ base ||= @@progname
66
59
  ext = ".#{ext}" unless ext.empty? or ext[0] == ?.
67
60
  res = nil
68
61
  @@mutex.synchronize do
@@ -103,42 +96,63 @@ class TempPath < Pathname
103
96
  true
104
97
  end
105
98
 
106
- def self.init #:nodoc:
107
- return if @@initialized
108
- @@mutex.synchronize do
99
+ class << self
100
+
101
+ def init ( tmp_base_dir=nil ) #:nodoc:
109
102
  return if @@initialized
110
- @@tmpdir.mkpath
111
- @@initialized = true
112
- at_exit { clean if @@auto_clean }
103
+ @@mutex.synchronize do
104
+ return if @@initialized
105
+ @@tmps = Set.new
106
+ @@progname = Pathname.new($0).basename
107
+ @@tmpdir = (tmp_base_dir || Dir.tmpdir).to_path + "#{@@progname}.#{$$}"
108
+ @@tmpdir.freeze
109
+ @@clean_planned = false
110
+ @@auto_clean = true
111
+ @@tmpdir.mkpath
112
+ @@initialized = true
113
+ at_exit { clean if @@auto_clean }
114
+ end
113
115
  end
114
- end
115
116
 
116
- # By default the autoclean is on.
117
- # But in some case (if you use your temppaths in at_exit)
118
- # You must disable the autoclean.
119
- # And manually call TempPath.clean at the very of the program.
120
- def self.clean ( &block )
121
- @@mutex.synchronize do
122
- return if @@clean_planned
123
- @@clean_planned = true
117
+ # Call TempPath.fork_init when you want to reset the global TempPath status.
118
+ # For example when you make a fork and you don't want that the child have
119
+ # and destroy the same temporary directory as the father.
120
+ # This method setup a child TempPath environement where the temporary directory
121
+ # of the child is in the father one (unless if you set +sub_dir+ to false)
122
+ def fork_init ( sub_dir=true )
123
+ @@tmpdir ||= nil
124
+ @@initialized = false
125
+ init((sub_dir)? @@tmpdir : nil)
124
126
  end
125
- begin
126
- block[] if block_given?
127
- ensure
128
- if @@tmpdir.exist?
129
- @@tmpdir.rmtree
130
- @@initialized = false
127
+
128
+ # By default the autoclean is on.
129
+ # But in some case (if you use your temppaths in at_exit)
130
+ # You must disable the autoclean.
131
+ # And manually call TempPath.clean at the very of the program.
132
+ def clean ( &block )
133
+ @@mutex.synchronize do
134
+ return if @@clean_planned
135
+ @@clean_planned = true
136
+ end
137
+ begin
138
+ block[] if block_given?
139
+ ensure
140
+ if @@tmpdir.exist?
141
+ @@tmpdir.rmtree
142
+ @@initialized = false
143
+ end
131
144
  end
132
145
  end
133
- end
134
146
 
135
- def self.auto_clean= ( aBool )
136
- @@auto_clean = aBool
137
- end
147
+ def auto_clean= ( aBool )
148
+ @@auto_clean = aBool
149
+ end
150
+
151
+ def tmpdir
152
+ init
153
+ @@tmpdir
154
+ end
138
155
 
139
- def self.tmpdir
140
- init
141
- @@tmpdir
142
156
  end
143
157
 
144
158
  end # class TempPath
@@ -3,14 +3,13 @@
3
3
  # License:: Ruby license.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: testrunner.rb 252 2005-05-31 23:41:42Z ertai $
6
+ # $Id: test_runner.rb 351 2005-09-14 08:33:42Z ertai $
7
7
 
8
8
 
9
9
  require 'test/unit/autorunner'
10
10
  require 'test/unit/ui/testrunnermediator'
11
11
  require 'test/unit/ui/testrunnermediator'
12
12
  require 'test/unit/ui/testrunnerutilities'
13
- require 'core_ex'
14
13
 
15
14
 
16
15
  module Test
@@ -81,15 +80,13 @@ module Test
81
80
  private
82
81
  def test_started(name)
83
82
  @test_start_time = Time.now
84
- @io.print(" #{name}:")
83
+ @io.print(" '#{name}':")
85
84
  @io.flush
86
85
  end
87
86
 
88
87
  private
89
88
  def test_finished(name)
90
- #FIXME: remove the double-quote when the TTK Dumper manages oneline
91
- # feature
92
- @io.puts(" \"[ #@test_outcome, #{Time.now - @test_start_time} ]\"")
89
+ @io.puts(" [ #@test_outcome, #{Time.now - @test_start_time} ]")
93
90
  @test_outcome = 'S'
94
91
  @io.flush
95
92
  end
@@ -101,15 +98,15 @@ module Test
101
98
 
102
99
  private
103
100
  def add_fault(fault)
104
- case fault.class.to_s
105
- when 'Test::Unit::Failure'
101
+ case fault
102
+ when Test::Unit::Failure
106
103
  @test_outcome = 'F'
107
104
  @failures << fault
108
- when 'Test::Unit::Error'
105
+ when Test::Unit::Error
109
106
  @test_outcome = 'E'
110
107
  @errors << fault
111
108
  else
112
- raise(Exception, 'unexpected fault!!')
109
+ raise(Exception, "unexpected fault (#{fault})!!")
113
110
  end
114
111
  end
115
112
 
@@ -1,11 +1,8 @@
1
- # Copyright: Copyright (c) 2004 Nicolas Despres. All rights reserved.
2
- # Author: Nicolas Despres <polrop@lrde.epita.fr>.
3
- # License: Gnu General Public License.
1
+ # Copyright:: Copyright (c) 2004 Nicolas Despres. All rights reserved.
2
+ # Author:: Nicolas Despres <polrop@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: version.rb 334 2005-09-04 14:29:40Z ertai $
4
5
 
5
- # $LastChangedBy: polrop $
6
- # $Id: version.rb 290 2005-06-11 06:48:17Z polrop $
7
-
8
- require 'core_ex'
9
6
 
10
7
  class Version
11
8
  include Comparable
@@ -0,0 +1,78 @@
1
+ # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
2
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
+ # License:: Gnu General Public License.
4
+ # Revision:: $Id: yaml_extension.rb 355 2005-09-15 23:18:43Z ertai $
5
+
6
+ require 'yaml'
7
+
8
+ module YamlExtension
9
+
10
+ setup do |*aliases|
11
+ theYamlType = aliases.shift
12
+ case theYamlType
13
+ when NilClass
14
+ theYamlType = self.name.downcase
15
+ when String
16
+ when Symbol
17
+ else
18
+ raise ArgumentError, "Expect a symbol or a string not: #{theYamlType}"
19
+ end
20
+
21
+ yamlTypes = aliases.dup
22
+ yamlTypes << theYamlType
23
+ yamlTypes.map! { |x| x.to_s.sub(/^!/, '') }
24
+
25
+ undef_method :to_yaml_type
26
+ old_to_yaml = :"#{theYamlType}_to_yaml"
27
+ alias_method old_to_yaml, :to_yaml
28
+ suppress(NoMethodError, NameError) { remove_method :to_yaml }
29
+
30
+ define_method(:to_yaml_type) { "!#{theYamlType}" }
31
+
32
+ theClass = self
33
+ yamlTypes.each do |yamlType|
34
+ YAML.add_builtin_type(yamlType) do |type, val|
35
+ theClass.yaml_load val
36
+ end
37
+ end
38
+ end
39
+
40
+ def to_yaml ( opts={} )
41
+ if respond_to? :to_yaml_string
42
+ YAML::quick_emit(self.object_id, opts) do |out|
43
+ out << "#{to_yaml_type} #{to_yaml_string}"
44
+ end
45
+ else
46
+ send(old_to_yaml, opts)
47
+ end
48
+ end
49
+
50
+
51
+ module Assertions
52
+
53
+ # @val is here to receive the result of YAML::load,
54
+ # @str receives the result of X.to_yaml,
55
+ # @ref is the reference string
56
+ attr_accessor :val, :str, :ref
57
+
58
+ def assert_yaml_load ( aString, aClass, anObject=nil )
59
+ assert_nothing_raised { @val = YAML::load(aString) }
60
+ assert_kind_of(aClass, @val)
61
+ assert_equal(anObject, @val) unless anObject.nil?
62
+ @ref = aString
63
+ end
64
+
65
+ def assert_yaml_dump ( anObject, ref, options={} )
66
+ assert_nothing_raised { @str = anObject.to_yaml(options) }
67
+ if ref.is_a? Regexp
68
+ assert_match(ref, @str)
69
+ else
70
+ assert_equal(ref, @str)
71
+ end
72
+ end
73
+
74
+ end # module Assertions
75
+
76
+
77
+ end # module YamlExtension
78
+
@@ -1,12 +1,10 @@
1
1
  ---
2
2
 
3
- CoreEx Main Test Suite:
3
+ CoreEx Main Test Suite: !S::Iterate
4
4
 
5
- strategy: Glob
6
- glob : <<pwd>>/*-suite.yml
7
- regexp : !re ([^/]*)\.yml$
5
+ over: !pathlist <<pwd>>/(*-suite.yml)
6
+ iter: [it_file, it_name]
8
7
 
9
- test:
10
- <<match>>:
11
- strategy: Import
12
- import : <<path>>
8
+ test:
9
+ <<it_name>>: !S::Import
10
+ import: <<it_file>>
@@ -1,15 +1,12 @@
1
1
  ---
2
2
 
3
3
  # Run this suite with -S 'url: scheme://the/url/to/the/ttk/package'
4
- CoreEx Package Test Suite:
5
- strategy: Suite
4
+ CoreEx Package Test Suite: !S::Suite
6
5
  contents:
7
6
 
8
- - Checkout:
9
- strategy: Checkout
7
+ - Checkout: !S::Checkout
10
8
  url: <<url>>
11
9
  fatal: true
12
10
 
13
- - Check the package:
14
- strategy: Import
11
+ - Check the package: !S::Import
15
12
  import: <<checkout_dir>>/test/check-core_ex.yml
@@ -1,20 +1,44 @@
1
1
  ---
2
2
 
3
- CoreEx Sanity Multiple Requires Test Suite:
3
+ CoreEx Sanity Multiple Requires Test Suite: !S::Suite
4
4
 
5
- strategy: Cmd
6
- command: ruby
7
- exit: 0
8
- error: ""
9
- output: !re 0 failures, 0 errors$
10
- args: -I<<pwd>>/../../lib
11
- input: |2
12
- require 'core_ex'
13
- CoreEx.require
14
- class TC_ < Test::Unit::TestCase
15
- def test_definitions
16
- CoreEx.each do |file|
17
- assert(RequireSystem.instance.required?(file), "#{file} not present")
18
- end
19
- end
20
- end
5
+ attributes: !S::Cmd
6
+ command: ruby
7
+ exit: 0
8
+ error: ""
9
+ output: !re 0 failures, 0 errors$
10
+ args: -I<<pwd>>/../../lib
11
+
12
+ contents:
13
+ - require:
14
+ input: |
15
+ require 'core_ex'
16
+ require 'test/unit'
17
+ class TC_ < Test::Unit::TestCase
18
+ def test_definitions
19
+ path_list = PathList['<<pwd>>/../../lib/(*).rb']
20
+ path_list.each do |path, name|
21
+ path = path.cleanpath.to_s
22
+ require path
23
+ assert($LOADED_FEATURES.include?(path),
24
+ "#{path} not in $LOADED_FEATURES #{$LOADED_FEATURES.inspect}")
25
+ end
26
+ end
27
+ end
28
+
29
+ - lazy loading:
30
+ input: |
31
+ require 'core_ex'
32
+ require 'test/unit'
33
+ class TC_ < Test::Unit::TestCase
34
+ def test_definitions
35
+ PathList['<<pwd>>/../../lib/(*).rb'].each do |path, name|
36
+ assert_nothing_raised("cannot camelize #{name}") do
37
+ @camel = name.camelize
38
+ end
39
+ assert_nothing_raised("#@camel not defined?") do
40
+ @camel.constantize
41
+ end
42
+ end
43
+ end
44
+ end