package furcadia import ( "errors" "testing" ) func TestGetShortName(t *testing.T) { check := func(displayName, expectedShortname string) { short := GetShortName(displayName) if short != expectedShortname { t.Errorf("GetShortName('%v') -> '%v' (expected: '%v')", displayName, short, expectedShortname) } } check("ArTeX", "artex") check("Ice|Dragon", "icedragon") check("123_arte_X", "123artex") check("|~!@#$%^&*()_+<>[]{}:;'\",./?artex ", "artex") } func TestGetShortDreamURL(t *testing.T) { check := func(dreamURL, expectedShortURL string) { short, err := GetShortDreamURL(dreamURL) if err != nil { t.Errorf("GetShortDreamURL('%v') -> unexpected error %T (%v)", dreamURL, err, err) } if short != expectedShortURL { t.Errorf("GetShortDreamURL('%v') -> '%v' (expected: '%v')", dreamURL, short, expectedShortURL) } } check("furc://ice_dragon:some-dream-name/128", "icedragon:somedreamname") check("furc://artex", "artex") check("furc://artex:", "artex") check("furc://artex/128", "artex") check("furc://name:", "name") checkErr := func(dreamURL string, expectedErr error) { _, err := GetShortDreamURL(dreamURL) if !errors.Is(err, expectedErr) { t.Errorf("GetShortDreamURL('%v') -> unexpected error %T (%v)", dreamURL, err, err) } } checkErr("furc://", ErrInvalidDreamURL) checkErr("furc:///", ErrInvalidDreamURL) checkErr("furc://:", ErrInvalidDreamURL) checkErr("furc://:/", ErrInvalidDreamURL) checkErr("furc://:nouploader", ErrInvalidDreamURL) checkErr("furc://:nouploader/", ErrInvalidDreamURL) checkErr("furc://artex::", ErrInvalidDreamURL) } func TestGetShortDreamURLFromName(t *testing.T) { check := func(uploader, name, expected string) { short := GetShortDreamURLFromName(uploader, name) if short != expected { t.Errorf("GetShortDreamURLFromName('%v', '%v') -> '%v' (expected: '%v')", uploader, name, short, expected) } } check("Ice Dragon", "", "icedragon") check("Ice Dragon", "Some name here", "icedragon:somenamehere") check("icedragon", "some_name_here", "icedragon:somenamehere") check("", "Illegal but possible", ":illegalbutpossible") }