github.com/readium/readium-lcp-server@v0.0.0-20240101192032-6e95190e99f1/sign/canon_test.go (about) 1 // Copyright (c) 2016 Readium Foundation 2 // 3 // Redistribution and use in source and binary forms, with or without modification, 4 // are permitted provided that the following conditions are met: 5 // 6 // 1. Redistributions of source code must retain the above copyright notice, this 7 // list of conditions and the following disclaimer. 8 // 2. Redistributions in binary form must reproduce the above copyright notice, 9 // this list of conditions and the following disclaimer in the documentation and/or 10 // other materials provided with the distribution. 11 // 3. Neither the name of the organization nor the names of its contributors may be 12 // used to endorse or promote products derived from this software without specific 13 // prior written permission 14 // 15 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 19 // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 26 package sign 27 28 import ( 29 "bytes" 30 "testing" 31 ) 32 33 func TestCanonSimple(t *testing.T) { 34 input := make(map[string]interface{}) 35 input["test"] = 1 36 input["abc"] = "test" 37 out, err := Canon(input) 38 if err != nil { 39 t.Fatal(err) 40 } 41 expected := `{"abc":"test","test":1}` 42 if !bytes.Equal(out, []byte(expected)) { 43 t.Errorf("Expected %s, got %s", expected, out) 44 } 45 } 46 47 type simpleStruct struct { 48 B string 49 A string 50 } 51 52 func TestCanonStruct(t *testing.T) { 53 expected := `{"A":"1","B":"2"}` 54 out, err := Canon(simpleStruct{"2", "1"}) 55 if err != nil { 56 t.Fatal(err) 57 } 58 59 if !bytes.Equal(out, []byte(expected)) { 60 t.Errorf("Expected %s, got %s", expected, out) 61 } 62 } 63 64 type nestedStruct struct { 65 Test string 66 Inner simpleStruct 67 } 68 69 func TestCanonInnerStruct(t *testing.T) { 70 expected := `{"Inner":{"A":"1","B":"2"},"Test":"Blah"}` 71 out, err := Canon(nestedStruct{"Blah", simpleStruct{"2", "1"}}) 72 if err != nil { 73 t.Fatal(err) 74 } 75 76 if !bytes.Equal(out, []byte(expected)) { 77 t.Errorf("Expected %s, got %s", expected, out) 78 } 79 }