urn_test.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package urn
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. )
  7. func TestUrn(t *testing.T) {
  8. for ii, tt := range tests {
  9. urn, ok := Parse(tt.in)
  10. if ok {
  11. require.True(t, tt.ok, herror(ii, tt))
  12. require.Equal(t, tt.obj.prefix, urn.prefix, herror(ii, tt))
  13. require.Equal(t, tt.obj.ID, urn.ID, herror(ii, tt))
  14. require.Equal(t, tt.obj.SS, urn.SS, herror(ii, tt))
  15. require.Equal(t, tt.str, urn.String(), herror(ii, tt))
  16. require.Equal(t, tt.norm, urn.Normalize().String(), herror(ii, tt))
  17. } else {
  18. require.False(t, tt.ok, herror(ii, tt))
  19. require.Empty(t, urn, herror(ii, tt))
  20. }
  21. }
  22. }
  23. func TestLexicalEquivalence(t *testing.T) {
  24. for ii, tt := range equivalenceTests {
  25. urnlx, oklx := Parse(tt.lx)
  26. urnrx, okrx := Parse(tt.rx)
  27. if oklx && okrx {
  28. require.True(t, urnlx.Equal(urnlx))
  29. require.True(t, urnrx.Equal(urnrx))
  30. if tt.eq {
  31. require.True(t, urnlx.Equal(urnrx), ierror(ii))
  32. require.True(t, urnrx.Equal(urnlx), ierror(ii))
  33. } else {
  34. require.False(t, urnlx.Equal(urnrx), ierror(ii))
  35. require.False(t, urnrx.Equal(urnlx), ierror(ii))
  36. }
  37. } else {
  38. t.Log("Something wrong in the testing table ...")
  39. }
  40. }
  41. }
  42. func TestDefaultPrefixWhenString(t *testing.T) {
  43. u := &URN{
  44. ID: "pippo",
  45. SS: "pluto",
  46. }
  47. require.Equal(t, "urn:pippo:pluto", u.String())
  48. }
  49. func BenchmarkParse(b *testing.B) {
  50. for ii, tt := range tests {
  51. outcome := (map[bool]string{true: "ok", false: "no"})[tt.ok]
  52. b.Run(
  53. fmt.Sprintf("%s/%02d/%s%0*s/", outcome, ii, tt.in, len(tt.in)-80, " "),
  54. func(b *testing.B) {
  55. for i := 0; i < b.N; i++ {
  56. Parse(tt.in)
  57. }
  58. },
  59. )
  60. }
  61. }