160 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Go
		
	
	
	
// Copyright 2015 The Go Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by the Apache 2.0
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package dl
 | 
						|
 | 
						|
import (
 | 
						|
	"sort"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestParseVersion(t *testing.T) {
 | 
						|
	for _, c := range []struct {
 | 
						|
		in       string
 | 
						|
		maj, min int
 | 
						|
		tail     string
 | 
						|
	}{
 | 
						|
		{"go1.5", 5, 0, ""},
 | 
						|
		{"go1.5beta1", 5, 0, "beta1"},
 | 
						|
		{"go1.5.1", 5, 1, ""},
 | 
						|
		{"go1.5.1rc1", 5, 1, "rc1"},
 | 
						|
	} {
 | 
						|
		maj, min, tail := parseVersion(c.in)
 | 
						|
		if maj != c.maj || min != c.min || tail != c.tail {
 | 
						|
			t.Errorf("parseVersion(%q) = %v, %v, %q; want %v, %v, %q",
 | 
						|
				c.in, maj, min, tail, c.maj, c.min, c.tail)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestFileOrder(t *testing.T) {
 | 
						|
	fs := []File{
 | 
						|
		{Filename: "go1.3.src.tar.gz", Version: "go1.3", OS: "", Arch: "", Kind: "source"},
 | 
						|
		{Filename: "go1.3.1.src.tar.gz", Version: "go1.3.1", OS: "", Arch: "", Kind: "source"},
 | 
						|
		{Filename: "go1.3.linux-amd64.tar.gz", Version: "go1.3", OS: "linux", Arch: "amd64", Kind: "archive"},
 | 
						|
		{Filename: "go1.3.1.linux-amd64.tar.gz", Version: "go1.3.1", OS: "linux", Arch: "amd64", Kind: "archive"},
 | 
						|
		{Filename: "go1.3.darwin-amd64.tar.gz", Version: "go1.3", OS: "darwin", Arch: "amd64", Kind: "archive"},
 | 
						|
		{Filename: "go1.3.darwin-amd64.pkg", Version: "go1.3", OS: "darwin", Arch: "amd64", Kind: "installer"},
 | 
						|
		{Filename: "go1.3.darwin-386.tar.gz", Version: "go1.3", OS: "darwin", Arch: "386", Kind: "archive"},
 | 
						|
		{Filename: "go1.3beta1.linux-amd64.tar.gz", Version: "go1.3beta1", OS: "linux", Arch: "amd64", Kind: "archive"},
 | 
						|
		{Filename: "go1.3beta2.linux-amd64.tar.gz", Version: "go1.3beta2", OS: "linux", Arch: "amd64", Kind: "archive"},
 | 
						|
		{Filename: "go1.3rc1.linux-amd64.tar.gz", Version: "go1.3rc1", OS: "linux", Arch: "amd64", Kind: "archive"},
 | 
						|
		{Filename: "go1.2.linux-amd64.tar.gz", Version: "go1.2", OS: "linux", Arch: "amd64", Kind: "archive"},
 | 
						|
		{Filename: "go1.2.2.linux-amd64.tar.gz", Version: "go1.2.2", OS: "linux", Arch: "amd64", Kind: "archive"},
 | 
						|
	}
 | 
						|
	sort.Sort(fileOrder(fs))
 | 
						|
	var s []string
 | 
						|
	for _, f := range fs {
 | 
						|
		s = append(s, f.Filename)
 | 
						|
	}
 | 
						|
	got := strings.Join(s, "\n")
 | 
						|
	want := strings.Join([]string{
 | 
						|
		"go1.3.1.src.tar.gz",
 | 
						|
		"go1.3.1.linux-amd64.tar.gz",
 | 
						|
		"go1.3.src.tar.gz",
 | 
						|
		"go1.3.darwin-386.tar.gz",
 | 
						|
		"go1.3.darwin-amd64.tar.gz",
 | 
						|
		"go1.3.darwin-amd64.pkg",
 | 
						|
		"go1.3.linux-amd64.tar.gz",
 | 
						|
		"go1.2.2.linux-amd64.tar.gz",
 | 
						|
		"go1.2.linux-amd64.tar.gz",
 | 
						|
		"go1.3rc1.linux-amd64.tar.gz",
 | 
						|
		"go1.3beta2.linux-amd64.tar.gz",
 | 
						|
		"go1.3beta1.linux-amd64.tar.gz",
 | 
						|
	}, "\n")
 | 
						|
	if got != want {
 | 
						|
		t.Errorf("sort order is\n%s\nwant:\n%s", got, want)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestFilesToReleases(t *testing.T) {
 | 
						|
	fs := []File{
 | 
						|
		{Version: "go1.7.4", OS: "darwin"},
 | 
						|
		{Version: "go1.7.4", OS: "windows"},
 | 
						|
		{Version: "go1.7", OS: "darwin"},
 | 
						|
		{Version: "go1.7", OS: "windows"},
 | 
						|
		{Version: "go1.6.2", OS: "darwin"},
 | 
						|
		{Version: "go1.6.2", OS: "windows"},
 | 
						|
		{Version: "go1.6", OS: "darwin"},
 | 
						|
		{Version: "go1.6", OS: "windows"},
 | 
						|
		{Version: "go1.5.2", OS: "darwin"},
 | 
						|
		{Version: "go1.5.2", OS: "windows"},
 | 
						|
		{Version: "go1.5", OS: "darwin"},
 | 
						|
		{Version: "go1.5", OS: "windows"},
 | 
						|
		{Version: "go1.5beta1", OS: "windows"},
 | 
						|
	}
 | 
						|
	stable, unstable, archive := filesToReleases(fs)
 | 
						|
	if got, want := list(stable), "go1.7.4, go1.6.2"; got != want {
 | 
						|
		t.Errorf("stable = %q; want %q", got, want)
 | 
						|
	}
 | 
						|
	if got, want := list(unstable), ""; got != want {
 | 
						|
		t.Errorf("unstable = %q; want %q", got, want)
 | 
						|
	}
 | 
						|
	if got, want := list(archive), "go1.7, go1.6, go1.5.2, go1.5"; got != want {
 | 
						|
		t.Errorf("archive = %q; want %q", got, want)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestOldUnstableNotShown(t *testing.T) {
 | 
						|
	fs := []File{
 | 
						|
		{Version: "go1.7.4"},
 | 
						|
		{Version: "go1.7"},
 | 
						|
		{Version: "go1.7beta1"},
 | 
						|
	}
 | 
						|
	_, unstable, _ := filesToReleases(fs)
 | 
						|
	if len(unstable) != 0 {
 | 
						|
		t.Errorf("got unstable, want none")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// A new beta should show up under unstable, but not show up under archive. See golang.org/issue/29669.
 | 
						|
func TestNewUnstableShownOnce(t *testing.T) {
 | 
						|
	fs := []File{
 | 
						|
		{Version: "go1.12beta2"},
 | 
						|
		{Version: "go1.11.4"},
 | 
						|
		{Version: "go1.11"},
 | 
						|
		{Version: "go1.10.7"},
 | 
						|
		{Version: "go1.10"},
 | 
						|
		{Version: "go1.9"},
 | 
						|
	}
 | 
						|
	stable, unstable, archive := filesToReleases(fs)
 | 
						|
	if got, want := list(stable), "go1.11.4, go1.10.7"; got != want {
 | 
						|
		t.Errorf("stable = %q; want %q", got, want)
 | 
						|
	}
 | 
						|
	if got, want := list(unstable), "go1.12beta2"; got != want {
 | 
						|
		t.Errorf("unstable = %q; want %q", got, want)
 | 
						|
	}
 | 
						|
	if got, want := list(archive), "go1.11, go1.10, go1.9"; got != want {
 | 
						|
		t.Errorf("archive = %q; want %q", got, want)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestUnstableShown(t *testing.T) {
 | 
						|
	fs := []File{
 | 
						|
		{Version: "go1.8beta2"},
 | 
						|
		{Version: "go1.8rc1"},
 | 
						|
		{Version: "go1.7.4"},
 | 
						|
		{Version: "go1.7"},
 | 
						|
		{Version: "go1.7beta1"},
 | 
						|
	}
 | 
						|
	_, unstable, _ := filesToReleases(fs)
 | 
						|
	// Show RCs ahead of betas.
 | 
						|
	if got, want := list(unstable), "go1.8rc1"; got != want {
 | 
						|
		t.Errorf("unstable = %q; want %q", got, want)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// list returns a version list string for the given releases.
 | 
						|
func list(rs []Release) string {
 | 
						|
	var s string
 | 
						|
	for i, r := range rs {
 | 
						|
		if i > 0 {
 | 
						|
			s += ", "
 | 
						|
		}
 | 
						|
		s += r.Version
 | 
						|
	}
 | 
						|
	return s
 | 
						|
}
 |