[hyena] Factor Dump methods into a serializer
- From: Gabriel Burt <gburt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [hyena] Factor Dump methods into a serializer
- Date: Wed, 26 May 2010 02:33:25 +0000 (UTC)
commit f110961d3e11e63bd22a2db1aec8896aa3ca9fac
Author: Gabriel Burt <gabriel burt gmail com>
Date: Fri Feb 12 08:06:44 2010 -0800
Factor Dump methods into a serializer
You can get the string representation of a JsonObject or JsonArray
object via ToString or Dump (StringBuffer, int level). Add unit tests
for the serialization.
src/Hyena/Hyena.Json/IJsonCollection.cs | 2 +
src/Hyena/Hyena.Json/JsonArray.cs | 32 ++++++++--
src/Hyena/Hyena.Json/JsonObject.cs | 32 ++++++++--
src/Hyena/Hyena.Json/Tests/SerializerTests.cs | 75 +++++++++++++++++++++++++
src/Hyena/Hyena.csproj | 1 +
src/Hyena/Makefile.am | 1 +
6 files changed, 129 insertions(+), 14 deletions(-)
---
diff --git a/src/Hyena/Hyena.Json/IJsonCollection.cs b/src/Hyena/Hyena.Json/IJsonCollection.cs
index c9fc698..d995a5e 100644
--- a/src/Hyena/Hyena.Json/IJsonCollection.cs
+++ b/src/Hyena/Hyena.Json/IJsonCollection.cs
@@ -28,6 +28,7 @@
using System;
using System.Collections;
+using System.Text;
namespace Hyena.Json
{
@@ -35,5 +36,6 @@ namespace Hyena.Json
{
void Dump ();
void Dump (int count);
+ void Dump (StringBuilder sb, int level);
}
}
diff --git a/src/Hyena/Hyena.Json/JsonArray.cs b/src/Hyena/Hyena.Json/JsonArray.cs
index 5d86826..23fff5f 100644
--- a/src/Hyena/Hyena.Json/JsonArray.cs
+++ b/src/Hyena/Hyena.Json/JsonArray.cs
@@ -28,6 +28,7 @@
using System;
using System.Collections.Generic;
+using System.Text;
namespace Hyena.Json
{
@@ -38,23 +39,40 @@ namespace Hyena.Json
Dump (1);
}
- public void Dump (int levels)
+ public void Dump (int level)
+ {
+ Console.Write (ToString (level));
+ }
+
+ public override string ToString ()
+ {
+ return ToString (1);
+ }
+
+ public string ToString (int level)
+ {
+ var sb = new StringBuilder ();
+ Dump (sb, level);
+ return sb.ToString ();
+ }
+
+ public void Dump (StringBuilder sb, int level)
{
if (Count == 0) {
- Console.WriteLine ("[ ]");
+ sb.AppendLine ("[ ]");
return;
}
- Console.WriteLine ("[");
+ sb.AppendLine ("[");
foreach (object item in this) {
- Console.Write (String.Empty.PadLeft (levels * 2, ' '));
+ sb.Append (String.Empty.PadLeft (level * 2, ' '));
if (item is IJsonCollection) {
- ((IJsonCollection)item).Dump (levels + 1);
+ ((IJsonCollection)item).Dump (sb, level + 1);
} else {
- Console.WriteLine (item);
+ sb.AppendLine (item.ToString ());
}
}
- Console.WriteLine ("{0}]", String.Empty.PadLeft ((levels - 1) * 2, ' '));
+ sb.AppendFormat ("{0}]\n", String.Empty.PadLeft ((level - 1) * 2, ' '));
}
}
}
diff --git a/src/Hyena/Hyena.Json/JsonObject.cs b/src/Hyena/Hyena.Json/JsonObject.cs
index a9216b1..4ec2091 100644
--- a/src/Hyena/Hyena.Json/JsonObject.cs
+++ b/src/Hyena/Hyena.Json/JsonObject.cs
@@ -28,6 +28,7 @@
using System;
using System.Collections.Generic;
+using System.Text;
namespace Hyena.Json
{
@@ -38,23 +39,40 @@ namespace Hyena.Json
Dump (1);
}
- public void Dump (int levels)
+ public void Dump (int level)
+ {
+ Console.Write (ToString (level));
+ }
+
+ public override string ToString ()
+ {
+ return ToString (1);
+ }
+
+ public string ToString (int level)
+ {
+ var sb = new StringBuilder ();
+ Dump (sb, level);
+ return sb.ToString ();
+ }
+
+ public void Dump (StringBuilder sb, int level)
{
if (Count == 0) {
- Console.WriteLine ("{ }");
+ sb.AppendLine ("{ }");
return;
}
- Console.WriteLine ("{");
+ sb.AppendLine ("{");
foreach (KeyValuePair<string, object> item in this) {
- Console.Write ("{0}\"{1}\" : ", String.Empty.PadLeft (levels * 2, ' '), item.Key);
+ sb.AppendFormat ("{0}\"{1}\" : ", String.Empty.PadLeft (level * 2, ' '), item.Key);
if (item.Value is IJsonCollection) {
- ((IJsonCollection)item.Value).Dump (levels + 1);
+ ((IJsonCollection)item.Value).Dump (sb, level + 1);
} else {
- Console.WriteLine (item.Value);
+ sb.AppendLine (item.Value.ToString ());
}
}
- Console.WriteLine ("{0}}}", String.Empty.PadLeft ((levels - 1) * 2, ' '));
+ sb.AppendFormat ("{0}}}\n", String.Empty.PadLeft ((level - 1) * 2, ' '));
}
}
}
diff --git a/src/Hyena/Hyena.Json/Tests/SerializerTests.cs b/src/Hyena/Hyena.Json/Tests/SerializerTests.cs
new file mode 100644
index 0000000..e9c70c9
--- /dev/null
+++ b/src/Hyena/Hyena.Json/Tests/SerializerTests.cs
@@ -0,0 +1,75 @@
+//
+// SerializerTests.cs
+//
+// Author:
+// Gabriel Burt <gabriel burt gmail com>
+//
+// Copyright (c) 2010 Gabriel Burt
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if ENABLE_TESTS
+
+using System;
+using System.Reflection;
+using NUnit.Framework;
+
+using Hyena.Json;
+
+namespace Hyena.Json.Tests
+{
+ [TestFixture]
+ public class SerializerTests : Hyena.Tests.TestBase
+ {
+ JsonObject obj;
+ const string obj_serialized = "{\n \"foo\" : bar\n \"baz\" : 12,2\n}\n";
+ const string array_serialized = "[\n foo\n {\n \"foo\" : bar\n \"baz\" : 12,2\n }\n]\n";
+
+ [TestFixtureSetUp]
+ public void Setup ()
+ {
+ obj = new JsonObject ();
+ obj["foo"] = "bar";
+ obj["baz"] = 12.2;
+ }
+
+ [Test]
+ public void Literal ()
+ {
+ Assert.AreEqual (obj_serialized, obj.ToString ());
+ }
+
+ [Test]
+ public void Array ()
+ {
+ var a = new JsonArray ();
+ a.Add ("foo");
+ a.Add (obj);
+
+ Assert.AreEqual (array_serialized, a.ToString ());
+ }
+
+ [Test]
+ public void ExtensionMethods ()
+ {
+ }
+ }
+}
+
+#endif
diff --git a/src/Hyena/Hyena.csproj b/src/Hyena/Hyena.csproj
index 3913c93..72028ef 100644
--- a/src/Hyena/Hyena.csproj
+++ b/src/Hyena/Hyena.csproj
@@ -159,6 +159,7 @@
<Compile Include="Hyena.Metrics\ISampleStore.cs" />
<Compile Include="Hyena.Metrics\Tests\MetricsTests.cs" />
<Compile Include="Hyena.Metrics\MemorySampleStore.cs" />
+ <Compile Include="Hyena.Json\Tests\SerializerTests.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="Mono.Posix" />
diff --git a/src/Hyena/Makefile.am b/src/Hyena/Makefile.am
index f026f09..f1f3c7d 100644
--- a/src/Hyena/Makefile.am
+++ b/src/Hyena/Makefile.am
@@ -101,6 +101,7 @@ SOURCES = \
Hyena.Metrics/Sample.cs \
Hyena.Metrics/Tests/MetricsTests.cs \
Hyena.Json/Deserializer.cs \
+ Hyena.Json/Tests/SerializerTests.cs \
Hyena.Json/IJsonCollection.cs \
Hyena.Json/Tests/DeserializerTests.cs \
Hyena/Delegates.cs \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]