codemodels-java 0.2.0-java
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/.gitignore +19 -0
- data/Gemfile +3 -0
- data/LICENSE +198 -0
- data/README.md +6 -0
- data/Rakefile +13 -0
- data/codemodels-java.gemspec +24 -0
- data/lib/codemodels/java/info_extraction.rb +110 -0
- data/lib/codemodels/java/java_models_builder.rb +17 -0
- data/lib/codemodels/java/language.rb +17 -0
- data/lib/codemodels/java/metamodel.rb +234 -0
- data/lib/codemodels/java/model_building.rb +42 -0
- data/lib/codemodels/java/parser.rb +83 -0
- data/lib/codemodels/java.rb +10 -0
- data/lib/jars/javaparser-1.0.8.jar +0 -0
- data/test/data/ActionButtonsColumnTag.java +100 -0
- data/test/data/AuthConstraint.java +17 -0
- data/test/data/CsvExporter.java +58 -0
- data/test/data/ReorderStoriesForm.java +100 -0
- data/test/data/TestIteration.java +192 -0
- data/test/data/example_accessors.java +24 -0
- data/test/data/example_basic.java +5 -0
- data/test/test_correspondences.rb +31 -0
- data/test/test_helper.rb +57 -0
- data/test/test_info_extraction.rb +258 -0
- data/test/test_metamodel.rb +133 -0
- data/test/test_parsing.rb +174 -0
- data/test/test_values.rb +361 -0
- metadata +188 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
package it.polito;
|
2
|
+
|
3
|
+
class MyClass {
|
4
|
+
|
5
|
+
private int myField;
|
6
|
+
private boolean aFlag;
|
7
|
+
|
8
|
+
public int getMyField(){
|
9
|
+
return myField;
|
10
|
+
}
|
11
|
+
|
12
|
+
public void setMyField(int value){
|
13
|
+
myField = value;
|
14
|
+
}
|
15
|
+
|
16
|
+
public boolean isAFlag(){
|
17
|
+
return aFlag;
|
18
|
+
}
|
19
|
+
|
20
|
+
public void setAFlag(boolean value){
|
21
|
+
aFlag = value;
|
22
|
+
}
|
23
|
+
|
24
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class TestCorrespondences < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include TestHelper
|
6
|
+
include CodeModels
|
7
|
+
include CodeModels::Java
|
8
|
+
|
9
|
+
J = CodeModels::Java
|
10
|
+
|
11
|
+
def test_correspondance_of_field
|
12
|
+
code = "class A extends B { int fieldB; int getB(){ return fieldB; } }"
|
13
|
+
nt = J.node_tree_from_code(code)
|
14
|
+
mt = J.parse_code(code)
|
15
|
+
model_field = mt.types[0].members[0]
|
16
|
+
node_field = nt.types[0].members[0]
|
17
|
+
assert_equal node_field, J.corresponding_node(model_field,nt)
|
18
|
+
assert_equal "int fieldB;", J.corresponding_node(model_field,nt).to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_corresponding_node_from_code
|
22
|
+
code = "class A extends B { int fieldB; int getB(){ return fieldB; } }"
|
23
|
+
nt = J.node_tree_from_code(code)
|
24
|
+
mt = J.parse_code(code)
|
25
|
+
model_field = mt.types[0].members[0]
|
26
|
+
node_field = nt.types[0].members[0]
|
27
|
+
assert_equal node_field, J.corresponding_node_from_code(model_field,code)
|
28
|
+
assert_equal "int fieldB;", J.corresponding_node_from_code(model_field,code).to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start do
|
3
|
+
add_filter "/test/"
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'codemodels/java'
|
7
|
+
require 'json'
|
8
|
+
require 'test/unit'
|
9
|
+
|
10
|
+
include CodeModels
|
11
|
+
|
12
|
+
module TestHelper
|
13
|
+
|
14
|
+
def assert_class(expected_class,node)
|
15
|
+
assert node.class==expected_class, "Node expected to have class #{expected_class} instead it has class #{node.class}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def relative_path(path)
|
19
|
+
File.join(File.dirname(__FILE__),path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def read_test_data(filename)
|
23
|
+
dir = File.dirname(__FILE__)
|
24
|
+
dir = File.join(dir,'data')
|
25
|
+
path = File.join(dir,filename)
|
26
|
+
IO.read(path)
|
27
|
+
end
|
28
|
+
|
29
|
+
def assert_all_attrs(expected,c)
|
30
|
+
actual = c.ecore.eAllAttributes
|
31
|
+
assert_equal expected.count,actual.count,"Expected #{expected.count} attrs, found #{actual.count}"
|
32
|
+
expected.each do |e|
|
33
|
+
assert actual.find {|a| a.name==e}, "Attribute #{e} not found"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def assert_all_refs(expected,c)
|
38
|
+
actual = c.ecore.eAllReferences
|
39
|
+
assert_equal expected.count,actual.count,"Expected #{expected.count} refs, found #{actual.count}"
|
40
|
+
expected.each do |e|
|
41
|
+
assert actual.find {|a| a.name==e}, "Reference #{e} not found"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def assert_ref(c,name,type,many=false)
|
46
|
+
ref = c.ecore.eAllReferences.find {|r| r.name==name}
|
47
|
+
assert_equal type.ecore.name,ref.eType.name
|
48
|
+
assert_equal many, ref.many
|
49
|
+
end
|
50
|
+
|
51
|
+
def assert_attr(c,name,type,many=false)
|
52
|
+
att = c.ecore.eAllAttributes.find {|a| a.name==name}
|
53
|
+
assert_equal type.name,att.eType.name
|
54
|
+
assert_equal many, att.many
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,258 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestInfoExtraction < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include CodeModels
|
6
|
+
include CodeModels::Java
|
7
|
+
include TestHelper
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@actionbuttonscomumntag_model_node = CodeModels::Java.parse_code(read_test_data('ActionButtonsColumnTag.java'))
|
11
|
+
@csvexporter_model_node = CodeModels::Java.parse_code(read_test_data('CsvExporter.java'))
|
12
|
+
@authconstraint_model_node = CodeModels::Java.parse_code(read_test_data('AuthConstraint.java'))
|
13
|
+
@testiteration_model_node = CodeModels::Java.parse_code(read_test_data('TestIteration.java'))
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_camel_to_words_single_word_upcase
|
17
|
+
assert_equal ['CIAO'],InfoExtraction.camel_to_words('CIAO')
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_camel_to_words_single_word_downcase
|
21
|
+
assert_equal ['ciao'],InfoExtraction.camel_to_words('ciao')
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_camel_to_words_proper_starting_down
|
25
|
+
assert_equal ['ciao','Bello'],InfoExtraction.camel_to_words('ciaoBello')
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_camel_to_words_proper_starting_up
|
29
|
+
assert_equal ['Ciao','Bello'],InfoExtraction.camel_to_words('CiaoBello')
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_camel_to_words_with_numbers
|
33
|
+
assert_equal ['test','1'],InfoExtraction.camel_to_words('test1')
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_camel_to_words_upcase_numbers
|
37
|
+
assert_equal ['TEST','1'],InfoExtraction.camel_to_words('TEST1')
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_camel_to_words_with_uppercase_word
|
41
|
+
assert_equal ['Ciao','BELLO','Come','Va'],InfoExtraction.camel_to_words('CiaoBELLOComeVa')
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_camel_to_words_empty
|
45
|
+
assert_equal [''],InfoExtraction.camel_to_words('')
|
46
|
+
end
|
47
|
+
|
48
|
+
def assert_map_equal(exp,act,model=nil)
|
49
|
+
fail "Unexpected keys #{act.keys-exp.keys}. Actual map: #{act}" if (act.keys-exp.keys).count > 0
|
50
|
+
fail "Missing keys #{exp.keys-act.keys}. Actual map: #{act}" if (exp.keys-act.keys).count > 0
|
51
|
+
exp.each do |k,exp_v|
|
52
|
+
fail "For #{k} expected #{exp_v}, found #{act[k]}, model=#{model}" if act[k]!=exp_v
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_proper_terms_extraction_on_bean
|
57
|
+
code = %q{
|
58
|
+
class MyBean {
|
59
|
+
private String notSoGoodFieldName;
|
60
|
+
|
61
|
+
public String getNotSoGoodFieldName(){ return notSoGoodFieldName; }
|
62
|
+
|
63
|
+
public void setNotSoGoodFieldName(String notSoGoodFieldName){ this.notSoGoodFieldName = notSoGoodFieldName; }
|
64
|
+
|
65
|
+
public String toString(){
|
66
|
+
return "MyBean [notSoGoodFieldName: "+notSoGoodFieldName+"]";
|
67
|
+
}
|
68
|
+
|
69
|
+
public int hashCode(){
|
70
|
+
return notSoGoodFieldName.hashCode();
|
71
|
+
}
|
72
|
+
|
73
|
+
public boolean equals(Object obj){
|
74
|
+
if(this == obj) return true;
|
75
|
+
if((obj == null) || !(obj instanceof MyBean)) return false;
|
76
|
+
MyBean other = (MyBean)obj;
|
77
|
+
if (this.notSoGoodFieldName==null && !(other.notSoGoodFieldName==null)) return false;
|
78
|
+
return this.notSoGoodFieldName.equals(other.notSoGoodFieldName);
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
exp_terms = {
|
83
|
+
'mybean' => 4,
|
84
|
+
'int' => 1,
|
85
|
+
'string' => 5,
|
86
|
+
'notsogoodfieldname' => 13,
|
87
|
+
'get' => 1,
|
88
|
+
'set' => 1,
|
89
|
+
'MyBean [notSoGoodFieldName:' => 1,
|
90
|
+
']' => 1,
|
91
|
+
'hashcode' => 2,
|
92
|
+
'to' => 1,
|
93
|
+
'boolean' => 1,
|
94
|
+
'equals' => 2,
|
95
|
+
'object' => 1,
|
96
|
+
'obj' => 5,
|
97
|
+
'true' => 1,
|
98
|
+
'false' => 2,
|
99
|
+
'other' => 3
|
100
|
+
}
|
101
|
+
model_node = CodeModels::Java.parse_code(code)
|
102
|
+
terms_map = model_node.terms_map
|
103
|
+
assert_map_equal exp_terms,terms_map,model_node.to_json
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_actionbutonscomumntag_sanity_check
|
107
|
+
assert_class ClassOrInterfaceDeclaration, @actionbuttonscomumntag_model_node.types[0]
|
108
|
+
assert_equal 14, @actionbuttonscomumntag_model_node.types[0].members.count
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_info_extraction_actionbuttonscomumntag_method_1
|
112
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[2]
|
113
|
+
assert_equal 'setActionButtonsTag', m.name
|
114
|
+
assert_map_equal({'actionbuttonstag'=>5, 'set'=>1}, m.terms_map)
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_info_extraction_actionbuttonscomumntag_method_2
|
118
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[3]
|
119
|
+
assert_equal 'ActionButtonsColumnTag', m.name
|
120
|
+
# media could be breaken, it is border line...
|
121
|
+
# action it is used in separate contexts so sometimes it is broken
|
122
|
+
assert_map_equal({'set'=>1, 'media'=>1,
|
123
|
+
'mediatypeenum'=>1, 'html'=>1,'get'=>1,'name'=>1,
|
124
|
+
'action' => 1,
|
125
|
+
'actionbuttons' => 1,
|
126
|
+
'column' => 1,
|
127
|
+
'tag' => 1,
|
128
|
+
'actionbuttonstag'=>3,'showonly'=>1,
|
129
|
+
'withicon' => 1}, m.terms_map)
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_info_extraction_actionbuttonscomumntag_method_3
|
133
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[4]
|
134
|
+
assert_equal 'setPageContext', m.name
|
135
|
+
assert_map_equal({'set'=>3, 'pagecontext'=>4,
|
136
|
+
'context'=>3, 'actionbuttonstag'=>1}, m.terms_map)
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_info_extraction_actionbuttonscomumntag_method_4
|
140
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[5]
|
141
|
+
assert_equal 'setId', m.name
|
142
|
+
assert_map_equal({'set'=>2, 'id'=>3, 'string'=>1,
|
143
|
+
's'=>3,'actionbuttonstag'=>1}, m.terms_map)
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_info_extraction_actionbuttonscomumntag_method_5
|
147
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[6]
|
148
|
+
assert_equal 'getName', m.name
|
149
|
+
assert_map_equal({'get'=>2, 'name'=>2, 'string'=>1,
|
150
|
+
'actionbuttonstag'=>1}, m.terms_map)
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_info_extraction_actionbuttonscomumntag_method_6
|
154
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[7]
|
155
|
+
assert_equal 'setName', m.name
|
156
|
+
assert_map_equal({'set'=>2, 'name'=>4, 'string'=>1,
|
157
|
+
'actionbuttonstag'=>1}, m.terms_map)
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_info_extraction_actionbuttonscomumntag_method_7
|
161
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[8]
|
162
|
+
assert_equal 'getScope', m.name
|
163
|
+
assert_map_equal({'get'=>2, 'scope'=>2, 'string'=>1,
|
164
|
+
'actionbuttonstag'=>1}, m.terms_map)
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_info_extraction_actionbuttonscomumntag_method_8
|
168
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[9]
|
169
|
+
assert_equal 'setScope', m.name
|
170
|
+
assert_map_equal({'set'=>2, 'scope'=>4, 'string'=>1,
|
171
|
+
'actionbuttonstag'=>1}, m.terms_map)
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_info_extraction_actionbuttonscomumntag_method_9
|
175
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[10]
|
176
|
+
assert_equal 'doStartTag', m.name
|
177
|
+
assert_map_equal({'int'=>2, 'do'=>3, 'start'=>3,
|
178
|
+
'tag'=>7,
|
179
|
+
'actionbuttonstag'=>1, 'jspexception'=>2,
|
180
|
+
'writable'=>3, 'parent'=>1,'parenttable'=>2,
|
181
|
+
'get'=>3,'is'=>1,'SKIP_BODY'=>2,'constants'=>2,
|
182
|
+
'ATTRIBUTE_NOWRAP'=>2,'true'=>1,'attributemap'=>2,
|
183
|
+
'containskey'=>1,'put'=>1,
|
184
|
+
'status'=>3,'exception'=>1,'e'=>2}, m.terms_map)
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_info_extraction_actionbuttonscomumntag_method_10
|
188
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[11]
|
189
|
+
assert_equal 'doAfterBody', m.name
|
190
|
+
assert_map_equal({'int'=>1, 'do'=>2, 'afterbody'=>2,
|
191
|
+
'actionbuttonstag'=>1, 'jspexception'=>1}, m.terms_map)
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_info_extraction_actionbuttonscomumntag_method_11
|
195
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[12]
|
196
|
+
assert_equal 'doEndTag', m.name
|
197
|
+
assert_map_equal({'int'=>1, 'do'=>3, 'end'=>3,
|
198
|
+
'actionbuttonstag'=>1, 'jspexception'=>2,
|
199
|
+
'writable'=>3, 'tag'=>5,'is'=>1,
|
200
|
+
'parent'=>1,'parenttable'=>2,
|
201
|
+
'SKIP_BODY'=>1,'exception'=>1,'e'=>2, 'get'=>1}, m.terms_map)
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_info_extraction_actionbuttonscomumntag_method_12
|
205
|
+
m = @actionbuttonscomumntag_model_node.types[0].members[13]
|
206
|
+
assert_equal 'release', m.name
|
207
|
+
assert_map_equal({'release'=>2,
|
208
|
+
'actionbuttonstag'=>1}, m.terms_map)
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_info_extraction_csvexporter_1
|
212
|
+
m = @csvexporter_model_node.types[0].members[4]
|
213
|
+
assert_equal 'getFileExtension', m.name
|
214
|
+
# there is only a getter so it does not recognize it as separate
|
215
|
+
assert_map_equal({'getfileextension'=>1,'string'=>1,'csv'=>1}, m.terms_map)
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_info_extraction_csvexporter_2
|
219
|
+
m = @csvexporter_model_node.types[0].members[5]
|
220
|
+
assert_equal 'export', m.name
|
221
|
+
assert_map_equal({
|
222
|
+
'byte'=>1,
|
223
|
+
'bytearray'=>1,
|
224
|
+
'bytearrayoutputstream'=>2,
|
225
|
+
'session'=>2,'object'=>2,
|
226
|
+
'data'=>2,'to'=>1,
|
227
|
+
'export'=>2,'exception'=>1,
|
228
|
+
'override'=>1}, m.terms_map)
|
229
|
+
end
|
230
|
+
|
231
|
+
def test_info_extraction_authconstraint_1
|
232
|
+
m = @authconstraint_model_node.types[0].members[1]
|
233
|
+
assert_equal 'addRoleName', m.name
|
234
|
+
assert_map_equal({'add'=>2,'role'=>3,'name'=>3,'string'=>1,'rolenames'=>1}, m.terms_map)
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_info_extraction_authconstraint_2
|
238
|
+
m = @authconstraint_model_node.types[0].members[2]
|
239
|
+
assert_equal 'getRoleNames', m.name
|
240
|
+
assert_map_equal({'collection'=>1,'string'=>1,'get'=>1,'rolenames'=>2}, m.terms_map)
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_info_extraction_testiteration_1
|
244
|
+
m = @testiteration_model_node.types[0].members[4]
|
245
|
+
assert_equal 'testGetRemainingHours', m.name
|
246
|
+
assert_map_equal({'test'=>1,'get'=>2,'remaining'=>2,'assertequals'=>1,
|
247
|
+
'0.0d'=>1,'iteration'=>1,'task'=>1,'0.0'=>1,'exception'=>1,'hours'=>2}, m.terms_map)
|
248
|
+
end
|
249
|
+
|
250
|
+
def test_info_extraction_testiteration_2
|
251
|
+
m = @testiteration_model_node.types[0].members[10]
|
252
|
+
assert_equal 'testGetAddedHours', m.name
|
253
|
+
assert_map_equal({'test'=>2,'get'=>2,'added'=>2,'hours'=>2,'assertequals'=>1,'iteration'=>4,
|
254
|
+
'estimated'=>1,'tasks'=>1,
|
255
|
+
'5.0d'=>1,'0.0'=>1,'exception'=>1,'set'=>1,'up'=>1,'of'=>1}, m.terms_map)
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'rgen/ecore/ecore'
|
3
|
+
|
4
|
+
class TestMetamodel < Test::Unit::TestCase
|
5
|
+
|
6
|
+
RGenString = RGen::ECore::EString
|
7
|
+
RGenBoolean = RGen::ECore::EBoolean
|
8
|
+
RGenInt = RGen::ECore::EInt
|
9
|
+
|
10
|
+
def get_relation(rgen_class,rel_name,type=nil,multiplicity=nil)
|
11
|
+
type = get_metaclass(type) if type
|
12
|
+
rel = rgen_class.ecore.eAllReferences.find {|r| r.name==rel_name}
|
13
|
+
if rel and type
|
14
|
+
raise "Wrong type: expected #{type.ecore}, found: #{rel.eType}" unless type.ecore===rel.eType
|
15
|
+
end
|
16
|
+
if rel and multiplicity
|
17
|
+
case multiplicity
|
18
|
+
when :many
|
19
|
+
raise "Wrong type: expected many, found single" unless rel.many
|
20
|
+
when :single
|
21
|
+
raise "Wrong type: expected single, found many" if rel.many
|
22
|
+
else
|
23
|
+
raise "Illegal multiplicity: #{multiplicity}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
rel
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_attr(rgen_class,name,type=nil,multiplicity=nil)
|
30
|
+
att = rgen_class.ecore.eAllAttributes.find {|a| a.name==name}
|
31
|
+
if att and type
|
32
|
+
raise "Wrong type: expected #{type}, found: #{att.eType}" unless type===att.eType
|
33
|
+
end
|
34
|
+
if att and multiplicity
|
35
|
+
case multiplicity
|
36
|
+
when :many
|
37
|
+
raise "Wrong type: expected many, found single" unless att.many
|
38
|
+
when :single
|
39
|
+
raise "Wrong type: expected single, found many" if att.many
|
40
|
+
else
|
41
|
+
raise "Illegal multiplicity: #{multiplicity}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
att
|
45
|
+
end
|
46
|
+
|
47
|
+
def assert_extend(rgen_class,super_class)
|
48
|
+
assert rgen_class.superclass == get_metaclass(super_class)
|
49
|
+
end
|
50
|
+
|
51
|
+
def get_metaclass(name)
|
52
|
+
CodeModels::Java.const_get(name)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_comment_unit_exist
|
56
|
+
assert get_metaclass('Comment')
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_comment_has_attr_content
|
60
|
+
c = get_metaclass('Comment')
|
61
|
+
assert get_attr(c,'content',RGenString)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_name_expr_exist
|
65
|
+
assert get_metaclass('NameExpr')
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_name_expr_has_attr_name
|
69
|
+
c = get_metaclass('NameExpr')
|
70
|
+
assert get_attr(c,'name',RGenString)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_compilatioun_unit_exist
|
74
|
+
assert get_metaclass('CompilationUnit')
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_compilatioun_unit_has_relations
|
78
|
+
cu = get_metaclass('CompilationUnit')
|
79
|
+
#assert get_relation(cu,'comments')
|
80
|
+
assert get_relation(cu,'imports')
|
81
|
+
assert get_relation(cu,'package')
|
82
|
+
assert get_relation(cu,'types')
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_import_declaration_has_attr_asterisk
|
86
|
+
c = get_metaclass('ImportDeclaration')
|
87
|
+
assert get_attr(c,'asterisk',RGenBoolean)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_import_declaration_has_rel_name
|
91
|
+
c = get_metaclass('ImportDeclaration')
|
92
|
+
assert get_relation(c,'name','NameExpr')
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_type_declaration
|
96
|
+
c = get_metaclass('TypeDeclaration')
|
97
|
+
assert get_relation(c,'members','BodyDeclaration',:many)
|
98
|
+
#assert get_attr(c,'modifiers',RGenInt,:single) #ignored!
|
99
|
+
assert get_attr(c,'name',RGenString,:single)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_body_declaration
|
103
|
+
c = get_metaclass('BodyDeclaration')
|
104
|
+
#assert get_relation(c,'javaDoc','JavadocComment',:single)
|
105
|
+
assert get_relation(c,'annotations','AnnotationExpr',:many)
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_method_declaration
|
109
|
+
c = get_metaclass('MethodDeclaration')
|
110
|
+
assert_extend c,'BodyDeclaration'
|
111
|
+
# inherited from body declaration
|
112
|
+
#assert get_relation(c,'javaDoc','JavadocComment',:single)
|
113
|
+
assert get_relation(c,'annotations','AnnotationExpr',:many)
|
114
|
+
# declared
|
115
|
+
# these two are being ignored
|
116
|
+
# assert get_attr(c,'arrayCount',RGenInt,:single)
|
117
|
+
# assert get_attr(c,'modifiers',RGenInt,:single)
|
118
|
+
assert get_relation(c,'body','BlockStmt',:single)
|
119
|
+
assert get_attr(c,'name',RGenString,:single)
|
120
|
+
assert get_relation(c,'parameters','Parameter',:many)
|
121
|
+
assert get_relation(c,'throws','NameExpr',:many)
|
122
|
+
assert get_relation(c,'type','Type',:single)
|
123
|
+
assert get_relation(c,'typeParameters','TypeParameter',:many)
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_method_assign_expr
|
127
|
+
c = get_metaclass('AssignExpr')
|
128
|
+
# assert get_attr(c,'operator',RGenString,:single) # ignored
|
129
|
+
assert get_relation(c,'target','Expression')
|
130
|
+
assert get_relation(c,'value','Expression')
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|