public void Invocation_SimpleComposition()
        {
            CompleteInCSharpFile(@"
                namespace N {
                    public class H {
                        public int Get() {
                            return 1;
                        }
                    }
                    public class C {
                        public void A(H h) {
                            var i = 1 + h.Get();
                            $
                        }
                    }
                }
            ");

            var mA = NewMethodDeclaration(Fix.Void, "A", "[N.H, TestProject] h");

            mA.Body.Add(SSTUtil.Declare("i", Fix.Int));
            mA.Body.Add(SSTUtil.Declare("$0", Fix.Int));
            mA.Body.Add(
                SSTUtil.AssignmentToLocal(
                    "$0",
                    SSTUtil.InvocationExpression(
                        "h",
                        Names.Method("[{0}] [N.H, TestProject].Get()", Fix.Int))));
            mA.Body.Add(SSTUtil.AssignmentToLocal("i", SSTUtil.ComposedExpression("$0")));

            AssertAllMethods(mA);
        }
Example #2
0
        public void InvocationExpression_NonStatic()
        {
            var a = SSTUtil.InvocationExpression("a1", GetMethod("B1"), Refs("c1"));

            Assert.AreEqual(SSTUtil.VariableReference("a1"), a.Reference);
            Assert.AreEqual(GetMethod("B1"), a.MethodName);
            Assert.AreEqual(Refs("c1"), a.Parameters);
        }
Example #3
0
        public void InvocationExpression_Static()
        {
            var a = SSTUtil.InvocationExpression(GetStaticMethod("B2"), Refs("c2"));

            Assert.AreEqual(new VariableReference(), a.Reference);
            Assert.AreEqual(GetStaticMethod("B2"), a.MethodName);
            Assert.AreEqual(Refs("c2"), a.Parameters);
        }
        public void Equality_ReallyTheSame()
        {
            Assert.AreEqual(GetMethod("a"), GetMethod("a"));

            var a = SSTUtil.InvocationExpression("o", GetMethod("A"), RefExprs("a", "b", "c"));
            var b = SSTUtil.InvocationExpression("o", GetMethod("A"), RefExprs("a", "b", "c"));

            Assert.AreEqual(a, b);
            Assert.AreEqual(a.GetHashCode(), b.GetHashCode());
        }
Example #5
0
        public void SettingValues()
        {
            var a = SSTUtil.InvocationExpression("a1", GetMethod("A2"), Refs("a3"));

            Assert.AreEqual(new VariableReference {
                Identifier = "a1"
            }, a.Reference);
            Assert.AreEqual(GetMethod("A2"), a.MethodName);
            Assert.AreEqual(Refs("a3"), a.Parameters);
        }
        public void Invocation_NestedComposition()
        {
            CompleteInCSharpFile(@"
                namespace N {
                    public class U {
                        public int Plus(int i) {
                            return i + 1;
                        }
                    }
                    public class C {
                        public void A(U u1, U u2) {
                            var i = u1.Plus(u2.Plus(1));
                            $
                        }
                    }
                }
            ");

            var mA = NewMethodDeclaration(
                Fix.Void,
                "A",
                "[N.U, TestProject] u1",
                "[N.U, TestProject] u2");

            mA.Body.Add(SSTUtil.Declare("i", Fix.Int));
            mA.Body.Add(SSTUtil.Declare("$0", Fix.Int));
            mA.Body.Add(SSTUtil.AssignmentToLocal("$0", new ConstantValueExpression()));
            mA.Body.Add(SSTUtil.Declare("$1", Fix.Int));
            mA.Body.Add(
                SSTUtil.AssignmentToLocal(
                    "$1",
                    SSTUtil.InvocationExpression(
                        "u2",
                        Names.Method(string.Format("[{0}] [N.U, TestProject].Plus([{0}] i)", Fix.Int)),
                        RefExprs("$0"))));
            mA.Body.Add(
                SSTUtil.AssignmentToLocal(
                    "i",
                    SSTUtil.InvocationExpression(
                        "u1",
                        Names.Method(string.Format("[{0}] [N.U, TestProject].Plus([{0}] i)", Fix.Int)),
                        RefExprs("$1"))));

            AssertAllMethods(mA);
        }
        public void Invocation_RealComposition()
        {
            CompleteInCSharpFile(@"
                namespace N {
                    public class H {
                        public int Get() {
                            return 1;
                        }
                    }
                    public class C {
                        public void A(H h1, H h2) {
                            var i = h1.Get() + h2.Get() + 1;
                            $
                        }
                    }
                }
            ");

            var mA = NewMethodDeclaration(
                Fix.Void,
                "A",
                "[N.H, TestProject] h1",
                "[N.H, TestProject] h2");

            mA.Body.Add(SSTUtil.Declare("i", Fix.Int));
            mA.Body.Add(SSTUtil.Declare("$0", Fix.Int));
            mA.Body.Add(
                SSTUtil.AssignmentToLocal(
                    "$0",
                    SSTUtil.InvocationExpression(
                        "h1",
                        Names.Method(string.Format("[{0}] [N.H, TestProject].Get()", Fix.Int)))));
            mA.Body.Add(SSTUtil.Declare("$1", Fix.Int));
            mA.Body.Add(
                SSTUtil.AssignmentToLocal(
                    "$1",
                    SSTUtil.InvocationExpression(
                        "h2",
                        Names.Method(string.Format("[{0}] [N.H, TestProject].Get()", Fix.Int)))));
            mA.Body.Add(SSTUtil.AssignmentToLocal("i", SSTUtil.ComposedExpression("$0", "$1")));

            AssertAllMethods(mA);
        }
Example #8
0
        public void ArrayInit_WithCalls()
        {
            CompleteInClass(@"
                public void A(object o)
                {
                    var arr = new[] {1,2,o.GetHashCode()};
                    $
                }
            ");

            var mA = NewMethodDeclaration(
                SSTAnalysisFixture.Void,
                "A",
                string.Format("[{0}] o", SSTAnalysisFixture.Object));

            mA.Body.Add(SSTUtil.Declare("arr", SSTAnalysisFixture.IntArray));
            mA.Body.Add(SSTUtil.Declare("$0", SSTAnalysisFixture.Int));
            mA.Body.Add(SSTUtil.AssignmentToLocal("$0", SSTUtil.InvocationExpression("o", Fix.Object_GetHashCode)));
            mA.Body.Add(SSTUtil.AssignmentToLocal("arr", SSTUtil.ComposedExpression("$0")));

            AssertAllMethods(mA);
        }
        public void ComplexInlineIfElse()
        {
            CompleteInClass(@"
                public void A(object o1, object o2, object o3)
                {
                    var compare = (o2.GetHashCode() > o3.GetHashCode())
                        ? o1.ToString().Equals(o2.ToString())
                        : o1.ToString().Equals(o3.ToString());
                    $
                }
            ");

            var mA = NewMethodDeclaration(
                Fix.Void,
                "A",
                string.Format("[{0}] o1", Fix.Object),
                string.Format("[{0}] o2", Fix.Object),
                string.Format("[{0}] o3", Fix.Object));

            mA.Body.Add(SSTUtil.Declare("compare", Fix.Bool));
            var ifBlock = new LoopHeaderBlockExpression(); // {Value = new[] {"$0", "$1"}};

            ifBlock.Body.Add(SSTUtil.Declare("$0", Fix.Int));
            ifBlock.Body.Add(
                SSTUtil.AssignmentToLocal("$0", SSTUtil.InvocationExpression("o2", Fix.GetHashCode(Fix.Object))));
            ifBlock.Body.Add(SSTUtil.Declare("$1", Fix.Int));
            ifBlock.Body.Add(
                SSTUtil.AssignmentToLocal("$1", SSTUtil.InvocationExpression("o3", Fix.GetHashCode(Fix.Object))));
            var thenBlock = new LoopHeaderBlockExpression(); //) {Value = new[] {"$4"}};

            thenBlock.Body.Add(SSTUtil.Declare("$2", Fix.String));
            thenBlock.Body.Add(
                SSTUtil.AssignmentToLocal("$2", SSTUtil.InvocationExpression("o1", Fix.ToString(Fix.Object))));
            thenBlock.Body.Add(SSTUtil.Declare("$3", Fix.String));
            thenBlock.Body.Add(
                SSTUtil.AssignmentToLocal("$3", SSTUtil.InvocationExpression("o2", Fix.ToString(Fix.Object))));
            thenBlock.Body.Add(SSTUtil.Declare("$4", Fix.Bool));
            thenBlock.Body.Add(
                SSTUtil.AssignmentToLocal(
                    "$4",
                    SSTUtil.InvocationExpression(
                        "$2",
                        Fix.Equals(Fix.String, Fix.String, "value"),
                        new[] { RefExpr("$3") })));
            var elseBlock = new LoopHeaderBlockExpression(); //) {Value = new[] {"$7"}};

            elseBlock.Body.Add(SSTUtil.Declare("$5", Fix.String));
            //elseBlock.Body.Add(SSTUtil.AssignmentToLocal("$5", InvocationExpression("o1", Fix.ToString(Fix.Object))));
            elseBlock.Body.Add(SSTUtil.Declare("$6", Fix.String));
            //elseBlock.Body.Add(SSTUtil.AssignmentToLocal("$6", InvocationExpression("o3", Fix.ToString(Fix.Object))));
            elseBlock.Body.Add(SSTUtil.Declare("$7", Fix.Bool));
            elseBlock.Body.Add(
                SSTUtil.AssignmentToLocal(
                    "$7",
                    SSTUtil.InvocationExpression(
                        "$5",
                        Fix.Equals(Fix.String, Fix.String, "value"),
                        new[] { RefExpr("$6") })));
            //  mA.Body.Add(
            //         new Assignment(
            //             "compare",
            //             new IfElseExpression {Condition = ifBlock, ThenExpression = thenBlock, ElseExpression = elseBlock}));
            AssertAllMethods(mA);
        }
Example #10
0
 public void CustomConstructor_StaticAssert()
 {
     SSTUtil.InvocationExpression(GetMethod("B2"), Refs("c2"));
 }
Example #11
0
 public void CustomConstructor_NonStaticAssert()
 {
     SSTUtil.InvocationExpression("a1", GetStaticMethod("B1"), Refs("c1"));
 }