code.oscarkilo.com/okg/who/username_test.go

..
username.go
username_test.go
who.go
who_test.go
package who

import "testing"

func TestIsValidUsername(t *testing.T) {
  check := func(in string, want bool) {
    t.Helper()
    if got := IsValidUsername(in); got != want {
      t.Errorf("IsValidUsername(%q): got %v, want %v",
        in, got, want)
    }
  }
  check("alice", true)
  check("a", true)
  check("a-b", true)
  check("a_b", true)
  check("a123", true)
  check("", false)
  check("Alice", false)        // uppercase
  check("1alice", false)       // starts with digit
  check("alice.bob", false)    // dot (sub-username)
  check("alice@bob", false)    // disallowed char
  check("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", false) // 33 chars
}

func TestIsSubUsername(t *testing.T) {
  check := func(in string, want bool) {
    t.Helper()
    if got := IsSubUsername(in); got != want {
      t.Errorf("IsSubUsername(%q): got %v, want %v",
        in, got, want)
    }
  }
  check("alice.bob", true)
  check("alice", false)
  check("alice.bob.charlie", false) // two dots
  check(".bob", false)
  check("alice.", false)
}

func TestParentUsername(t *testing.T) {
  check := func(in, want string) {
    t.Helper()
    if got := ParentUsername(in); got != want {
      t.Errorf("ParentUsername(%q): got %q, want %q",
        in, got, want)
    }
  }
  check("alice.bob", "alice")
  check("alice", "")
}