コード例 #1
0
        // [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);
        }
コード例 #3
0
        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.");
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #9
0
        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);
            }
        }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
        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")));
            }
        }
コード例 #12
0
        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);
            }
        }
コード例 #13
0
        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")));
            }
        }
コード例 #14
0
            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);
            }
コード例 #15
0
        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.");
            }
        }
コード例 #16
0
ファイル: TestMapper.cs プロジェクト: datoxicon/pcbuilder
 public TestMinimal MapToBLL(TestEdit apiTest)
 {
     return(new TestMinimal
     {
         Id = apiTest.Id,
         TestTypeId = apiTest.TestTypeId,
         TestName = apiTest.TestName
     });
 }
コード例 #17
0
        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);
        }
コード例 #18
0
        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);
        }
コード例 #19
0
        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);
        }
コード例 #20
0
ファイル: SampleUtilsTests.cs プロジェクト: mparsin/Elements
        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);
        }
コード例 #21
0
ファイル: SampleUtilsTests.cs プロジェクト: mparsin/Elements
        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);
        }
コード例 #22
0
ファイル: SampleUtilsTests.cs プロジェクト: mparsin/Elements
        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);
        }
コード例 #23
0
        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);
            }
        }
コード例 #24
0
        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);
        }
コード例 #25
0
            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);
            }
コード例 #26
0
        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());
        }
コード例 #27
0
        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")));
            }
        }
コード例 #28
0
        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);
        }
コード例 #29
0
        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;
            }
        }
コード例 #30
0
        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);
        }
コード例 #31
0
            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;
            }
コード例 #32
0
        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);
        }
コード例 #33
0
        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());
            }
        }
コード例 #34
0
        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);
        }
コード例 #35
0
        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();
            }
        }
コード例 #36
0
        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);
            }
        }
コード例 #37
0
        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);
        }
コード例 #38
0
        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));
        }
コード例 #39
0
ファイル: SampleUtilsTests.cs プロジェクト: mparsin/Elements
        public void GetSampleType_ReturnsDefaultSampleType()
        {
            // Arrange.
            var editableRoot = new TestEdit();

            // Act.
            var sampleType = SampleUtils.Instance.GetSampleType(editableRoot, "Sample");

            // Assert.
            Assert.AreEqual(SampleTypes.Number, sampleType);
        }
コード例 #40
0
        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);
        }
コード例 #41
0
        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());
        }
コード例 #42
0
        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());
        }
コード例 #43
0
        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);
        }
コード例 #44
0
        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));
        }
コード例 #45
0
        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));
        }
コード例 #46
0
        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);
        }
コード例 #47
0
        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));
        }
コード例 #48
0
        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"));
        }
コード例 #49
0
        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));
        }
コード例 #50
0
        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));
        }
コード例 #51
0
        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));
        }
コード例 #52
0
        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);
        }