Merge pull request #129 from loicwolff/master
Merge minor changes to JsonConvert.cs
This commit is contained in:
		
						commit
						d5cb647e0a
					
				| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 | 
			
		||||
namespace Ooui
 | 
			
		||||
{
 | 
			
		||||
    class JsonConvert
 | 
			
		||||
    public class JsonConvert
 | 
			
		||||
    {
 | 
			
		||||
        public static void WriteJsonString (System.IO.TextWriter w, string s)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -36,18 +36,11 @@ namespace Ooui
 | 
			
		|||
 | 
			
		||||
        public static void WriteJsonValue (System.IO.TextWriter w, object value)
 | 
			
		||||
        {
 | 
			
		||||
            if (value == null) {
 | 
			
		||||
                w.Write ("null");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            var s = value as string;
 | 
			
		||||
            if (s != null) {
 | 
			
		||||
            switch(value) {
 | 
			
		||||
                case string s:
 | 
			
		||||
                    WriteJsonString (w, s);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var a = value as Array;
 | 
			
		||||
            if (a != null) {
 | 
			
		||||
                    break;
 | 
			
		||||
                case Array a:
 | 
			
		||||
                    w.Write ('[');
 | 
			
		||||
                    var head = "";
 | 
			
		||||
                    foreach (var o in a) {
 | 
			
		||||
| 
						 | 
				
			
			@ -56,40 +49,31 @@ namespace Ooui
 | 
			
		|||
                        head = ",";
 | 
			
		||||
                    }
 | 
			
		||||
                    w.Write (']');
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var e = value as EventTarget;
 | 
			
		||||
            if (e != null) {
 | 
			
		||||
                    break;
 | 
			
		||||
                case EventTarget e:
 | 
			
		||||
                    w.Write ('\"');
 | 
			
		||||
                    w.Write (e.Id);
 | 
			
		||||
                    w.Write ('\"');
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (value is Color) {
 | 
			
		||||
                WriteJsonString (w, ((Color)value).ToString ());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var icult = System.Globalization.CultureInfo.InvariantCulture;
 | 
			
		||||
 | 
			
		||||
            if (value is double) {
 | 
			
		||||
                w.Write (((double)value).ToString (icult));
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (value is int) {
 | 
			
		||||
                w.Write (((int)value).ToString (icult));
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (value is float) {
 | 
			
		||||
                w.Write (((float)value).ToString (icult));
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
                    break;
 | 
			
		||||
                case Color c:
 | 
			
		||||
                    WriteJsonString (w, c.ToString ());
 | 
			
		||||
                    break;
 | 
			
		||||
                case double d:
 | 
			
		||||
                    w.Write (d.ToString (System.Globalization.CultureInfo.InvariantCulture));
 | 
			
		||||
                    break;
 | 
			
		||||
                case int i:
 | 
			
		||||
                    w.Write (i.ToString (System.Globalization.CultureInfo.InvariantCulture));
 | 
			
		||||
                    break;
 | 
			
		||||
                case float f:
 | 
			
		||||
                    w.Write (f.ToString (System.Globalization.CultureInfo.InvariantCulture));
 | 
			
		||||
                    break;
 | 
			
		||||
                case null:
 | 
			
		||||
                    w.Write ("null");
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
                    w.Write (Newtonsoft.Json.JsonConvert.SerializeObject (value));
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static string SerializeObject (object value)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
 | 
			
		|||
using Ooui;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace Tests
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -50,5 +51,95 @@ namespace Tests
 | 
			
		|||
                             "{\"m\":\"call\",\"id\":\"⦙\",\"k\":\"insertBefore\",\"v\":[\"⦙\",null]}" +
 | 
			
		||||
                             "{\"m\":\"listen\",\"id\":\"⦙\",\"k\":\"click\"}", NoId (sw.ToString ()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [TestMethod]
 | 
			
		||||
        public void JsonConvertValueNull ()
 | 
			
		||||
        {
 | 
			
		||||
            TextWriter w = new InMemoryTextWriter ();
 | 
			
		||||
            JsonConvert.WriteJsonValue (w, null);
 | 
			
		||||
            Assert.AreEqual ("null", w.ToString ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [TestMethod]
 | 
			
		||||
        public void JsonConvertValueString ()
 | 
			
		||||
        {
 | 
			
		||||
            TextWriter w = new InMemoryTextWriter ();
 | 
			
		||||
            JsonConvert.WriteJsonValue (w, "string");
 | 
			
		||||
            Assert.AreEqual ("\"string\"", w.ToString ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [TestMethod]
 | 
			
		||||
        public void JsonConvertValueArray ()
 | 
			
		||||
        {
 | 
			
		||||
            TextWriter w = new InMemoryTextWriter();
 | 
			
		||||
            JsonConvert.WriteJsonValue (w, new[] { 1, 2, 3 });
 | 
			
		||||
            Assert.AreEqual("[1,2,3]", w.ToString ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [TestMethod]
 | 
			
		||||
        public void JsonConvertValueEventTarget ()
 | 
			
		||||
        {
 | 
			
		||||
            TextWriter w = new InMemoryTextWriter ();
 | 
			
		||||
            var textNode = new TextNode ();
 | 
			
		||||
            JsonConvert.WriteJsonValue (w, textNode);
 | 
			
		||||
            Assert.AreEqual ($"\"{textNode.Id}\"", w.ToString ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [TestMethod]
 | 
			
		||||
        public void JsonConvertValueColor ()
 | 
			
		||||
        {
 | 
			
		||||
            TextWriter w = new InMemoryTextWriter ();
 | 
			
		||||
            var color = new Color (255, 255, 255, 0);
 | 
			
		||||
            JsonConvert.WriteJsonValue (w, color);
 | 
			
		||||
            Assert.AreEqual ("\"rgba(255,255,255,0)\"", w.ToString ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [TestMethod]
 | 
			
		||||
        public void JsonConvertValueDouble ()
 | 
			
		||||
        {
 | 
			
		||||
            TextWriter w = new InMemoryTextWriter ();
 | 
			
		||||
            double d = 4.5;
 | 
			
		||||
            JsonConvert.WriteJsonValue (w, d);
 | 
			
		||||
            Assert.AreEqual ("4.5", w.ToString ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [TestMethod]
 | 
			
		||||
        public void JsonConvertValueInt ()
 | 
			
		||||
        {
 | 
			
		||||
            TextWriter w = new InMemoryTextWriter ();
 | 
			
		||||
            int i = 45;
 | 
			
		||||
            JsonConvert.WriteJsonValue (w, i);
 | 
			
		||||
            Assert.AreEqual ("45", w.ToString ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [TestMethod]
 | 
			
		||||
        public void JsonConvertValueFloat ()
 | 
			
		||||
        {
 | 
			
		||||
            TextWriter w = new InMemoryTextWriter ();
 | 
			
		||||
            float f = 45.5f;
 | 
			
		||||
            JsonConvert.WriteJsonValue (w, f);
 | 
			
		||||
            Assert.AreEqual ("45.5", w.ToString ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [TestMethod]
 | 
			
		||||
        public void JsonConvertValueOther ()
 | 
			
		||||
        {
 | 
			
		||||
            TextWriter w = new InMemoryTextWriter ();
 | 
			
		||||
            JsonConvert.WriteJsonValue (w, new { foo = "bar" });
 | 
			
		||||
            Assert.AreEqual ("{\"foo\":\"bar\"}", w.ToString ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        class InMemoryTextWriter : TextWriter
 | 
			
		||||
        {
 | 
			
		||||
            private StringBuilder builder = new StringBuilder ();
 | 
			
		||||
 | 
			
		||||
            public InMemoryTextWriter() { }
 | 
			
		||||
 | 
			
		||||
            public override void Write(char value) => builder.Append(value);
 | 
			
		||||
 | 
			
		||||
            public override string ToString() => builder.ToString();
 | 
			
		||||
 | 
			
		||||
            public override Encoding Encoding => Encoding.UTF8;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue