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.
@@ -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