aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/tdewolff/minify/common_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tdewolff/minify/common_test.go')
-rw-r--r--vendor/github.com/tdewolff/minify/common_test.go237
1 files changed, 237 insertions, 0 deletions
diff --git a/vendor/github.com/tdewolff/minify/common_test.go b/vendor/github.com/tdewolff/minify/common_test.go
new file mode 100644
index 0000000..823e4e2
--- /dev/null
+++ b/vendor/github.com/tdewolff/minify/common_test.go
@@ -0,0 +1,237 @@
+package minify // import "github.com/tdewolff/minify"
+
+import (
+ "fmt"
+ "io"
+ "io/ioutil"
+ "math"
+ "math/rand"
+ "strconv"
+ "testing"
+
+ "github.com/tdewolff/test"
+)
+
+func TestContentType(t *testing.T) {
+ contentTypeTests := []struct {
+ contentType string
+ expected string
+ }{
+ {"text/html", "text/html"},
+ {"text/html; charset=UTF-8", "text/html;charset=utf-8"},
+ {"text/html; charset=UTF-8 ; param = \" ; \"", "text/html;charset=utf-8;param=\" ; \""},
+ {"text/html, text/css", "text/html,text/css"},
+ }
+ for _, tt := range contentTypeTests {
+ t.Run(tt.contentType, func(t *testing.T) {
+ contentType := ContentType([]byte(tt.contentType))
+ test.Minify(t, tt.contentType, nil, string(contentType), tt.expected)
+ })
+ }
+}
+
+func TestDataURI(t *testing.T) {
+ dataURITests := []struct {
+ dataURI string
+ expected string
+ }{
+ {"data:,text", "data:,text"},
+ {"data:text/plain;charset=us-ascii,text", "data:,text"},
+ {"data:TEXT/PLAIN;CHARSET=US-ASCII,text", "data:,text"},
+ {"data:text/plain;charset=us-asciiz,text", "data:;charset=us-asciiz,text"},
+ {"data:;base64,dGV4dA==", "data:,text"},
+ {"data:text/svg+xml;base64,PT09PT09", "data:text/svg+xml;base64,PT09PT09"},
+ {"data:text/xml;version=2.0,content", "data:text/xml;version=2.0,content"},
+ {"data:text/xml; version = 2.0,content", "data:text/xml;version=2.0,content"},
+ {"data:,=====", "data:,%3D%3D%3D%3D%3D"},
+ {"data:,======", "data:;base64,PT09PT09"},
+ {"data:text/x,<?x?>", "data:text/x,%3C%3Fx%3F%3E"},
+ }
+ m := New()
+ m.AddFunc("text/x", func(_ *M, w io.Writer, r io.Reader, _ map[string]string) error {
+ b, _ := ioutil.ReadAll(r)
+ test.String(t, string(b), "<?x?>")
+ w.Write(b)
+ return nil
+ })
+ for _, tt := range dataURITests {
+ t.Run(tt.dataURI, func(t *testing.T) {
+ dataURI := DataURI(m, []byte(tt.dataURI))
+ test.Minify(t, tt.dataURI, nil, string(dataURI), tt.expected)
+ })
+ }
+}
+
+func TestNumber(t *testing.T) {
+ numberTests := []struct {
+ number string
+ expected string
+ }{
+ {"0", "0"},
+ {".0", "0"},
+ {"1.0", "1"},
+ {"0.1", ".1"},
+ {"+1", "1"},
+ {"-1", "-1"},
+ {"-0.1", "-.1"},
+ {"10", "10"},
+ {"100", "100"},
+ {"1000", "1e3"},
+ {"0.001", ".001"},
+ {"0.0001", "1e-4"},
+ {"100e1", "1e3"},
+ {"1.1e+1", "11"},
+ {"1.1e6", "11e5"},
+ {"0.252", ".252"},
+ {"1.252", "1.252"},
+ {"-1.252", "-1.252"},
+ {"0.075", ".075"},
+ {"789012345678901234567890123456789e9234567890123456789", "789012345678901234567890123456789e9234567890123456789"},
+ {".000100009", "100009e-9"},
+ {".0001000009", ".0001000009"},
+ {".0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009", ".0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009"},
+ {"E\x1f", "E\x1f"}, // fuzz
+ {"1e9223372036854775807", "1e9223372036854775807"},
+ {"11e9223372036854775807", "11e9223372036854775807"},
+ {".01e-9223372036854775808", ".01e-9223372036854775808"},
+ {".011e-9223372036854775808", ".011e-9223372036854775808"},
+
+ {".12345e8", "12345e3"},
+ {".12345e7", "1234500"},
+ {".12345e6", "123450"},
+ {".12345e5", "12345"},
+ {".012345e6", "12345"},
+ {".12345e4", "1234.5"},
+ {"-.12345e4", "-1234.5"},
+ {".12345e0", ".12345"},
+ {".12345e-1", ".012345"},
+ {".12345e-2", ".0012345"},
+ {".12345e-3", "12345e-8"},
+ {".12345e-4", "12345e-9"},
+ {".12345e-5", "12345e-10"},
+
+ {".123456e-3", "123456e-9"},
+ {".123456e-2", ".00123456"},
+ {".1234567e-4", "1234567e-11"},
+ {".1234567e-3", ".0001234567"},
+
+ {"12345678e-1", "1234567.8"},
+ {"72.e-3", ".072"},
+ {"7640e-2", "76.4"},
+ {"10.e-3", ".01"},
+ {".0319e3", "31.9"},
+ {"39.7e-2", ".397"},
+ {"39.7e-3", ".0397"},
+ {".01e1", ".1"},
+ {".001e1", ".01"},
+ {"39.7e-5", "397e-6"},
+ }
+ for _, tt := range numberTests {
+ t.Run(tt.number, func(t *testing.T) {
+ number := Number([]byte(tt.number), -1)
+ test.Minify(t, tt.number, nil, string(number), tt.expected)
+ })
+ }
+}
+
+func TestNumberTruncate(t *testing.T) {
+ numberTests := []struct {
+ number string
+ truncate int
+ expected string
+ }{
+ {"0.1", 1, ".1"},
+ {"0.0001", 1, "1e-4"},
+ {"0.111", 1, ".1"},
+ {"0.111", 0, "0"},
+ {"0.075", 1, ".1"},
+ {"0.025", 1, "0"},
+ {"9.99", 1, "10"},
+ {"8.88", 1, "8.9"},
+ {"8.88", 0, "9"},
+ {"8.00", 0, "8"},
+ {".88", 0, "1"},
+ {"1.234", 1, "1.2"},
+ {"33.33", 0, "33"},
+ {"29.666", 0, "30"},
+ {"1.51", 1, "1.5"},
+ }
+ for _, tt := range numberTests {
+ t.Run(tt.number, func(t *testing.T) {
+ number := Number([]byte(tt.number), tt.truncate)
+ test.Minify(t, tt.number, nil, string(number), tt.expected, "truncate to", tt.truncate)
+ })
+ }
+}
+
+func TestNumberRandom(t *testing.T) {
+ N := int(1e4)
+ if testing.Short() {
+ N = 0
+ }
+ for i := 0; i < N; i++ {
+ b := RandNumBytes()
+ f, _ := strconv.ParseFloat(string(b), 64)
+
+ b2 := make([]byte, len(b))
+ copy(b2, b)
+ b2 = Number(b2, -1)
+ f2, _ := strconv.ParseFloat(string(b2), 64)
+ if math.Abs(f-f2) > 1e-6 {
+ fmt.Println("Bad:", f, "!=", f2, "in", string(b), "to", string(b2))
+ }
+ }
+}
+
+////////////////
+
+var n = 100
+var numbers [][]byte
+
+func TestMain(t *testing.T) {
+ numbers = make([][]byte, 0, n)
+ for j := 0; j < n; j++ {
+ numbers = append(numbers, RandNumBytes())
+ }
+}
+
+func RandNumBytes() []byte {
+ var b []byte
+ n := rand.Int() % 10
+ for i := 0; i < n; i++ {
+ b = append(b, byte(rand.Int()%10)+'0')
+ }
+ if rand.Int()%2 == 0 {
+ b = append(b, '.')
+ n = rand.Int() % 10
+ for i := 0; i < n; i++ {
+ b = append(b, byte(rand.Int()%10)+'0')
+ }
+ }
+ if rand.Int()%2 == 0 {
+ b = append(b, 'e')
+ if rand.Int()%2 == 0 {
+ b = append(b, '-')
+ }
+ n = 1 + rand.Int()%4
+ for i := 0; i < n; i++ {
+ b = append(b, byte(rand.Int()%10)+'0')
+ }
+ }
+ return b
+}
+
+func BenchmarkNumber(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ for j := 0; j < n; j++ {
+ Number(numbers[j], -1)
+ }
+ }
+}
+
+func BenchmarkNumber2(b *testing.B) {
+ num := []byte("1.2345e-6")
+ for i := 0; i < b.N; i++ {
+ Number(num, -1)
+ }
+}