1 2 3 4 5 6 7 8 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 94 95 96 97 98 99 100 101
|
require 'rgen/ecore/ecore'
module Testmodel
# Checks the ECore model elements created by transformation from the
# UML Class model elements from the example model
#
module ECoreModelChecker
include RGen::ECore
def checkECoreModel(env)
# check main package
mainPackage = env.elements.select {|e| e.is_a? EPackage and e.name == "HouseMetamodel"}.first
assert mainPackage != nil
# 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 4, 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
cookingPlaceInterface = mainPackage.eClassifiers.select{|c| c.name == "CookingPlace"}.first
assert houseClass != nil
assert personClass != nil
assert meetingPlaceClass != nil
assert cookingPlaceInterface != nil
# 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 roomClass != nil
assert kitchenClass != nil
assert bathroomClass != nil
# check Room inheritance
assert kitchenClass.eSuperTypes.is_a?(Array)
assert_equal 3, 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_equal cookingPlaceInterface.object_id, kitchenClass.eSuperTypes.select{|c| c.name == "CookingPlace"}.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 roomRef.eOpposite != nil
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 bathRef != nil
assert_nil bathRef.eOpposite
assert kitchenRef != nil
assert roomRef != nil
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 homeEnd != nil
assert_equal 0, homeEnd.lowerBound
assert_equal(-1, homeEnd.upperBound)
end
end
end
|