module Testmodel::ClassModelChecker

Checks the UML Class model elements from the example model

Public Instance Methods

checkClassModel(envUML) click to toggle source
# File lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb, line 10
def checkClassModel(envUML)
                                        
        # check main package

        mainPackage = envUML.find(:class => UML13::Package, :name => "HouseMetamodel").first
        assert_not_nil mainPackage
        
        # check Rooms package

        subs = mainPackage.ownedElement.select{|e| e.is_a?(UML13::Package)}
        assert_equal 1, subs.size
        roomsPackage = subs.first
        assert_equal "Rooms", roomsPackage.name
        
        # check main package classes

        classes = mainPackage.ownedElement.select{|e| e.is_a?(UML13::Class)}
        assert_equal 3, classes.size
        houseClass = classes.find{|c| c.name == "House"}
        personClass = classes.find{|c| c.name == "Person"}
        meetingPlaceClass = classes.find{|c| c.name == "MeetingPlace"}
        cookingPlaceInterface = mainPackage.ownedElement.find{|e| e.is_a?(UML13::Interface) && e.name == "CookingPlace"}
        assert_not_nil houseClass
        assert_not_nil personClass
        assert_not_nil meetingPlaceClass
assert_not_nil cookingPlaceInterface

        # check Rooms package classes

        classes = roomsPackage.ownedElement.select{|e| e.is_a?(UML13::Class)}
        assert_equal 3, classes.size
        roomClass = classes.find{|c| c.name == "Room"}
        kitchenClass = classes.find{|c| c.name == "Kitchen"}
        bathroomClass = classes.find{|c| c.name == "Bathroom"}
        assert_not_nil roomClass
        assert_not_nil kitchenClass
        assert_not_nil bathroomClass
        
        # check Room inheritance

        assert_equal 2, roomClass.specialization.child.size
        assert_not_nil roomClass.specialization.child.find{|c| c.name == "Kitchen"}
        assert_not_nil roomClass.specialization.child.find{|c| c.name == "Bathroom"}
        assert_equal 2, kitchenClass.generalization.parent.size
        assert_equal roomClass.object_id, kitchenClass.generalization.parent.find{|c| c.name == "Room"}.object_id
        assert_equal meetingPlaceClass.object_id, kitchenClass.generalization.parent.find{|c| c.name == "MeetingPlace"}.object_id
        assert_equal 1, bathroomClass.generalization.parent.size
        assert_equal roomClass.object_id, bathroomClass.generalization.parent.first.object_id
        assert_not_nil kitchenClass.clientDependency.find{|d| d.stereotype.name == "implements"}
assert_equal cookingPlaceInterface.object_id, kitchenClass.clientDependency.supplier.find{|c| c.name == "CookingPlace"}.object_id
assert_equal kitchenClass.object_id, cookingPlaceInterface.supplierDependency.client.find{|c| c.name == "Kitchen"}.object_id

        # check House-Room "part of" association

        assert_equal 1, houseClass.localCompositeEnd.size
        roomEnd = houseClass.localCompositeEnd.first.otherEnd
        assert_equal UML13::Association, roomEnd.association.class
        assert_equal roomClass.object_id, roomEnd.type.object_id
        assert_equal "room", roomEnd.name
        assert_equal UML13::Multiplicity, roomEnd.multiplicity.class
        assert_equal "1", roomEnd.multiplicity.range.first.lower
        assert_equal "*", roomEnd.multiplicity.range.first.upper
        
        assert_equal 1, roomClass.remoteCompositeEnd.size
        assert_equal houseClass.object_id, roomClass.remoteCompositeEnd.first.type.object_id
        assert_equal "house", roomClass.remoteCompositeEnd.first.name
                        
        # check House OUT associations

        assert_equal 2, houseClass.remoteNavigableEnd.size
        bathEnd = houseClass.remoteNavigableEnd.find{|e| e.name == "bathroom"}
        kitchenEnd = houseClass.remoteNavigableEnd.find{|e| e.name== "kitchen"}
        assert_not_nil bathEnd
        assert_not_nil kitchenEnd
        assert_equal UML13::Association, bathEnd.association.class
        assert_equal UML13::Association, kitchenEnd.association.class
        assert_equal "1", kitchenEnd.multiplicity.range.first.lower
        assert_equal "1", kitchenEnd.multiplicity.range.first.upper
        
        # check House IN associations

        assert_equal 3, houseClass.localNavigableEnd.size
        homeEnd = houseClass.localNavigableEnd.find{|e| e.name == "home"}
        assert_not_nil homeEnd
        assert_equal UML13::Association, homeEnd.association.class
        assert_equal "0", homeEnd.multiplicity.range.first.lower
        assert_equal "*", homeEnd.multiplicity.range.first.upper
        
        # check House all associations

        assert_equal 4, houseClass.associationEnd.size
end
checkClassModelPartial(envUML) click to toggle source
# File lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb, line 94
def checkClassModelPartial(envUML)
    # HouseMetamodel package is not part of the partial export

            mainPackage = envUML.find(:class => UML13::Package, :name => "HouseMetamodel").first
            assert_nil mainPackage
            
            roomsPackage = envUML.find(:class => UML13::Package, :name => "Rooms").first
            assert_not_nil roomsPackage
            
            roomClass = envUML.find(:class => UML13::Class, :name => "Room").first
            assert_not_nil roomClass
            
            # House is created from an EAStub

            houseClass = roomClass.remoteCompositeEnd.first.type
            assert_not_nil houseClass
            assert_equal "House", houseClass.name
    # House is not in a package since it's just a stub

            assert houseClass.namespace.nil?
            
            # in the partial model, House has only 3 (not 4) associations

            # since the fourth class (Person) is not in Rooms package

            assert_equal 3, houseClass.associationEnd.size
end