OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / github.com / magiconair / properties / load_test.go
diff --git a/vendor/github.com/magiconair/properties/load_test.go b/vendor/github.com/magiconair/properties/load_test.go
new file mode 100644 (file)
index 0000000..d8770c8
--- /dev/null
@@ -0,0 +1,231 @@
+// Copyright 2017 Frank Schroeder. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package properties
+
+import (
+       "fmt"
+       "io/ioutil"
+       "net/http"
+       "net/http/httptest"
+       "os"
+       "strings"
+       "testing"
+
+       "github.com/magiconair/properties/assert"
+)
+
+func TestLoadFailsWithNotExistingFile(t *testing.T) {
+       _, err := LoadFile("doesnotexist.properties", ISO_8859_1)
+       assert.Equal(t, err != nil, true, "")
+       assert.Matches(t, err.Error(), "open.*no such file or directory")
+}
+
+func TestLoadFilesFailsOnNotExistingFile(t *testing.T) {
+       _, err := LoadFile("doesnotexist.properties", ISO_8859_1)
+       assert.Equal(t, err != nil, true, "")
+       assert.Matches(t, err.Error(), "open.*no such file or directory")
+}
+
+func TestLoadFilesDoesNotFailOnNotExistingFileAndIgnoreMissing(t *testing.T) {
+       p, err := LoadFiles([]string{"doesnotexist.properties"}, ISO_8859_1, true)
+       assert.Equal(t, err, nil)
+       assert.Equal(t, p.Len(), 0)
+}
+
+func TestLoadString(t *testing.T) {
+       x := "key=äüö"
+       p1 := MustLoadString(x)
+       p2 := must(Load([]byte(x), UTF8))
+       assert.Equal(t, p1, p2)
+}
+
+func TestLoadMap(t *testing.T) {
+       // LoadMap does not guarantee the same import order
+       // of keys every time since map access is randomized.
+       // Therefore, we need to compare the generated maps.
+       m := map[string]string{"key": "value", "abc": "def"}
+       assert.Equal(t, LoadMap(m).Map(), m)
+}
+
+func TestLoadFile(t *testing.T) {
+       tf := make(tempFiles, 0)
+       defer tf.removeAll()
+
+       filename := tf.makeFile("key=value")
+       p := MustLoadFile(filename, ISO_8859_1)
+
+       assert.Equal(t, p.Len(), 1)
+       assertKeyValues(t, "", p, "key", "value")
+}
+
+func TestLoadFiles(t *testing.T) {
+       tf := make(tempFiles, 0)
+       defer tf.removeAll()
+
+       filename := tf.makeFile("key=value")
+       filename2 := tf.makeFile("key2=value2")
+       p := MustLoadFiles([]string{filename, filename2}, ISO_8859_1, false)
+       assertKeyValues(t, "", p, "key", "value", "key2", "value2")
+}
+
+func TestLoadExpandedFile(t *testing.T) {
+       tf := make(tempFiles, 0)
+       defer tf.removeAll()
+
+       if err := os.Setenv("_VARX", "some-value"); err != nil {
+               t.Fatal(err)
+       }
+       filename := tf.makeFilePrefix(os.Getenv("_VARX"), "key=value")
+       filename = strings.Replace(filename, os.Getenv("_VARX"), "${_VARX}", -1)
+       p := MustLoadFile(filename, ISO_8859_1)
+       assertKeyValues(t, "", p, "key", "value")
+}
+
+func TestLoadFilesAndIgnoreMissing(t *testing.T) {
+       tf := make(tempFiles, 0)
+       defer tf.removeAll()
+
+       filename := tf.makeFile("key=value")
+       filename2 := tf.makeFile("key2=value2")
+       p := MustLoadFiles([]string{filename, filename + "foo", filename2, filename2 + "foo"}, ISO_8859_1, true)
+       assertKeyValues(t, "", p, "key", "value", "key2", "value2")
+}
+
+func TestLoadURL(t *testing.T) {
+       srv := testServer()
+       defer srv.Close()
+       p := MustLoadURL(srv.URL + "/a")
+       assertKeyValues(t, "", p, "key", "value")
+}
+
+func TestLoadURLs(t *testing.T) {
+       srv := testServer()
+       defer srv.Close()
+       p := MustLoadURLs([]string{srv.URL + "/a", srv.URL + "/b"}, false)
+       assertKeyValues(t, "", p, "key", "value", "key2", "value2")
+}
+
+func TestLoadURLsAndFailMissing(t *testing.T) {
+       srv := testServer()
+       defer srv.Close()
+       p, err := LoadURLs([]string{srv.URL + "/a", srv.URL + "/c"}, false)
+       assert.Equal(t, p, (*Properties)(nil))
+       assert.Matches(t, err.Error(), ".*returned 404.*")
+}
+
+func TestLoadURLsAndIgnoreMissing(t *testing.T) {
+       srv := testServer()
+       defer srv.Close()
+       p := MustLoadURLs([]string{srv.URL + "/a", srv.URL + "/b", srv.URL + "/c"}, true)
+       assertKeyValues(t, "", p, "key", "value", "key2", "value2")
+}
+
+func TestLoadURLEncoding(t *testing.T) {
+       srv := testServer()
+       defer srv.Close()
+
+       uris := []string{"/none", "/utf8", "/plain", "/latin1", "/iso88591"}
+       for i, uri := range uris {
+               p := MustLoadURL(srv.URL + uri)
+               assert.Equal(t, p.GetString("key", ""), "äöü", fmt.Sprintf("%d", i))
+       }
+}
+
+func TestLoadURLFailInvalidEncoding(t *testing.T) {
+       srv := testServer()
+       defer srv.Close()
+
+       p, err := LoadURL(srv.URL + "/json")
+       assert.Equal(t, p, (*Properties)(nil))
+       assert.Matches(t, err.Error(), ".*invalid content type.*")
+}
+
+func TestLoadAll(t *testing.T) {
+       tf := make(tempFiles, 0)
+       defer tf.removeAll()
+
+       filename := tf.makeFile("key=value")
+       filename2 := tf.makeFile("key2=value3")
+       filename3 := tf.makeFile("key=value4")
+       srv := testServer()
+       defer srv.Close()
+       p := MustLoadAll([]string{filename, filename2, srv.URL + "/a", srv.URL + "/b", filename3}, UTF8, false)
+       assertKeyValues(t, "", p, "key", "value4", "key2", "value2")
+}
+
+type tempFiles []string
+
+func (tf *tempFiles) removeAll() {
+       for _, path := range *tf {
+               err := os.Remove(path)
+               if err != nil {
+                       fmt.Printf("os.Remove: %v", err)
+               }
+       }
+}
+
+func (tf *tempFiles) makeFile(data string) string {
+       return tf.makeFilePrefix("properties", data)
+}
+
+func (tf *tempFiles) makeFilePrefix(prefix, data string) string {
+       f, err := ioutil.TempFile("", prefix)
+       if err != nil {
+               panic("ioutil.TempFile: " + err.Error())
+       }
+
+       // remember the temp file so that we can remove it later
+       *tf = append(*tf, f.Name())
+
+       n, err := fmt.Fprint(f, data)
+       if err != nil {
+               panic("fmt.Fprintln: " + err.Error())
+       }
+       if n != len(data) {
+               panic(fmt.Sprintf("Data size mismatch. expected=%d wrote=%d\n", len(data), n))
+       }
+
+       err = f.Close()
+       if err != nil {
+               panic("f.Close: " + err.Error())
+       }
+
+       return f.Name()
+}
+
+func testServer() *httptest.Server {
+       return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+               send := func(data []byte, contentType string) {
+                       w.Header().Set("Content-Type", contentType)
+                       if _, err := w.Write(data); err != nil {
+                               panic(err)
+                       }
+               }
+
+               utf8 := []byte("key=äöü")
+               iso88591 := []byte{0x6b, 0x65, 0x79, 0x3d, 0xe4, 0xf6, 0xfc} // key=äöü
+
+               switch r.RequestURI {
+               case "/a":
+                       send([]byte("key=value"), "")
+               case "/b":
+                       send([]byte("key2=value2"), "")
+               case "/none":
+                       send(utf8, "")
+               case "/utf8":
+                       send(utf8, "text/plain; charset=utf-8")
+               case "/json":
+                       send(utf8, "application/json; charset=utf-8")
+               case "/plain":
+                       send(iso88591, "text/plain")
+               case "/latin1":
+                       send(iso88591, "text/plain; charset=latin1")
+               case "/iso88591":
+                       send(iso88591, "text/plain; charset=iso-8859-1")
+               default:
+                       w.WriteHeader(404)
+               }
+       }))
+}