File: access_spec.rb

package info (click to toggle)
jruby 9.3.9.0%2Bds-8
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 80,856 kB
  • sloc: ruby: 517,823; java: 260,094; xml: 31,930; ansic: 5,777; yacc: 4,973; sh: 1,163; makefile: 105; jsp: 48; tcl: 40; exp: 11
file content (131 lines) | stat: -rw-r--r-- 4,382 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require File.dirname(__FILE__) + "/../spec_helper"

describe "java package" do
  it 'is accessible directly when starting with java, javax, com, or org' do
    # Using static methods here for simplicity; avoiding construction.
    expect(java.lang).to eq(JavaUtilities.get_package_module_dot_format("java.lang"))
    expect(java.lang.System).to respond_to 'getProperty'

    expect(javax.management).to eq(JavaUtilities.get_package_module_dot_format("javax.management"))
    expect(javax.management.MBeanServerFactory).to respond_to 'createMBeanServer'

    expect(org.xml.sax.helpers).to eq(JavaUtilities.get_package_module_dot_format("org.xml.sax.helpers"))
    expect(org.xml.sax.helpers.ParserFactory).to respond_to 'makeParser'

    expect(java.util).to eq(JavaUtilities.get_package_module_dot_format("java.util"))
    expect(java.util.Arrays).to respond_to "asList"
  end

  it "can be imported using 'include_package package.module" do
    m = Module.new { include_package java.lang }
    expect(m::System).to respond_to 'getProperty'
  end

  it "can be imported using 'include_package \"package.module\"'" do
    m = Module.new { include_package 'java.lang' }
    expect(m::System).to respond_to :getProperty
  end

  it "can be imported using 'import package.module" do
    m = Module.new { import java.lang }
    expect(m::System).to respond_to 'currentTimeMillis'
  end

  it "can be imported using 'import \"package.module\"'" do
    m = Module.new { import 'java.lang' }
    m::System.currentTimeMillis
  end

  it "supports const_get" do
    expect(java.util.respond_to?(:const_get)).to be true
    expect(java.util.const_get("Arrays")).to respond_to "asList"
  end

  it "supports const_get with inherit argument" do
    expect( java.util.const_get(:Arrays, false) ).to respond_to :asList
  end

  it "can be accessed using Java module and CamelCase" do
    expect(Java::JavaLang).to eq(java.lang)
    expect(Java::ComBlahV8Something).to eq(com.blah.v8.something)
    expect(Java::X_Y_).to eq(Java::x_.y_)
  end

  it 'sub-packages work with const_get' do
    java.const_get(:util)
    pkg = java::util.const_get(:zip)
    expect( pkg ).to be_a Module
    expect( pkg.is_a?(Class) ).to be false
    expect( pkg ).to equal Java::JavaUtilZip

    klass = java::util.const_get(:StringTokenizer)
    expect( klass ).to be_a Class
    expect( klass.name ).to eql 'Java::JavaUtil::StringTokenizer'

    pkg = Java::JavaxSecurityAuth.const_get(:callback, true)
    expect( pkg ).to eql Java::javax::security::auth::callback
  end

  it 'does not inherit constants' do
    #expect( Java::JavaLang::TOP_LEVEL_BINDING ).to raise_error(NameError)
    begin
      Java::JavaLang::TOP_LEVEL_BINDING
    rescue NameError
    else; fail 'error not raised' end
    #expect( Java::java.util::Object ).to raise_error(NameError)
    begin
      Java::java.util::Object
    rescue NameError
    else; fail 'error not raised' end
  end

  it 'fails with argument passed to package method' do
    begin
      javax.script(1)
    rescue ArgumentError => e
      expect( e.message ).to eql "Java package 'javax' does not have a method `script' with 1 argument"
    else; fail 'error not raised' end
  end

  # See GH issue ruboto/JRuby9K_POC#7
  it "allows calling const_missing" do
    expect(java.lang.const_missing(:System)).to eq(java.lang.System)
  end

  it "allows calling method_missing" do
    expect(java.lang.method_missing(:reflect)).to eq(java.lang.reflect)
  end

end

# for DefaultPackageClass
$CLASSPATH << File.dirname(__FILE__) + "/../../../target/test-classes"

describe "class in default package" do

  it "can be opened using Java::Foo syntax" do
    expect( Java::DefaultPackageClass.new.foo ).to eql "foo"
    class Java::DefaultPackageClass
      def bar; 'bar'; end
    end
    expect( Java::DefaultPackageClass.new.bar ).to eql "bar"
    expect( Java::DefaultPackageClass.new.foo ).to eql "foo"

    class Java::java::util::StringTokenizer
      def xxx; 'xxx' end
    end
    expect( java::util::StringTokenizer.new('').xxx ).to eql 'xxx'
  end

  it "does not failover to a package if there are classloading errors" do
    expect do
      Java::BadStaticInit.new
    end.to raise_error(NameError)
  end

  it "has accessible public fields" do
    expect( Java::DefaultPackageClass.new.x ).to eql 0
    expect( Java::DefaultPackageClass.anY ).to eql 1
  end

end