public IList <AbstractSyntaxTreeAnalysisLevel> CreateLevels(ref AbstractSyntaxTreeNode expected)
        {
            var visitor = new AbstractSyntaxTreeAnalysisVisitor();

            expected.PreOrder(visitor);
            return(visitor.Levels);
        }
        public int CompareChildren(AbstractSyntaxTreeNode expected, AbstractSyntaxTreeNode actual)
        {
            int score = 0;

            var leftHashtags = expected.Children.Select(node => node.HashTag).ToList();

            leftHashtags.Sort();

            var rightHashtags = actual.Children.Select(node => node.HashTag).ToList();

            rightHashtags.Sort();

            var leftIndex  = 0;
            var rightIndex = 0;

            for (; leftIndex < leftHashtags.Count && rightIndex < rightHashtags.Count; rightIndex++)
            {
                while (leftIndex < leftHashtags.Count && rightHashtags[rightIndex] > leftHashtags[leftIndex])
                {
                    leftIndex++;
                }
                if (leftIndex < leftHashtags.Count && rightHashtags[rightIndex] == leftHashtags[leftIndex])
                {
                    score++;
                    leftIndex++;
                }
            }

            return(score);
        }
        public void EqualOperator_ShouldBeTrueForSameValue()
        {
            var lhs = new AbstractSyntaxTreeNode(RootValue);
            var rhs = new AbstractSyntaxTreeNode(RootValue);

            Assert.IsTrue(lhs == rhs);
        }
        public async Task <SnapshotReport> GenerateImpl(SubmissionData data, string snapshot, Assignment assignment,
                                                        AbstractSyntaxTreeNode solutionNode)
        {
            var studentNode = GetStudentSnapshot(data, snapshot, assignment);

            var snapshotMethods = assignment
                                  .Solution
                                  .MethodDeclarations
                                  .Select(methodDeclaration =>
                                          MethodGenerator.Generate(studentNode, solutionNode, methodDeclaration))
                                  .ToList();

            var unitTests = await UnitTestGenerator.GenerateResults(data, snapshot,
                                                                    assignment, snapshotMethods);

            var report = new SnapshotSuccessReport()
            {
                SnapshotMethods = snapshotMethods,
                UnitTestResults = unitTests,
            };

            await SnapshotReports.Add(report);

            return(report);
        }
Exemple #5
0
        public SnapshotMethod Generate(AbstractSyntaxTreeNode studentNode, AbstractSyntaxTreeNode solutionNode, MethodDeclaration method)
        {
            var studentMethod  = GetMethodOrDefault(studentNode, method);
            var solutionMethod = GetMethodOrDefault(solutionNode, method);

            if (studentMethod == null || solutionMethod == null)
            {
                return new SnapshotMethod()
                       {
                           Declared          = false,
                           MethodDeclaration = method,
                       }
            }
            ;

            return(new SnapshotMethod()
            {
                Declared = true,
                CodeAnalysisMetric = new CodeAnalysisMetric()
                {
                    AbstractSyntaxTreeMetric = AbstractSyntaxTreeMetricCreator.Create(solutionMethod, studentMethod),
                    BagOfWordsMetric = BagOfWordsMetricCreator.Create(solutionMethod, studentMethod),
                },
                MethodDeclaration = method
            });
        }
        private AbstractSyntaxTreeMetric RotateNodes(AbstractSyntaxTreeMetric metric, int index,
                                                     int nodeIndex, ref IList <AbstractSyntaxTreeAnalysisLevel> level,
                                                     AbstractSyntaxTreeNode node)
        {
            var compareNode = level[index].Nodes[nodeIndex].Node;

            for (var i = 0; i < node.Children.Count; i++)
            {
                var rotatingNode = -1;
                for (var j = i; j < compareNode.Children.Count && rotatingNode == -1; j++)
                {
                    if (compareNode.Children[j] == node.Children[i])
                    {
                        rotatingNode = j;
                    }
                }

                if (i == rotatingNode)
                {
                    continue;
                }

                if (rotatingNode != -1)
                {
                    compareNode.RemoveAt(rotatingNode);
                }

                compareNode.InsertAt(i, node.Children[i]);
                metric.Rotations++;
            }
            return(metric);
        }
        public void NotEqualOperator_ShouldBeFalseForDifferentValue()
        {
            var lhs = new AbstractSyntaxTreeNode(RootValue);
            var rhs = new AbstractSyntaxTreeNode(ChildValue);

            Assert.IsTrue(lhs != rhs);
        }
