| // Copyright 2015 The Vanadium 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 main |
| |
| import ( |
| "fmt" |
| "testing" |
| ) |
| |
| type testCase struct { |
| args []string |
| expectedError error |
| expectedHostA string |
| expectedHostB string |
| expectedUserA string |
| expectedUserB string |
| } |
| |
| func TestParseUserAndHost(t *testing.T) { |
| testCases := []testCase{ |
| // Valid arguments: testing two different users. |
| testCase{ |
| args: []string{"jiri@home", "vanadium@work"}, |
| expectedError: nil, |
| expectedHostA: "home", |
| expectedHostB: "work", |
| expectedUserA: "jiri", |
| expectedUserB: "vanadium", |
| }, |
| // Valid arguments: testing the default for the second user. |
| testCase{ |
| args: []string{"jiri@home", "work"}, |
| expectedError: nil, |
| expectedHostA: "home", |
| expectedHostB: "work", |
| expectedUserA: "jiri", |
| expectedUserB: "jiri", |
| }, |
| // Invalid arguments: missing the first user. |
| testCase{ |
| args: []string{"home", ""}, |
| expectedError: fmt.Errorf("failed to parse user: home"), |
| expectedHostA: "", |
| expectedHostB: "", |
| expectedUserA: "", |
| expectedUserB: "", |
| }, |
| // Invalid arguments: incorrent number of arguments. |
| testCase{ |
| args: []string{"jiri@home"}, |
| expectedError: fmt.Errorf("unexpected number of arguments: got 1, want 2"), |
| expectedHostA: "", |
| expectedHostB: "", |
| expectedUserA: "", |
| expectedUserB: "", |
| }, |
| // Invalid arguments: more than one '@' character. |
| testCase{ |
| args: []string{"jiri@home@office", "vanadium@work"}, |
| expectedError: fmt.Errorf("unexpected length of [jiri home office]: expected at most 2"), |
| expectedHostA: "", |
| expectedHostB: "", |
| expectedUserA: "", |
| expectedUserB: "", |
| }, |
| } |
| |
| for _, test := range testCases { |
| userA, hostA, userB, hostB, err := parseUserAndHost(test.args) |
| if test.expectedError == nil && err != nil { |
| t.Fatalf("parseUserAndHost(%v) failed: %v", test.args, err) |
| } |
| if test.expectedError != nil && err == nil { |
| t.Fatalf("parseUserAndHost(%v) did not fail when it should", test.args) |
| } |
| if test.expectedError != nil && err != nil { |
| if got, want := err.Error(), test.expectedError.Error(); got != want { |
| t.Fatalf("unexpected error: got %q, want %q", got, want) |
| } |
| } |
| if got, want := userA, test.expectedUserA; got != want { |
| t.Fatalf("unexpected user: got %q, want %q", got, want) |
| } |
| if got, want := userB, test.expectedUserB; got != want { |
| t.Fatalf("unexpected user: got %q, want %q", got, want) |
| } |
| if got, want := hostA, test.expectedHostA; got != want { |
| t.Fatalf("unexpected host: got %q, want %q", got, want) |
| } |
| if got, want := hostB, test.expectedHostB; got != want { |
| t.Fatalf("unexpected host: got %q, want %q", got, want) |
| } |
| } |
| } |