123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- /*
- * EliasDB
- *
- * Copyright 2016 Matthias Ladkau. All rights reserved.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
- package data
- import (
- "bytes"
- "encoding/json"
- "errors"
- "fmt"
- "testing"
- )
- func TestGraphNode(t *testing.T) {
- gn := NewGraphNode()
- if res := gn.Key(); res != "" {
- t.Error("Unexpected key:", res)
- return
- }
- if res := gn.Name(); res != "" {
- t.Error("Unexpected name:", res)
- return
- }
- if res := gn.Kind(); res != "" {
- t.Error("Unexpected kind:", res)
- return
- }
- if res := gn.Attr("a"); res != nil {
- t.Error("Unexpected result:", res)
- return
- }
- gn.SetAttr(NodeKey, "123")
- if res := gn.Attr(NodeKey); res != "123" {
- t.Error("Unexpected key:", res)
- return
- }
- if res := gn.Key(); res != "123" {
- t.Error("Unexpected key:", res)
- return
- }
- gn.SetAttr(NodeKind, "mykind")
- if res := gn.Attr(NodeKind); res != "mykind" {
- t.Error("Unexpected kind:", res)
- return
- }
- if res := gn.Kind(); res != "mykind" {
- t.Error("Unexpected kind:", res)
- return
- }
- gn.SetAttr("myattr", 123)
- gn.SetAttr("myattr2", bytes.NewBuffer([]byte("abba")))
- gn.SetAttr("myattr3", "test123")
- if res := gn.Attr("myattr"); res != 123 {
- t.Error("Unexpected attr:", res)
- return
- }
- if res := gn.(*graphNode).stringAttr("myattr2"); res != "abba" {
- t.Error("Unexpected attr:", res)
- return
- }
- im := gn.IndexMap()
- if im["myattr"] != "123" || im["myattr2"] != "abba" ||
- im["myattr3"] != "test123" || len(im) != 3 {
- t.Error("Unexpected indexmap result:", gn.IndexMap())
- return
- }
- gn.SetAttr("myattr", nil)
- if res := gn.Attr("myattr"); res != nil {
- t.Error("Unexpected attr:", res)
- return
- }
- gn.SetAttr("amyattr", "another test")
- if res := gn.String(); res != "GraphNode:\n"+
- " key : 123\n"+
- " kind : mykind\n"+
- " amyattr : another test\n"+
- " myattr2 : abba\n"+
- " myattr3 : test123\n" {
- t.Error("Unexpected string output:", res)
- return
- }
- nodedata := gn.Data()
- if nodedata["key"] != gn.(*graphNode).data["key"] {
- t.Error("Unexpected data reference")
- return
- }
- nnode := NewGraphNodeFromMap(gn.Data())
- if nnode.Data()["key"] != gn.(*graphNode).data["key"] {
- t.Error("Unexpected data reference")
- return
- }
- gn = CopyNode(gn)
- gn.SetAttr("key", []int{1, 2, 3})
- if res := gn.String(); res != "GraphNode:\n"+
- " key : [1 2 3]\n"+
- " kind : mykind\n"+
- " amyattr : another test\n"+
- " myattr2 : abba\n"+
- " myattr3 : test123\n" {
- t.Error("Unexpected string output:", res)
- return
- }
- if gn.Key() != "[1 2 3]" {
- t.Error("Unexpected key as string:", gn.Key())
- return
- }
- if fmt.Sprintf("%T", gn.Attr("key")) != "[]int" {
- t.Errorf("Unexpected ckey type: %T", gn.Attr("key"))
- return
- }
- }
- func TestNestedNode(t *testing.T) {
- gn := NewGraphNode()
- gn.SetAttr("key", "456")
- gn.SetAttr("kind", "mynode")
- gn.SetAttr("name", "Node2")
- gn.SetAttr("type", "type2")
- gn.SetAttr("err", errors.New("bla"))
- gn.SetAttr("nested", map[string]interface{}{
- "nest1": map[string]interface{}{
- "nest2": map[string]interface{}{
- "atom1": 1.45,
- },
- },
- })
- im := gn.IndexMap()
- jsonString, err := json.MarshalIndent(im, "", " ")
- if err != nil {
- t.Error(err)
- return
- }
- if string(jsonString) != `
- {
- "err": "bla",
- "name": "Node2",
- "nested": "{\"nest1\":{\"nest2\":{\"atom1\":1.45}}}",
- "nested.nest1": "{\"nest2\":{\"atom1\":1.45}}",
- "nested.nest1.nest2": "{\"atom1\":1.45}",
- "nested.nest1.nest2.atom1": "1.45",
- "type": "type2"
- }`[1:] {
- t.Error("Unexpected result: ", string(jsonString))
- return
- }
- }
|