blob: 51a6711443fbd83c3181ef575e74db973e13a186 [file] [log] [blame]
// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package postgres
import (
"testing"
"github.com/google/go-cmp/cmp"
)
func TestSearchDocumentSections(t *testing.T) {
t.Parallel()
for _, test := range []struct {
name string
synopsis string
readmeFilename string
readmeContents string
wantB, wantC, wantD string
}{
{
"blackfriday",
"This is a synopsis.",
"foo.md",
`Package blackfriday is a [markdown](http://foo) processor. That _is_ all that it is.`,
"this is a synopsis",
"package blackfriday is a markdown processor",
"that is all",
},
{
"non-markdown",
"This synopsis is too long so we'll truncate it.",
"README",
"This README doesn't have a sentence end so the whole thing is D",
"this synopsis is too long so",
"",
"this readme doesn't have a sentence",
},
{
"viper",
"",
"README.md",
`
![viper logo](https://cloud.githubusercontent.com/assets/173412/10886745/998df88a-8151-11e5-9448-4736db51020d.png)
Go configuration with fangs!
[![Actions](https://github.com/spf13/viper/workflows/CI/badge.svg)](https://github.com/spf13/viper)
[![Join the chat at https://gitter.im/spf13/viper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/spf13/viper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![GoDoc](https://godoc.org/github.com/spf13/viper?status.svg)](https://godoc.org/github.com/spf13/viper)
Many Go projects are built using Viper including:`,
"go configuration with fangs", // first sentence of README promoted
"",
"many go projects are",
},
} {
gotB, gotC, gotD := searchDocumentSections(test.synopsis, test.readmeFilename, test.readmeContents, 6, 0.5)
if gotB != test.wantB {
t.Errorf("%s, B: got %q, want %q", test.name, gotB, test.wantB)
}
if gotC != test.wantC {
t.Errorf("%s, C: got %q, want %q", test.name, gotC, test.wantC)
}
if gotD != test.wantD {
t.Errorf("%s, D: got %q, want %q", test.name, gotD, test.wantD)
}
}
}
func TestProcessWords(t *testing.T) {
t.Parallel()
for _, test := range []struct {
in string
want []string
}{
{"", nil},
{"foo", []string{"foo"}},
{" foo \t bar\n", []string{"foo", "bar"}},
{"http://foo/bar/baz?x=1", []string{"http://foo/bar/baz?x=1"}},
{"This, however, shall. not; stand?", []string{"this", "however", "shall", "not", "stand"}},
{"a postgres and NATS server over HTTP", []string{
"a", "postgres", "postgresql", "and", "nats", "server", "over", "http"}},
{"http://a-b-c.com full-text chart-parser", []string{
"http://a-b-c.com", "full-text", "chart-parser", "parser", "parse"}},
} {
got := processWords(test.in)
if !cmp.Equal(got, test.want) {
t.Errorf("%q:\ngot %#v\nwant %#v", test.in, got, test.want)
}
}
}
func TestProcessMarkdown(t *testing.T) {
t.Parallel()
const (
in = `
Blackfriday [![Build Status](https://travis-ci.org/russross/blackfriday.svg?branch=master)](https://travis-ci.org/russross/blackfriday)
===========
_Blackfriday_ is a [Markdown][1] *processor* implemented in [Go](https://golang.org).
[1]: https://daringfireball.net/projects/markdown/ "Markdown"
`
want = `Blackfriday Blackfriday is a Markdown processor implemented in Go.`
)
got := processMarkdown(in)
if got != want {
t.Errorf("got\n%s\nwant\n%s", got, want)
}
}
func TestSentenceEndIndex(t *testing.T) {
t.Parallel()
for _, test := range []struct {
in string
want int
}{
{"", -1},
{"Hello. What's up?", 5},
{"unicode π∆!", 13},
{"D. C. Fontana?", 13},
{"D. c. Fontana?", 4},
{"no end", -1},
} {
got := sentenceEndIndex(test.in)
if got != test.want {
t.Errorf("%s: got %d, want %d", test.in, got, test.want)
}
}
}