public void TagHelperTagBodiesRejectPartialChanges(object objectEdit) { // Arrange var edit = (TestEdit)objectEdit; var builder = TagHelperDescriptorBuilder.Create("PTagHelper", "TestAssembly"); builder.SetTypeName("PTagHelper"); builder.TagMatchingRule(rule => rule.TagName = "p"); var descriptors = new[] { builder.Build() }; var templateEngine = CreateTemplateEngine(tagHelpers: descriptors); var document = TestRazorCodeDocument.Create( TestRazorSourceDocument.Create(edit.OldSnapshot.GetText()), new[] { templateEngine.Options.DefaultImports }); templateEngine.Engine.Process(document); var syntaxTree = document.GetSyntaxTree(); var parser = new RazorSyntaxTreePartialParser(syntaxTree); // Act var result = parser.Parse(edit.Change); // Assert Assert.Equal(PartialParseResultInternal.Rejected, result); }
private void TextBuffer_OnChanged(object sender, TextContentChangedEventArgs contentChange) { _dispatcher.AssertForegroundThread(); if (contentChange.Changes.Count > 0) { // Idle timers are used to track provisional changes. Provisional changes only last for a single text change. After that normal // partial parsing rules apply (stop the timer). _idleTimer.Stop(); var firstChange = contentChange.Changes[0]; var lastChange = contentChange.Changes[contentChange.Changes.Count - 1]; var oldLen = lastChange.OldEnd - firstChange.OldPosition; var newLen = lastChange.NewEnd - firstChange.NewPosition; var wasChanged = true; if (oldLen == newLen) { var oldText = contentChange.Before.GetText(firstChange.OldPosition, oldLen); var newText = contentChange.After.GetText(firstChange.NewPosition, newLen); wasChanged = !string.Equals(oldText, newText, StringComparison.Ordinal); } if (wasChanged) { var newText = contentChange.After.GetText(firstChange.NewPosition, newLen); var change = new SourceChange(firstChange.OldPosition, oldLen, newText); var snapshot = contentChange.After; var result = PartialParseResultInternal.Rejected; using (_parser.SynchronizeMainThreadState()) { // Check if we can partial-parse if (_partialParser != null && _parser.IsIdle) { result = _partialParser.Parse(change); } } // If partial parsing failed or there were outstanding parser tasks, start a full reparse if ((result & PartialParseResultInternal.Rejected) == PartialParseResultInternal.Rejected) { _parser.QueueChange(change, snapshot); } if ((result & PartialParseResultInternal.Provisional) == PartialParseResultInternal.Provisional) { _idleTimer.Start(); } } } }
private void RunPartialParseRejectionTest(TestEdit edit, PartialParseResultInternal additionalFlags = 0) { var templateEngine = CreateTemplateEngine(); var document = TestRazorCodeDocument.Create(edit.OldSnapshot.GetText()); templateEngine.Engine.Process(document); var syntaxTree = document.GetSyntaxTree(); var parser = new RazorSyntaxTreePartialParser(syntaxTree); var result = parser.Parse(edit.Change); Assert.Equal(PartialParseResultInternal.Rejected | additionalFlags, result); }
private static void RunPartialParseTest(TestEdit edit, Block expectedTree, PartialParseResultInternal additionalFlags = 0) { var templateEngine = CreateTemplateEngine(); var document = TestRazorCodeDocument.Create(edit.OldSnapshot.GetText()); templateEngine.Engine.Process(document); var syntaxTree = document.GetSyntaxTree(); var parser = new RazorSyntaxTreePartialParser(syntaxTree); var result = parser.Parse(edit.Change); Assert.Equal(PartialParseResultInternal.Accepted | additionalFlags, result); ParserTestBase.EvaluateParseTree(expectedTree, syntaxTree.Root); }
public void TagHelperAttributesAreLocatedAndAcceptChangesCorrectly(object editObject, object partialParseResultObject) { // Arrange var edit = (TestEdit)editObject; var partialParseResult = (PartialParseResultInternal)partialParseResultObject; var builder = TagHelperDescriptorBuilder.Create("PTagHelper", "Test"); builder.SetTypeName("PTagHelper"); builder.TagMatchingRule(rule => rule.TagName = "p"); builder.BindAttribute(attribute => { attribute.Name = "obj-attr"; attribute.TypeName = typeof(object).FullName; attribute.SetPropertyName("ObjectAttribute"); }); builder.BindAttribute(attribute => { attribute.Name = "str-attr"; attribute.TypeName = typeof(string).FullName; attribute.SetPropertyName("StringAttribute"); }); var descriptors = new[] { builder.Build() }; var templateEngine = CreateTemplateEngine(tagHelpers: descriptors); var document = TestRazorCodeDocument.Create( TestRazorSourceDocument.Create(edit.OldSnapshot.GetText()), new[] { templateEngine.Options.DefaultImports }); templateEngine.Engine.Process(document); var syntaxTree = document.GetSyntaxTree(); var parser = new RazorSyntaxTreePartialParser(syntaxTree); // Act var result = parser.Parse(edit.Change); // Assert Assert.Equal(partialParseResult, result); }