diff --git a/gen_testdata.go b/gen_testdata.go new file mode 100644 index 0000000000000000000000000000000000000000..062497b8bfcaee6e6865dcf2b708fb1335a06b9e --- /dev/null +++ b/gen_testdata.go @@ -0,0 +1,57 @@ +// +build ignore + +// generates clones the utf-8 tests data to the other +// unicode encodings and adds BOM variants of each. +package main + +import ( + "io/ioutil" + "log" + "os" + "path/filepath" + + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/unicode" +) + + +func main() { + var xforms = []struct { + dir, bom string + enc encoding.Encoding + } { + { "testdata/utf-16be", "\xFE\xFF", unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM) }, + { "testdata/utf-16le", "\xFF\xFE", unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM) }, + } + + paths, _ := filepath.Glob("testdata/utf-8/*") + for _, p := range paths { + src, err := ioutil.ReadFile(p) + if err != nil { + log.Fatal(err) + } + + write("testdata/utf-8_bom", p, "\xEF\xBB\xBF", src) + for _, xform := range xforms { + dst, err := xform.enc.NewEncoder().Bytes(src) + if err != nil { + log.Fatal(err) + } + write(xform.dir, p, "", dst) + write(xform.dir + "_bom", p, xform.bom, dst) + } + } +} + +func write(dir, orig, bom string, buf []byte) { + f, err := os.Create(filepath.Join(dir, filepath.Base(orig))) + if err != nil { + log.Fatal(err) + } + if _, err = f.Write([]byte(bom)); err != nil { + log.Fatal(err) + } + if _, err = f.Write(buf); err != nil { + log.Fatal(err) + } +} diff --git a/main_test.go b/main_test.go index b4475ffec1c117fc4d0dae147d3b724c09b905a4..878fe8b1c263e96df5d4a781a7b4b3380685c7b3 100644 --- a/main_test.go +++ b/main_test.go @@ -9,61 +9,61 @@ import ( func TestMain(t *testing.T) { tests := []struct { - in string - out []string + in string + out []string exit int - } { + }{ { - "-s testdata/schema.yml testdata/data-pass.yml", - []string{"testdata/data-pass.yml: pass"}, + "-s testdata/utf-8/schema.yml testdata/utf-8/data-pass.yml", + []string{"testdata/utf-8/data-pass.yml: pass"}, 0, }, { - "-s testdata/schema.json testdata/data-pass.yml", - []string{"testdata/data-pass.yml: pass"}, + "-s testdata/utf-8/schema.json testdata/utf-8/data-pass.yml", + []string{"testdata/utf-8/data-pass.yml: pass"}, 0, }, { - "-s testdata/schema.json testdata/data-pass.json", - []string{"testdata/data-pass.json: pass"}, + "-s testdata/utf-8/schema.json testdata/utf-8/data-pass.json", + []string{"testdata/utf-8/data-pass.json: pass"}, 0, }, { - "-s testdata/schema.yml testdata/data-pass.json", - []string{"testdata/data-pass.json: pass"}, + "-s testdata/utf-8/schema.yml testdata/utf-8/data-pass.json", + []string{"testdata/utf-8/data-pass.json: pass"}, 0, }, { - "-q -s testdata/schema.yml testdata/data-fail.yml", - []string{"testdata/data-fail.yml: fail: (root): foo is required"}, + "-q -s testdata/utf-8/schema.yml testdata/utf-8/data-fail.yml", + []string{"testdata/utf-8/data-fail.yml: fail: (root): foo is required"}, 1, }, { - "-q -s testdata/schema.json testdata/data-fail.yml", - []string{"testdata/data-fail.yml: fail: (root): foo is required"}, + "-q -s testdata/utf-8/schema.json testdata/utf-8/data-fail.yml", + []string{"testdata/utf-8/data-fail.yml: fail: (root): foo is required"}, 1, }, { - "-q -s testdata/schema.json testdata/data-fail.json", - []string{"testdata/data-fail.json: fail: (root): foo is required"}, + "-q -s testdata/utf-8/schema.json testdata/utf-8/data-fail.json", + []string{"testdata/utf-8/data-fail.json: fail: (root): foo is required"}, 1, }, { - "-q -s testdata/schema.yml testdata/data-fail.json", - []string{"testdata/data-fail.json: fail: (root): foo is required"}, + "-q -s testdata/utf-8/schema.yml testdata/utf-8/data-fail.json", + []string{"testdata/utf-8/data-fail.json: fail: (root): foo is required"}, 1, }, { - "-q -s testdata/schema.json testdata/data-error.json", - []string{"testdata/data-error.json: error: validate: invalid character 'o' in literal null (expecting 'u')"}, + "-q -s testdata/utf-8/schema.json testdata/utf-8/data-error.json", + []string{"testdata/utf-8/data-error.json: error: validate: invalid character 'o' in literal null (expecting 'u')"}, 2, }, { - "-q -s testdata/schema.yml testdata/data-error.yml", - []string{"testdata/data-error.yml: error: load doc: yaml: found unexpected end of stream"}, + "-q -s testdata/utf-8/schema.yml testdata/utf-8/data-error.yml", + []string{"testdata/utf-8/data-error.yml: error: load doc: yaml: found unexpected end of stream"}, 2, }, { - "-q -s testdata/schema.json testdata/data-*.json", + "-q -s testdata/utf-8/schema.json testdata/utf-8/data-*.json", []string{ - "testdata/data-fail.json: fail: (root): foo is required", - "testdata/data-error.json: error: validate: invalid character 'o' in literal null (expecting 'u')", + "testdata/utf-8/data-fail.json: fail: (root): foo is required", + "testdata/utf-8/data-error.json: error: validate: invalid character 'o' in literal null (expecting 'u')", }, 3, }, { - "-q -s testdata/schema.yml testdata/data-*.yml", + "-q -s testdata/utf-8/schema.yml testdata/utf-8/data-*.yml", []string{ - "testdata/data-error.yml: error: load doc: yaml: found unexpected end of stream", - "testdata/data-fail.yml: fail: (root): foo is required", + "testdata/utf-8/data-error.yml: error: load doc: yaml: found unexpected end of stream", + "testdata/utf-8/data-fail.yml: fail: (root): foo is required", }, 3, }, } @@ -89,4 +89,3 @@ func TestMain(t *testing.T) { }) } } - diff --git a/testdata/utf-16be/data-error.json b/testdata/utf-16be/data-error.json new file mode 100644 index 0000000000000000000000000000000000000000..74920f2f29711d04beca75a244f0ce3310c1ea19 Binary files /dev/null and b/testdata/utf-16be/data-error.json differ diff --git a/testdata/utf-16be/data-error.yml b/testdata/utf-16be/data-error.yml new file mode 100644 index 0000000000000000000000000000000000000000..b0c91f19b96f9d6bd513c0b368e800395b6cbec0 Binary files /dev/null and b/testdata/utf-16be/data-error.yml differ diff --git a/testdata/utf-16be/data-fail.json b/testdata/utf-16be/data-fail.json new file mode 100644 index 0000000000000000000000000000000000000000..646c6c55c3ae37730d6f7c019adec120c90d43b0 Binary files /dev/null and b/testdata/utf-16be/data-fail.json differ diff --git a/testdata/utf-16be/data-fail.yml b/testdata/utf-16be/data-fail.yml new file mode 100644 index 0000000000000000000000000000000000000000..b0dc72605189e83b51522bfe72e89229e0528011 Binary files /dev/null and b/testdata/utf-16be/data-fail.yml differ diff --git a/testdata/utf-16be/data-pass.json b/testdata/utf-16be/data-pass.json new file mode 100644 index 0000000000000000000000000000000000000000..b0d7261160409b9cd2670c27a276460b2f5a08d5 Binary files /dev/null and b/testdata/utf-16be/data-pass.json differ diff --git a/testdata/utf-16be/data-pass.yml b/testdata/utf-16be/data-pass.yml new file mode 100644 index 0000000000000000000000000000000000000000..80b8d780aced3b101b73f3712b377d7872341f1e Binary files /dev/null and b/testdata/utf-16be/data-pass.yml differ diff --git a/testdata/utf-16be/schema.json b/testdata/utf-16be/schema.json new file mode 100644 index 0000000000000000000000000000000000000000..ed742390b4f5d72837cf95dcf3d3826140eafba5 Binary files /dev/null and b/testdata/utf-16be/schema.json differ diff --git a/testdata/utf-16be/schema.yml b/testdata/utf-16be/schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..420e8ba4bb742f8abc77d5a95bfce16379e9040f Binary files /dev/null and b/testdata/utf-16be/schema.yml differ diff --git a/testdata/utf-16be_bom/data-error.json b/testdata/utf-16be_bom/data-error.json new file mode 100644 index 0000000000000000000000000000000000000000..240156890c7692c7f7d9e5df49eeb34c01bb5a8e Binary files /dev/null and b/testdata/utf-16be_bom/data-error.json differ diff --git a/testdata/utf-16be_bom/data-error.yml b/testdata/utf-16be_bom/data-error.yml new file mode 100644 index 0000000000000000000000000000000000000000..499fc64eb61610a5b5c666a0cabe8ee5847a4843 Binary files /dev/null and b/testdata/utf-16be_bom/data-error.yml differ diff --git a/testdata/utf-16be_bom/data-fail.json b/testdata/utf-16be_bom/data-fail.json new file mode 100644 index 0000000000000000000000000000000000000000..bf74c385e84b688ef534d86071612fa20aa19703 Binary files /dev/null and b/testdata/utf-16be_bom/data-fail.json differ diff --git a/testdata/utf-16be_bom/data-fail.yml b/testdata/utf-16be_bom/data-fail.yml new file mode 100644 index 0000000000000000000000000000000000000000..f7f8d1f41cb944a238aff90bf1c9dd910d5572d3 Binary files /dev/null and b/testdata/utf-16be_bom/data-fail.yml differ diff --git a/testdata/utf-16be_bom/data-pass.json b/testdata/utf-16be_bom/data-pass.json new file mode 100644 index 0000000000000000000000000000000000000000..d3b34921be45a5157e095bda65bbdd8a2fade476 Binary files /dev/null and b/testdata/utf-16be_bom/data-pass.json differ diff --git a/testdata/utf-16be_bom/data-pass.yml b/testdata/utf-16be_bom/data-pass.yml new file mode 100644 index 0000000000000000000000000000000000000000..277d96d955afa1c42549643f587d3d60e098e880 Binary files /dev/null and b/testdata/utf-16be_bom/data-pass.yml differ diff --git a/testdata/utf-16be_bom/schema.json b/testdata/utf-16be_bom/schema.json new file mode 100644 index 0000000000000000000000000000000000000000..6f743f624e4ecebc55caf778b717305509cf44c4 Binary files /dev/null and b/testdata/utf-16be_bom/schema.json differ diff --git a/testdata/utf-16be_bom/schema.yml b/testdata/utf-16be_bom/schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..d8cbaffeda48c1b1e1d9adbdaaaa136767a75184 Binary files /dev/null and b/testdata/utf-16be_bom/schema.yml differ diff --git a/testdata/utf-16le/data-error.json b/testdata/utf-16le/data-error.json new file mode 100644 index 0000000000000000000000000000000000000000..c7ff59b25585042ad5ce4859610b6ef60bbe1b23 Binary files /dev/null and b/testdata/utf-16le/data-error.json differ diff --git a/testdata/utf-16le/data-error.yml b/testdata/utf-16le/data-error.yml new file mode 100644 index 0000000000000000000000000000000000000000..89121bcb737e4fe9cd908ac08625bb805ee2a393 Binary files /dev/null and b/testdata/utf-16le/data-error.yml differ diff --git a/testdata/utf-16le/data-fail.json b/testdata/utf-16le/data-fail.json new file mode 100644 index 0000000000000000000000000000000000000000..fad1c917597c78ee47e743e14d84d01176bd772d Binary files /dev/null and b/testdata/utf-16le/data-fail.json differ diff --git a/testdata/utf-16le/data-fail.yml b/testdata/utf-16le/data-fail.yml new file mode 100644 index 0000000000000000000000000000000000000000..64a5cc187a8ee92ae9e677054cd0d1fd1c86cfdc Binary files /dev/null and b/testdata/utf-16le/data-fail.yml differ diff --git a/testdata/utf-16le/data-pass.json b/testdata/utf-16le/data-pass.json new file mode 100644 index 0000000000000000000000000000000000000000..28357344bee9e5cc940a51cc7e9d7e36ba644573 Binary files /dev/null and b/testdata/utf-16le/data-pass.json differ diff --git a/testdata/utf-16le/data-pass.yml b/testdata/utf-16le/data-pass.yml new file mode 100644 index 0000000000000000000000000000000000000000..ebb8581e4f4f41e334045d3dbe11af0809d2bd3d Binary files /dev/null and b/testdata/utf-16le/data-pass.yml differ diff --git a/testdata/utf-16le/schema.json b/testdata/utf-16le/schema.json new file mode 100644 index 0000000000000000000000000000000000000000..2b84fea7e19373707542feccfccd560ad2166318 Binary files /dev/null and b/testdata/utf-16le/schema.json differ diff --git a/testdata/utf-16le/schema.yml b/testdata/utf-16le/schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..e235f85ec6f2ba862675cae8b4bf3ec369cb134a Binary files /dev/null and b/testdata/utf-16le/schema.yml differ diff --git a/testdata/utf-16le_bom/data-error.json b/testdata/utf-16le_bom/data-error.json new file mode 100644 index 0000000000000000000000000000000000000000..4f103343818acdbcda160e0dda735ab53391ded3 Binary files /dev/null and b/testdata/utf-16le_bom/data-error.json differ diff --git a/testdata/utf-16le_bom/data-error.yml b/testdata/utf-16le_bom/data-error.yml new file mode 100644 index 0000000000000000000000000000000000000000..838a4a95543495aefd1a483dd541179c6ae2def2 Binary files /dev/null and b/testdata/utf-16le_bom/data-error.yml differ diff --git a/testdata/utf-16le_bom/data-fail.json b/testdata/utf-16le_bom/data-fail.json new file mode 100644 index 0000000000000000000000000000000000000000..f5030d96f83b7edb35e8132b448b90acfef2c645 Binary files /dev/null and b/testdata/utf-16le_bom/data-fail.json differ diff --git a/testdata/utf-16le_bom/data-fail.yml b/testdata/utf-16le_bom/data-fail.yml new file mode 100644 index 0000000000000000000000000000000000000000..90d4179e98f5ddfa8b6138fd2f654542461cc7cb Binary files /dev/null and b/testdata/utf-16le_bom/data-fail.yml differ diff --git a/testdata/utf-16le_bom/data-pass.json b/testdata/utf-16le_bom/data-pass.json new file mode 100644 index 0000000000000000000000000000000000000000..04c3ad0db6025affd7921db24988c2f593fc7938 Binary files /dev/null and b/testdata/utf-16le_bom/data-pass.json differ diff --git a/testdata/utf-16le_bom/data-pass.yml b/testdata/utf-16le_bom/data-pass.yml new file mode 100644 index 0000000000000000000000000000000000000000..5f8246f7a287a74d96393d161c2db0bee264afb2 Binary files /dev/null and b/testdata/utf-16le_bom/data-pass.yml differ diff --git a/testdata/utf-16le_bom/schema.json b/testdata/utf-16le_bom/schema.json new file mode 100644 index 0000000000000000000000000000000000000000..eb89b0044c97e48efad7b024b333420b67061031 Binary files /dev/null and b/testdata/utf-16le_bom/schema.json differ diff --git a/testdata/utf-16le_bom/schema.yml b/testdata/utf-16le_bom/schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..43fc6b438ed49ca5f56cae6b22b6de8cd1bed4aa Binary files /dev/null and b/testdata/utf-16le_bom/schema.yml differ diff --git a/testdata/data-error.json b/testdata/utf-8/data-error.json similarity index 100% rename from testdata/data-error.json rename to testdata/utf-8/data-error.json diff --git a/testdata/data-error.yml b/testdata/utf-8/data-error.yml similarity index 100% rename from testdata/data-error.yml rename to testdata/utf-8/data-error.yml diff --git a/testdata/data-fail.json b/testdata/utf-8/data-fail.json similarity index 100% rename from testdata/data-fail.json rename to testdata/utf-8/data-fail.json diff --git a/testdata/data-fail.yml b/testdata/utf-8/data-fail.yml similarity index 100% rename from testdata/data-fail.yml rename to testdata/utf-8/data-fail.yml diff --git a/testdata/data-pass.json b/testdata/utf-8/data-pass.json similarity index 100% rename from testdata/data-pass.json rename to testdata/utf-8/data-pass.json diff --git a/testdata/data-pass.yml b/testdata/utf-8/data-pass.yml similarity index 100% rename from testdata/data-pass.yml rename to testdata/utf-8/data-pass.yml diff --git a/testdata/schema.json b/testdata/utf-8/schema.json similarity index 100% rename from testdata/schema.json rename to testdata/utf-8/schema.json diff --git a/testdata/schema.yml b/testdata/utf-8/schema.yml similarity index 100% rename from testdata/schema.yml rename to testdata/utf-8/schema.yml diff --git a/testdata/utf-8_bom/data-error.json b/testdata/utf-8_bom/data-error.json new file mode 100644 index 0000000000000000000000000000000000000000..6e61837a202f8282c00d8b75d4cda12570e6e98b --- /dev/null +++ b/testdata/utf-8_bom/data-error.json @@ -0,0 +1 @@ +not valid json diff --git a/testdata/utf-8_bom/data-error.yml b/testdata/utf-8_bom/data-error.yml new file mode 100644 index 0000000000000000000000000000000000000000..f9b03bcfd72141d1afe93163a026e766fbadc6a6 --- /dev/null +++ b/testdata/utf-8_bom/data-error.yml @@ -0,0 +1 @@ +invalid: "an escaped \' single quote is not valid yaml \ No newline at end of file diff --git a/testdata/utf-8_bom/data-fail.json b/testdata/utf-8_bom/data-fail.json new file mode 100644 index 0000000000000000000000000000000000000000..053cc03634136a99ba1e6daca33b05e6ac734444 --- /dev/null +++ b/testdata/utf-8_bom/data-fail.json @@ -0,0 +1,3 @@ +{ + "bar": "missing foo" +} diff --git a/testdata/utf-8_bom/data-fail.yml b/testdata/utf-8_bom/data-fail.yml new file mode 100644 index 0000000000000000000000000000000000000000..b07635a4803565a2497391edc5c5ebff418e9c6f --- /dev/null +++ b/testdata/utf-8_bom/data-fail.yml @@ -0,0 +1,2 @@ +--- +bar: missing foo diff --git a/testdata/utf-8_bom/data-pass.json b/testdata/utf-8_bom/data-pass.json new file mode 100644 index 0000000000000000000000000000000000000000..e091c96acf49f33c94fdde26bde9225366c6f8c3 --- /dev/null +++ b/testdata/utf-8_bom/data-pass.json @@ -0,0 +1,4 @@ +{ + "foo": "asdf", + "bar": "zxcv" +} diff --git a/testdata/utf-8_bom/data-pass.yml b/testdata/utf-8_bom/data-pass.yml new file mode 100644 index 0000000000000000000000000000000000000000..d7e16a717021718dc7f868b195fb4a1c0f7482da --- /dev/null +++ b/testdata/utf-8_bom/data-pass.yml @@ -0,0 +1,3 @@ +--- +foo: asdf +bar: zxcv diff --git a/testdata/utf-8_bom/schema.json b/testdata/utf-8_bom/schema.json new file mode 100644 index 0000000000000000000000000000000000000000..5e26417b41302c16c78dc7199176d9d6b4f5a6bb --- /dev/null +++ b/testdata/utf-8_bom/schema.json @@ -0,0 +1,7 @@ +{ + "properties": { + "foo": { "type": "string" }, + "bar": {} + }, + "required": ["foo"] +} diff --git a/testdata/utf-8_bom/schema.yml b/testdata/utf-8_bom/schema.yml new file mode 100644 index 0000000000000000000000000000000000000000..f2c99d56aabc068942d2b9da22d69cb59600ffc7 --- /dev/null +++ b/testdata/utf-8_bom/schema.yml @@ -0,0 +1,7 @@ +--- +properties: + foo: + type: string + bar: {} +required: + - foo