github.com/readium/readium-lcp-server@v0.0.0-20240101192032-6e95190e99f1/rwpm/w3cpublication_test.go (about) 1 // Copyright 2020 Readium Foundation. All rights reserved. 2 // Use of this source code is governed by a BSD-style license 3 // that can be found in the LICENSE file exposed on Github (readium) in the project repository. 4 5 package rwpm 6 7 import ( 8 "encoding/json" 9 "testing" 10 ) 11 12 type W3CmultiLanguageStruct struct { 13 Ml W3CMultiLanguage `json:"ml"` 14 } 15 16 func TestW3CMultiLanguage(t *testing.T) { 17 var obj W3CmultiLanguageStruct 18 19 // case = the property has a literal value 20 const single = `{"ml":"literal"}` 21 if err := json.Unmarshal([]byte(single), &obj); err != nil { 22 t.Fatal(err) 23 } else { 24 if obj.Ml.Text() != "literal" { 25 t.Errorf("Expected one value named 'literal', got %#v", obj.Ml) 26 } 27 } 28 jstring, err := json.Marshal(obj) 29 if err != nil { 30 t.Fatal(err) 31 } 32 if string(jstring) != single { 33 t.Errorf("Expected string equality, got %#v", string(jstring)) 34 } 35 36 // case = the property has a structured localized value 37 const objectLoc = `{"ml":{"language":"fr","value":"nom","direction":"ltr"}}` 38 if err := json.Unmarshal([]byte(objectLoc), &obj); err != nil { 39 t.Fatal(err) 40 } else { 41 if obj.Ml[0].Value != "nom" { 42 t.Errorf("Expected one value named 'nom', got %#v", obj.Ml[0].Value) 43 } 44 } 45 jstring, err = json.Marshal(obj) 46 if err != nil { 47 t.Fatal(err) 48 } 49 if string(jstring) != objectLoc { 50 t.Errorf("Expected string equality, got %#v", string(jstring)) 51 } 52 53 // case = the property has multiple localized values 54 const multiple = `{"ml":[{"language":"fr","value":"nom","direction":"ltr"},{"language":"en","value":"name","direction":"ltr"},"other name"]}` 55 if err := json.Unmarshal([]byte(multiple), &obj); err != nil { 56 t.Fatal(err) 57 } else { 58 if obj.Ml[0].Value != "nom" { 59 t.Errorf("Expected one value named 'nom', got %#v", obj.Ml[0].Value) 60 } 61 } 62 jstring, err = json.Marshal(obj) 63 if err != nil { 64 t.Fatal(err) 65 } 66 if string(jstring) != multiple { 67 t.Errorf("Expected string equality, got %#v", string(jstring)) 68 } 69 } 70 71 type linkStruct struct { 72 Lnk W3CLinks `json:"links"` 73 } 74 75 func TestW3CLinks(t *testing.T) { 76 var obj linkStruct 77 78 // literal value 79 const singleText = `{"links":"single"}` 80 if err := json.Unmarshal([]byte(singleText), &obj); err != nil { 81 t.Fatal(err) 82 } else { 83 if len(obj.Lnk) != 1 || obj.Lnk[0].URL != "single" { 84 t.Errorf("Expected one link named single, got %#v", obj.Lnk) 85 } 86 } 87 // check MarshalJSON 88 jstring, err := json.Marshal(obj) 89 if err != nil { 90 t.Fatal(err) 91 } 92 if string(jstring) != singleText { 93 t.Errorf("Expected string equality, got %#v", string(jstring)) 94 } 95 96 // array of literal values 97 const arrayOfText = `{"links":["single","double"]}` 98 if err := json.Unmarshal([]byte(arrayOfText), &obj); err != nil { 99 t.Fatal(err) 100 } else { 101 if len(obj.Lnk) != 2 || obj.Lnk[0].URL != "single" || obj.Lnk[1].URL != "double" { 102 t.Errorf("Expected 2 links named single and double, got %#v", obj.Lnk) 103 } 104 } 105 // check MarshalJSON 106 jstring, err = json.Marshal(obj) 107 if err != nil { 108 t.Fatal(err) 109 } 110 if string(jstring) != arrayOfText { 111 t.Errorf("Expected string equality, got %#v", string(jstring)) 112 } 113 114 // struct value 115 const singleObject = `{"links":{"url":"linkurl","name":"linkname","rel":"relation"}}` 116 if err := json.Unmarshal([]byte(singleObject), &obj); err != nil { 117 t.Fatal(err) 118 } else { 119 if len(obj.Lnk) != 1 || obj.Lnk[0].URL != "linkurl" || obj.Lnk[0].Rel.Text() != "relation" || obj.Lnk[0].Name.Text() != "linkname" { 120 t.Errorf("Expected 1 link named linkurl, got %#v", obj.Lnk) 121 } 122 } 123 // check MarshalJSON 124 jstring, err = json.Marshal(obj) 125 if err != nil { 126 t.Fatal(err) 127 } 128 if string(jstring) != singleObject { 129 t.Errorf("Expected string equality, got %#v", string(jstring)) 130 } 131 132 }