diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-06-14 21:10:48 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-06-14 22:12:48 +0200 |
commit | e1d8bc4d17cb7bd79e19fdf866d1da2fedda4de5 (patch) | |
tree | ececff85e82e42a2b95b27b03e53c79768ad0709 /lib/parse/hyperlinks_test.go | |
parent | 4753cfd3e33f985ec22c5600a8d7e68b72175607 (diff) | |
download | aerc-e1d8bc4d17cb7bd79e19fdf866d1da2fedda4de5.tar.gz |
msgviewer: open http links from messages
Parse http links from a message and display them as completions in the
:open-link command.
Add the following binds to the [view] section in your binds.conf:
<C-l> = :open-link <space>
Parsing can be disabled in aerc.conf by setting parse-http-links to
false in the viewer section.
Thanks to Moritz for the help with the regular expression.
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Reviewed-by: Moritz Poldrack <git@moritz.sh>
Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'lib/parse/hyperlinks_test.go')
-rw-r--r-- | lib/parse/hyperlinks_test.go | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/lib/parse/hyperlinks_test.go b/lib/parse/hyperlinks_test.go new file mode 100644 index 00000000..f16392a5 --- /dev/null +++ b/lib/parse/hyperlinks_test.go @@ -0,0 +1,99 @@ +package parse_test + +import ( + "io/ioutil" + "strings" + "testing" + + "git.sr.ht/~rjarry/aerc/lib/parse" +) + +func TestHyperlinks(t *testing.T) { + tests := []struct { + text string + links []string + }{ + { + text: "http://aerc-mail.org", + links: []string{"http://aerc-mail.org"}, + }, + { + text: "https://aerc-mail.org", + links: []string{"https://aerc-mail.org"}, + }, + { + text: "text https://aerc-mail.org more text", + links: []string{"https://aerc-mail.org"}, + }, + { + text: "text (https://aerc-mail.org) more text", + links: []string{"https://aerc-mail.org"}, + }, + { + text: "text \"https://aerc-mail.org\" more text", + links: []string{"https://aerc-mail.org"}, + }, + { + text: "text <https://aerc-mail.org> more text", + links: []string{"https://aerc-mail.org"}, + }, + { + text: "<a href=\"https://aerc-mail.org\">", + links: []string{"https://aerc-mail.org"}, + }, + { + text: "text https://aerc-mail.org more text https://aerc-mail.org more text", + links: []string{"https://aerc-mail.org"}, + }, + { + text: "text https://aerc-mail.org more text http://git.sr.ht/~rjarry/aerc more text", + links: []string{"https://aerc-mail.org", "http://git.sr.ht/~rjarry/aerc"}, + }, + { + text: "text http://www.ietf.org/rfc/rfc2396.txt more text", + links: []string{"http://www.ietf.org/rfc/rfc2396.txt"}, + }, + { + text: "text <http://example.com:8042/over/there?name=ferret#nose> more text", + links: []string{"http://example.com:8042/over/there?name=ferret#nose"}, + }, + { + text: "text http://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm more text", + links: []string{"http://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm"}, + }, + { + text: "text https://www.ics.uci.edu/pub/ietf/uri/#Related more text", + links: []string{"https://www.ics.uci.edu/pub/ietf/uri/#Related"}, + }, + { + text: "text https://www.example.com/index.php?id_sezione=360&sid=3a5ebc944f41daa6f849f730f1 more text", + links: []string{"https://www.example.com/index.php?id_sezione=360&sid=3a5ebc944f41daa6f849f730f1"}, + }, + } + + for _, test := range tests { + + // make sure reader is exact copy of input reader + reader, links := parse.HttpLinks(strings.NewReader(test.text)) + if data, err := ioutil.ReadAll(reader); err != nil { + t.Errorf("could not read text: %v", err) + } else if string(data) != test.text { + t.Errorf("did not copy input reader correctly") + } + + // check correct parsed links + if len(links) != len(test.links) { + t.Errorf("different number of links: got %d but expected %d", len(links), len(test.links)) + } + linkMap := make(map[string]struct{}) + for _, got := range links { + linkMap[got] = struct{}{} + } + for _, expected := range test.links { + if _, ok := linkMap[expected]; !ok { + t.Errorf("link not parsed: %s", expected) + } + } + + } +} |