From e135cc99e1b93f41f67dbdfac214198a55f387a6 Mon Sep 17 00:00:00 2001 From: Adrian Date: Wed, 11 Jul 2018 18:12:46 +0200 Subject: Expose range information for markdown text nodes [WIP] (#9067) * Track positions of markdown text * Add tests for markdown text ranges --- utils/markdown/text_range_test.go | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 utils/markdown/text_range_test.go (limited to 'utils/markdown/text_range_test.go') diff --git a/utils/markdown/text_range_test.go b/utils/markdown/text_range_test.go new file mode 100644 index 000000000..9c0efea85 --- /dev/null +++ b/utils/markdown/text_range_test.go @@ -0,0 +1,110 @@ +// Copyright (c) 2018-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package markdown + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestTextRanges(t *testing.T) { + for name, tc := range map[string]struct { + Markdown string + ExpectedRanges []Range + ExpectedValues []string + }{ + "simple": { + Markdown: "hello", + ExpectedRanges: []Range{{0, 5}}, + ExpectedValues: []string{"hello"}, + }, + "simple2": { + Markdown: "hello!", + ExpectedRanges: []Range{{0, 5}, {5, 6}}, + ExpectedValues: []string{"hello", "!"}, + }, + "multiline": { + Markdown: "hello world\nfoobar", + ExpectedRanges: []Range{{0, 11}, {12, 18}}, + ExpectedValues: []string{"hello world", "foobar"}, + }, + "code": { + Markdown: "hello `code` world", + ExpectedRanges: []Range{{0, 6}, {12, 18}}, + ExpectedValues: []string{"hello ", " world"}, + }, + "notcode": { + Markdown: "hello ` world", + ExpectedRanges: []Range{{0, 6}, {6, 7}, {7, 13}}, + ExpectedValues: []string{"hello ", "`", " world"}, + }, + "escape": { + Markdown: "\\*hello\\*", + ExpectedRanges: []Range{{1, 2}, {2, 7}, {8, 9}}, + ExpectedValues: []string{"*", "hello", "*"}, + }, + "escapeescape": { + Markdown: "\\\\", + ExpectedRanges: []Range{{1, 2}}, + ExpectedValues: []string{"\\"}, + }, + "notescape": { + Markdown: "foo\\x", + ExpectedRanges: []Range{{0, 3}, {3, 4}, {4, 5}}, + ExpectedValues: []string{"foo", "\\", "x"}, + }, + "notlink": { + Markdown: "[foo", + ExpectedRanges: []Range{{0, 1}, {1, 4}}, + ExpectedValues: []string{"[", "foo"}, + }, + "notlinkend": { + Markdown: "[foo]", + ExpectedRanges: []Range{{0, 1}, {1, 4}, {4, 5}}, + ExpectedValues: []string{"[", "foo", "]"}, + }, + "notimage": { + Markdown: "![foo", + ExpectedRanges: []Range{{0, 2}, {2, 5}}, + ExpectedValues: []string{"![", "foo"}, + }, + "notimage2": { + Markdown: "!foo", + ExpectedRanges: []Range{{0, 1}, {1, 4}}, + ExpectedValues: []string{"!", "foo"}, + }, + "charref": { + Markdown: ""test", + ExpectedRanges: []Range{{0, 1}, {6, 10}}, + ExpectedValues: []string{"\"", "test"}, + }, + "notcharref": { + Markdown: "& test", + ExpectedRanges: []Range{{0, 1}, {1, 9}}, + ExpectedValues: []string{"&", "amp test"}, + }, + "notcharref2": { + Markdown: "&mattermost;", + ExpectedRanges: []Range{{0, 1}, {1, 12}}, + ExpectedValues: []string{"&", "mattermost;"}, + }, + } { + t.Run(name, func(t *testing.T) { + var ranges []Range + var values []string + Inspect(tc.Markdown, func(node interface{}) bool { + if textNode, ok := node.(*Text); ok { + ranges = append(ranges, textNode.Range) + values = append(values, textNode.Text) + } + return true + }) + assert.Equal(t, ranges, tc.ExpectedRanges) + assert.Equal(t, values, tc.ExpectedValues) + + }) + } + +} -- cgit v1.2.3-1-g7c22