Пример #1
0
        public bool TryFindLastLineInClass(string typename, string[] srcFileLines, out int lastLine)
        {
            lastLine = int.MaxValue;
            if (srcFileLines == null)
            {
                return(false);
            }
            var srcFile = srcFileLines.ToArray();

            if (String.IsNullOrWhiteSpace(typename))
            {
                return(false);
            }
            if (srcFile.Length <= 0)
            {
                return(false);
            }

            lastLine = srcFile.Length;

            //these preserve all lines
            srcFile = RemoveLineComments(srcFile, LINE_COMMENT_CHAR_SEQ);
            srcFile = RemoveBlockComments(srcFile);

            var joinedContent = string.Join("\n", srcFile);
            var myXDocFrame   = new XDocFrame(C_OPEN_CURLY, C_CLOSE_CURLY);

            var mytokens = myXDocFrame.FindEnclosingTokens(joinedContent);

            if (mytokens == null || mytokens.Count < 1)
            {
                return(false);
            }
            var targetToken = NfReflect.GetTypeNameWithoutNamespace(typename) == typename ? mytokens[0] : mytokens[1];

            var joinedContentAsChars = joinedContent.ToCharArray();

            //need to count the number of newlines from the bottom up to token's end
            for (var i = joinedContent.Length - 1; i >= targetToken.End; i--)
            {
                if (joinedContentAsChars[i] != '\n')
                {
                    continue;
                }
                lastLine -= 1;
            }
            //add one more
            if (lastLine < srcFile.Length)
            {
                lastLine -= 1;
            }

            return(lastLine < srcFile.Length);
        }
Пример #2
0
        public void TestGetXDocFrame()
        {
            var testInput   = GetTestFileContent();
            var testSubject = new XDocFrame('{', '}')
            {
                MinTokenSpan = 1
            };
            var testResults    = testSubject.GetXDocFrame(testInput);
            var testResultsXml = testResults.ToString();

            Assert.IsNotNull(testResultsXml);
        }
Пример #3
0
        public bool TryFindFirstLineInClass(string typename, string[] srcFileLines, out int firstLine)
        {
            firstLine = 1;
            if (srcFileLines == null)
            {
                return(false);
            }
            var srcFile = srcFileLines.ToArray();

            if (String.IsNullOrWhiteSpace(typename))
            {
                return(false);
            }
            if (srcFile.Length <= 0)
            {
                return(false);
            }

            //these preserve all lines
            srcFile = RemoveLineComments(srcFile, LINE_COMMENT_CHAR_SEQ);
            srcFile = RemoveBlockComments(srcFile);

            var joinedContent = String.Join("\n", srcFile);

            var myXDocFrame = new XDocFrame(C_OPEN_CURLY, C_CLOSE_CURLY);

            var mytokens = myXDocFrame.FindEnclosingTokens(joinedContent);

            if (mytokens == null || mytokens.Count < 1)
            {
                return(false);
            }
            var targetToken = NfReflect.GetTypeNameWithoutNamespace(typename) == typename ? mytokens[0] : mytokens[1];

            var joinedContentAsChars = joinedContent.ToCharArray();

            //need to count the number of newlines up to the token's start
            for (var i = 0; i <= targetToken.Start; i++)
            {
                if (joinedContentAsChars[i] != '\n')
                {
                    continue;
                }
                firstLine += 1;
            }

            return(firstLine > 1);
        }
Пример #4
0
        public void TestGetGaps()
        {
            var testInput =
                @"open something named{ accessMod type name { someStatement; someOtherStatement; accessMod type name(someArg){someBody;} somefinalStatement; }}";
            var testSubject = new XDocFrame('{', '}');

            //technically this is no a valid unit test...
            var contrivedTestInput = testSubject.GetTokens(testInput);

            var testResults = testSubject.GetGaps(contrivedTestInput);

            Assert.IsNotNull(testResults);
            Assert.AreNotEqual(0, testResults);

            foreach (var t in testResults)
            {
                Console.WriteLine(string.Format("{0}, {1}, {2}, {3}", t.Start, t.End, t.Span, t.ChildTo));
            }
        }
Пример #5
0
        public void TestGetTokens()
        {
            var testInput =
                @"open something named{ accessMod type name { someStatement; someOtherStatement; accessMod type name(someArg){someBody;} somefinalStatement; }}";

            var testSubject = new XDocFrame('{', '}');
            var testResults = testSubject.GetTokens(testInput);

            Assert.IsNotNull(testResults);
            Assert.AreNotEqual(0, testResults.Count);

            Assert.AreEqual(4, testResults.Count);
            Assert.AreEqual("0, 142, 142, 0, 0", string.Format("{0}, {1}, {2}, {3}, {4}", testResults[0].Start, testResults[0].End, testResults[0].Span, testResults[0].Register, testResults[0].Tab));
            Assert.AreEqual("20, 141, 121, 1, 0", string.Format("{0}, {1}, {2}, {3}, {4}", testResults[1].Start, testResults[1].End, testResults[1].Span, testResults[1].Register, testResults[1].Tab));
            Assert.AreEqual("42, 140, 98, 2, 1", string.Format("{0}, {1}, {2}, {3}, {4}", testResults[2].Start, testResults[2].End, testResults[2].Span, testResults[2].Register, testResults[2].Tab));
            Assert.AreEqual("107, 118, 11, 3, 2", string.Format("{0}, {1}, {2}, {3}, {4}", testResults[3].Start, testResults[3].End, testResults[3].Span, testResults[3].Register, testResults[3].Tab));

            foreach (var t in testResults)
            {
                Console.WriteLine(string.Format("{0}, {1}, {2}, {3}, {4}", t.Start, t.End, t.Span, t.Register, t.Tab));
            }
        }