// Copyright 2021 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.

//go:build go1.17

package triage

import (
	"testing"

	"github.com/google/go-cmp/cmp"
)

func TestCandidateModulePaths(t *testing.T) {
	for _, test := range []struct {
		in   string
		want []string
	}{
		{"", nil},
		{".", nil},
		{"///foo", nil},
		{"github.com/google", nil},
		{"std", []string{"std"}},
		{"encoding/json", []string{"std"}},
		{
			"example.com/green/eggs/and/ham",
			[]string{
				"example.com/green/eggs/and/ham",
				"example.com/green/eggs/and",
				"example.com/green/eggs",
				"example.com/green",
				"example.com",
			},
		},
		{
			"github.com/google/go-cmp/cmp",
			[]string{"github.com/google/go-cmp/cmp", "github.com/google/go-cmp"},
		},
		{
			"bitbucket.org/ok/sure/no$dollars/allowed",
			[]string{"bitbucket.org/ok/sure"},
		},
		{
			// A module path cannot end in "v1".
			"k8s.io/klog/v1",
			[]string{"k8s.io/klog", "k8s.io"},
		},
	} {
		got := candidateModulePaths(test.in)
		if !cmp.Equal(got, test.want) {
			t.Errorf("%q: got %v, want %v", test.in, got, test.want)
		}
	}
}

func TestMatchesNegativeRegexp(t *testing.T) {
	for _, test := range []struct {
		in   string
		want bool
	}{
		{"groups.google.com", true},
		{"groupsgooglecom", false},
		{"groups.google.com/foo", true},
		{"groups.google.comics.org", false},
		{"some/groups.google.com", false},
		{"lists.ubuntu.com", true},
		{"lists.ubuntu.com/pipermail", true},
		{"bugzilla.anything.org", true},
		{"github.com/evacchi/flatpress/issues/14", true},
		{"github.com/evacchi/issues/14", false},
	} {
		got := matchesNegativeRegexp(test.in)
		if got != test.want {
			t.Errorf("%s: got %t, want %t", test.in, got, test.want)
		}
	}
}
