codemodels 0.2.2-java

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