Exemple #8
0
        public AbstractSyntaxTreeNode GatherCallExpressions(MethodExtractorObj obj, AbstractSyntaxTreeNode methodNode, AbstractSyntaxTreeNode root, string methodHashCode)
        {
            var hasCodes = new List <string>();

            foreach (var callExpressionNode in obj.CallExpressions)
            {
                var visitor = new AbstractSyntaxTreeWordSearchVisitor(Splitter, "MemberExpr");
                callExpressionNode.BreadthFirst(visitor);
                if (!visitor.Found)
                {
                    continue;
                }

                var hashCode = Splitter.Split(visitor.Node.Value).Last();

                if (hashCode.Equals(methodHashCode) || hasCodes.Contains(hashCode))
                {
                    continue;
                }

                hasCodes.Add(hashCode);

                var callNode = GetCallNodeOrDefault(root, hashCode);

                if (callNode == null)
                {
                    continue;
                }

                methodNode.Append(callNode);
            }
            return(methodNode);
        }
Exemple #9
0
        public AbstractSyntaxTreeNode GetCallNodeOrDefault(AbstractSyntaxTreeNode root, string hashCode)
        {
            var visitor = new HashCodeExtractorSearchVisitor(Splitter, hashCode);

            root.BreadthFirst(visitor);
            return(visitor.Node);
        }
        public void Create_RotationOfSeperateTree()
        {
            var left         = new AbstractSyntaxTreeNode("A");
            var branchLeft   = new AbstractSyntaxTreeNode("B");
            var terminalLeft = new AbstractSyntaxTreeNode("C");

            branchLeft.Append(terminalLeft);
            var branchRight   = new AbstractSyntaxTreeNode("D");
            var terminalRight = new AbstractSyntaxTreeNode("E");

            branchRight.Append(terminalRight);
            left.Append(branchLeft);
            left.Append(branchRight);

            var right = new AbstractSyntaxTreeNode("A");

            right.Append(branchRight.CopyDeep());
            right.Append(branchLeft.CopyDeep());

            var metric = Creator.Create(left, right);

            Assert.AreEqual(
                new AbstractSyntaxTreeMetric()
            {
                Insertations = 0,
                Deletions    = 0,
                Rotations    = 1
            },
                metric
                );
        }
 public void Visit(AbstractSyntaxTreeNode node)
 {
     if (node.Value.Equals(Looking))
     {
         Found = true;
     }
 }
Exemple #12
0
 public SnapshotMethod Generate(AbstractSyntaxTreeNode student, AbstractSyntaxTreeNode solution, MethodDeclaration method)
 {
     return(new SnapshotMethod()
     {
         Declared = true,
     });
 }
Exemple #13
0
        public bool ContainsDefinitionData(AbstractSyntaxTreeNode node)
        {
            var visitor = new AbstractSyntaxTreeWordSearchVisitor(Splitter, "DefinitionData");

            node.BreadthFirst(visitor);
            return(visitor.Found);
        }
        protected void BaseInit()
        {
            Root = new AbstractSyntaxTreeNode("1");
            var leftRootChild  = new AbstractSyntaxTreeNode("2");
            var rightRootChild = new AbstractSyntaxTreeNode("3");

            leftRootChild.Append(new AbstractSyntaxTreeNode("4"));
            leftRootChild.Append(new AbstractSyntaxTreeNode("5"));
            rightRootChild.Append(new AbstractSyntaxTreeNode("6"));
            Root.Append(leftRootChild);
            Root.Append(rightRootChild);

            PreOrderExpected = new[]
            {
                "1", "2", "4", "5", "3", "6"
            };
            PostOrderExpected = new[]
            {
                "4", "5", "2", "6", "3", "1"
            };
            BreadthFirstExpected = new[]
            {
                "1", "2", "3", "4", "5", "6"
            };
        }
 public AbstractSyntaxTreeNode ExtractOrDefault(AbstractSyntaxTreeNode root, MethodDeclaration methodDeclaration)
 {
     if (ReturnNull)
     {
         return(null);
     }
     return(root);
 }
        public void Create_IdenticalTerminalNodesShouldBeNoDifference()
        {
            var left  = new AbstractSyntaxTreeNode("A");
            var right = new AbstractSyntaxTreeNode("A");

            var metric = Creator.Create(left, right);

            Assert.AreEqual(new AbstractSyntaxTreeMetric(), metric);
        }
        public void Search_ShouldNotFindTwo()
        {
            var root = new AbstractSyntaxTreeNode("root");

            root.Append(new AbstractSyntaxTreeNode("1 one"));
            var visitor = new AbstractSyntaxTreeWordSearchVisitor(Splitter, "two");

            root.PreOrder(visitor);
            Assert.IsNull(visitor.Node);
        }
Exemple #18
0
            public void Visit(AbstractSyntaxTreeNode node)
            {
                var values = Splitter.Split(node.Value);

                if (values.Length < 1 || !values[0].Equals("CallExpr"))
                {
                    return;
                }

                ExtractorObj.CallExpressions.Add(node);
            }
