コード例 #1
0
        public void testPrePost()
        {
            AstOclConstraintFactory   factory1 = AstOclConstraintFactoryManager.getInstance(umlModel.getOclPackage());
            AstOclModelElementFactory factory2 = AstOclModelElementFactoryManager.getInstance(umlModel.getOclPackage());

            BooleanLiteralExp exp1      = factory2.createBooleanLiteralExp(true, getClassifier("Boolean"));
            ExpressionInOcl   expInOcl1 = factory1.createExpressionInOcl("name", getClassifier("Film"), exp1);

            BooleanLiteralExp exp2      = factory2.createBooleanLiteralExp(false, getClassifier("Boolean"));
            ExpressionInOcl   expInOcl2 = factory1.createExpressionInOcl("name", getClassifier("Film"), exp2);

            List <object> parms = new List <object>();

            parms.Add(getClassifier("Integer"));
            CoreOperation oper = getClassifier("Film").lookupOperation("getRentalFee", parms);

            OclPrePostConstraint constraint     = (OclPrePostConstraint)factory1.createPrePostConstraint("test.ocl", oper);
            OclConstraint        preConstraint  = factory1.createPreConstraint(constraint, "test.ocl", "myPre", oper, expInOcl1);
            OclConstraint        postConstraint = factory1.createPostConstraint(constraint, "test.ocl", "myPost", oper, expInOcl2);

            Assert.AreEqual("pre myPre: True", preConstraint.ToString());
            Assert.AreEqual("post myPost: False", postConstraint.ToString());

            Assert.IsTrue(oper.getSpecifications().Contains(constraint));
            OclPrePostConstraint example = (OclPrePostConstraint)oper.getSpecifications()[0];

            Assert.IsTrue(example.getPreConditions().Contains((OclPreConstraint)preConstraint));
            Assert.IsTrue(example.getPostConditions().Contains((OclPostConstraint)postConstraint));

            oper.deleteAllConstraintsForSource("test.ocl");
            Assert.AreEqual(0, oper.getSpecifications().Count);
        }
コード例 #2
0
        public void testClassifierAttribute_05()
        {
            CoreClassifier film      = (CoreClassifier)environment.lookup("Film");
            CoreOperation  operation = film.lookupOperation("getTapes", null);

            Assert.AreEqual(0, operation.getSpecifications().Count);

            List <object> constraints =
                doTestManyContextOK("context Film::getTapes() : Set(Tape) post: self.rentalFee@pre = 10 ",
                                    getCurrentMethodName());

            film      = (CoreClassifier)environment.lookup("Film");
            operation = film.lookupOperation("getTapes", null);
            Assert.AreEqual(1, operation.getSpecifications().Count);
            OclPrePostConstraint constraint = (OclPrePostConstraint)operation.getSpecifications()[0];
            OclPostConstraint    post       = (OclPostConstraint)constraint.getPostConditions()[0];

            OclExpression oclExpression = ((ExpressionInOclImpl)post.getExpression()).getBodyExpression();

            this.checkOperationCallExp(((OperationCallExp)oclExpression), "=", "Boolean");
            OperationCallExp opCall = (OperationCallExp)((OperationCallExp)oclExpression);
            AttributeCallExp attExp = checkAttributeCallExp(opCall.getSource(), "rentalFee", "Integer");

            opCall = (OperationCallExp)((AttributeCallExp)opCall.getSource()).getSource();
            this.checkOperationCallExp(opCall, "atPre", "Film");
            checkImplicitSource(opCall, "self", "Film");
        }
コード例 #3
0
        public void testPost_01()
        {
            doTestManyContextOK("context Film::getTapes() : Set(Tape) post myPost: result = tapes->select(rentalFee > 10)  ",
                                getCurrentMethodName());

            CoreClassifier film      = (CoreClassifier)environment.lookup("Film");
            CoreOperation  operation = film.lookupOperation("getTapes", null);

            Assert.AreEqual(1, new List <object>(operation.getSpecifications()).Count);
            OclPrePostConstraint constraint = (OclPrePostConstraint) new List <object>(operation.getSpecifications())[0];

            Assert.AreEqual(1, new List <object>(constraint.getPostConditions()).Count);
            Assert.AreEqual("myPost", ((OclPostConstraint) new List <object>(constraint.getPostConditions())[0]).getName());
        }
