stem_ext_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package contentdisposition
  2. import (
  3. "net/url"
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. )
  7. func TestStemExt(t *testing.T) {
  8. // Test cases for stem and ext detection
  9. tests := []struct {
  10. name string
  11. url string
  12. stem string
  13. ext string
  14. fn func(StemExt) (string, string)
  15. }{
  16. {
  17. name: "BasicURL",
  18. url: "http://example.com/test.jpg",
  19. stem: "test",
  20. ext: ".jpg",
  21. fn: func(se StemExt) (string, string) {
  22. return se.StemExt()
  23. },
  24. },
  25. {
  26. name: "EmptyFilename",
  27. url: "http://example.com/path/to/",
  28. stem: "",
  29. ext: "",
  30. fn: func(se StemExt) (string, string) {
  31. return se.StemExt()
  32. },
  33. },
  34. {
  35. name: "EmptyFilenameWithContentType",
  36. url: "http://example.com/path/to/",
  37. stem: "",
  38. ext: ".png",
  39. fn: func(se StemExt) (string, string) {
  40. return (&se).SetExtFromContentTypeIfEmpty("image/png").StemExt()
  41. },
  42. },
  43. {
  44. name: "EmptyFilenameWithContentTypeAndOverride",
  45. url: "http://example.com/path/to/",
  46. stem: "example",
  47. ext: ".png",
  48. fn: func(se StemExt) (string, string) {
  49. return (&se).OverrideStem("example").SetExtFromContentTypeIfEmpty("image/png").StemExt()
  50. },
  51. },
  52. {
  53. name: "EmptyFilenameWithOverride",
  54. url: "http://example.com/path/to/",
  55. stem: "example",
  56. ext: ".jpg",
  57. fn: func(se StemExt) (string, string) {
  58. return (&se).OverrideStem("example").OverrideExt(".jpg").StemExt()
  59. },
  60. },
  61. {
  62. name: "PresentFilenameWithOverride",
  63. url: "http://example.com/path/to/face",
  64. stem: "face",
  65. ext: ".jpg",
  66. fn: func(se StemExt) (string, string) {
  67. return (&se).OverrideExt(".jpg").StemExt()
  68. },
  69. },
  70. {
  71. name: "PresentFilenameWithOverride",
  72. url: "http://example.com/path/to/123",
  73. stem: "face",
  74. ext: ".jpg",
  75. fn: func(se StemExt) (string, string) {
  76. return (&se).OverrideStem("face").OverrideExt(".jpg").StemExt()
  77. },
  78. },
  79. {
  80. name: "EmptyFilenameWithFallback",
  81. url: "http://example.com/path/to/",
  82. stem: "image",
  83. ext: ".png",
  84. fn: func(se StemExt) (string, string) {
  85. return (&se).SetExtFromContentTypeIfEmpty("image/png").StemExtWithFallback()
  86. },
  87. },
  88. }
  89. for _, tc := range tests {
  90. t.Run(tc.name, func(t *testing.T) {
  91. u, err := url.Parse(tc.url)
  92. require.NoError(t, err)
  93. se := FromURL(u)
  94. stem, ext := tc.fn(se)
  95. require.Equal(t, tc.stem, stem)
  96. require.Equal(t, tc.ext, ext)
  97. })
  98. }
  99. }
  100. func BenchmarkFromURL(b *testing.B) {
  101. u, _ := url.Parse("http://example.com/path/to/test.jpg")
  102. b.ResetTimer()
  103. for i := 0; i < b.N; i++ {
  104. se := FromURL(u)
  105. _, _ = se.StemExt()
  106. }
  107. }
  108. func BenchmarkMethodChaining(b *testing.B) {
  109. u, _ := url.Parse("http://example.com/path/to/")
  110. b.ResetTimer()
  111. for i := 0; i < b.N; i++ {
  112. se := FromURL(u)
  113. (&se).SetExtFromContentTypeIfEmpty("image/png").OverrideStem("example")
  114. _, _ = se.StemExtWithFallback()
  115. }
  116. }