codemodels 0.2.2-java
Sign up to get free protection for your applications and to get access to all the features.
- 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
|