Class: TransformerTest

Inherits:
Test::Unit::TestCase
  • Object
show all
Includes:
RGen::Util::ModelComparator, Testmodel::ClassModelChecker
Defined in:
lib/puppet/vendor/rgen/test/transformer_test.rb

Defined Under Namespace

Classes: CopyTransformer, ModelAIn, ModelAOut, ModelBIn, ModelBOut, ModelCIn, ModelCOut, ModelIn, ModelInSub, ModelOut, MyTransformer, MyTransformer2

Constant Summary collapse

MODEL_DIR =
File.join(File.dirname(__FILE__),"testmodel")

Instance Method Summary collapse

Methods included from RGen::Util::ModelComparator

#_modelEqual_internal, #modelEqual?

Methods included from Testmodel::ClassModelChecker

#checkClassModel, #checkClassModelPartial

Instance Method Details

#test_copyTransformerObject



241
242
243
244
245
246
247
248
249
250
251
252
# File 'lib/puppet/vendor/rgen/test/transformer_test.rb', line 241

def test_copyTransformer
	envIn = RGen::Environment.new
	envOut = RGen::Environment.new

   EASupport.instantiateUML13FromXMI11(envIn, MODEL_DIR+"/ea_testmodel.xml") 
	
	CopyTransformer.new(envIn, envOut).transform
	checkClassModel(envOut)
	assert modelEqual?(
	  envIn.find(:class => UML13::Model).first,
	  envOut.find(:class => UML13::Model).first)
end

#test_transformerObject



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/puppet/vendor/rgen/test/transformer_test.rb', line 103

def test_transformer
	from = ModelIn.new
	from.name = "TestName"
	env_out = RGen::Environment.new
	t = MyTransformer.new(:env_in, env_out)
	assert t.trans(from).is_a?(ModelOut)
	assert_equal "TestName", t.trans(from).name
	assert_equal 1, env_out.elements.size
	assert_equal env_out.elements.first, t.trans(from)
	assert_equal 1, t.modelInTrans_count
end

#test_transformer_arrayObject



157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/puppet/vendor/rgen/test/transformer_test.rb', line 157

def test_transformer_array
	froms = [ModelIn.new, ModelIn.new]
	froms[0].name = "M1"
	froms[1].name = "M2"
	env_out = RGen::Environment.new
	t = MyTransformer.new(:env_in, env_out)
	assert t.trans(froms).is_a?(Array)
	assert t.trans(froms)[0].is_a?(ModelOut)
	assert_equal "M1", t.trans(froms)[0].name
	assert t.trans(froms)[1].is_a?(ModelOut)
	assert_equal "M2", t.trans(froms)[1].name
	assert_equal 2, env_out.elements.size
	assert (t.trans(froms)-env_out.elements).empty?
	assert_equal 2, t.modelInTrans_count
end

#test_transformer_chainObject



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/puppet/vendor/rgen/test/transformer_test.rb', line 115

def test_transformer_chain
  from = ModelIn.new
  from.name = "Test1"
  from2 = ModelIn.new
  from2.name = "Test2"
  from3 = ModelIn.new
  from3.name = "Test3"
  env_out = RGen::Environment.new
  elementMap = {}
  t1 = MyTransformer.new(:env_in, env_out, elementMap)
assert t1.trans(from).is_a?(ModelOut)
assert_equal "Test1", t1.trans(from).name
assert_equal 1, t1.modelInTrans_count
  # modifying the element map means that following calls of +trans+ will be affected
  assert_equal( {from => t1.trans(from)}, elementMap )
  elementMap.merge!({from2 => :dummy})
  assert_equal :dummy, t1.trans(from2)
  # second transformer based on the element map of the first
  t2 = MyTransformer.new(:env_in, env_out, elementMap)
  # second transformer returns same objects
  assert_equal t1.trans(from).object_id, t2.trans(from).object_id
  assert_equal :dummy, t2.trans(from2)
  # and no transformer rule is evaluated at this point
assert_equal nil, t2.modelInTrans_count
  # now transform a new object in second transformer
assert t2.trans(from3).is_a?(ModelOut)
assert_equal "Test3", t2.trans(from3).name
assert_equal 1, t2.modelInTrans_count
  # the first transformer returns the same object without evaluation of a transformer rule
  assert_equal t1.trans(from3).object_id, t2.trans(from3).object_id
assert_equal 1, t1.modelInTrans_count
end

#test_transformer_conditionalObject



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# File 'lib/puppet/vendor/rgen/test/transformer_test.rb', line 198

def test_transformer_conditional
	froms = [ModelCIn.new, ModelCIn.new, ModelCIn.new]
	froms[0].number = 100
	froms[1].number = 1000
	froms[2].number = 2000

	env_out = RGen::Environment.new
	t = MyTransformer.new(:env_in, env_out)

	assert t.trans(froms).is_a?(Array)
	assert_equal 2, t.trans(froms).size
	
	# this one matched the smallNumber rule
	assert t.trans(froms[0]).is_a?(ModelCOut)
	assert_equal 50, t.trans(froms[0]).number
	
	# this one did not match any rule
	assert t.trans(froms[1]).nil?

	# this one matched the largeNumber rule
	assert t.trans(froms[2]).is_a?(ModelCOut)
	assert_equal 4000, t.trans(froms[2]).number
	
	# elements in environment are the same as the ones returned
	assert_equal 2, env_out.elements.size
	assert (t.trans(froms)-env_out.elements).empty?
end

#test_transformer_cyclicObject



173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/puppet/vendor/rgen/test/transformer_test.rb', line 173

def test_transformer_cyclic
	# setup a cyclic dependency between fromA and fromB
	fromA = ModelAIn.new
	fromB = ModelBIn.new
	fromA.modelB = fromB
	fromA.name = "ModelA"
	fromB.modelA = fromA
	fromB.name = "ModelB"
	env_out = RGen::Environment.new
	t = MyTransformer.new(:env_in, env_out)
	# check that trans resolves the cycle correctly (no endless loop)
	# both elements, fromA and fromB will be transformed with the transformation
	# of the first element, either fromA or fromB
	assert t.trans(fromA).is_a?(ModelAOut)
	assert_equal "ModelA", t.trans(fromA).name
	assert t.trans(fromA).modelB.is_a?(ModelBOut)
	assert_equal "ModelB", t.trans(fromA).modelB.name
	assert_equal t.trans(fromA), t.trans(fromA).modelB.modelA
	assert_equal t.trans(fromB), t.trans(fromA).modelB
	assert_equal 2, env_out.elements.size
	assert (env_out.elements - [t.trans(fromA), t.trans(fromB)]).empty?
	assert_equal 1, t.modelAInTrans_count
	assert_equal 1, t.modelBInTrans_count
end

#test_transformer_subclassObject



148
149
150
151
152
153
154
155
# File 'lib/puppet/vendor/rgen/test/transformer_test.rb', line 148

def test_transformer_subclass
	from = ModelInSub.new
	from.name = "TestName"
	t = MyTransformer.new
	assert t.trans(from).is_a?(ModelOut)
	assert_equal "TestName", t.trans(from).name
	assert_equal 1, t.modelInTrans_count
end