From 305e0dc0dadbf14b5a67d013d5838cd894156b39 Mon Sep 17 00:00:00 2001 From: Guido Witmond Date: Mon, 5 Jan 2015 20:54:53 +0100 Subject: [PATCH] Fixed a needless conversion to byte and string. Added comment to show the purpose. Added testcase. --- node.go | 4 +++- xmlx_test.go | 44 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/node.go b/node.go index 3add181..e18df87 100644 --- a/node.go +++ b/node.go @@ -66,9 +66,11 @@ func (this *Node) GetValue() string { return res } +// SetValue sets the value of the node to the given parameter. +// It deletes all children of the node so the old data does not get back at node.GetValue func (this *Node) SetValue(val string) { t := NewNode(NT_TEXT) - t.Value = string([]byte(val)) + t.Value = val t.Parent = this this.Children = []*Node{t} // brutally replace all other children } diff --git a/xmlx_test.go b/xmlx_test.go index 2f50fbd..192aa20 100644 --- a/xmlx_test.go +++ b/xmlx_test.go @@ -4,7 +4,10 @@ package xmlx -import "testing" +import ( + "testing" + "encoding/xml" +) func TestLoadLocal(t *testing.T) { doc := New() @@ -252,6 +255,45 @@ func TestElementNodeValueFetch(t *testing.T) { } } +// node.SetValue(x); x == node.GetValue +func TestElementNodeValueFetchAndSetIdentity (t *testing.T) { + // Setup: xyzzy + // The xmlx parser creates a nameless NT_TEXT node containing the value 'xyzzy' + rootN := NewNode(NT_ROOT) + rootN.Name = xml.Name{Space: "", Local: "root"} + textN := NewNode(NT_ELEMENT) + textN.Name = xml.Name{Space: "", Local: "text"} + namelessN := NewNode(NT_TEXT) + namelessN.Value = "xyzzy" + rootN.AddChild(textN) + textN.AddChild(namelessN) + + targetN := rootN.SelectNode("", "text") // selects textN + if (targetN != textN) { + t.Errorf("Failed to get the correct textN, got %#v", targetN) + } + + // targetN.Value is empty (as the value lives in the childNode) + if (targetN.Value != "") { + t.Errorf("Failed to prepare correctly, TargetN.Value is not empty, it contains %#v", targetN.Value) + } + + // Test correct retrieval + if v := rootN.S("", "text"); v != "xyzzy" { + t.Errorf("Failed to get value as string, got: '%s', wanted: 'xyzzy'", v) + } + + // Set the value of the nameless child + targetN.SetValue("plugh") + + // Test correct retrieval + if v := rootN.S("", "text"); v != "plugh" { + t.Errorf("Failed to get value as string, got: '%s', wanted: 'plugh'", v) + } +} + +// Test as it could be used to read in a XML file, change some values and write it out again. +// For example, a HTML/XML proxy service. func TestElementNodeValueFetchAndSet(t *testing.T) { IndentPrefix = ""