using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Topten.JsonKit;
using System.IO;
using System.Reflection;
using Xunit;

namespace TestCases
{
    [Obfuscation(Exclude = true, ApplyToMembers = true)]
    public class TestExplicitMembersOnly
    {
        class Thing
        {
            public string Apples = "apples";
        }

        [Json(ExplicitMembersOnly = true)]
        class Thing2
        {
            public string Apples = "apples";
        }

        [Json(ExplicitMembersOnly = true)]
        class Thing3
        {
            [Json("apples")]
            public string Apples = "apples";
        }

        [Fact]
        public void TestNonDecoratedClass()
        {
            var thing = new Thing();

            // Save it
            var json = Json.Format(thing);

            // Check the object kinds were written out
            Assert.Contains("\"apples\":", json);
        }

        [Fact]
        public void TestDecoratedEmptyClass()
        {
            var thing = new Thing2();

            // Save it
            var json = Json.Format(thing);

            // Check the object kinds were written out
            Assert.DoesNotContain("\"apples\":", json);
        }

        [Fact]
        public void TestDecoratedNonEmptyClass()
        {
            var thing = new Thing3();

            // Save it
            var json = Json.Format(thing);

            // Check the object kinds were written out
            Assert.Contains("\"apples\":", json);
        }

    }
}