Skip to content

Commit

Permalink
Modified version of Sergio's fixes for JVMSCRIPT-3 plus some tests fo…
Browse files Browse the repository at this point in the history
…r package logic.
  • Loading branch information
headius committed Apr 24, 2009
1 parent 107907f commit 39141d4
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 7 deletions.
24 changes: 18 additions & 6 deletions lib/bitescript/builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,8 @@ def self.build(filename, &block)
end

def define_class(class_name, opts, &block)
pkg = opts[:package] || @package || []
pkg = opts[:package] || @package.dup || []

class_name = pkg.empty? ? class_name : "#{pkg.join('/')}/#{class_name}"
class_builder = ClassBuilder.new(self, class_name, @file_name, opts)
@class_builders[class_name] ||= class_builder # TODO Is this really what we want?
Expand Down Expand Up @@ -138,15 +139,26 @@ def line(line)
end

def package(*names)
elements = 0
return @package unless names.size > 0

packages = unpack_packages(*names)
@package.concat(packages)
yield
@package = @package[0..(packages.size - 1)]
end

def package=(name)
@package = unpack_packages(name)
end

def unpack_packages(*names)
package = []
names.each do |name_maybe_dotted|
name_maybe_dotted.split(/\./).each do |name|
elements += 1
@package.push name
package.push name
end
end
yield
elements.times {@package.pop}
package
end

def method?
Expand Down
32 changes: 31 additions & 1 deletion test/test_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ def dummy_constructor(class_builder)

def load_and_construct(name, class_builder)
class_bytes = class_builder.generate
File.open(name + ".class", 'w') {|f| f.write(class_bytes)}
cls = JRuby.runtime.jruby_class_loader.define_class(name, class_bytes.to_java_bytes)

cls.new_instance
Expand Down Expand Up @@ -426,4 +425,35 @@ def test_annotation
anno = method.annotation(JRubyMethod.java_class)
assert anno
end

def test_package_equals
@builder.package = "org.jruby"
cb = @builder.public_class(@class_name, @builder.object);
dummy_constructor(cb)
obj = load_and_construct("org.jruby.#{@class_name}", cb);

assert_equal "org.jruby.#{@class_name}", obj.class.java_class.to_s
end

def test_package_builder_list
obj = nil
@builder.package "org", "jruby" do
cb = @builder.public_class(@class_name, @builder.object);
dummy_constructor(cb)
obj = load_and_construct("org.jruby.#{@class_name}", cb);
end

assert_equal "org.jruby.#{@class_name}", obj.class.java_class.to_s
end

def test_package_builder_string
obj = nil
@builder.package "org.jruby" do
cb = @builder.public_class(@class_name, @builder.object);
dummy_constructor(cb)
obj = load_and_construct("org.jruby.#{@class_name}", cb);
end

assert_equal "org.jruby.#{@class_name}", obj.class.java_class.to_s
end
end

0 comments on commit 39141d4

Please sign in to comment.