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); }
public void TestGetXDocFrame() { var testInput = GetTestFileContent(); var testSubject = new XDocFrame('{', '}') { MinTokenSpan = 1 }; var testResults = testSubject.GetXDocFrame(testInput); var testResultsXml = testResults.ToString(); Assert.IsNotNull(testResultsXml); }
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); }
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)); } }
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)); } }