codemodels 0.2.2-java → 0.2.3-java
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +191 -20
- data/README.md +2 -2
- data/codemodels.gemspec +2 -3
- data/lib/codemodels/info_extraction.rb +0 -4
- data/lib/codemodels/language.rb +11 -29
- data/lib/codemodels/metamodel.rb +11 -3
- data/lib/codemodels/model_building.rb +47 -51
- data/lib/codemodels/navigation.rb +121 -0
- data/lib/codemodels/parsing.rb +8 -155
- data/lib/codemodels/rgen_ext.rb +31 -84
- data/lib/codemodels/serialization.rb +46 -41
- data/lib/codemodels/source_info.rb +192 -0
- data/lib/codemodels/version.rb +1 -1
- data/lib/codemodels.rb +1 -3
- data/test/test_foreign_navigation.rb +71 -0
- data/test/test_info_extraction.rb +1 -1
- data/test/test_language.rb +34 -4
- data/test/test_metamodel.rb +102 -0
- data/test/test_model_building.rb +12 -0
- data/test/test_rgen_ext.rb +4 -4
- data/test/test_serialization.rb +19 -19
- metadata +11 -9
- data/lib/codemodels/foreign_ast.rb +0 -11
- data/lib/codemodels/query_serialized.rb +0 -81
- data/test/test_foreign_ast.rb +0 -28
- data/test/test_query_serialized.rb +0 -40
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestForeignNavigation < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include CodeModels
|
6
|
+
|
7
|
+
class B < CodeModelsAstNode
|
8
|
+
has_attr 'id',String
|
9
|
+
contains_many_uni 'bs', B
|
10
|
+
end
|
11
|
+
|
12
|
+
class C < CodeModelsAstNode
|
13
|
+
has_attr 'id',String
|
14
|
+
contains_many_uni 'bs', B
|
15
|
+
end
|
16
|
+
|
17
|
+
class A < CodeModelsAstNode
|
18
|
+
has_attr 'id',String
|
19
|
+
contains_many_uni 'bs', B
|
20
|
+
end
|
21
|
+
|
22
|
+
def setup
|
23
|
+
@c1 = C.build 'c1'
|
24
|
+
@c2 = C.build 'c2'
|
25
|
+
@b1 = B.build 'b1'
|
26
|
+
@b2 = B.build 'b2'
|
27
|
+
@b3 = B.build 'b3'
|
28
|
+
@b4 = B.build 'b4'
|
29
|
+
@b5 = B.build 'b5'
|
30
|
+
@a1 = A.build 'a1'
|
31
|
+
|
32
|
+
@c1.addBs @b1
|
33
|
+
@b1.addBs @b2
|
34
|
+
@b1.addBs @b3
|
35
|
+
@b4.addBs @b5
|
36
|
+
@a1.addBs @b4
|
37
|
+
@a1.addForeign_asts @c1
|
38
|
+
@a1.addForeign_asts @c2
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_all_children_also_foreign
|
42
|
+
assert_equal [@b4,@c1,@c2], @a1.all_children_also_foreign
|
43
|
+
assert_equal [@b2,@b3], @b1.all_children_also_foreign
|
44
|
+
assert_equal [], @b2.all_children_also_foreign
|
45
|
+
assert_equal [], @b3.all_children_also_foreign
|
46
|
+
assert_equal [@b5], @b4.all_children_also_foreign
|
47
|
+
assert_equal [], @b5.all_children_also_foreign
|
48
|
+
assert_equal [@b1], @c1.all_children_also_foreign
|
49
|
+
assert_equal [], @c2.all_children_also_foreign
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_all_children_deep_also_foreign
|
53
|
+
assert_equal [@b4,@b5,@c1,@b1,@b2,@b3,@c2], @a1.all_children_deep_also_foreign
|
54
|
+
assert_equal [@b2,@b3], @b1.all_children_deep_also_foreign
|
55
|
+
assert_equal [], @b2.all_children_deep_also_foreign
|
56
|
+
assert_equal [], @b3.all_children_deep_also_foreign
|
57
|
+
assert_equal [@b5], @b4.all_children_deep_also_foreign
|
58
|
+
assert_equal [], @b5.all_children_deep_also_foreign
|
59
|
+
assert_equal [@b1,@b2,@b3], @c1.all_children_deep_also_foreign
|
60
|
+
assert_equal [], @c2.all_children_deep_also_foreign
|
61
|
+
end
|
62
|
+
|
63
|
+
def traverse_also_foreign
|
64
|
+
ids = []
|
65
|
+
CodeModels.traverse_also_foreign(@a1) do |n|
|
66
|
+
ids << n.id
|
67
|
+
end
|
68
|
+
assert_equal ['a1','b4','b5','c1','b1','b2','b3','c2'],ids
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
data/test/test_language.rb
CHANGED
@@ -5,16 +5,30 @@ class TestLanguage < Test::Unit::TestCase
|
|
5
5
|
include CodeModels
|
6
6
|
|
7
7
|
class MyLanguage < Language
|
8
|
-
def initialize
|
8
|
+
def initialize(my_parser)
|
9
9
|
super('MyLanguage')
|
10
10
|
@extensions << 'my1'
|
11
11
|
@extensions << 'my2'
|
12
|
-
@parser =
|
12
|
+
@parser = my_parser
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class MyParser
|
17
|
+
attr_reader :invokations
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@invokations = []
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse_file(path)
|
24
|
+
@invokations << path
|
13
25
|
end
|
14
26
|
end
|
15
27
|
|
16
28
|
def setup
|
17
|
-
|
29
|
+
@my_language = MyLanguage.new(MyParser.new)
|
30
|
+
2.times {CodeModels.register_language(@my_language)}
|
31
|
+
@my_parser = CodeModels.registered_languages[0].parser
|
18
32
|
end
|
19
33
|
|
20
34
|
def test_my_language
|
@@ -22,7 +36,23 @@ def test_my_language
|
|
22
36
|
l = CodeModels.registered_languages[0]
|
23
37
|
assert_equal 'MyLanguage',l.name
|
24
38
|
assert_equal ['my1','my2'],l.extensions
|
25
|
-
|
39
|
+
assert l.parser.is_a?(MyParser)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_can_parse?
|
43
|
+
assert_equal true, @my_language.can_parse?('pippo.my1')
|
44
|
+
assert_equal false, @my_language.can_parse?('pippo.else')
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_parse_file_registered_language
|
48
|
+
CodeModels.parse_file('pippo.my1')
|
49
|
+
assert_equal ['pippo.my1'],@my_parser.invokations
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_parse_file_unregistered_language
|
53
|
+
assert_raise NoLanguageRegistered do
|
54
|
+
CodeModels.parse_file('pippo.else')
|
55
|
+
end
|
26
56
|
end
|
27
57
|
|
28
58
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestMetamodel < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include CodeModels
|
6
|
+
|
7
|
+
def setup
|
8
|
+
ea1_pos = SourcePosition.new
|
9
|
+
ea1_pos.begin_line = 10
|
10
|
+
ea1_pos.begin_column = 8
|
11
|
+
|
12
|
+
ea2_pos = SourcePosition.new
|
13
|
+
ea2_pos.begin_line = 3
|
14
|
+
ea2_pos.begin_column = 4
|
15
|
+
|
16
|
+
ea3_pos = SourcePosition.new
|
17
|
+
ea3_pos.begin_line = 1
|
18
|
+
ea3_pos.begin_column = 2
|
19
|
+
|
20
|
+
@fa1 = FileArtifact.new
|
21
|
+
|
22
|
+
@ea1 = EmbeddedArtifact.new
|
23
|
+
@ea1.host_artifact = @fa1
|
24
|
+
@ea1.position_in_host = ea1_pos
|
25
|
+
|
26
|
+
@ea2 = EmbeddedArtifact.new
|
27
|
+
@ea2.host_artifact = @ea1
|
28
|
+
@ea2.position_in_host = ea2_pos
|
29
|
+
|
30
|
+
@ea3 = EmbeddedArtifact.new
|
31
|
+
@ea3.host_artifact = @ea2
|
32
|
+
@ea3.position_in_host = ea3_pos
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_file_artifact_absolute_start
|
36
|
+
sp = SourcePoint.new 1,1
|
37
|
+
assert_equal sp,@fa1.absolute_start
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_embedded_artifact_absolute_start
|
41
|
+
sp = SourcePoint.new 10,8
|
42
|
+
assert_equal sp,@ea1.absolute_start
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_embedded_artifact_indirect_absolute_start
|
46
|
+
sp = SourcePoint.new 12,4
|
47
|
+
assert_equal sp,@ea2.absolute_start
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_embedded_artifact_indirect_absolute_start_on_line_1
|
51
|
+
sp = SourcePoint.new 12,5
|
52
|
+
assert_equal sp,@ea3.absolute_start
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_file_artifact_point_to_absolute
|
56
|
+
p1 = SourcePoint.new 5,7
|
57
|
+
p2 = SourcePoint.new 5,7
|
58
|
+
assert_equal p2,@fa1.point_to_absolute(p1)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_embedded_artifact_point_to_absolute
|
62
|
+
p1 = SourcePoint.new 5,7
|
63
|
+
p2 = SourcePoint.new 14,7
|
64
|
+
assert_equal p2,@ea1.point_to_absolute(p1)
|
65
|
+
p3 = SourcePoint.new 1,7
|
66
|
+
p4 = SourcePoint.new 10,14
|
67
|
+
assert_equal p4,@ea1.point_to_absolute(p3)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_embedded_artifact_indirect_point_to_absolute
|
71
|
+
p1 = SourcePoint.new 5,7
|
72
|
+
p2 = SourcePoint.new 16,7
|
73
|
+
assert_equal p2,@ea2.point_to_absolute(p1)
|
74
|
+
p3 = SourcePoint.new 1,7
|
75
|
+
p4 = SourcePoint.new 12,10
|
76
|
+
assert_equal p4,@ea2.point_to_absolute(p3)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_embedded_artifact_position_to_absolute
|
80
|
+
p1b = SourcePoint.new 1,8
|
81
|
+
p1e = SourcePoint.new 12,7
|
82
|
+
pos1 = SourcePosition.new p1b,p1e
|
83
|
+
p2b = SourcePoint.new 10,15
|
84
|
+
p2e = SourcePoint.new 21,7
|
85
|
+
pos2 = SourcePosition.new p2b,p2e
|
86
|
+
assert_equal pos2,@ea1.position_to_absolute(pos1)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_source_point_begin_point_assignment_with_point
|
90
|
+
p = SourcePoint.new 7,8
|
91
|
+
si = SourceInfo.new
|
92
|
+
si.begin_point = p
|
93
|
+
assert_equal SourcePoint.new(7,8),si.position.begin_point
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_source_point_end_point_assignment_with_hash
|
97
|
+
si = SourceInfo.new
|
98
|
+
si.end_point = {line:7,column:8}
|
99
|
+
assert_equal SourcePoint.new(7,8),si.position.end_point
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestModelBuilding < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include CodeModels
|
6
|
+
|
7
|
+
def test_file_mapper
|
8
|
+
fm = FileMapper.new('dir_a','dir_b','java','xml')
|
9
|
+
assert_equal "dir_b/abc/def/pippo.xml",fm.map('dir_a/abc/def/pippo.java')
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
data/test/test_rgen_ext.rb
CHANGED
@@ -2,21 +2,21 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class TestRgenExt < Test::Unit::TestCase
|
4
4
|
|
5
|
-
class C <
|
5
|
+
class C < CodeModels::CodeModelsAstNode
|
6
6
|
has_attr 'id',Integer
|
7
7
|
end
|
8
8
|
|
9
|
-
class D <
|
9
|
+
class D < CodeModels::CodeModelsAstNode
|
10
10
|
has_attr 'id',Integer
|
11
11
|
contains_one_uni 'c', C
|
12
12
|
end
|
13
13
|
|
14
|
-
class B <
|
14
|
+
class B < CodeModels::CodeModelsAstNode
|
15
15
|
has_attr 'id',Integer
|
16
16
|
contains_many_uni 'ds', D
|
17
17
|
end
|
18
18
|
|
19
|
-
class A <
|
19
|
+
class A < CodeModels::CodeModelsAstNode
|
20
20
|
has_attr 'id',Integer
|
21
21
|
contains_many_uni 'bs', B
|
22
22
|
contains_one_uni 'c', C
|
data/test/test_serialization.rb
CHANGED
@@ -1,15 +1,28 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class
|
3
|
+
class TestSerialization < Test::Unit::TestCase
|
4
4
|
|
5
|
-
class Person <
|
5
|
+
class Person < CodeModelsAstNode
|
6
6
|
has_attr 'name', String
|
7
7
|
end
|
8
8
|
|
9
|
+
class Street < CodeModelsAstNode
|
10
|
+
has_attr 'name', String
|
11
|
+
end
|
12
|
+
|
13
|
+
class Address < CodeModelsAstNode
|
14
|
+
contains_one_uni 'street', Street
|
15
|
+
has_attr 'number', Integer
|
16
|
+
end
|
17
|
+
|
18
|
+
class StupidPhoneBook < CodeModelsAstNode
|
19
|
+
has_many_attr 'numbers', String
|
20
|
+
end
|
21
|
+
|
9
22
|
def test_to_model_with_single_obj
|
10
23
|
p = Person.build 'pippo'
|
11
24
|
m = Serialization.rgenobject_to_model(p)
|
12
|
-
|
25
|
+
|
13
26
|
assert_equal 1,m['root']['id']
|
14
27
|
assert_equal 0,m['external_elements'].count
|
15
28
|
end
|
@@ -21,19 +34,6 @@ class TestSerializationRgen < Test::Unit::TestCase
|
|
21
34
|
assert_equal 'pippo',m['root']['attr_name']
|
22
35
|
end
|
23
36
|
|
24
|
-
class Street < RGen::MetamodelBuilder::MMBase
|
25
|
-
has_attr 'name', String
|
26
|
-
end
|
27
|
-
|
28
|
-
class Address < RGen::MetamodelBuilder::MMBase
|
29
|
-
contains_one_uni 'street', Street
|
30
|
-
has_attr 'number', Integer
|
31
|
-
end
|
32
|
-
|
33
|
-
class StupidPhoneBook < RGen::MetamodelBuilder::MMBase
|
34
|
-
has_many_attr 'numbers', String
|
35
|
-
end
|
36
|
-
|
37
37
|
def test_to_model_with_rel_cont_single
|
38
38
|
a = Address.build number: 11
|
39
39
|
a.street = Street.build 'via Cassini'
|
@@ -44,11 +44,11 @@ class TestSerializationRgen < Test::Unit::TestCase
|
|
44
44
|
assert_equal 'via Cassini',street_serialized['attr_name']
|
45
45
|
end
|
46
46
|
|
47
|
-
class Street <
|
47
|
+
class Street < CodeModelsAstNode
|
48
48
|
has_attr 'name', String
|
49
49
|
end
|
50
50
|
|
51
|
-
class CityMap <
|
51
|
+
class CityMap < CodeModelsAstNode
|
52
52
|
contains_many_uni 'streets', Street
|
53
53
|
end
|
54
54
|
|
@@ -71,7 +71,7 @@ class TestSerializationRgen < Test::Unit::TestCase
|
|
71
71
|
spb.addNumbers '+39 389 4561234'
|
72
72
|
|
73
73
|
assert_equal({
|
74
|
-
"type"=>"
|
74
|
+
"type"=>"TestSerialization::StupidPhoneBook",
|
75
75
|
"id"=>1,
|
76
76
|
"attr_numbers"=>[
|
77
77
|
"+49 0176 12345678",
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: codemodels
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.3
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Federico Tomassetti
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -104,29 +104,30 @@ files:
|
|
104
104
|
- Rakefile
|
105
105
|
- codemodels.gemspec
|
106
106
|
- lib/codemodels.rb
|
107
|
-
- lib/codemodels/foreign_ast.rb
|
108
107
|
- lib/codemodels/info_extraction.rb
|
109
108
|
- lib/codemodels/language.rb
|
110
109
|
- lib/codemodels/metamodel.rb
|
111
110
|
- lib/codemodels/model_building.rb
|
112
111
|
- lib/codemodels/monkey_patching.rb
|
112
|
+
- lib/codemodels/navigation.rb
|
113
113
|
- lib/codemodels/parsing.rb
|
114
|
-
- lib/codemodels/query_serialized.rb
|
115
114
|
- lib/codemodels/rgen_ext.rb
|
116
115
|
- lib/codemodels/serialization.rb
|
116
|
+
- lib/codemodels/source_info.rb
|
117
117
|
- lib/codemodels/version.rb
|
118
118
|
- test/data/node_setCompleted.json
|
119
|
-
- test/
|
119
|
+
- test/test_foreign_navigation.rb
|
120
120
|
- test/test_helper.rb
|
121
121
|
- test/test_info_extraction.rb
|
122
122
|
- test/test_language.rb
|
123
|
+
- test/test_metamodel.rb
|
124
|
+
- test/test_model_building.rb
|
123
125
|
- test/test_monkey_patching.rb
|
124
|
-
- test/test_query_serialized.rb
|
125
126
|
- test/test_rgen_ext.rb
|
126
127
|
- test/test_serialization.rb
|
127
128
|
homepage: https://github.com/ftomassetti/codemodels
|
128
129
|
licenses:
|
129
|
-
-
|
130
|
+
- Apache v2
|
130
131
|
post_install_message:
|
131
132
|
rdoc_options: []
|
132
133
|
require_paths:
|
@@ -157,11 +158,12 @@ specification_version: 3
|
|
157
158
|
summary: Library to build models of code
|
158
159
|
test_files:
|
159
160
|
- test/data/node_setCompleted.json
|
160
|
-
- test/
|
161
|
+
- test/test_foreign_navigation.rb
|
161
162
|
- test/test_helper.rb
|
162
163
|
- test/test_info_extraction.rb
|
163
164
|
- test/test_language.rb
|
165
|
+
- test/test_metamodel.rb
|
166
|
+
- test/test_model_building.rb
|
164
167
|
- test/test_monkey_patching.rb
|
165
|
-
- test/test_query_serialized.rb
|
166
168
|
- test/test_rgen_ext.rb
|
167
169
|
- test/test_serialization.rb
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# This module permits to manipulate Objects serialized
|
2
|
-
# as Hash
|
3
|
-
|
4
|
-
module CodeModels
|
5
|
-
|
6
|
-
module QuerySerialized
|
7
|
-
|
8
|
-
def self.rel_conts(root)
|
9
|
-
root.keys.select {|k| k.start_with? 'relcont_'}
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.rel_non_conts(root)
|
13
|
-
root.keys.select {|k| k.start_with? 'relnoncont_'}
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.attrs(root)
|
17
|
-
root.keys.select {|k| k.start_with? 'attr_'}
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.print_tree(root,depth=0)
|
21
|
-
traverse(root) do |n,d|
|
22
|
-
s = ""
|
23
|
-
d.times { s = s + " " }
|
24
|
-
s = s + n['type'] if n
|
25
|
-
s = s + '<NIL>' unless n
|
26
|
-
puts s
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.values(root,feat)
|
31
|
-
raw = root[feat]
|
32
|
-
return [] if raw==nil
|
33
|
-
return raw if raw.is_a? Array
|
34
|
-
return [raw]
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.traverse(root,depth=0,&op)
|
38
|
-
return traverse(root['root'],depth,&op) if root and (root.key? 'root')
|
39
|
-
op.call(root,depth)
|
40
|
-
return unless root
|
41
|
-
rel_conts(root).each do |r|
|
42
|
-
if root[r].is_a? Array
|
43
|
-
root[r].each do |c|
|
44
|
-
raise "expected an object but it is a #{c.class} (relation: #{r})" unless c.is_a? Hash
|
45
|
-
traverse(c,depth+1,&op)
|
46
|
-
end
|
47
|
-
else
|
48
|
-
traverse(root[r],depth+1,&op)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# the set of values appearing in the object and its children
|
54
|
-
def self.collect_values(el)
|
55
|
-
values = Set.new
|
56
|
-
rel_conts(el).each do |r|
|
57
|
-
values(el,r).each {|c| values.merge(collect_values(c))}
|
58
|
-
end
|
59
|
-
attrs(el).each do |a|
|
60
|
-
values(el,a).each {|v| values.add(v)}
|
61
|
-
end
|
62
|
-
values
|
63
|
-
end
|
64
|
-
|
65
|
-
# a counting map values appearing in the object and its children
|
66
|
-
def self.collect_values_with_count(el)
|
67
|
-
values = Hash.new {|h,k| h[k]=0}
|
68
|
-
rel_conts(el).each do |r|
|
69
|
-
values(el,r).each do |ch|
|
70
|
-
collect_values_with_count(ch).each {|v,count| values[v]+=count}
|
71
|
-
end
|
72
|
-
end
|
73
|
-
attrs(el).each do |a|
|
74
|
-
values(el,a).each {|v| values[v]+=1 }
|
75
|
-
end
|
76
|
-
values
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
data/test/test_foreign_ast.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestForeignAst < Test::Unit::TestCase
|
4
|
-
|
5
|
-
include CodeModels
|
6
|
-
|
7
|
-
class MyLanguageAstNodeA < CodeModelsAstNode
|
8
|
-
has_attr 'id', Integer
|
9
|
-
end
|
10
|
-
|
11
|
-
class MyLanguageAstNodeB < CodeModelsAstNode
|
12
|
-
has_attr 'id', Integer
|
13
|
-
end
|
14
|
-
|
15
|
-
def setup
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_without_foreign_ast
|
19
|
-
assert_equal 0, MyLanguageAstNodeA.ecore.eAllReferences.count, "No Refs expected but they are: #{MyLanguageAstNodeA.ecore.eAllReferences.name}"
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_with_foreign_ast
|
23
|
-
CodeModels.enable_foreign_asts(MyLanguageAstNodeB)
|
24
|
-
assert_equal 1, MyLanguageAstNodeB.ecore.eAllReferences.count
|
25
|
-
assert_equal 'foreign_asts',MyLanguageAstNodeB.ecore.eAllReferences[0].name
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestQuerySerialized < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def test_rel_conts_on_complex_node
|
6
|
-
set_completed = JSON.parse(IO.read(File.dirname(__FILE__)+'/data/node_setCompleted.json'))
|
7
|
-
|
8
|
-
assert_equal [
|
9
|
-
'relcont_layoutInformations',
|
10
|
-
'relcont_typeReference',
|
11
|
-
'relcont_arrayDimensionsBefore',
|
12
|
-
'relcont_arrayDimensionsAfter',
|
13
|
-
'relcont_typeParameters',
|
14
|
-
'relcont_parameters',
|
15
|
-
'relcont_exceptions',
|
16
|
-
'relcont_annotationsAndModifiers',
|
17
|
-
'relcont_statements'],
|
18
|
-
CodeModels::QuerySerialized.rel_conts(set_completed)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_rel_nonconts_on_complex_node
|
22
|
-
set_completed = JSON.parse(IO.read(File.dirname(__FILE__)+'/data/node_setCompleted.json'))
|
23
|
-
|
24
|
-
assert_equal [
|
25
|
-
'relnoncont_getterFor',
|
26
|
-
'relnoncont_setterFor'],
|
27
|
-
CodeModels::QuerySerialized.rel_non_conts(set_completed)
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_attrs_on_complex_node
|
31
|
-
set_completed = JSON.parse(IO.read(File.dirname(__FILE__)+'/data/node_setCompleted.json'))
|
32
|
-
|
33
|
-
assert_equal [
|
34
|
-
'attr_name',
|
35
|
-
'attr_getter',
|
36
|
-
'attr_setter'],
|
37
|
-
CodeModels::QuerySerialized.attrs(set_completed)
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|