Module: SimpleECoreModelChecker

Includes:
RGen::ECore
Included in:
XMLInstantiatorTest
Defined in:
lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb

Overview

This “light” version of the ECore model checker is used to check the model produced by the XMLInstantiatorTest only.

Constant Summary

Constants included from RGen::ECore

RGen::ECore::EBoolean, RGen::ECore::EFloat, RGen::ECore::EInt, RGen::ECore::EJavaClass, RGen::ECore::EJavaObject, RGen::ECore::ELong, RGen::ECore::ERubyClass, RGen::ECore::ERubyObject, RGen::ECore::EString

Instance Method Summary collapse

Methods included from RGen::MetamodelBuilder::ModuleExtension

#_annotations, #_constantOrder, #annotation, extended, #final_method, #method_added

Methods included from RGen::ECore::ECoreInterface

#_set_ecore_internal, clear_ecore_cache, #ecore

Instance Method Details

#checkECoreModel(env) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb', line 9

def checkECoreModel(env)
  
  # check main package
  mainPackage = env.elements.select {|e| e.is_a? EPackage and e.name == "HouseMetamodel"}.first
  assert_not_nil mainPackage
  
  # check Rooms package
  assert mainPackage.eSubpackages.is_a?(Array)
  assert_equal 1, mainPackage.eSubpackages.size
  assert mainPackage.eSubpackages[0].is_a?(EPackage)
  roomsPackage = mainPackage.eSubpackages[0]
  assert_equal "Rooms", roomsPackage.name
  
  # check main package classes
  assert mainPackage.eClassifiers.is_a?(Array)
  assert_equal 3, mainPackage.eClassifiers.size
  assert mainPackage.eClassifiers.all?{|c| c.is_a?(EClass)}
  houseClass = mainPackage.eClassifiers.select{|c| c.name == "House"}.first
  personClass = mainPackage.eClassifiers.select{|c| c.name == "Person"}.first
  meetingPlaceClass = mainPackage.eClassifiers.select{|c| c.name == "MeetingPlace"}.first
  assert_not_nil houseClass
  assert_not_nil personClass
  assert_not_nil meetingPlaceClass
  
  # check Rooms package classes
  assert roomsPackage.eClassifiers.is_a?(Array)
  assert_equal 3, roomsPackage.eClassifiers.size
  assert roomsPackage.eClassifiers.all?{|c| c.is_a?(EClass)}
  roomClass = roomsPackage.eClassifiers.select{|c| c.name == "Room"}.first
  kitchenClass = roomsPackage.eClassifiers.select{|c| c.name == "Kitchen"}.first
  bathroomClass = roomsPackage.eClassifiers.select{|c| c.name == "Bathroom"}.first
  assert_not_nil roomClass
  assert_not_nil kitchenClass
  assert_not_nil bathroomClass
  
  # check Room inheritance
  assert kitchenClass.eSuperTypes.is_a?(Array)
  assert_equal 2, kitchenClass.eSuperTypes.size
  assert_equal roomClass.object_id, kitchenClass.eSuperTypes.select{|c| c.name == "Room"}.first.object_id
  assert_equal meetingPlaceClass.object_id, kitchenClass.eSuperTypes.select{|c| c.name == "MeetingPlace"}.first.object_id
  assert bathroomClass.eSuperTypes.is_a?(Array)
  assert_equal 1, bathroomClass.eSuperTypes.size
  assert_equal roomClass.object_id, bathroomClass.eSuperTypes[0].object_id
  
  # check House-Room "part of" association
  assert houseClass.eAllContainments.eType.is_a?(Array)
  assert_equal 1, houseClass.eAllContainments.eType.size
  roomRef = houseClass.eAllContainments.first
  assert_equal roomClass.object_id, roomRef.eType.object_id
  assert_equal "room", roomRef.name
  assert_equal 1, roomRef.lowerBound
  assert_equal(-1, roomRef.upperBound)
  assert_not_nil roomRef.eOpposite
  assert_equal houseClass.object_id, roomRef.eOpposite.eType.object_id
  
  partOfRefs = roomClass.eReferences.select{|r| r.eOpposite && r.eOpposite.containment}
  assert_equal 1, partOfRefs.size
  assert_equal houseClass.object_id, partOfRefs.first.eType.object_id
  assert_equal "house", partOfRefs.first.name
  assert_equal roomRef.object_id, partOfRefs.first.eOpposite.object_id
  
  # check House OUT associations
  assert houseClass.eReferences.is_a?(Array)
  assert_equal 3, houseClass.eReferences.size
  bathRef = houseClass.eReferences.find {|e| e.name == "bathroom"}
  kitchenRef = houseClass.eReferences.find {|e| e.name == "kitchen"}
  roomRef = houseClass.eReferences.find {|e| e.name == "room"}
  assert_not_nil bathRef
  assert_nil bathRef.eOpposite
  assert_not_nil kitchenRef
  assert_not_nil roomRef
  assert_equal 1, kitchenRef.lowerBound
  assert_equal 1, kitchenRef.upperBound
  assert_equal 1, roomRef.lowerBound
  assert_equal(-1, roomRef.upperBound)
  
  # check House IN associations
  houseInRefs = env.find(:class => EReference, :eType => houseClass)
  assert_equal 3, houseInRefs.size
  homeEnd = houseInRefs.find{|e| e.name == "home"}
  assert_not_nil homeEnd
  assert_equal 0, homeEnd.lowerBound
  assert_equal(-1, homeEnd.upperBound)
  
end