Skip to content
This repository has been archived by the owner on Sep 9, 2020. It is now read-only.

Commit

Permalink
test(status): BasicLine output & BasicStatus func
Browse files Browse the repository at this point in the history
Add table tests for BasicLine output for each output type and tests for
getConsolidatedConstraint() & getConsolidatedVersion().
  • Loading branch information
darkowlzz committed Aug 10, 2017
1 parent e0885fd commit afb281e
Show file tree
Hide file tree
Showing 2 changed files with 194 additions and 40 deletions.
41 changes: 23 additions & 18 deletions cmd/dep/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,16 +89,10 @@ func (out *tableOutput) BasicFooter() {
}

func (out *tableOutput) BasicLine(bs *BasicStatus) {
var constraint string
if v, ok := bs.Constraint.(gps.Version); ok {
constraint = formatVersion(v)
} else {
constraint = bs.Constraint.String()
}
fmt.Fprintf(out.w,
"%s\t%s\t%s\t%s\t%s\t%d\t\n",
bs.ProjectRoot,
constraint,
bs.getConsolidatedConstraint(),
formatVersion(bs.Version),
formatVersion(bs.Revision),
formatVersion(bs.Latest),
Expand Down Expand Up @@ -137,12 +131,7 @@ func (out *jsonOutput) BasicFooter() {
}

func (out *jsonOutput) BasicLine(bs *BasicStatus) {
if v, ok := bs.Constraint.(gps.Version); ok {
bs.JSONConstraint = formatVersion(v)
} else {
bs.JSONConstraint = bs.Constraint.String()
}

bs.JSONConstraint = bs.getConsolidatedConstraint()
bs.JSONVersion = formatVersion(bs.Version)
out.basic = append(out.basic, bs)
}
Expand Down Expand Up @@ -181,11 +170,7 @@ func (out *dotOutput) BasicFooter() {
}

func (out *dotOutput) BasicLine(bs *BasicStatus) {
version := formatVersion(bs.Revision)
if bs.Version != nil {
version = formatVersion(bs.Version)
}
out.g.createNode(bs.ProjectRoot, version, bs.Children)
out.g.createNode(bs.ProjectRoot, bs.getConsolidatedVersion(), bs.Children)
}

func (out *dotOutput) MissingHeader() {}
Expand Down Expand Up @@ -261,6 +246,26 @@ type BasicStatus struct {
JSONVersion string `json:"Version"`
}

func (bs *BasicStatus) getConsolidatedConstraint() string {
var constraint string
if bs.Constraint != nil {
if v, ok := bs.Constraint.(gps.Version); ok {
constraint = formatVersion(v)
} else {
constraint = bs.Constraint.String()
}
}
return constraint
}

func (bs *BasicStatus) getConsolidatedVersion() string {
version := formatVersion(bs.Revision)
if bs.Version != nil {
version = formatVersion(bs.Version)
}
return version
}

// MissingStatus contains information about all the missing packages in a project.
type MissingStatus struct {
ProjectRoot string
Expand Down
193 changes: 171 additions & 22 deletions cmd/dep/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package main
import (
"bytes"
"testing"
"text/tabwriter"

"strings"

Expand Down Expand Up @@ -34,34 +35,182 @@ func TestStatusFormatVersion(t *testing.T) {
func TestBasicLine(t *testing.T) {

project := dep.Project{}
aSemverConstraint, _ := gps.NewSemverConstraint("1.2.3")

var tests = []struct {
status BasicStatus
expected string
tests := []struct {
name string
status BasicStatus
wantDotStatus []string
wantJSONStatus []string
wantTableStatus []string
}{
{BasicStatus{
Version: nil,
Revision: gps.Revision("flooboofoobooo"),
}, `[label="\nflooboo"];`},
{BasicStatus{
Version: gps.NewVersion("1.0.0"),
Revision: gps.Revision("flooboofoobooo"),
}, `[label="\n1.0.0"];`},
{
name: "BasicStatus with ProjectRoot only",
status: BasicStatus{
ProjectRoot: "github.com/foo/bar",
},
wantDotStatus: []string{`[label="github.com/foo/bar"];`},
wantJSONStatus: []string{`"Version":""`, `"Revision":""`},
wantTableStatus: []string{`github.com/foo/bar 0`},
},
{
name: "BasicStatus with Revision",
status: BasicStatus{
ProjectRoot: "github.com/foo/bar",
Revision: gps.Revision("flooboofoobooo"),
},
wantDotStatus: []string{`[label="github.com/foo/bar\nflooboo"];`},
wantJSONStatus: []string{`"Version":""`, `"Revision":"flooboofoobooo"`, `"Constraint":""`},
wantTableStatus: []string{`github.com/foo/bar flooboo 0`},
},
{
name: "BasicStatus with Version and Revision",
status: BasicStatus{
ProjectRoot: "github.com/foo/bar",
Version: gps.NewVersion("1.0.0"),
Revision: gps.Revision("flooboofoobooo"),
},
wantDotStatus: []string{`[label="github.com/foo/bar\n1.0.0"];`},
wantJSONStatus: []string{`"Version":"1.0.0"`, `"Revision":"flooboofoobooo"`, `"Constraint":""`},
wantTableStatus: []string{`github.com/foo/bar 1.0.0 flooboo 0`},
},
{
name: "BasicStatus with Constraint, Version and Revision",
status: BasicStatus{
ProjectRoot: "github.com/foo/bar",
Constraint: aSemverConstraint,
Version: gps.NewVersion("1.0.0"),
Revision: gps.Revision("revxyz"),
},
wantDotStatus: []string{`[label="github.com/foo/bar\n1.0.0"];`},
wantJSONStatus: []string{`"Revision":"revxyz"`, `"Constraint":"1.2.3"`, `"Version":"1.0.0"`},
wantTableStatus: []string{`github.com/foo/bar 1.2.3 1.0.0 revxyz 0`},
},
}

for _, test := range tests {
var buf bytes.Buffer
t.Run(test.name, func(t *testing.T) {
var buf bytes.Buffer

out := &dotOutput{
p: &project,
w: &buf,
}
out.BasicHeader()
out.BasicLine(&test.status)
out.BasicFooter()
dotout := &dotOutput{
p: &project,
w: &buf,
}
dotout.BasicHeader()
dotout.BasicLine(&test.status)
dotout.BasicFooter()

if ok := strings.Contains(buf.String(), test.expected); !ok {
t.Fatalf("Did not find expected node label: \n\t(GOT) %v \n\t(WNT) %v", buf.String(), test.status)
}
for _, wantStatus := range test.wantDotStatus {
if ok := strings.Contains(buf.String(), wantStatus); !ok {
t.Errorf("Did not find expected node status: \n\t(GOT) %v \n\t(WNT) %v", buf.String(), wantStatus)
}
}

buf.Reset()

jsonout := &jsonOutput{w: &buf}

jsonout.BasicHeader()
jsonout.BasicLine(&test.status)
jsonout.BasicFooter()

for _, wantStatus := range test.wantJSONStatus {
if ok := strings.Contains(buf.String(), wantStatus); !ok {
t.Errorf("Did not find expected JSON status: \n\t(GOT) %v \n\t(WNT) %v", buf.String(), wantStatus)
}
}

buf.Reset()

tabw := tabwriter.NewWriter(&buf, 0, 4, 2, ' ', 0)

tableout := &tableOutput{w: tabw}

tableout.BasicHeader()
tableout.BasicLine(&test.status)
tableout.BasicFooter()

for _, wantStatus := range test.wantTableStatus {
if ok := strings.Contains(buf.String(), wantStatus); !ok {
t.Errorf("Did not find expected Table status: \n\t(GOT) %v \n\t(WNT) %v", buf.String(), wantStatus)
}
}
})
}
}

func TestBasicStatusGetConsolidatedConstraint(t *testing.T) {

aSemverConstraint, _ := gps.NewSemverConstraint("1.2.1")

testCases := []struct {
name string
basicStatus BasicStatus
wantConstraint string
}{
{
name: "empty BasicStatus",
basicStatus: BasicStatus{},
wantConstraint: "",
},
{
name: "BasicStatus with Any Constraint",
basicStatus: BasicStatus{
Constraint: gps.Any(),
},
wantConstraint: "*",
},
{
name: "BasicStatus with Semver Constraint",
basicStatus: BasicStatus{
Constraint: aSemverConstraint,
},
wantConstraint: "1.2.1",
},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
if tc.basicStatus.getConsolidatedConstraint() != tc.wantConstraint {
t.Errorf("unexpected consolidated constraint: \n\t(GOT) %v \n\t(WNT) %v", tc.basicStatus.getConsolidatedConstraint(), tc.wantConstraint)
}
})
}
}

func TestBasicStatusGetConsolidatedVersion(t *testing.T) {
testCases := []struct {
name string
basicStatus BasicStatus
wantVersion string
}{
{
name: "empty BasicStatus",
basicStatus: BasicStatus{},
wantVersion: "",
},
{
name: "BasicStatus with Version and Revision",
basicStatus: BasicStatus{
Version: gps.NewVersion("1.0.0"),
Revision: gps.Revision("revxyz"),
},
wantVersion: "1.0.0",
},
{
name: "BasicStatus with only Revision",
basicStatus: BasicStatus{
Revision: gps.Revision("revxyz"),
},
wantVersion: "revxyz",
},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
if tc.basicStatus.getConsolidatedVersion() != tc.wantVersion {
t.Errorf("unexpected consolidated version: \n\t(GOT) %v \n\t(WNT) %v", tc.basicStatus.getConsolidatedVersion(), tc.wantVersion)
}
})
}
}

0 comments on commit afb281e

Please sign in to comment.