Skip to content
Snippets Groups Projects
Select Git revision
  • fda9f10f23ea07ed0e5d1c6a33f6c2ce392d9942
  • master default protected
  • 1.31
  • 4.38.2
  • 4.38.1
  • 4.38.0
  • 4.37.2
  • 4.37.1
  • 4.37.0
  • 4.36.0
  • 4.35.0
  • 4.34.1
  • 4.34.0
  • 4.33.1
  • 4.33.0
  • 4.32.2
  • 4.32.1
  • 4.32.0
  • 4.31.0
  • 4.30.1
  • 4.30.0
  • 4.29.1
  • 4.29.0
23 results

isarray.mjs

Blame
  • helpers_test.go 3.48 KiB
    package httpbin
    
    import (
    	"fmt"
    	"io"
    	"reflect"
    	"testing"
    	"time"
    )
    
    func assertNil(t *testing.T, v interface{}) {
    	if v != nil {
    		t.Errorf("expected nil, got %#v", v)
    	}
    }
    
    func assertIntEqual(t *testing.T, a, b int) {
    	if a != b {
    		t.Errorf("expected %v == %v", a, b)
    	}
    }
    
    func assertBytesEqual(t *testing.T, a, b []byte) {
    	if !reflect.DeepEqual(a, b) {
    		t.Errorf("expected %v == %v", a, b)
    	}
    }
    
    func assertError(t *testing.T, got, expected error) {
    	if got != expected {
    		t.Errorf("expected error %v, got %v", expected, got)
    	}
    }
    
    func TestParseDuration(t *testing.T) {
    	var okTests = []struct {
    		input    string
    		expected time.Duration
    	}{
    		// go-style durations
    		{"1s", time.Second},
    		{"500ms", 500 * time.Millisecond},
    		{"1.5h", 90 * time.Minute},
    		{"-10m", -10 * time.Minute},
    
    		// or floating point seconds
    		{"1", time.Second},
    		{"0.25", 250 * time.Millisecond},
    		{"-25", -25 * time.Second},
    		{"-2.5", -2500 * time.Millisecond},
    	}
    	for _, test := range okTests {
    		t.Run(fmt.Sprintf("ok/%s", test.input), func(t *testing.T) {
    			result, err := parseDuration(test.input)
    			if err != nil {
    				t.Fatalf("unexpected error parsing duration %v: %s", test.input, err)
    			}
    			if result != test.expected {
    				t.Fatalf("expected %s, got %s", test.expected, result)
    			}
    		})
    	}
    
    	var badTests = []struct {
    		input string
    	}{
    		{"foo"},
    		{"100foo"},
    		{"1/1"},
    		{"1.5.foo"},
    		{"0xFF"},
    	}
    	for _, test := range badTests {
    		t.Run(fmt.Sprintf("bad/%s", test.input), func(t *testing.T) {
    			_, err := parseDuration(test.input)
    			if err == nil {
    				t.Fatalf("expected error parsing %v", test.input)
    			}
    		})
    	}
    }
    
    func TestSyntheticByteStream(t *testing.T) {
    	factory := func(offset int64) byte {
    		return byte(offset)
    	}
    
    	t.Run("read", func(t *testing.T) {
    		s := newSyntheticByteStream(10, factory)
    
    		// read first half
    		p := make([]byte, 5)
    		count, err := s.Read(p)
    		assertNil(t, err)
    		assertIntEqual(t, count, 5)
    		assertBytesEqual(t, p, []byte{0, 1, 2, 3, 4})
    
    		// read second half
    		p = make([]byte, 5)
    		count, err = s.Read(p)
    		assertError(t, err, io.EOF)
    		assertIntEqual(t, count, 5)
    		assertBytesEqual(t, p, []byte{5, 6, 7, 8, 9})
    
    		// can't read any more
    		p = make([]byte, 5)
    		count, err = s.Read(p)
    		assertError(t, err, io.EOF)
    		assertIntEqual(t, count, 0)
    		assertBytesEqual(t, p, []byte{0, 0, 0, 0, 0})
    	})
    
    	t.Run("read into too-large buffer", func(t *testing.T) {
    		s := newSyntheticByteStream(5, factory)
    		p := make([]byte, 10)
    		count, err := s.Read(p)
    		assertError(t, err, io.EOF)
    		assertIntEqual(t, count, 5)
    		assertBytesEqual(t, p, []byte{0, 1, 2, 3, 4, 0, 0, 0, 0, 0})
    	})
    
    	t.Run("seek", func(t *testing.T) {
    		s := newSyntheticByteStream(100, factory)
    
    		p := make([]byte, 5)
    		s.Seek(10, io.SeekStart)
    		count, err := s.Read(p)
    		assertNil(t, err)
    		assertIntEqual(t, count, 5)
    		assertBytesEqual(t, p, []byte{10, 11, 12, 13, 14})
    
    		s.Seek(10, io.SeekCurrent)
    		count, err = s.Read(p)
    		assertNil(t, err)
    		assertIntEqual(t, count, 5)
    		assertBytesEqual(t, p, []byte{25, 26, 27, 28, 29})
    
    		s.Seek(10, io.SeekEnd)
    		count, err = s.Read(p)
    		assertNil(t, err)
    		assertIntEqual(t, count, 5)
    		assertBytesEqual(t, p, []byte{90, 91, 92, 93, 94})
    
    		// invalid whence
    		_, err = s.Seek(10, 666)
    		if err.Error() != "Seek: invalid whence" {
    			t.Errorf("Expected \"Seek: invalid whence\", got %#v", err.Error())
    		}
    
    		// invalid offset
    		_, err = s.Seek(-10, io.SeekStart)
    		if err.Error() != "Seek: invalid offset" {
    			t.Errorf("Expected \"Seek: invalid offset\", got %#v", err.Error())
    		}
    	})
    }