codemodels 0.2.2-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 +20 -0
- data/README.md +23 -0
- data/Rakefile +9 -0
- data/codemodels.gemspec +29 -0
- data/lib/codemodels/foreign_ast.rb +11 -0
- data/lib/codemodels/info_extraction.rb +139 -0
- data/lib/codemodels/language.rb +65 -0
- data/lib/codemodels/metamodel.rb +11 -0
- data/lib/codemodels/model_building.rb +81 -0
- data/lib/codemodels/monkey_patching.rb +30 -0
- data/lib/codemodels/parsing.rb +184 -0
- data/lib/codemodels/query_serialized.rb +81 -0
- data/lib/codemodels/rgen_ext.rb +186 -0
- data/lib/codemodels/serialization.rb +142 -0
- data/lib/codemodels/version.rb +3 -0
- data/lib/codemodels.rb +5 -0
- data/test/data/node_setCompleted.json +443 -0
- data/test/test_foreign_ast.rb +28 -0
- data/test/test_helper.rb +10 -0
- data/test/test_info_extraction.rb +90 -0
- data/test/test_language.rb +28 -0
- data/test/test_monkey_patching.rb +38 -0
- data/test/test_query_serialized.rb +40 -0
- data/test/test_rgen_ext.rb +187 -0
- data/test/test_serialization.rb +83 -0
- metadata +167 -0
@@ -0,0 +1,187 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestRgenExt < Test::Unit::TestCase
|
4
|
+
|
5
|
+
class C < RGen::MetamodelBuilder::MMBase
|
6
|
+
has_attr 'id',Integer
|
7
|
+
end
|
8
|
+
|
9
|
+
class D < RGen::MetamodelBuilder::MMBase
|
10
|
+
has_attr 'id',Integer
|
11
|
+
contains_one_uni 'c', C
|
12
|
+
end
|
13
|
+
|
14
|
+
class B < RGen::MetamodelBuilder::MMBase
|
15
|
+
has_attr 'id',Integer
|
16
|
+
contains_many_uni 'ds', D
|
17
|
+
end
|
18
|
+
|
19
|
+
class A < RGen::MetamodelBuilder::MMBase
|
20
|
+
has_attr 'id',Integer
|
21
|
+
contains_many_uni 'bs', B
|
22
|
+
contains_one_uni 'c', C
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup
|
26
|
+
@d_1 = D.build(1)
|
27
|
+
@d_2 = D.build(2)
|
28
|
+
@d_3 = D.build(3)
|
29
|
+
@c_4 = C.build(4)
|
30
|
+
@c_5 = C.build(5)
|
31
|
+
@c_6 = C.build(6)
|
32
|
+
@b_7 = B.build(7)
|
33
|
+
@b_8 = B.build(8)
|
34
|
+
@b_9 = B.build(9)
|
35
|
+
@a_10 = A.build(10)
|
36
|
+
|
37
|
+
@d_1.c = @c_5
|
38
|
+
|
39
|
+
@b_8.addDs @d_2
|
40
|
+
@b_8.addDs @d_3
|
41
|
+
@b_9.addDs @d_1
|
42
|
+
|
43
|
+
@a_10.addBs @b_9
|
44
|
+
@a_10.addBs @b_8
|
45
|
+
@a_10.c = @c_6
|
46
|
+
end
|
47
|
+
|
48
|
+
def assert_ids(expected,actual)
|
49
|
+
assert_equal expected.count,actual.count
|
50
|
+
expected.each do |e|
|
51
|
+
assert actual.find {|a| a.id==e}, "Element with id #{e} not found"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_children
|
56
|
+
assert_ids [5], @d_1.all_children
|
57
|
+
assert_ids [], @d_2.all_children
|
58
|
+
assert_ids [], @d_3.all_children
|
59
|
+
assert_ids [], @c_4.all_children
|
60
|
+
assert_ids [], @c_5.all_children
|
61
|
+
assert_ids [], @c_6.all_children
|
62
|
+
assert_ids [], @b_7.all_children
|
63
|
+
assert_ids [2,3], @b_8.all_children
|
64
|
+
assert_ids [1], @b_9.all_children
|
65
|
+
assert_ids [6,8,9], @a_10.all_children
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_children_deep
|
69
|
+
assert_ids [5], @d_1.all_children_deep
|
70
|
+
assert_ids [], @d_2.all_children_deep
|
71
|
+
assert_ids [], @d_3.all_children_deep
|
72
|
+
assert_ids [], @c_4.all_children_deep
|
73
|
+
assert_ids [], @c_5.all_children_deep
|
74
|
+
assert_ids [], @c_6.all_children_deep
|
75
|
+
assert_ids [], @b_7.all_children_deep
|
76
|
+
assert_ids [2,3], @b_8.all_children_deep
|
77
|
+
assert_ids [1,5], @b_9.all_children_deep
|
78
|
+
assert_ids [6,8,9,2,3,1,5], @a_10.all_children_deep
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_traverse
|
82
|
+
l = []
|
83
|
+
@a_10.traverse {|n| l<<n if n }
|
84
|
+
assert_ids [10,6,8,9,2,3,1,5], l
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_equal_without_children
|
88
|
+
a = D.build(1)
|
89
|
+
b = D.build(1)
|
90
|
+
c = D.build(2)
|
91
|
+
d = C.build(2)
|
92
|
+
assert_equal true, a==b
|
93
|
+
assert_equal false, a==c
|
94
|
+
assert_equal false, d==c # different type
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_equal_wit_children
|
98
|
+
c1 = C.build(1)
|
99
|
+
c2 = C.build(1)
|
100
|
+
d1 = D.build(1)
|
101
|
+
d2 = D.build(1)
|
102
|
+
d1.c = c1
|
103
|
+
d2.c = c2
|
104
|
+
assert_equal true, d1==d2
|
105
|
+
c3 = C.build(2)
|
106
|
+
d2.c = c3
|
107
|
+
assert_equal false, d1==d2 # a child is different
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_build_with_one_attribute
|
111
|
+
c = C.build(1)
|
112
|
+
assert_equal 1,c.id
|
113
|
+
end
|
114
|
+
|
115
|
+
class McWithTwoAttrs < RGen::MetamodelBuilder::MMBase
|
116
|
+
has_attr 'i',Integer
|
117
|
+
has_attr 's',String
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_build_with_multiple_attributes
|
121
|
+
c = McWithTwoAttrs.build i: 27, s: 'Federico'
|
122
|
+
assert_equal 27,c.i
|
123
|
+
assert_equal 'Federico',c.s
|
124
|
+
end
|
125
|
+
|
126
|
+
class McWithNonContRef < RGen::MetamodelBuilder::MMBase
|
127
|
+
has_one 'mcwta',McWithTwoAttrs
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_equal_with_non_cont_ref_single
|
131
|
+
mcwta1 = McWithTwoAttrs.build i: 27, s: 'Federico'
|
132
|
+
mcwta2 = McWithTwoAttrs.build i: 27, s: 'Federico'
|
133
|
+
mcwta3 = McWithTwoAttrs.build i: 27, s: 'Federico Filippo'
|
134
|
+
c1 = McWithNonContRef.new
|
135
|
+
c1.mcwta = mcwta1
|
136
|
+
c2 = McWithNonContRef.new
|
137
|
+
c2.mcwta = mcwta1
|
138
|
+
assert_equal true, c1==c2
|
139
|
+
c2.mcwta = mcwta2
|
140
|
+
assert_equal true, c1==c2
|
141
|
+
c2.mcwta = mcwta3
|
142
|
+
assert_equal false, c1==c2
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_equal_with_nil_ref
|
146
|
+
mcwta1 = McWithTwoAttrs.build i: 27, s: 'Federico'
|
147
|
+
c1 = McWithNonContRef.new
|
148
|
+
c2 = McWithNonContRef.new
|
149
|
+
assert_equal true, c1==c2 # both nil
|
150
|
+
c1.mcwta = mcwta1
|
151
|
+
assert_equal false, c1==c2 # one nil, the other not
|
152
|
+
assert_equal false, c2==c1 # inverting them do I get a npe?
|
153
|
+
end
|
154
|
+
|
155
|
+
class McWithNonContRefMany < RGen::MetamodelBuilder::MMBase
|
156
|
+
has_many 'mcwtas',McWithTwoAttrs
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_rgen_issue_10_is_in_place
|
160
|
+
mcwta1 = McWithTwoAttrs.build i: 27, s: 'Federico'
|
161
|
+
c1 = McWithNonContRefMany.new
|
162
|
+
c1.addMcwtas(mcwta1)
|
163
|
+
c1.addMcwtas(mcwta1)
|
164
|
+
assert_equal 1,c1.mcwtas.count
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_equal_with_non_cont_ref_many
|
168
|
+
mcwta1 = McWithTwoAttrs.build i: 27, s: 'Federico'
|
169
|
+
mcwta2 = McWithTwoAttrs.build i: 27, s: 'Federico'
|
170
|
+
mcwta3 = McWithTwoAttrs.build i: 27, s: 'Federico Filippo'
|
171
|
+
mcwta4 = McWithTwoAttrs.build i: 29, s: 'Federico Filippo'
|
172
|
+
c1 = McWithNonContRefMany.new
|
173
|
+
c2 = McWithNonContRefMany.new
|
174
|
+
assert_equal true, c1==c2
|
175
|
+
c1.addMcwtas(mcwta2)
|
176
|
+
c2.addMcwtas(mcwta1)
|
177
|
+
assert_equal true, c1==c2
|
178
|
+
c1.addMcwtas(mcwta1)
|
179
|
+
c2.addMcwtas(mcwta2)
|
180
|
+
assert_equal true, c1==c2
|
181
|
+
c1.addMcwtas(mcwta4)
|
182
|
+
c2.addMcwtas(mcwta3)
|
183
|
+
assert_equal false, c1==c2
|
184
|
+
end
|
185
|
+
|
186
|
+
|
187
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestSerializationRgen < Test::Unit::TestCase
|
4
|
+
|
5
|
+
class Person < RGen::MetamodelBuilder::MMBase
|
6
|
+
has_attr 'name', String
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_to_model_with_single_obj
|
10
|
+
p = Person.build 'pippo'
|
11
|
+
m = Serialization.rgenobject_to_model(p)
|
12
|
+
|
13
|
+
assert_equal 1,m['root']['id']
|
14
|
+
assert_equal 0,m['external_elements'].count
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_to_model_with_attr
|
18
|
+
p = Person.build 'pippo'
|
19
|
+
m = Serialization.rgenobject_to_model(p)
|
20
|
+
|
21
|
+
assert_equal 'pippo',m['root']['attr_name']
|
22
|
+
end
|
23
|
+
|
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
|
+
def test_to_model_with_rel_cont_single
|
38
|
+
a = Address.build number: 11
|
39
|
+
a.street = Street.build 'via Cassini'
|
40
|
+
m = Serialization.rgenobject_to_model(a)
|
41
|
+
|
42
|
+
street_serialized = m['root']['relcont_street']
|
43
|
+
assert_not_nil street_serialized
|
44
|
+
assert_equal 'via Cassini',street_serialized['attr_name']
|
45
|
+
end
|
46
|
+
|
47
|
+
class Street < RGen::MetamodelBuilder::MMBase
|
48
|
+
has_attr 'name', String
|
49
|
+
end
|
50
|
+
|
51
|
+
class CityMap < RGen::MetamodelBuilder::MMBase
|
52
|
+
contains_many_uni 'streets', Street
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_to_model_with_rel_cont_multi
|
56
|
+
cm = CityMap.new
|
57
|
+
cm.streets = cm.streets << Street.build('via Cassini')
|
58
|
+
cm.streets = cm.streets << Street.build('piazza Emanuele Filiberto')
|
59
|
+
m = Serialization.rgenobject_to_model(cm)
|
60
|
+
|
61
|
+
streets_serialized = m['root']['relcont_streets']
|
62
|
+
assert_not_nil streets_serialized
|
63
|
+
assert_equal 2, streets_serialized.count
|
64
|
+
assert_equal 'via Cassini',streets_serialized[0]['attr_name']
|
65
|
+
assert_equal 'piazza Emanuele Filiberto',streets_serialized[1]['attr_name']
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_to_json_multi_attr
|
69
|
+
spb = StupidPhoneBook.new
|
70
|
+
spb.addNumbers '+49 0176 12345678'
|
71
|
+
spb.addNumbers '+39 389 4561234'
|
72
|
+
|
73
|
+
assert_equal({
|
74
|
+
"type"=>"TestSerializationRgen::StupidPhoneBook",
|
75
|
+
"id"=>1,
|
76
|
+
"attr_numbers"=>[
|
77
|
+
"+49 0176 12345678",
|
78
|
+
"+39 389 4561234"
|
79
|
+
]},
|
80
|
+
spb.to_json)
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: codemodels
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.2
|
6
|
+
platform: java
|
7
|
+
authors:
|
8
|
+
- Federico Tomassetti
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-08-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: json
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :runtime
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rgen
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :runtime
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bundler
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - '='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.3.5
|
53
|
+
none: false
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - '='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: 1.3.5
|
59
|
+
none: false
|
60
|
+
prerelease: false
|
61
|
+
type: :development
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
none: false
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
none: false
|
76
|
+
prerelease: false
|
77
|
+
type: :development
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: simplecov
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
none: false
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
none: false
|
92
|
+
prerelease: false
|
93
|
+
type: :development
|
94
|
+
description: Library to build models of code of different languages in a uniform way.
|
95
|
+
email: f.tomassetti@gmail.com
|
96
|
+
executables: []
|
97
|
+
extensions: []
|
98
|
+
extra_rdoc_files: []
|
99
|
+
files:
|
100
|
+
- .gitignore
|
101
|
+
- Gemfile
|
102
|
+
- LICENSE
|
103
|
+
- README.md
|
104
|
+
- Rakefile
|
105
|
+
- codemodels.gemspec
|
106
|
+
- lib/codemodels.rb
|
107
|
+
- lib/codemodels/foreign_ast.rb
|
108
|
+
- lib/codemodels/info_extraction.rb
|
109
|
+
- lib/codemodels/language.rb
|
110
|
+
- lib/codemodels/metamodel.rb
|
111
|
+
- lib/codemodels/model_building.rb
|
112
|
+
- lib/codemodels/monkey_patching.rb
|
113
|
+
- lib/codemodels/parsing.rb
|
114
|
+
- lib/codemodels/query_serialized.rb
|
115
|
+
- lib/codemodels/rgen_ext.rb
|
116
|
+
- lib/codemodels/serialization.rb
|
117
|
+
- lib/codemodels/version.rb
|
118
|
+
- test/data/node_setCompleted.json
|
119
|
+
- test/test_foreign_ast.rb
|
120
|
+
- test/test_helper.rb
|
121
|
+
- test/test_info_extraction.rb
|
122
|
+
- test/test_language.rb
|
123
|
+
- test/test_monkey_patching.rb
|
124
|
+
- test/test_query_serialized.rb
|
125
|
+
- test/test_rgen_ext.rb
|
126
|
+
- test/test_serialization.rb
|
127
|
+
homepage: https://github.com/ftomassetti/codemodels
|
128
|
+
licenses:
|
129
|
+
- APACHE 2
|
130
|
+
post_install_message:
|
131
|
+
rdoc_options: []
|
132
|
+
require_paths:
|
133
|
+
- lib
|
134
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
segments:
|
139
|
+
- 0
|
140
|
+
hash: 2
|
141
|
+
version: '0'
|
142
|
+
none: false
|
143
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - '>='
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
segments:
|
148
|
+
- 0
|
149
|
+
hash: 2
|
150
|
+
version: '0'
|
151
|
+
none: false
|
152
|
+
requirements: []
|
153
|
+
rubyforge_project:
|
154
|
+
rubygems_version: 1.8.24
|
155
|
+
signing_key:
|
156
|
+
specification_version: 3
|
157
|
+
summary: Library to build models of code
|
158
|
+
test_files:
|
159
|
+
- test/data/node_setCompleted.json
|
160
|
+
- test/test_foreign_ast.rb
|
161
|
+
- test/test_helper.rb
|
162
|
+
- test/test_info_extraction.rb
|
163
|
+
- test/test_language.rb
|
164
|
+
- test/test_monkey_patching.rb
|
165
|
+
- test/test_query_serialized.rb
|
166
|
+
- test/test_rgen_ext.rb
|
167
|
+
- test/test_serialization.rb
|