Exemple #19
0
            public void Visit(AbstractSyntaxTreeNode node)
            {
                var values = Splitter.Split(node.Value);

                if (values.Length < 1 || !values[0].Equals(Type))
                {
                    return;
                }

                ExtractorObj.Methods.Add(node);
            }
        public void Search_ShouldFindTheNodeWithOne()
        {
            var root = new AbstractSyntaxTreeNode("root");

            root.Append(new AbstractSyntaxTreeNode("1 one"));
            var visitor = new AbstractSyntaxTreeWordSearchVisitor(Splitter, "one");

            root.PreOrder(visitor);

            Assert.IsTrue(visitor.Node.Value.Contains("1"));
        }
Exemple #21
0
            public void Visit(AbstractSyntaxTreeNode node)
            {
                var values = Splitter.Split(node.Value);

                if (values.Length < 2 || !values[1].Equals(HashCode))
                {
                    return;
                }

                Node  = node;
                Found = true;
            }
Exemple #22
0
 public AbstractSyntaxTreeNode Extract(AbstractSyntaxTreeNode root, string name)
 {
     if (Type == PreAssignmentReport.PreAssignmentReportTypes.NoClassFailure)
     {
         throw new EngineAssignmentExceptionData()
               {
                   Report = new PreAssignmentNoClassFailureReport()
               }
     }
     ;
     return(new AbstractSyntaxTreeNode("Root"));
 }
Exemple #23
0
        public AbstractSyntaxTreeNode Extract(AbstractSyntaxTreeNode root, string name)
        {
            var visitor = new ClassExtractorDeclVisitor(new ClassExtractorObj(), Splitter);

            root.PreOrder(visitor);

            var classNode = GatherDeclInformation(name, visitor.ExtractorObj, out var hashCode);

            var node = GatherMethodDeclaration(classNode, visitor.ExtractorObj, hashCode);

            return(node);
        }
Exemple #24
0
        public AbstractSyntaxTreeNode GatherMethodDeclaration(AbstractSyntaxTreeNode classNode, ClassExtractorObj obj, string hashCode)
        {
            var root = new AbstractSyntaxTreeNode("Root");

            root.Append(classNode);

            foreach (var node in obj.CxxMethodDecls.Where(wrapper => IsDefinedClassMethod(wrapper, hashCode)))
            {
                root.Append(node);
            }
            return(root);
        }
Exemple #25
0
        public AbstractSyntaxTreeNode GetMethodOrDefault(AbstractSyntaxTreeNode node, MethodDeclaration method)
        {
            var methodNode = AbstractSyntaxTreeMethodExtractor.ExtractOrDefault(node, method);

            if (methodNode == null)
            {
                return(null);
            }
            var filter = new AbstractSyntaxTreeFilterVisitor(LineFilter);

            methodNode.PostOrder(filter);
            return(methodNode);
        }
Exemple #26
0
            public void Visit(AbstractSyntaxTreeNode node)
            {
                var words = _splitter.Split(node.Value);

                foreach (var word in words)
                {
                    Content += " " + word + " ";
                    if (!Lexicon.Contains(word))
                    {
                        Lexicon.Add(word);
                    }
                }
            }
 public void Visit(AbstractSyntaxTreeNode node)
 {
     while (Levels.Count < node.Height)
     {
         Levels.Add(new AbstractSyntaxTreeAnalysisLevel
         {
             Height = Levels.Count
         });
     }
     Levels[node.Height - 1].Nodes.Add(
         new AbstractSyntaxTreeAnalysisNodeWrapper()
     {
         Node = node,
     });
 }
        public void Create_OneDeletionsOfNode()
        {
            var left = new AbstractSyntaxTreeNode("A");

            left.Append(new AbstractSyntaxTreeNode("B"));
            var right = left.CopyDeep();

            left.Append(new AbstractSyntaxTreeNode("C"));
            var metric = Creator.Create(left, right);

            Assert.AreEqual(new AbstractSyntaxTreeMetric()
            {
                Deletions = 1,
            }, metric);
        }
        public void Create_IdenticalTreeShouldBeNoDifference()
        {
            var left     = new AbstractSyntaxTreeNode("A");
            var terminal = new AbstractSyntaxTreeNode("B");
            var branch   = new AbstractSyntaxTreeNode("C");

            branch.Append(terminal);
            left.Append(branch);
            left.Append(terminal.CopyDeep());
            var right = left.CopyDeep();

            var metric = Creator.Create(left, right);

            Assert.AreEqual(new AbstractSyntaxTreeMetric(), metric);
        }
Exemple #30
0
        public string GetMethodHashCodeOrDefault(AbstractSyntaxTreeNode node, string type)
        {
            var visitor = new AbstractSyntaxTreeWordSearchVisitor(Splitter, type);

            node.BreadthFirst(visitor);

            if (!visitor.Found)
            {
                return(null);
            }

            var values = Splitter.Split(visitor.Node.Value);

            return(values.Length > 1 ? values[1] : null);
        }