This repository has been archived on 2022-11-27. You can view files and clone it, but cannot push or open issues or pull requests.
activitypub/natural_language_values_test.go

845 lines
19 KiB
Go

package activitypub
import (
"bytes"
"encoding/gob"
"fmt"
"reflect"
"strconv"
"testing"
json "github.com/go-ap/jsonld"
)
func TestNaturalLanguageValue_MarshalJSON(t *testing.T) {
p := NaturalLanguageValues{
{
"en", Content("the test"),
},
{
"fr", Content("le test"),
},
}
js := "{\"en\":\"the test\",\"fr\":\"le test\"}"
out, err := p.MarshalJSON()
if err != nil {
t.Errorf("Error: '%s'", err)
}
if js != string(out) {
t.Errorf("Different marshal result '%s', instead of '%s'", out, js)
}
p1 := NaturalLanguageValues{
{
"en", Content("the test"),
},
}
out1, err1 := p1.MarshalJSON()
if err1 != nil {
t.Errorf("Error: '%s'", err1)
}
txt := `"the test"`
if txt != string(out1) {
t.Errorf("Different marshal result '%s', instead of '%s'", out1, txt)
}
}
func TestLangRefValue_MarshalJSON(t *testing.T) {
{
tst := LangRefValue{
Ref: NilLangRef,
Value: Content("test"),
}
j, err := tst.MarshalJSON()
if err != nil {
t.Errorf("Error: %s", err)
}
expected := `"test"`
if string(j) != expected {
t.Errorf("Different marshal result '%s', expected '%s'", j, expected)
}
}
{
tst := LangRefValue{
Ref: "en",
Value: Content("test"),
}
j, err := tst.MarshalJSON()
if err != nil {
t.Errorf("Error: %s", err)
}
expected := `"en":"test"`
if string(j) != expected {
t.Errorf("Different marshal result '%s', expected '%s'", j, expected)
}
}
{
tst := LangRefValue{
Ref: "en",
Value: Content("test\nwith characters\tneeding escaping\r\n"),
}
j, err := tst.MarshalJSON()
if err != nil {
t.Errorf("Error: %s", err)
}
expected := `"en":"test\nwith characters\tneeding escaping\r\n"`
if string(j) != expected {
t.Errorf("Different marshal result '%s', expected '%s'", j, expected)
}
}
}
func TestLangRefValue_MarshalText(t *testing.T) {
{
tst := LangRefValue{
Ref: NilLangRef,
Value: Content("test"),
}
j, err := tst.MarshalText()
if err != nil {
t.Errorf("Error: %s", err)
}
expected := "test"
if string(j) != expected {
t.Errorf("Different marshal result '%s', expected '%s'", j, expected)
}
}
{
tst := LangRefValue{
Ref: "en",
Value: Content("test"),
}
j, err := tst.MarshalText()
if err != nil {
t.Errorf("Error: %s", err)
}
expected := "test[en]"
if string(j) != expected {
t.Errorf("Different marshal result '%s', expected '%s'", j, expected)
}
}
}
func TestNaturalLanguageValue_Get(t *testing.T) {
testVal := Content("test")
a := NaturalLanguageValues{{NilLangRef, testVal}}
if !a.Get(NilLangRef).Equals(testVal) {
t.Errorf("Invalid Get result. Expected %s received %s", testVal, a.Get(NilLangRef))
}
}
func TestNaturalLanguageValue_Set(t *testing.T) {
testVal := Content("test")
a := NaturalLanguageValues{{NilLangRef, Content("ana are mere")}}
err := a.Set(LangRef("en"), testVal)
if err != nil {
t.Errorf("Received error when doing Set %s", err)
}
}
func TestNaturalLanguageValue_Append(t *testing.T) {
var a NaturalLanguageValues
if len(a) != 0 {
t.Errorf("Invalid initialization of %T. Size %d > 0 ", a, len(a))
}
langEn := LangRef("en")
valEn := Content("random value")
a.Append(langEn, valEn)
if len(a) != 1 {
t.Errorf("Invalid append of one element to %T. Size %d != 1", a, len(a))
}
if !a.Get(langEn).Equals(valEn) {
t.Errorf("Invalid append of one element to %T. Value of %q not equal to %q, but %q", a, langEn, valEn, a.Get(langEn))
}
langDe := LangRef("de")
valDe := Content("randomisch")
a.Append(langDe, valDe)
if len(a) != 2 {
t.Errorf("Invalid append of one element to %T. Size %d != 2", a, len(a))
}
if !a.Get(langEn).Equals(valEn) {
t.Errorf("Invalid append of one element to %T. Value of %q not equal to %q, but %q", a, langEn, valEn, a.Get(langEn))
}
if !a.Get(langDe).Equals(valDe) {
t.Errorf("Invalid append of one element to %T. Value of %q not equal to %q, but %q", a, langDe, valDe, a.Get(langDe))
}
}
func TestLangRef_UnmarshalJSON(t *testing.T) {
lang := "en-US"
json := `"` + lang + `"`
var a LangRef
a.UnmarshalJSON([]byte(json))
if string(a) != lang {
t.Errorf("Invalid json unmarshal for %T. Expected %q, found %q", lang, lang, string(a))
}
}
func TestNaturalLanguageValue_UnmarshalFullObjectJSON(t *testing.T) {
langEn := "en-US"
valEn := Content("random")
langDe := "de-DE"
valDe := Content("zufällig\n")
//m := make(map[string]string)
//m[langEn] = valEn
//m[langDe] = valDe
json := `{
"` + langEn + `": "` + valEn.String() + `",
"` + langDe + `": "` + valDe.String() + `"
}`
a := make(NaturalLanguageValues, 0)
_ = a.Append(LangRef(langEn), valEn)
_ = a.Append(LangRef(langDe), valDe)
err := a.UnmarshalJSON([]byte(json))
if err != nil {
t.Error(err)
}
for lang, val := range a {
if val.Ref != LangRef(langEn) && val.Ref != LangRef(langDe) {
t.Errorf("Invalid json unmarshal for %T. Expected lang %q or %q, found %q", a, langEn, langDe, lang)
}
if val.Ref == LangRef(langEn) && !val.Value.Equals(valEn) {
t.Errorf("Invalid json unmarshal for %T. Expected value %q, found %q", a, valEn, val.Value)
}
if val.Ref == LangRef(langDe) && !val.Value.Equals(valDe) {
t.Errorf("Invalid json unmarshal for %T. Expected value %q, found %q", a, valDe, val.Value)
}
}
}
func TestNaturalLanguageValue_UnmarshalJSON(t *testing.T) {
l := LangRef("")
dataEmpty := []byte("")
l.UnmarshalJSON(dataEmpty)
if l != "" {
t.Errorf("Unmarshaled object %T should be an empty string, received %q", l, l)
}
}
func TestNaturalLanguageValue_UnmarshalText(t *testing.T) {
l := LangRef("")
dataEmpty := []byte("")
l.UnmarshalText(dataEmpty)
if l != "" {
t.Errorf("Unmarshaled object %T should be an empty string, received %q", l, l)
}
}
func TestNaturalLanguageValue_First(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValueNew(t *testing.T) {
n := NaturalLanguageValuesNew()
if len(n) != 0 {
t.Errorf("Initial %T should have length 0, received %d", n, len(n))
}
}
func TestNaturalLanguageValue_MarshalText(t *testing.T) {
nlv := LangRefValue{
Ref: "en",
Value: Content("test"),
}
tst := NaturalLanguageValues{nlv}
j, err := tst.MarshalText()
if err != nil {
t.Errorf("Error marshaling: %s", err)
}
if j == nil {
t.Errorf("Error marshaling: nil value returned")
}
expected := fmt.Sprintf("%s[%s]", nlv.Value, nlv.Ref)
if string(j) != expected {
t.Errorf("Wrong value: %s, expected %s", j, expected)
}
}
func TestNaturalLanguageValues_Append(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValues_First(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValues_Get(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValues_MarshalJSON(t *testing.T) {
{
m := NaturalLanguageValues{
{
"en", Content("test"),
},
{
"de", Content("test"),
},
}
result, err := m.MarshalJSON()
if err != nil {
t.Errorf("Failed marshaling '%v'", err)
}
mRes := "{\"en\":\"test\",\"de\":\"test\"}"
if string(result) != mRes {
t.Errorf("Different results '%v' vs. '%v'", string(result), mRes)
}
//n := NaturalLanguageValuesNew()
//result, err := n.MarshalJSON()
s := make(map[LangRef]string)
s["en"] = "test"
n1 := NaturalLanguageValues{{
"en", Content("test"),
}}
result1, err1 := n1.MarshalJSON()
if err1 != nil {
t.Errorf("Failed marshaling '%v'", err1)
}
mRes1 := `"test"`
if string(result1) != mRes1 {
t.Errorf("Different results '%v' vs. '%v'", string(result1), mRes1)
}
}
{
nlv := LangRefValue{
Ref: NilLangRef,
Value: Content("test"),
}
tst := NaturalLanguageValues{nlv}
j, err := tst.MarshalJSON()
if err != nil {
t.Errorf("Error marshaling: %s", err)
}
if j == nil {
t.Errorf("Error marshaling: nil value returned")
}
expected := fmt.Sprintf("\"%s\"", nlv.Value)
if string(j) != expected {
t.Errorf("Wrong value: %s, expected %s", j, expected)
}
}
{
nlv := LangRefValue{
Ref: "en",
Value: Content("test"),
}
tst := NaturalLanguageValues{nlv}
j, err := tst.MarshalJSON()
if err != nil {
t.Errorf("Error marshaling: %s", err)
}
if j == nil {
t.Errorf("Error marshaling: nil value returned")
}
expected := fmt.Sprintf("\"%s\"", nlv.Value)
if string(j) != expected {
t.Errorf("Wrong value: %s, expected %s", j, expected)
}
}
{
nlvEn := LangRefValue{
Ref: "en",
Value: Content("test"),
}
nlvFr := LangRefValue{
Ref: "fr",
Value: Content("teste"),
}
tst := NaturalLanguageValues{nlvEn, nlvFr}
j, err := tst.MarshalJSON()
if err != nil {
t.Errorf("Error marshaling: %s", err)
}
if j == nil {
t.Errorf("Error marshaling: nil value returned")
}
expected := fmt.Sprintf("{\"%s\":\"%s\",\"%s\":\"%s\"}", nlvEn.Ref, nlvEn.Value, nlvFr.Ref, nlvFr.Value)
if string(j) != expected {
t.Errorf("Wrong value: %s, expected %s", j, expected)
}
}
{
nlvEn := LangRefValue{
Ref: "en",
Value: Content("test\nwith new line"),
}
nlvFr := LangRefValue{
Ref: "fr",
Value: Content("teste\navec une ligne nouvelle"),
}
tst := NaturalLanguageValues{nlvEn, nlvFr}
j, err := tst.MarshalJSON()
if err != nil {
t.Errorf("Error marshaling: %s", err)
}
if j == nil {
t.Errorf("Error marshaling: nil value returned")
}
expected := fmt.Sprintf("{\"%s\":%s,\"%s\":%s}", nlvEn.Ref, strconv.Quote(nlvEn.Value.String()), nlvFr.Ref, strconv.Quote(nlvFr.Value.String()))
if string(j) != expected {
t.Errorf("Wrong value: %s, expected %s", j, expected)
}
}
}
func TestNaturalLanguageValues_MarshalText(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValues_Set(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValues_UnmarshalJSON(t *testing.T) {
{
lang := []byte{'e', 'n'}
val := []byte{'a', 'n', 'a', ' ', 'a', 'r', 'e', ' ', 'm', 'e', 'r', 'e', '\n'}
js := fmt.Sprintf(`[{"%s": "%s"}]`, lang, val)
n := NaturalLanguageValues{}
err := n.UnmarshalJSON([]byte(js))
if err != nil {
t.Errorf("Unexpected error when unmarshaling %T: %s", n, err)
}
if n.Count() != 1 {
t.Errorf("Invalid number of elements %d, expected %d", n.Count(), 1)
}
l := n.First()
if !l.Value.Equals(Content("ana are mere\n")) {
t.Errorf("Invalid %T value %q, expected %q", l, l.Value, "ana are mere\n")
}
if l.Ref != "en" {
t.Errorf("Invalid %T ref %q, expected %q", l, l.Ref, "en")
}
}
{
ob := make(map[string]string)
ob["en"] = "ana are mere\n"
js, err := json.Marshal(ob)
if err != nil {
t.Errorf("Unexpected error when marshaling %T: %s", ob, err)
}
n := NaturalLanguageValues{}
err = n.UnmarshalJSON(js)
if err != nil {
t.Errorf("Unexpected error when unmarshaling %T: %s", n, err)
}
if n.Count() != 1 {
t.Errorf("Invalid number of elements %d, expected %d", n.Count(), 1)
}
l := n.First()
if !l.Value.Equals(Content("ana are mere\n")) {
t.Errorf("Invalid %T value %q, expected %q", l, l.Value, "ana are mere\n")
}
if l.Ref != "en" {
t.Errorf("Invalid %T ref %q, expected %q", l, l.Ref, "en")
}
}
}
func TestNaturalLanguageValues_UnmarshalText(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValuesNew(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValues_String(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValues_Count(t *testing.T) {
t.Skipf("TODO")
}
func TestNaturalLanguageValues_Equals(t *testing.T) {
type args struct {
with NaturalLanguageValues
}
tests := []struct {
name string
n NaturalLanguageValues
args args
want bool
}{
{
name: "equal-key-value",
n: NaturalLanguageValues{LangRefValue{
Ref: "en",
Value: Content("test123#"),
}},
args: args{
with: NaturalLanguageValues{LangRefValue{
Ref: "en",
Value: Content("test123#"),
}},
},
want: true,
},
{
name: "not-equal-key",
n: NaturalLanguageValues{LangRefValue{
Ref: "en",
Value: Content("test123#"),
}},
args: args{
with: NaturalLanguageValues{LangRefValue{
Ref: "fr",
Value: Content("test123#"),
}},
},
want: false,
},
{
name: "not-equal-value",
n: NaturalLanguageValues{LangRefValue{
Ref: "en",
Value: Content("test123#"),
}},
args: args{
with: NaturalLanguageValues{LangRefValue{
Ref: "en",
Value: Content("test123"),
}},
},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := tt.n.Equals(tt.args.with); got != tt.want {
t.Errorf("Equals() = %v, want %v", got, tt.want)
}
})
}
}
func TestContent_String(t *testing.T) {
t.Skip("TODO")
}
func TestContent_UnmarshalJSON(t *testing.T) {
t.Skip("TODO")
}
func TestContent_UnmarshalText(t *testing.T) {
t.Skip("TODO")
}
func gobValue(a interface{}) []byte {
b := bytes.Buffer{}
gg := gob.NewEncoder(&b)
gg.Encode(a)
return b.Bytes()
}
func TestContent_GobEncode(t *testing.T) {
tests := []struct {
name string
c Content
want []byte
wantErr bool
}{
{
name: "empty",
c: Content{},
want: []byte{},
wantErr: false,
},
{
name: "empty value",
c: Content{'0'},
want: gobValue([]byte{'0'}),
wantErr: false,
},
{
name: "some text",
c: Content{'a', 'n', 'a', ' ', 'a', 'r', 'e'},
want: gobValue([]byte{'a', 'n', 'a', ' ', 'a', 'r', 'e'}),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.c.GobEncode()
if (err != nil) != tt.wantErr {
t.Errorf("GobEncode() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("GobEncode() got = %v, want %v", got, tt.want)
}
})
}
}
func TestContent_GobDecode(t *testing.T) {
tests := []struct {
name string
c Content
data []byte
wantErr bool
}{
{
name: "empty",
c: Content{},
data: []byte{},
wantErr: false,
},
{
name: "empty value",
c: Content{'0'},
data: gobValue([]byte{'0'}),
wantErr: false,
},
{
name: "some text",
c: Content{'a', 'n', 'a', ' ', 'a', 'r', 'e'},
data: gobValue([]byte{'a', 'n', 'a', ' ', 'a', 'r', 'e'}),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := tt.c.GobDecode(tt.data); (err != nil) != tt.wantErr {
t.Errorf("GobDecode() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestLangRef_GobDecode(t *testing.T) {
tests := []struct {
name string
l LangRef
data []byte
wantErr bool
}{
{
name: "empty",
l: "",
data: []byte{},
wantErr: false,
},
{
name: "some text",
l: LangRef("ana are"),
data: gobValue([]byte("ana are")),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := tt.l.GobDecode(tt.data); (err != nil) != tt.wantErr {
t.Errorf("GobDecode() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestLangRef_GobEncode(t *testing.T) {
tests := []struct {
name string
l LangRef
want []byte
wantErr bool
}{
{
name: "empty",
l: "",
want: []byte{},
wantErr: false,
},
{
name: "some text",
l: LangRef("ana are"),
want: gobValue([]byte{'a', 'n', 'a', ' ', 'a', 'r', 'e'}),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.l.GobEncode()
if (err != nil) != tt.wantErr {
t.Errorf("GobEncode() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("GobEncode() got = %v, want %v", got, tt.want)
}
})
}
}
func TestLangRefValue_GobEncode(t *testing.T) {
type fields struct {
Ref LangRef
Value Content
}
tests := []struct {
name string
fields fields
want []byte
wantErr bool
}{
{
name: "empty",
fields: fields{},
want: []byte{},
wantErr: false,
},
{
name: "some values",
fields: fields{
Ref: "ana",
Value: Content("are mere"),
},
want: gobValue(kv{K: []byte("ana"), V: []byte("are mere")}),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
l := LangRefValue{
Ref: tt.fields.Ref,
Value: tt.fields.Value,
}
got, err := l.GobEncode()
if (err != nil) != tt.wantErr {
t.Errorf("GobEncode() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("GobEncode() got = %v, want %v", got, tt.want)
}
})
}
}
func TestLangRefValue_GobDecode(t *testing.T) {
type fields struct {
Ref LangRef
Value Content
}
tests := []struct {
name string
fields fields
data []byte
wantErr bool
}{
{
name: "empty",
fields: fields{},
data: gobValue(kv{}),
wantErr: false,
},
{
name: "some values",
fields: fields{
Ref: "ana",
Value: Content("are mere"),
},
data: gobValue(kv{K: []byte("ana"), V: []byte("are mere")}),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
l := &LangRefValue{
Ref: tt.fields.Ref,
Value: tt.fields.Value,
}
if err := l.GobDecode(tt.data); (err != nil) != tt.wantErr {
t.Errorf("GobDecode() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestNaturalLanguageValues_GobEncode(t *testing.T) {
tests := []struct {
name string
n NaturalLanguageValues
want []byte
wantErr bool
}{
{
name: "empty",
n: NaturalLanguageValues{},
want: []byte{},
wantErr: false,
},
{
name: "some values",
n: NaturalLanguageValues{{
Ref: "ana",
Value: []byte("are mere"),
}},
want: gobValue([]kv{{K: []byte("ana"), V: []byte("are mere")}}),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.n.GobEncode()
if (err != nil) != tt.wantErr {
t.Errorf("GobEncode() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("GobEncode() got = %v, want %v", got, tt.want)
}
})
}
}
func TestNaturalLanguageValues_GobDecode(t *testing.T) {
tests := []struct {
name string
n NaturalLanguageValues
data []byte
wantErr bool
}{
{
name: "empty",
n: NaturalLanguageValues{},
data: []byte{},
wantErr: false,
},
{
name: "some values",
n: NaturalLanguageValues{{
Ref: "ana",
Value: []byte("are mere"),
}},
data: gobValue([]kv{{K: []byte("ana"), V: []byte("are mere")}}),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if err := tt.n.GobDecode(tt.data); (err != nil) != tt.wantErr {
t.Errorf("GobDecode() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}