public void Accept_EmptyDocument_EmptyResult()
        {
            var document = new FlowDocument();

            var visitor = new FlowDocumentVisitor(e => true);
            visitor.Accept(document);

            Assert.That(visitor.Results, Is.Empty);
        }
        public void Accept_SingleRunElement_ReturnsRunElement()
        {
            var document = new FlowDocument();
            document.Blocks.Add(new Paragraph(new Run("Some dummy ")));

            var visitor = new FlowDocumentVisitor(e => e is Run);
            visitor.Accept(document);

            Assert.That(visitor.Results.OfType<Run>().Count(), Is.EqualTo(1));
        }
        public void OnPaste_NonLink_NoHyperlinkInserted()
        {
            var editor = new RichTextEditor();
            editor.Document.Blocks.Add(new Paragraph(new Run("Some dummy ")));
            editor.CaretPosition = editor.Document.ContentEnd;

            Clipboard.SetData(DataFormats.Text, "some-other-text");
            editor.Paste();

            var visitor = new FlowDocumentVisitor(e => e is Hyperlink);
            visitor.Accept(editor.Document);
            Assert.That(visitor.Results, Is.Empty);
        }
        public void Accept_MultipleRunElementsAndContinueAfterMatchIsTrue_AllRunElementsReturned()
        {
            var document = new FlowDocument();
            var para = new Paragraph();
            para.Inlines.Add(new Run("a"));
            para.Inlines.Add(new Run("b"));
            para.Inlines.Add(new Run("c"));
            document.Blocks.Add(para);

            var visitor = new FlowDocumentVisitor(e => e is Run) { ContinueAfterMatch = true };
            visitor.Accept(document);

            Assert.That(visitor.Results.OfType<Run>().Count(), Is.EqualTo(3));
        }
        public void Accept_HyperlinkInLists_AllHyperlinksFound()
        {
            var document = new FlowDocument();
            var list = new List();
            list.ListItems.Add(new ListItem(new Paragraph(new Hyperlink(new Run("http://github.com")))));
            list.ListItems.Add(new ListItem(new Paragraph(new Hyperlink(new Run("http://github.com")))));
            list.ListItems.Add(new ListItem(new Paragraph(new Hyperlink(new Run("http://github.com")))));
            document.Blocks.Add(list);

            var visitor = new FlowDocumentVisitor(e => e is Hyperlink) { ContinueAfterMatch = true };
            visitor.Accept(document);

            Assert.That(visitor.Results.OfType<Hyperlink>().Count(), Is.EqualTo(3));
        }
        public void OnBackspace_AfterLink_HyperlinkRemoved()
        {
            var editor = new RichTextEditor();
            editor.Document.Blocks.Add(new Paragraph(new Run("Some dummy http://github.org/")));
            editor.CaretPosition = editor.Document.ContentEnd;

            // we know from other tests that this works
            editor.TriggerInput(Key.Space);

            editor.TriggerInput(Key.Back);

            var visitor = new FlowDocumentVisitor(e => e is Hyperlink);
            visitor.Accept(editor.Document);
            Assert.That(visitor.Results, Is.Empty);
        }
        public void OnPaste_WithLink_HyperlinkInserted()
        {
            var url = "http://github.com/";

            var editor = new RichTextEditor();
            editor.Document.Blocks.Add(new Paragraph(new Run("Some dummy ")));
            editor.CaretPosition = editor.Document.ContentEnd;

            Clipboard.SetData(DataFormats.Text, url);
            editor.Paste();

            var visitor = new FlowDocumentVisitor(e => e is Hyperlink);
            visitor.Accept(editor.Document);
            Assert.That(visitor.Results.Count, Is.EqualTo(1));

            var hyperlink = visitor.Results.OfType<Hyperlink>().Single();
            Assert.That(hyperlink.Inlines.OfType<Run>().Single().Text, Is.EqualTo(url));
            Assert.That(hyperlink.NavigateUri.ToString(), Is.EqualTo(url));
        }
        public void OnWordCompleted_AfterIncompleteWwwLink_HyperlinkWithHttpPrefixInserted([Values(Key.Space, Key.Return)]Key key)
        {
            var editor = new RichTextEditor();
            editor.Document.Blocks.Add(new Paragraph(new Run("Some dummy www.host.org")));
            editor.CaretPosition = editor.Document.ContentEnd;

            editor.TriggerInput(key);

            var visitor = new FlowDocumentVisitor(e => e is Hyperlink);
            visitor.Accept(editor.Document);
            Assert.That(visitor.Results.Count, Is.EqualTo(1));

            var hyperlink = visitor.Results.OfType<Hyperlink>().Single();
            Assert.That(hyperlink.Inlines.OfType<Run>().Single().Text, Is.EqualTo("www.host.org"));
            Assert.That(hyperlink.NavigateUri.ToString(), Is.EqualTo("http://www.host.org/"));
        }
        public void OnWordContinued_AfterNonLink_NoHyperlinkInserted()
        {
            var editor = new RichTextEditor();
            editor.Document.Blocks.Add(new Paragraph(new Run("Some dummy text")));
            editor.CaretPosition = editor.Document.ContentEnd;

            editor.TriggerInput(Key.A);

            var visitor = new FlowDocumentVisitor(e => e is Hyperlink);
            visitor.Accept(editor.Document);
            Assert.That(visitor.Results, Is.Empty);
        }