// [Fact] Silent skip to avoid warnings. Skipping until we can control the parser more directly. private void BufferChangeStartsFullReparseIfChangeOverlapsMultipleSpans() { // Arrange var original = new StringTextSnapshot("Foo @bar Baz"); var testBuffer = new TestTextBuffer(original); using (var parser = new VisualStudioRazorParser(Dispatcher, testBuffer, CreateTemplateEngine(), TestLinePragmaFileName, new TestCompletionBroker())) { parser._idleTimer.Interval = 100; var changed = new StringTextSnapshot("Foo @bap Daz"); var edit = new TestEdit(7, 3, original, 3, changed, "p D"); var parseComplete = new ManualResetEventSlim(); var parseCount = 0; parser.DocumentStructureChanged += (s, a) => { Interlocked.Increment(ref parseCount); parseComplete.Set(); }; // Act - 1 testBuffer.ApplyEdit(edit); DoWithTimeoutIfNotDebugging(parseComplete.Wait); // Wait for the parse to finish // Assert - 1 Assert.Equal(1, parseCount); parseComplete.Reset(); // Act - 2 testBuffer.ApplyEdit(edit); // Assert - 2 DoWithTimeoutIfNotDebugging(parseComplete.Wait); Assert.Equal(2, parseCount); } }
public void TextBuffer_OnPostChanged_IndentsInbetweenDirectiveBlockBraces() { // Arrange var change = Environment.NewLine; var initialSnapshot = new StringTextSnapshot(" @functions {}"); var afterChangeSnapshot = new StringTextSnapshot(" @functions {" + change + "}"); var edit = new TestEdit(16, 0, initialSnapshot, afterChangeSnapshot, change); var expectedIndentResult = " @functions {" + change + change + " }"; var caret = CreateCaretFrom(16 + change.Length, afterChangeSnapshot); TestTextBuffer textBuffer = null; var focusedTextView = CreateFocusedTextView(() => textBuffer, caret); var documentTracker = CreateDocumentTracker(() => textBuffer, focusedTextView); textBuffer = CreateTextBuffer(initialSnapshot, documentTracker); var codeDocumentProvider = CreateCodeDocumentProvider(initialSnapshot.Content); var editorOperationsFactory = CreateOperationsFactoryService(); using var braceSmartIndenter = new BraceSmartIndenter(Dispatcher, documentTracker, codeDocumentProvider, editorOperationsFactory); // Act textBuffer.ApplyEdit(edit); // Assert Assert.Equal(expectedIndentResult, ((StringTextSnapshot)textBuffer.CurrentSnapshot).Content); }
public async Task ImpExprAcceptsDCIInStatementBlock() { // ImpExprAcceptsDotlessCommitInsertionsInStatementBlock var changed = new StringTextSnapshot("@{" + Environment.NewLine + " @DateT." + Environment.NewLine + "}"); var original = new StringTextSnapshot("@{" + Environment.NewLine + " @DateT" + Environment.NewLine + "}"); var edit = new TestEdit(12 + Environment.NewLine.Length, 0, original, 1, changed, "."); using (var manager = CreateParserManager(original)) { void ApplyAndVerifyPartialChange(TestEdit testEdit, string expectedCode) { manager.ApplyEdit(testEdit); Assert.Equal(1, manager.ParseCount); VerifyPartialParseTree(manager, changed.GetText(), expectedCode); }; await manager.InitializeWithDocumentAsync(edit.OldSnapshot); // This is the process of a dotless commit when doing "." insertions to commit intellisense changes. ApplyAndVerifyPartialChange(edit, "DateT."); original = changed; changed = new StringTextSnapshot("@{" + Environment.NewLine + " @DateTime." + Environment.NewLine + "}"); edit = new TestEdit(12 + Environment.NewLine.Length, 0, original, 3, changed, "ime"); ApplyAndVerifyPartialChange(edit, "DateTime."); } }
public void TextBuffer_OnPostChanged_IndentsInbetweenBraces_OneLevelOfIndentation() { // Arrange var change = "\r"; var initialSnapshot = new StringTextSnapshot(" @{ }"); var afterChangeSnapshot = new StringTextSnapshot(" @{ " + change + "}"); var edit = new TestEdit(7, 0, initialSnapshot, afterChangeSnapshot, change); var expectedIndentResult = " @{ " + change + change + " }"; var caret = CreateCaretFrom(7 + change.Length, afterChangeSnapshot); TestTextBuffer textBuffer = null; var focusedTextView = CreateFocusedTextView(() => textBuffer, caret); var documentTracker = CreateDocumentTracker(() => textBuffer, focusedTextView); textBuffer = CreateTextBuffer(initialSnapshot, documentTracker); var codeDocumentProvider = CreateCodeDocumentProvider(initialSnapshot.Content); var editorOperationsFactory = CreateOperationsFactoryService(); using var braceSmartIndenter = new BraceSmartIndenter(JoinableTaskFactory.Context, documentTracker, codeDocumentProvider, editorOperationsFactory); // Act textBuffer.ApplyEdit(edit); // Assert Assert.Equal(expectedIndentResult, ((StringTextSnapshot)textBuffer.CurrentSnapshot).Content); }
private void RunTypeKeywordTest(string keyword) { // Arrange var before = "@" + keyword.Substring(0, keyword.Length - 1); var after = "@" + keyword; var changed = new StringTextSnapshot(after); var old = new StringTextSnapshot(before); var change = new SourceChange(keyword.Length, 0, keyword[keyword.Length - 1].ToString()); var edit = new TestEdit { Change = change, NewSnapshot = changed, OldSnapshot = old }; using (var manager = CreateParserManager(old)) { manager.InitializeWithDocument(edit.OldSnapshot); // Act manager.ApplyEditAndWaitForParse(edit); // Assert Assert.Equal(2, manager.ParseCount); } }
public void FileUpdaterCanUpdateFileName() { // Arrange. const string ExpectedName = "ExpectedName.test"; var nameValue = new object(); var typeConverter = Mock.Create<ITypeConverter>(Behavior.Loose); Mock.Arrange(() => typeConverter.Convert<string>(nameValue)).Returns(ExpectedName); var fileManager = Mock.Create<IFileManager>(Behavior.Loose); var dataContext = Mock.Create<IDataContext>(Behavior.Loose); var mapping = new FileFieldMapping( ReflectionHelper.GetProperty<TestEdit>(x => x.File), dc => dc == dataContext ? nameValue : null, null, null, typeConverter, fileManager); var file = Mock.Create<IFileProcess>(Behavior.Loose); var editableRoot = new TestEdit { File = file }; // Act. mapping.Update(dataContext, editableRoot); // Assert. Assert.AreEqual(ExpectedName, file.OriginalFileName); }
public async Task AwaitPeriodInsertionAcceptedProvisionally() { // Arrange var original = new StringTextSnapshot("foo @await Html baz"); using (var manager = CreateParserManager(original)) { var factory = new SpanFactory(); var changed = new StringTextSnapshot("foo @await Html. baz"); var edit = new TestEdit(15, 0, original, 1, changed, "."); await manager.InitializeWithDocumentAsync(edit.OldSnapshot); // Act await manager.ApplyEditAndWaitForReparseAsync(edit); // Assert Assert.Equal(2, manager.ParseCount); ParserTestBase.EvaluateParseTree(manager.CurrentSyntaxTree.Root, new MarkupBlock( factory.Markup("foo "), new ExpressionBlock( factory.CodeTransition(), factory.Code("await Html").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharactersInternal.WhiteSpace | AcceptedCharactersInternal.NonWhiteSpace)), factory.Markup(". baz"))); } }
public void TextBuffer_OnPostChanged_DoesNotIndentJavaScript() { // Arrange var change = Environment.NewLine; var initialSnapshot = new StringTextSnapshot(" <script>function foo() {}</script>"); var afterChangeSnapshot = new StringTextSnapshot(" <script>function foo() {" + change + "}</script>"); var edit = new TestEdit(28, 0, initialSnapshot, afterChangeSnapshot, change); var caret = CreateCaretFrom(28 + change.Length, afterChangeSnapshot); TestTextBuffer textBuffer = null; var focusedTextView = CreateFocusedTextView(() => textBuffer, caret); var documentTracker = CreateDocumentTracker(() => textBuffer, focusedTextView); textBuffer = CreateTextBuffer(initialSnapshot, documentTracker); var codeDocumentProvider = CreateCodeDocumentProvider(initialSnapshot.Content); var editorOperationsFactory = CreateOperationsFactoryService(); using var braceSmartIndenter = new BraceSmartIndenter(Dispatcher, documentTracker, codeDocumentProvider, editorOperationsFactory); // Act textBuffer.ApplyEdit(edit); // Assert Assert.Equal(afterChangeSnapshot.Content, ((StringTextSnapshot)textBuffer.CurrentSnapshot).Content); }
public async Task ImpExprProvisionallyAcceptsDCI() { // ImpExprProvisionallyAcceptsDotlessCommitInsertions var changed = new StringTextSnapshot("foo @DateT. baz"); var original = new StringTextSnapshot("foo @DateT baz"); var edit = new TestEdit(10, 0, original, 1, changed, "."); using (var manager = CreateParserManager(original)) { void ApplyAndVerifyPartialChange(TestEdit testEdit, string expectedCode) { manager.ApplyEdit(testEdit); Assert.Equal(1, manager.ParseCount); VerifyPartialParseTree(manager, testEdit.NewSnapshot.GetText(), expectedCode); }; await manager.InitializeWithDocumentAsync(edit.OldSnapshot); // This is the process of a dotless commit when doing "." insertions to commit intellisense changes. ApplyAndVerifyPartialChange(edit, "DateT."); original = changed; changed = new StringTextSnapshot("foo @DateTime. baz"); edit = new TestEdit(10, 0, original, 3, changed, "ime"); ApplyAndVerifyPartialChange(edit, "DateTime."); // Verify the reparse finally comes await manager.WaitForReparseAsync(); Assert.Equal(2, manager.ParseCount); VerifyCurrentSyntaxTree(manager); } }
public async Task ImpExprProvisionallyAcceptsDCIAfterIdentifiers_CompletesSyntaxTreeRequest() { var original = new StringTextSnapshot("foo @DateTime baz", versionNumber: 0); var changed = new StringTextSnapshot("foo @DateTime. baz", versionNumber: 1); var edit = new TestEdit(13, 0, original, 1, changed, "."); using (var manager = CreateParserManager(original)) { void ApplyAndVerifyPartialChange(TestEdit testEdit, string expectedCode) { manager.ApplyEdit(testEdit); Assert.Equal(1, manager.ParseCount); VerifyPartialParseTree(manager, testEdit.NewSnapshot.GetText(), expectedCode); }; await manager.InitializeWithDocumentAsync(edit.OldSnapshot); var codeDocumentTask = manager.InnerParser.GetLatestCodeDocumentAsync(changed); Assert.False(codeDocumentTask.IsCompleted); // Perform a partially parsed accepted change ApplyAndVerifyPartialChange(edit, "DateTime."); Assert.True(codeDocumentTask.IsCompleted); } }
public async Task ImplicitExpressionAcceptsIdentifierTypedAfterDotIfLastChangeWasProvisionalAcceptanceOfDot() { // Arrange var factory = new SpanFactory(); var dotTyped = new TestEdit(8, 0, new StringTextSnapshot("foo @foo bar"), 1, new StringTextSnapshot("foo @foo. bar"), "."); var charTyped = new TestEdit(9, 0, new StringTextSnapshot("foo @foo. bar"), 1, new StringTextSnapshot("foo @foo.b bar"), "b"); using (var manager = CreateParserManager(dotTyped.OldSnapshot)) { await manager.InitializeWithDocumentAsync(dotTyped.OldSnapshot); // Apply the dot change manager.ApplyEdit(dotTyped); // Act (apply the identifier start char change) manager.ApplyEdit(charTyped); // Assert Assert.Equal(1, manager.ParseCount); ParserTestBase.EvaluateParseTree(manager.PartialParsingSyntaxTreeRoot, new MarkupBlock( factory.Markup("foo "), new ExpressionBlock( factory.CodeTransition(), factory.Code("foo.b") .AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .Accepts(AcceptedCharactersInternal.NonWhiteSpace)), factory.Markup(" bar"))); } }
public async Task BufferChangeStartsFullReparseIfChangeOverlapsMultipleSpans() { // Arrange var original = new StringTextSnapshot("Foo @bar Baz"); using (var manager = CreateParserManager(original)) { var changed = new StringTextSnapshot("Foo @bap Daz"); var edit = new TestEdit(7, 3, original, 3, changed, "p D"); await manager.InitializeWithDocumentAsync(edit.OldSnapshot); // Act - 1 await manager.ApplyEditAndWaitForParseAsync(edit); // Assert - 1 Assert.Equal(2, manager.ParseCount); // Act - 2 await manager.ApplyEditAndWaitForParseAsync(edit); // Assert - 2 Assert.Equal(3, manager.ParseCount); } }
public async Task ImplicitExpression_AcceptsParenthesisAtEnd_TwoEdits() { // Arrange var factory = new SpanFactory(); var edit1 = new TestEdit(8, 0, new StringTextSnapshot("foo @foo bar"), 1, new StringTextSnapshot("foo @foo( bar"), "("); var edit2 = new TestEdit(9, 0, new StringTextSnapshot("foo @foo( bar"), 1, new StringTextSnapshot("foo @foo() bar"), ")"); using (var manager = CreateParserManager(edit1.OldSnapshot)) { await manager.InitializeWithDocumentAsync(edit1.OldSnapshot); // Apply the ( edit manager.ApplyEdit(edit1); // Apply the ) edit manager.ApplyEdit(edit2); // Assert Assert.Equal(1, manager.ParseCount); ParserTestBase.EvaluateParseTree( manager.PartialParsingSyntaxTreeRoot, new MarkupBlock( factory.Markup("foo "), new ExpressionBlock( factory.CodeTransition(), factory.Code("foo()") .AsImplicitExpression(CSharpCodeParser.DefaultKeywords) .Accepts(AcceptedCharactersInternal.NonWhiteSpace)), factory.Markup(" bar"))); } }
public async Task InitializeWithDocumentAsync(ITextSnapshot snapshot) { var old = new StringTextSnapshot(string.Empty); var initialChange = new SourceChange(0, 0, snapshot.GetText()); var edit = new TestEdit(initialChange, old, snapshot); await ApplyEditAndWaitForParseAsync(edit); }
public async Task ImplicitExpressionAcceptsDotlessCommitInsertionsInStatementBlockAfterIdentifiers() { var factory = new SpanFactory(); var changed = new StringTextSnapshot("@{" + Environment.NewLine + " @DateTime." + Environment.NewLine + "}"); var original = new StringTextSnapshot("@{" + Environment.NewLine + " @DateTime" + Environment.NewLine + "}"); var edit = new TestEdit(15 + Environment.NewLine.Length, 0, original, 1, changed, "."); using (var manager = CreateParserManager(original)) { void ApplyAndVerifyPartialChange(TestEdit testEdit, string expectedCode) { manager.ApplyEdit(testEdit); Assert.Equal(1, manager.ParseCount); ParserTestBase.EvaluateParseTree(manager.PartialParsingSyntaxTreeRoot, new MarkupBlock( factory.EmptyHtml(), new StatementBlock( factory.CodeTransition(), factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None), factory.Code(Environment.NewLine + " ") .AsStatement() .AutoCompleteWith(autoCompleteString: null), new ExpressionBlock( factory.CodeTransition(), factory.Code(expectedCode) .AsImplicitExpression(CSharpCodeParser.DefaultKeywords, acceptTrailingDot: true) .Accepts(AcceptedCharactersInternal.NonWhiteSpace)), factory.Code(Environment.NewLine).AsStatement(), factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)), factory.EmptyHtml())); }; await manager.InitializeWithDocumentAsync(edit.OldSnapshot); // This is the process of a dotless commit when doing "." insertions to commit intellisense changes. ApplyAndVerifyPartialChange(edit, "DateTime."); original = changed; changed = new StringTextSnapshot("@{" + Environment.NewLine + " @DateTime.." + Environment.NewLine + "}"); edit = new TestEdit(16 + Environment.NewLine.Length, 0, original, 1, changed, "."); ApplyAndVerifyPartialChange(edit, "DateTime.."); original = changed; changed = new StringTextSnapshot("@{" + Environment.NewLine + " @DateTime.Now." + Environment.NewLine + "}"); edit = new TestEdit(16 + Environment.NewLine.Length, 0, original, 3, changed, "Now"); ApplyAndVerifyPartialChange(edit, "DateTime.Now."); } }
public TestMinimal MapToBLL(TestEdit apiTest) { return(new TestMinimal { Id = apiTest.Id, TestTypeId = apiTest.TestTypeId, TestName = apiTest.TestName }); }
public void ImplicitExpressionRejectsWholeIdentifierReplacementToKeyword() { // Arrange var old = new StringTextSnapshot("foo @date baz"); var changed = new StringTextSnapshot("foo @if baz"); var edit = new TestEdit(5, 4, old, 2, changed, "if"); // Act & Assert RunPartialParseRejectionTest(edit); }
public void ImplicitExpressionRejectsWholeIdentifierReplacementToDirective() { // Arrange var old = new StringTextSnapshot("foo @date baz"); var changed = new StringTextSnapshot("foo @inherits baz"); var edit = new TestEdit(5, 4, old, 8, changed, "inherits"); // Act & Assert RunPartialParseRejectionTest(edit, PartialParseResultInternal.SpanContextChanged); }
private static void RunPartialParseRejectionTest(TestEdit edit, PartialParseResultInternal additionalFlags = 0) { var templateEngine = CreateProjectEngine(); 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); }
public void GetSampleType_ReturnsSampleType_FromSampleTypeField() { // Arrange. var sampleSettings = new SampleSettings { SampleTypeFieldName = "SampleType" }; var editableRoot = new TestEdit { Sample_SampleSettings = sampleSettings.ToXml(), SampleType = SampleTypes.Boolean.ToString() }; // Act. var sampleType = SampleUtils.Instance.GetSampleType(editableRoot, SampleFieldName); // Assert. Assert.AreEqual(SampleTypes.Boolean, sampleType); }
public void GetSampleSettings_ReturnsSampleSettings() { // Arrange. var expectedSettings = new SampleSettings { Id = 123 }; var editableRoot = new TestEdit { Sample_SampleSettings = expectedSettings.ToXml() }; // Act. var settings = SampleUtils.Instance.GetSampleSettings(editableRoot, SampleFieldName); // Assert. Assert.AreEqual(123, settings.Id); }
public void GetSampleSizeType_ReturnsSizeType_FromSamplingTechniqueField() { // Arrange. var sampleSettings = new SampleSettings { SampleSizeType = SampleSizeTypes.AQL_BatchSize, SamplingTechniqueFieldName = "SamplingTechnique" }; var editableRoot = new TestEdit { Sample_SampleSettings = sampleSettings.ToXml(), SamplingTechnique = SampleSizeTypes.Manual.ToString() }; // Act. var sizeType = SampleUtils.Instance.GetSampleSizeType(editableRoot, SampleFieldName); // Assert. Assert.AreEqual(SampleSizeTypes.Manual, sizeType); }
public async Task ImpExprProvisionallyAccCaseInsensitiveDCI_NewRoslynIntegration() { // ImplicitExpressionProvisionallyAcceptsCaseInsensitiveDotlessCommitInsertions_NewRoslynIntegration var original = new StringTextSnapshot("foo @date baz"); var changed = new StringTextSnapshot("foo @date. baz"); var edit = new TestEdit(9, 0, original, 1, changed, "."); using (var manager = CreateParserManager(original)) { void ApplyAndVerifyPartialChange(Action applyEdit, string expectedCode) { applyEdit(); Assert.Equal(1, manager.ParseCount); VerifyPartialParseTree(manager, changed.GetText(), expectedCode); }; await manager.InitializeWithDocumentAsync(edit.OldSnapshot); // This is the process of a dotless commit when doing "." insertions to commit intellisense changes. // @date => @date. ApplyAndVerifyPartialChange(() => manager.ApplyEdit(edit), "date."); original = changed; changed = new StringTextSnapshot("foo @date baz"); edit = new TestEdit(9, 1, original, 0, changed, ""); // @date. => @date ApplyAndVerifyPartialChange(() => manager.ApplyEdit(edit), "date"); original = changed; changed = new StringTextSnapshot("foo @DateTime baz"); edit = new TestEdit(5, 4, original, 8, changed, "DateTime"); // @date => @DateTime ApplyAndVerifyPartialChange(() => manager.ApplyEdit(edit), "DateTime"); original = changed; changed = new StringTextSnapshot("foo @DateTime. baz"); edit = new TestEdit(13, 0, original, 1, changed, "."); // @DateTime => @DateTime. ApplyAndVerifyPartialChange(() => manager.ApplyEdit(edit), "DateTime."); // Verify the reparse eventually happens await manager.WaitForReparseAsync(); Assert.Equal(2, manager.ParseCount); VerifyCurrentSyntaxTree(manager); } }
public void TextBuffer_OnChanged_NoopsIfChangesThatResultInNoChange() { // Arrange var initialSnapshot = new StringTextSnapshot("Hello World"); var textBuffer = new TestTextBuffer(initialSnapshot); var edit = new TestEdit(0, 0, initialSnapshot, 0, initialSnapshot, string.Empty); var editorOperationsFactory = new Mock <IEditorOperationsFactoryService>(); var documentTracker = CreateDocumentTracker(() => textBuffer, Mock.Of <ITextView>()); var braceSmartIndenter = new BraceSmartIndenter(Dispatcher, documentTracker, editorOperationsFactory.Object); // Act & Assert textBuffer.ApplyEdits(edit, edit); }
public void InitializeWithDocument(ITextSnapshot snapshot) { var old = new StringTextSnapshot(string.Empty); var initialChange = new SourceChange(0, 0, snapshot.GetText()); var edit = new TestEdit { Change = initialChange, OldSnapshot = old, NewSnapshot = snapshot }; ApplyEditAndWaitForParse(edit); }
public async Task <IActionResult> PutTest(int id, TestEdit test) { if (id != test.Id) { return(BadRequest()); } _bll.Tests.UpdateNoReturnAsync(_mapper.MapToBLL(test)); await _bll.SaveChangesAsync(); return(NoContent()); }
public async Task ImplicitExpressionProvisionallyAcceptsDotlessCommitInsertionsAfterIdentifiers() { var factory = new SpanFactory(); var changed = new StringTextSnapshot("foo @DateTime. baz"); var original = new StringTextSnapshot("foo @DateTime baz"); var edit = new TestEdit(13, 0, original, 1, changed, "."); using (var manager = CreateParserManager(original)) { void ApplyAndVerifyPartialChange(TestEdit testEdit, string expectedCode) { manager.ApplyEdit(testEdit); Assert.Equal(1, manager.ParseCount); ParserTestBase.EvaluateParseTree(manager.PartialParsingSyntaxTreeRoot, new MarkupBlock( factory.Markup("foo "), new ExpressionBlock( factory.CodeTransition(), factory.Code(expectedCode).AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharactersInternal.NonWhiteSpace)), factory.Markup(" baz"))); }; await manager.InitializeWithDocumentAsync(edit.OldSnapshot); // This is the process of a dotless commit when doing "." insertions to commit intellisense changes. ApplyAndVerifyPartialChange(edit, "DateTime."); original = changed; changed = new StringTextSnapshot("foo @DateTime.. baz"); edit = new TestEdit(14, 0, original, 1, changed, "."); ApplyAndVerifyPartialChange(edit, "DateTime.."); original = changed; changed = new StringTextSnapshot("foo @DateTime.Now. baz"); edit = new TestEdit(14, 0, original, 3, changed, "Now"); ApplyAndVerifyPartialChange(edit, "DateTime.Now."); // Verify the reparse eventually happens await manager.WaitForReparseAsync(); Assert.Equal(2, manager.ParseCount); ParserTestBase.EvaluateParseTree(manager.CurrentSyntaxTree.Root, new MarkupBlock( factory.Markup("foo "), new ExpressionBlock( factory.CodeTransition(), factory.Code("DateTime.Now").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharactersInternal.NonWhiteSpace)), factory.Markup(". baz"))); } }
private static void RunPartialParseTest(TestEdit edit, Block expectedTree, PartialParseResultInternal additionalFlags = 0) { var templateEngine = CreateProjectEngine(); 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(parser.SyntaxTreeRoot, expectedTree); }
public void InitLocalizedFieldTest() { var culture = Thread.CurrentThread.CurrentCulture; try { // Arrange. Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); var parentModel = new TestEdit(); var detailsViewModel = Mock.Create<IDetailsViewModel>(Behavior.Loose); var esField = Mock.Create<TextFieldViewModel>(Constructor.Mocked, Behavior.Loose); var frField = Mock.Create<TextFieldViewModel>(Constructor.Mocked, Behavior.Loose); var fieldFactory = Mock.Create<IFieldFactory>(Behavior.Loose); Mock.Arrange( () => fieldFactory.CreateField( ReflectionHelper.GetProperty<TestEdit>(x => x.Localized_es_ES), Arg.IsAny<IUnitOfWork>(), parentModel, detailsViewModel, false)).Returns(esField); Mock.Arrange( () => fieldFactory.CreateField( ReflectionHelper.GetProperty<TestEdit>(x => x.Localized_fr_FR), Arg.IsAny<IUnitOfWork>(), parentModel, detailsViewModel, false)).Returns(frField); var vm = new TextFieldViewModel { FieldFactory = fieldFactory, Property = ReflectionHelper.GetProperty<TestEdit>(x => x.Localized) }; // Act. vm.Init(parentModel, null, detailsViewModel); // Assert. Assert.AreEqual("English", vm.LocalizationName); Assert.IsTrue(vm.AllowLocalizedData); Assert.IsTrue(vm.HasNonDefaultLocalizations); Assert.AreEqual(2, vm.LocalizedFields.Count); Assert.IsTrue(vm.LocalizedFields.Contains(esField)); Assert.IsTrue(vm.LocalizedFields.Contains(frField)); } finally { Thread.CurrentThread.CurrentCulture = culture; } }
public void TextBuffer_OnChanged_NoopsIfChangesThatResultInNoChange() { // Arrange var initialSnapshot = new StringTextSnapshot("Hello World"); var textBuffer = new TestTextBuffer(initialSnapshot); var edit = new TestEdit(0, 0, initialSnapshot, initialSnapshot, string.Empty); var editorOperationsFactory = new Mock <IEditorOperationsFactoryService>(MockBehavior.Strict); var documentTracker = CreateDocumentTracker(() => textBuffer, Mock.Of <ITextView>(MockBehavior.Strict)); var codeDocumentProvider = Mock.Of <TextBufferCodeDocumentProvider>(MockBehavior.Strict); using var braceSmartIndenter = new BraceSmartIndenter(JoinableTaskFactory.Context, documentTracker, codeDocumentProvider, editorOperationsFactory.Object); // Act & Assert textBuffer.ApplyEdits(edit, edit); }
public void ApplyEdit(TestEdit edit) { var args = new TextContentChangedEventArgs(edit.OldSnapshot, edit.NewSnapshot, new EditOptions(), null); args.Changes.Add(new TextChange(edit)); Changed?.Invoke(this, args); ReadOnlyRegionsChanged?.Invoke(null, null); ChangedLowPriority?.Invoke(null, null); ChangedHighPriority?.Invoke(null, null); Changing?.Invoke(null, null); PostChanged?.Invoke(null, null); ContentTypeChanged?.Invoke(null, null); _currentSnapshot = edit.NewSnapshot; }
private void RunPartialParseTest(TestEdit edit, PartialParseResultInternal additionalFlags = 0) { var templateEngine = CreateProjectEngine(); 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); var newSource = TestRazorSourceDocument.Create(edit.NewSnapshot.GetText()); var newSyntaxTree = RazorSyntaxTree.Create(parser.ModifiedSyntaxTreeRoot, newSource, parser.OriginalSyntaxTree.Diagnostics, parser.OriginalSyntaxTree.Options); BaselineTest(newSyntaxTree); }
public async Task ImpExpr_AcceptsParenthesisAtEnd_SingleEdit() { // Arrange var edit = new TestEdit(8, 0, new StringTextSnapshot("foo @foo bar"), 2, new StringTextSnapshot("foo @foo() bar"), "()"); using (var manager = CreateParserManager(edit.OldSnapshot)) { await manager.InitializeWithDocumentAsync(edit.OldSnapshot); // Apply the () edit manager.ApplyEdit(edit); // Assert Assert.Equal(1, manager.ParseCount); VerifyPartialParseTree(manager, edit.NewSnapshot.GetText()); } }
public void Update_WhenChecklistIsMapped_UpdatesAnswers() { // Arrange. var request = new TestRequest(); request.SourceItems.Add(new TestData { Text = "aaa", Number = 111 }); request.SourceItems.Add(new TestData { Text = "bbb", Number = 222 }); var dataContext = new SourceData(request); var childMapping1 = new SimpleFieldMapping( ReflectionHelper.GetProperty<TestAnswer>(x => x.Text), dc => dc.GetPropertyValue("SourceItems.Text"), true, new SafeTypeConverter()); var childMapping2 = new SimpleFieldMapping( ReflectionHelper.GetProperty<TestAnswer>(x => x.Number), dc => dc.GetPropertyValue("SourceItems.Number"), false, new SafeTypeConverter()); var dtm = Mock.Create<IDynamicTypeManager>(Behavior.Loose); Mock.Arrange(() => dtm.NewEditableChild<IEditableRoot>(AnswerProcessName)).Returns(() => new TestAnswer()); var mapping = new ChecklistFieldMapping( ReflectionHelper.GetProperty<TestEdit>(x => x.Checklist), dc => dc.EnumerateItems("SourceItems"), new[] { childMapping1, childMapping2 }, dtm); var editItem = new TestEdit(); // Act. mapping.Update(dataContext, editItem); // Assert. Assert.AreEqual(2, editItem.Checklist.AnswerProcessList.Count); var answer1 = (TestAnswer)editItem.Checklist.AnswerProcessList[0]; Assert.AreEqual("aaa", answer1.Text); Assert.AreEqual(111, answer1.Number); var answer2 = (TestAnswer)editItem.Checklist.AnswerProcessList[1]; Assert.AreEqual("bbb", answer2.Text); Assert.AreEqual(222, answer2.Number); }
private async void btnAddTest_Click(object sender, RoutedEventArgs e) { int id; string name = await this.ShowInputAsync("Name", "Please, enter test name", null); if (name != null) { using (var context = new QuizDBEntities()) { id = context.Tests.ToList().Select(t => t.id).Max() + 1; } Tests test = new Tests(); test.id = id; test.name = name; var view = new TestEdit(test); this.Close(); view.Show(); } }
public async Task AwaitPeriodInsertionAcceptedProvisionally() { // Arrange var original = new StringTextSnapshot("foo @await Html baz"); using (var manager = CreateParserManager(original)) { var changed = new StringTextSnapshot("foo @await Html. baz"); var edit = new TestEdit(15, 0, original, 1, changed, "."); await manager.InitializeWithDocumentAsync(edit.OldSnapshot); // Act await manager.ApplyEditAndWaitForReparseAsync(edit); // Assert Assert.Equal(2, manager.ParseCount); VerifyCurrentSyntaxTree(manager); } }
public void Update_WhenChecklistIsNotMapped_UpdatesAnswers() { // Arrange. var request = new TestRequest { RootText = "abc", RootNumber = 123 }; var dataContext = new SourceData(request); var childMapping1 = new SimpleFieldMapping( ReflectionHelper.GetProperty<TestAnswer>(x => x.Text), dc => dc.GetPropertyValue("RootText"), false, new SafeTypeConverter()); var childMapping2 = new SimpleFieldMapping( ReflectionHelper.GetProperty<TestAnswer>(x => x.Number), dc => dc.GetPropertyValue("RootNumber"), true, new SafeTypeConverter()); var dtm = Mock.Create<IDynamicTypeManager>(Behavior.Loose); Mock.Arrange(() => dtm.NewEditableChild<IEditableRoot>(AnswerProcessName)).Returns(() => new TestAnswer()); var mapping = new ChecklistFieldMapping(ReflectionHelper.GetProperty<TestEdit>(x => x.Checklist), null, new[] { childMapping1, childMapping2 }, dtm); var editItem = new TestEdit(); // Act. mapping.Update(dataContext, editItem); // Assert. Assert.AreEqual(1, editItem.Checklist.AnswerProcessList.Count); var answer = (TestAnswer)editItem.Checklist.AnswerProcessList[0]; Assert.AreEqual("abc", answer.Text); Assert.AreEqual(123, answer.Number); }
public void GetNewItemsTest() { // Arrange. var refEdit = Mock.Create<IEditableRoot>(); Mock.Arrange(() => refEdit.Id).Returns(2); SetupGetEditableRoot(ReferencedProcess, refEdit); var retriever = new SingleCrossReferenceSourceItemsRetriever { DynamicTypeManager = _dtm, FieldName = TestsHelper.ExtractPropertyName(() => new TestEdit().CR), ReferencedProcess = ReferencedProcess }; var oldItem = new TestEdit { CR = 1 }; var newItem1 = new TestEdit { CR = null }; var newItem2 = new TestEdit { CR = 1 }; var newItem3 = new TestEdit { CR = 2 }; // Act. var result = retriever.GetNewItems(newItem1, oldItem); // Assert. Assert.AreEqual(0, result.Count); // Act. result = retriever.GetNewItems(newItem2, oldItem); // Assert. Assert.AreEqual(0, result.Count); // Act. result = retriever.GetNewItems(newItem3, oldItem); // Assert. Assert.AreEqual(1, result.Count); Assert.AreSame(refEdit, result[0]); var refEdit1 = Mock.Create<IEditableRoot>(); var refEdit2 = Mock.Create<IEditableRoot>(); var innerRetriever = Mock.Create<ISourceItemsRetriever>(); Mock.Arrange(() => innerRetriever.GetAllItems(refEdit)).Returns(() => new[] { refEdit1, refEdit2 }); retriever.Subretriever = innerRetriever; // Act. result = retriever.GetNewItems(newItem1, oldItem); // Assert. Assert.AreEqual(0, result.Count); // Act. result = retriever.GetNewItems(newItem2, oldItem); // Assert. Assert.AreEqual(0, result.Count); // Act. result = retriever.GetNewItems(newItem3, oldItem); // Assert. Assert.AreEqual(2, result.Count); Assert.IsTrue(result.Contains(refEdit1)); Assert.IsTrue(result.Contains(refEdit2)); }
public void GetSampleType_ReturnsDefaultSampleType() { // Arrange. var editableRoot = new TestEdit(); // Act. var sampleType = SampleUtils.Instance.GetSampleType(editableRoot, "Sample"); // Assert. Assert.AreEqual(SampleTypes.Number, sampleType); }
public void FileUpdaterCanUpdateFileFromLocation() { // Arrange. const string ExpectedLocation = @"http://www.example.com/"; const string TempFileFullName = @"z:\TempFolder\TestFile.tmp"; const string TempFileName = "TestFile.tmp"; var locationValue = new object(); var typeConverter = Mock.Create<ITypeConverter>(Behavior.Loose); Mock.Arrange(() => typeConverter.Convert<string>(locationValue)).Returns(ExpectedLocation); var fileManager = Mock.Create<IFileManager>(); Mock.Arrange(() => fileManager.GetTempFileName(Arg.AnyString)).Returns(TempFileFullName); var dataContext = Mock.Create<IDataContext>(Behavior.Loose); var mapping = new FileFieldMapping( ReflectionHelper.GetProperty<TestEdit>(x => x.File), null, null, dc => dc == dataContext ? locationValue : null, typeConverter, fileManager); var file = Mock.Create<IFileProcess>(Behavior.Loose); var editableRoot = new TestEdit { File = file }; var responseHeaders = new WebHeaderCollection(); Mock.Arrange(() => Arg.IsAny<WebClient>().ResponseHeaders).Returns(responseHeaders); Mock.Arrange(() => Arg.IsAny<WebClient>().DownloadFile(ExpectedLocation, TempFileFullName)).DoNothing(); Mock.Arrange(() => file.UploadFile()).DoNothing(); // Act. mapping.Update(dataContext, editableRoot); // Assert. Mock.Assert(() => Arg.IsAny<WebClient>().DownloadFile(ExpectedLocation, TempFileFullName), Occurs.Once()); Mock.Assert(() => file.UploadFile(), Occurs.Once()); Assert.AreEqual(TempFileName, file.OriginalFileName); Assert.AreEqual(TempFileName, file.FileName); }
public void UpdateTest() { // Arrange. const string TempDocumentUnc = @"d:\Files\Temp"; const string FileProcessorUri = "http://localhost/FileProcessor"; const string SourceFileName = "448E2A97-A4A5-4BC9-94D8-584970958239.txt"; const string OriginalFileName = "test.txt"; var systemOptions = Mock.Create<ISystemOptionsInfo>(); Mock.Arrange(() => systemOptions.TempDocumentUNC).Returns(TempDocumentUnc); Mock.Arrange(() => systemOptions.FileProcessorURI).Returns(FileProcessorUri); var systemOptionsRetriever = Mock.Create<ISystemOptionsInfoRetriever>(); Mock.Arrange(() => systemOptionsRetriever.GetSystemOptions()).Returns(systemOptions); var sourceFile = Mock.Create<IFileProcess>(); Mock.Arrange(() => sourceFile.FileName).Returns(SourceFileName); Mock.Arrange(() => sourceFile.OriginalFileName).Returns(OriginalFileName); var destinationFile = Mock.Create<IFileProcess>(); var destination = new TestEdit { File = destinationFile }; var webRequest = Mock.Create<HttpWebRequest>(); Mock.Arrange(() => WebRequest.Create(Arg.IsAny<Uri>())).Returns(webRequest); var webResponse = Mock.Create<HttpWebResponse>(); Mock.Arrange(() => webRequest.GetResponse()).Returns(webResponse); var responseStream = Mock.Create<Stream>(); Mock.Arrange(() => webResponse.GetResponseStream()).Returns(responseStream); var outputStream = Mock.Create<FileStream>(); Mock.Arrange(() => File.OpenWrite(Arg.IsAny<string>())).Returns(outputStream); Mock.Arrange(() => destinationFile.UploadFile()).DoNothing(); var updater = new FileFieldUpdater { SystemOptionsRetriever = systemOptionsRetriever, NewValue = sourceFile, FieldName = TestsHelper.ExtractPropertyName(() => new TestEdit().File) }; // Act. updater.Update(destination); // Assert. Assert.IsFalse(string.IsNullOrEmpty(destinationFile.FileName)); Assert.AreEqual(OriginalFileName, destinationFile.OriginalFileName); Mock.Assert(() => File.OpenWrite(Path.Combine(TempDocumentUnc, destinationFile.FileName)), Occurs.Once()); Mock.Assert(() => responseStream.CopyTo(outputStream, Arg.IsAny<int>()), Occurs.Once()); Mock.Assert(() => destinationFile.UploadFile(), Occurs.Once()); }
public void FileUpdaterCanUpdateFileFromBytes() { // Arrange. const string TempFileFullName = @"z:\TempFolder\TestFile.tmp"; const string TempFileName = "TestFile.tmp"; var contentValue = new object(); var expectedContent = new byte[0]; var typeConverter = Mock.Create<ITypeConverter>(Behavior.Loose); Mock.Arrange(() => typeConverter.Convert<byte[]>(contentValue)).Returns(expectedContent); var fileManager = Mock.Create<IFileManager>(); Mock.Arrange(() => fileManager.GetTempFileName(Arg.AnyString)).Returns(TempFileFullName); var dataContext = Mock.Create<IDataContext>(Behavior.Loose); var mapping = new FileFieldMapping( ReflectionHelper.GetProperty<TestEdit>(x => x.File), null, dc => dc == dataContext ? contentValue : null, null, typeConverter, fileManager); var file = Mock.Create<IFileProcess>(Behavior.Loose); var editableRoot = new TestEdit { File = file }; Mock.Arrange(() => File.WriteAllBytes(TempFileFullName, expectedContent)).DoNothing().InOrder(); Mock.Arrange(() => Path.GetFileName(TempFileFullName)).Returns(TempFileName); Mock.Arrange(() => file.UploadFile()).DoNothing().InOrder(); // Act. mapping.Update(dataContext, editableRoot); // Assert. Mock.Assert(() => File.WriteAllBytes(TempFileFullName, expectedContent), Occurs.Once()); Assert.AreEqual(TempFileName, file.OriginalFileName); Assert.AreEqual(TempFileName, file.FileName); Mock.Assert(() => file.UploadFile(), Occurs.Once()); }
public void WhenWebResponseContainsContentDisposition_Update_ChangesOriginalFileNameAndExtension() { // Arrange. const string ExpectedLocation = @"http://www.example.com/"; const string OriginalFileName = "TestFile.png"; const string TempFileFullName = @"z:\TempFolder\TempFile"; const string TempFileFullNameWithExtension = @"z:\TempFolder\TempFile.png"; const string TempFileNameWithExtension = "TempFile.png"; var locationValue = new object(); var typeConverter = Mock.Create<ITypeConverter>(Behavior.Loose); Mock.Arrange(() => typeConverter.Convert<string>(locationValue)).Returns(ExpectedLocation); var fileManager = Mock.Create<IFileManager>(); Mock.Arrange(() => fileManager.GetTempFileName(Arg.AnyString)).Returns(TempFileFullName); var dataContext = Mock.Create<IDataContext>(Behavior.Loose); var mapping = new FileFieldMapping( ReflectionHelper.GetProperty<TestEdit>(x => x.File), null, null, dc => dc == dataContext ? locationValue : null, typeConverter, fileManager); var file = Mock.Create<IFileProcess>(Behavior.Loose); var editableRoot = new TestEdit { File = file }; var responseHeaders = new WebHeaderCollection(); responseHeaders["content-disposition"] = "attachment; filename=" + OriginalFileName; Mock.Arrange(() => Arg.IsAny<WebClient>().ResponseHeaders).Returns(responseHeaders); Mock.Arrange(() => Arg.IsAny<WebClient>().DownloadFile(ExpectedLocation, TempFileFullName)).DoNothing(); Mock.Arrange(() => File.Move(TempFileFullName, TempFileFullNameWithExtension)).DoNothing().InOrder(); Mock.Arrange(() => file.UploadFile()).DoNothing().InOrder(); // Act. mapping.Update(dataContext, editableRoot); // Assert. Mock.Assert(() => Arg.IsAny<WebClient>().DownloadFile(ExpectedLocation, TempFileFullName), Occurs.Once()); Mock.Assert(() => File.Move(TempFileFullName, TempFileFullNameWithExtension), Occurs.Once()); Mock.Assert(() => file.UploadFile(), Occurs.Once()); Assert.AreEqual(OriginalFileName, file.OriginalFileName); Assert.AreEqual(TempFileNameWithExtension, file.FileName); }
public void AreEqualTest() { // Arrange. var updater = new SingleCrossReferenceFieldUpdater { FieldName = ReflectionHelper.GetPropertyName<TestEdit>(x => x.Person), ReferencedProcessName = Constants.BasePersonProcessName, ValueCalculator = (data, root) => 123 }; var item1 = new TestEdit { Person = 123 }; var item2 = new TestEdit { Person = 100 }; // Act / Assert. Assert.IsTrue(updater.AreEqual(new DataTriggerSourceData(), item1)); Assert.IsFalse(updater.AreEqual(new DataTriggerSourceData(), item2)); // Exceptions. TestsHelper.VerifyThrow<ArgumentNullException>(() => updater.AreEqual(null, new TestEdit())); TestsHelper.VerifyThrow<ArgumentNullException>(() => updater.AreEqual(new DataTriggerSourceData(), null)); }
public void GetNewItemsTest() { // Arrange. var crEdit1 = Mock.Create<IEditableRoot>(); Mock.Arrange(() => crEdit1.Id).Returns(111); var crEdit2 = Mock.Create<IEditableRoot>(); Mock.Arrange(() => crEdit2.Id).Returns(222); SetupGetEditableRoot(ReferencedProcess, crEdit1, crEdit2); var retriever = new MultiCrossReferenceSourceItemsRetriever { DynamicTypeManager = _dtm, FieldName = TestsHelper.ExtractPropertyName(() => new TestEdit().MultiCR), ReferencedProcess = ReferencedProcess }; var cr1 = Mock.Create<ICrossRefItemInfo>(); Mock.Arrange(() => cr1.Id).Returns(111); var cr2 = Mock.Create<ICrossRefItemInfo>(); Mock.Arrange(() => cr2.Id).Returns(222); var oldItem = new TestEdit(); var newItem = new TestEdit(); newItem.MultiCR.NewItems.Add(cr1); newItem.MultiCR.NewItems.Add(cr2); // Act. var result = retriever.GetNewItems(newItem, oldItem); // Assert. Assert.AreEqual(2, result.Count); Assert.IsTrue(result.Contains(crEdit1)); Assert.IsTrue(result.Contains(crEdit2)); // Arrange. var innerEdit1 = Mock.Create<IEditableRoot>(); var innerEdit2 = Mock.Create<IEditableRoot>(); var innerEdit3 = Mock.Create<IEditableRoot>(); var innerRetriever = Mock.Create<ISourceItemsRetriever>(); Mock.Arrange(() => innerRetriever.GetAllItems(crEdit1)).Returns(new[] { innerEdit1 }); Mock.Arrange(() => innerRetriever.GetAllItems(crEdit2)).Returns(new[] { innerEdit2, innerEdit3 }); retriever.Subretriever = innerRetriever; // Act. result = retriever.GetNewItems(newItem, oldItem); // Assert. Assert.AreEqual(3, result.Count); Assert.IsTrue(result.Contains(innerEdit1)); Assert.IsTrue(result.Contains(innerEdit2)); Assert.IsTrue(result.Contains(innerEdit3)); }
public void CalculateNewValueWithChildMappings() { // Arrange. var dtm = Mock.Create<IDynamicTypeManager>(Behavior.Loose); var updater = new SingleCrossReferenceFieldUpdater { FieldName = ReflectionHelper.GetPropertyName<TestEdit>(x => x.Person), ReferencedProcessName = Constants.BasePersonProcessName, DynamicTypeManager = dtm }; var sourceData = new DataTriggerSourceData(); var destination = new TestEdit(); var childUpdater1 = Mock.Create<IFieldUpdater>(Behavior.Loose); Mock.Arrange(() => childUpdater1.IsKey).Returns(true); var childUpdater2 = Mock.Create<IFieldUpdater>(Behavior.Loose); Mock.Arrange(() => childUpdater2.IsKey).Returns(false); updater.ChildMappings.Add(childUpdater1); updater.ChildMappings.Add(childUpdater2); var filter = Mock.Create<IFilterDescriptor>(Behavior.Loose); Mock.Arrange(() => childUpdater1.TryCreateFilter(sourceData, destination, out filter)).Returns(true); var infoItem = Mock.Create<IInfoClass>(Behavior.Loose); Mock.Arrange(() => infoItem.Id).Returns(123); var infoList = new InfoListBase { infoItem }; Mock.Arrange( () => dtm.GetList<IInfoList>(Constants.BasePersonProcessName, string.Empty, 0, int.MaxValue, null, Arg.IsAny<FilterList>(), false)) .Returns<string, string, int, int, SortList, FilterList, bool>( (processName, filterString, pageNumber, pageSize, sortList, filterList, security) => { if (filterList != null && filterList.Count == 1 && filterList.Contains(filter)) return infoList; return null; }); // Act. updater.CalculateNewValue(sourceData, destination); // Assert. Assert.AreEqual(123, updater.NewValue); }
public void UpdateTest() { // Arrange. var updater = new SingleCrossReferenceFieldUpdater { FieldName = ReflectionHelper.GetPropertyName<TestEdit>(x => x.Person), ReferencedProcessName = Constants.BasePersonProcessName, NewValue = 123 }; var destination = new TestEdit(); // Act. updater.Update(destination); // Assert. Assert.AreEqual(123, destination.Person); // Exceptions. TestsHelper.VerifyThrow<ArgumentNullException>(() => updater.Update(null)); }
public void EnumerateItemsTest() { // Arrange. var editItem = new TestEdit(); var employee1 = new TestEmployee { FirstName = "aaa", LastName = "AAA", BusinessUnit = 11, BusinessUnitMember = new TestBusinessUnit { Name = "BU 1" } }; var employee2 = new TestEmployee { FirstName = "bbb", LastName = "BBB", BusinessUnit = 12, BusinessUnitMember = new TestBusinessUnit { Name = "BU 2" } }; var employeesRetriever = new Mock<IProcessFieldItemsRetriever>(); employeesRetriever.Setup(x => x.ItemType).Returns(typeof(TestEmployee)); employeesRetriever.Setup(x => x.GetItems(editItem)).Returns(new[] { employee1, employee2 }); var role1 = new TestRole { Name = "Role 1" }; var role2 = new TestRole { Name = "Role 2" }; var role3 = new TestRole { Name = "Role 3" }; var rolesRetriever = new Mock<IProcessFieldItemsRetriever>(); rolesRetriever.Setup(x => x.ItemType).Returns(typeof(TestRole)); rolesRetriever.Setup(x => x.GetItems(employee1)).Returns(new[] { role1 }); rolesRetriever.Setup(x => x.GetItems(employee2)).Returns(new[] { role2, role3 }); var retrieverFactory = new Mock<IProcessFieldItemsRetrieverFactory>(); retrieverFactory.Setup(x => x.CreateItemsRetriever(typeof(TestEdit), "Employees")).Returns(employeesRetriever.Object); retrieverFactory.Setup(x => x.CreateItemsRetriever(typeof(TestEmployee), "Roles")).Returns(rolesRetriever.Object); var context = new EditableRootDataContext(editItem, retrieverFactory.Object); // Act / Assert. var employees = context.EnumerateItems("Employees"); var employeeEnumerator = employees.GetEnumerator(); Assert.IsNull(context.GetPropertyValue("Employees.FirstName")); Assert.IsNull(context.GetPropertyValue("Employees.LastName")); Assert.IsNull(context.GetPropertyValue("Employees.BusinessUnit.Name")); Assert.IsNull(context.GetPropertyValue("Employees.Roles.Name")); Assert.IsTrue(employeeEnumerator.MoveNext()); Assert.AreEqual("aaa", context.GetPropertyValue("Employees.FirstName")); Assert.AreEqual("AAA", context.GetPropertyValue("Employees.LastName")); Assert.AreEqual("BU 1", context.GetPropertyValue("Employees.BusinessUnit.Name")); Assert.IsNull(context.GetPropertyValue("Employees.Roles.Name")); var roles = context.EnumerateItems("Employees.Roles"); var rolesEnumerator = roles.GetEnumerator(); Assert.IsTrue(rolesEnumerator.MoveNext()); Assert.AreEqual("aaa", context.GetPropertyValue("Employees.FirstName")); Assert.AreEqual("AAA", context.GetPropertyValue("Employees.LastName")); Assert.AreEqual("BU 1", context.GetPropertyValue("Employees.BusinessUnit.Name")); Assert.AreEqual("Role 1", context.GetPropertyValue("Employees.Roles.Name")); Assert.IsFalse(rolesEnumerator.MoveNext()); Assert.AreEqual("aaa", context.GetPropertyValue("Employees.FirstName")); Assert.AreEqual("AAA", context.GetPropertyValue("Employees.LastName")); Assert.AreEqual("BU 1", context.GetPropertyValue("Employees.BusinessUnit.Name")); Assert.IsNull(context.GetPropertyValue("Employees.Roles.Name")); Assert.IsTrue(employeeEnumerator.MoveNext()); Assert.AreEqual("bbb", context.GetPropertyValue("Employees.FirstName")); Assert.AreEqual("BBB", context.GetPropertyValue("Employees.LastName")); Assert.AreEqual("BU 2", context.GetPropertyValue("Employees.BusinessUnit.Name")); Assert.IsNull(context.GetPropertyValue("Employees.Roles.Name")); roles = context.EnumerateItems("Employees.Roles"); rolesEnumerator = roles.GetEnumerator(); Assert.IsTrue(rolesEnumerator.MoveNext()); Assert.AreEqual("bbb", context.GetPropertyValue("Employees.FirstName")); Assert.AreEqual("BBB", context.GetPropertyValue("Employees.LastName")); Assert.AreEqual("BU 2", context.GetPropertyValue("Employees.BusinessUnit.Name")); Assert.AreEqual("Role 2", context.GetPropertyValue("Employees.Roles.Name")); Assert.IsTrue(rolesEnumerator.MoveNext()); Assert.AreEqual("bbb", context.GetPropertyValue("Employees.FirstName")); Assert.AreEqual("BBB", context.GetPropertyValue("Employees.LastName")); Assert.AreEqual("BU 2", context.GetPropertyValue("Employees.BusinessUnit.Name")); Assert.AreEqual("Role 3", context.GetPropertyValue("Employees.Roles.Name")); Assert.IsFalse(rolesEnumerator.MoveNext()); Assert.AreEqual("bbb", context.GetPropertyValue("Employees.FirstName")); Assert.AreEqual("BBB", context.GetPropertyValue("Employees.LastName")); Assert.AreEqual("BU 2", context.GetPropertyValue("Employees.BusinessUnit.Name")); Assert.IsNull(context.GetPropertyValue("Employees.Roles.Name")); Assert.IsFalse(employeeEnumerator.MoveNext()); Assert.IsNull(context.GetPropertyValue("Employees.FirstName")); Assert.IsNull(context.GetPropertyValue("Employees.LastName")); Assert.IsNull(context.GetPropertyValue("Employees.BusinessUnit.Name")); Assert.IsNull(context.GetPropertyValue("Employees.Roles.Name")); }
public void SimpleFieldUpdaterCanUpdateSimpleFields() { // Arrange. var updater = new SimpleFieldUpdater { FieldName = TestsHelper.ExtractPropertyName(() => new TestEdit().Text), NewValue = "123", PropertyType = typeof(string) }; var item = new TestEdit(); // Act. updater.Update(item); // Assert. Assert.AreEqual("123", item.Text); // Exceptions. TestsHelper.VerifyThrow<ArgumentNullException>(() => updater.Update(null)); }
public void AreEqualTest() { // Arrange. var comparer1 = new SimpleFieldUpdater { FieldName = TestsHelper.ExtractPropertyName(() => new TestEdit().Text), ValueCalculator = (s, d) => null, PropertyType = typeof(string) }; var comparer2 = new SimpleFieldUpdater { FieldName = TestsHelper.ExtractPropertyName(() => new TestEdit().Text), ValueCalculator = (s, d) => 123, PropertyType = typeof(string) }; var item1 = new TestEdit { Text = null }; var item2 = new TestEdit { Text = "123" }; var item3 = new TestEdit { Text = "Test" }; var sourceData = new DataTriggerSourceData(); // Act / Assert. Assert.IsTrue(comparer1.AreEqual(sourceData, item1)); Assert.IsFalse(comparer1.AreEqual(sourceData, item2)); Assert.IsFalse(comparer1.AreEqual(sourceData, item3)); Assert.IsFalse(comparer2.AreEqual(sourceData, item1)); Assert.IsTrue(comparer2.AreEqual(sourceData, item2)); Assert.IsFalse(comparer2.AreEqual(sourceData, item3)); // Exceptions. TestsHelper.VerifyThrow<ArgumentNullException>(() => comparer1.AreEqual(null, item1)); TestsHelper.VerifyThrow<ArgumentNullException>(() => comparer1.AreEqual(sourceData, null)); }
public void SimpleFieldUpdaterCanUpdateCurrentState() { // Arrange. var updater = new SimpleFieldUpdater { FieldName = Constants.CurrentStateColumnName, NewValue = TestEdit.States.Approved.Name, PropertyType = typeof(string) }; var item = new TestEdit(); // Act. updater.Update(item); // Assert. Assert.AreEqual(TestEdit.States.Approved.Id, item.CurrentState); // Exceptions. var statelessItem = Mock.Create<IEditableRoot>(); TestsHelper.VerifyThrow<InvalidOperationException>(() => updater.Update(statelessItem)); updater.NewValue = null; TestsHelper.VerifyThrow<InvalidOperationException>(() => updater.Update(item)); updater.NewValue = "Invalid State"; TestsHelper.VerifyThrow<InvalidOperationException>(() => updater.Update(item)); }
public void SimpleFieldUpdaterCanUpdateLocalizedFields() { // Arrange. var englishCulture = new CultureInfo("en-US"); var spanishCulture = new CultureInfo("es-ES"); var frenchCulture = new CultureInfo("fr-FR"); var updater = new SimpleFieldUpdater { FieldName = TestsHelper.ExtractPropertyName(() => new TestEdit().Localized), PropertyType = typeof(string), AllowLocalizedData = true }; updater.SupportedLocalizations.Add(new LocalizationInfoAttribute(englishCulture.Name)); updater.SupportedLocalizations.Add(new LocalizationInfoAttribute(spanishCulture.Name)); updater.SupportedLocalizations.Add(new LocalizationInfoAttribute(frenchCulture.Name)); updater.SetValue(englishCulture.Name, "English Text"); updater.SetValue(spanishCulture.Name, "Spanish Text"); updater.SetValue(frenchCulture.Name, "French Text"); var item = new TestEdit(); // Act. updater.Update(item); // Assert. Assert.AreEqual("English Text", item.Localized_en_US); Assert.AreEqual("Spanish Text", item.Localized_es_ES); Assert.AreEqual("French Text", item.Localized_fr_FR); }