コード例 #4
0
        public OclPostConstraint               createPostConstraint(OclPrePostConstraint owner, string source, string name, CoreOperation contextualOperation, ExpressionInOcl postCondition)
        {
            OclPostConstraint constraint = new OclPostConstraintImpl();

            constraint.setSource(source);
            constraint.setContextualOperation(contextualOperation);
            constraint.setExpression(postCondition);
            constraint.setName(name);
            constraint.setOwner(owner);
            owner.addPostCondition(constraint);

//		cachedObjects.add(constraint);

            return(constraint);
        }
コード例 #5
0
        public void testPrePost_03()
        {
            doTestManyContextOK("context Film::getTapes() : Set(Tape) pre myPre0: tapes->size() > 0   pre anotherPre0: tapes->size() < 10   post myPost0: result = tapes->select(rentalFee > 10)   post anotherPost0: result = tapes->select(rentalFee > 10)  " +
                                "context Film::getTapes() : Set(Tape) pre myPre1: tapes->size() > 0 pre anotherPre1: tapes->size() < 10 post myPost1: result = tapes->select(rentalFee > 10)  post anotherPost1: result = tapes->select(rentalFee > 10)  ",
                                getCurrentMethodName());

            CoreClassifier film      = (CoreClassifier)environment.lookup("Film");
            CoreOperation  operation = film.lookupOperation("getTapes", null);

            Assert.AreEqual(2, new List <object>(operation.getSpecifications()).Count);
            for (int i = 0; i < 2; i++)
            {
                OclPrePostConstraint constraint = (OclPrePostConstraint) new List <object>(new List <object>(operation.getSpecifications()))[i];
                Assert.AreEqual(2, constraint.getPreConditions().Count);
                Assert.AreEqual("myPre" + i, ((OclPreConstraint) new List <object>(constraint.getPreConditions())[0]).getName());
                Assert.AreEqual("anotherPre" + i, ((OclPreConstraint) new List <object>(constraint.getPreConditions())[1]).getName());
                Assert.AreEqual(2, new List <object>(constraint.getPostConditions()).Count);
                Assert.AreEqual("myPost" + i, ((OclPostConstraint) new List <object>(constraint.getPostConditions())[0]).getName());
                Assert.AreEqual("anotherPost" + i, ((OclPostConstraint) new List <object>(constraint.getPostConditions())[1]).getName());
            }
        }
コード例 #6
0
        public void testPrePost_DefLocalVar_01()
        {
            doTestManyContextOK("context Film::getTapes() : Set(Tape) \r\n" +
                                "def: theSize : Integer = tapes->size() \r\n" +
                                "def: abc : Integer = theSize + 10 \r\n" +
                                "pre myPre: theSize > 0 \r\n" +
                                "post myPost: result = tapes->select(rentalFee > 10) \r\n" +
                                "pre anotherPre: theSize < 10 and abc > 20",
                                getCurrentMethodName());

            CoreClassifier film      = (CoreClassifier)environment.lookup("Film");
            CoreOperation  operation = film.lookupOperation("getTapes", null);

            Assert.AreEqual(1, new List <object>(operation.getSpecifications()).Count);
            OclPrePostConstraint constraint = (OclPrePostConstraint) new List <object>(operation.getSpecifications())[0];

            Assert.AreEqual(2, constraint.getPreConditions().Count);
            Assert.AreEqual("myPre", ((OclPreConstraint) new List <object>(constraint.getPreConditions())[0]).getName());
            Assert.AreEqual("anotherPre", ((OclPreConstraint) new List <object>(constraint.getPreConditions())[1]).getName());
            Assert.AreEqual(1, new List <object>(constraint.getPostConditions()).Count);
            Assert.AreEqual("myPost", ((OclPostConstraint) new List <object>(constraint.getPostConditions())[0]).getName());
            Assert.IsNotNull(operation.lookupLocalVariable("theSize"));
        }
コード例 #7
0
 /**
  * @param owner The owner to set.
  */
 public void setOwner(OclPrePostConstraint owner)
 {
     this.owner = owner;
 }