Merge pull request #2400 from esdrubal/extrahead
[mono.git] / mcs / class / System / Test / System.Configuration / ApplicationSettingsBaseTest.cs
index 4325fad2ff486b8a9d861b411573fa969ec6348a..e12f53291d208b523a3b974f70e561018a4a9ea2 100644 (file)
 
 //#define SPEW
 
-#if NET_2_0
-
 using System;
+using System.IO;
+using System.Xml;
+using System.Xml.Serialization;
+using System.Xml.Schema;
 using System.Text;
 using System.Configuration;
 using System.ComponentModel;
@@ -169,12 +171,12 @@ namespace MonoTests.System.Configuration {
 
                        IEnumerator props = settings.Properties.GetEnumerator();
                        Assert.IsNotNull (props, "A1");
-                       
-                       Assert.IsTrue (props.MoveNext(), "A2");
-                       Assert.AreEqual ("Address", ((SettingsProperty)props.Current).Name, "A3");
 
                        Assert.IsTrue (props.MoveNext(), "A4");
-                       Assert.AreEqual ("Username", ((SettingsProperty)props.Current).Name, "A5");
+                       Assert.AreEqual ("Address", ((SettingsProperty)props.Current).Name, "A5");
+                       
+                       Assert.IsTrue (props.MoveNext(), "A2");
+                       Assert.AreEqual ("Username", ((SettingsProperty)props.Current).Name, "A3");
 
                        Assert.AreEqual ("root", settings.Username, "A6");
                        Assert.AreEqual ("8 Cambridge Center", settings.Address, "A7");
@@ -285,18 +287,7 @@ namespace MonoTests.System.Configuration {
                [Test]
                public void TestSettings2_Properties ()
                {
-                       // This test will fail when there are newer versions
-                       // of the test assemblies - so conditionalize it in
-                       // such cases.
-#if TARGET_JVM
-                       string expected = "MonoTests.System.Configuration.ProviderPoker, System.Test, Version=0.0.0.0";
-#elif NET_4_5
-                       string expected = "MonoTests.System.Configuration.ProviderPoker, System_test_net_4_5, Version=0.0.0.0";
-#elif NET_4_0
-                       string expected = "MonoTests.System.Configuration.ProviderPoker, System_test_net_4_0, Version=0.0.0.0";
-#else
-                       string expected = "MonoTests.System.Configuration.ProviderPoker, System_test_net_2_0, Version=0.0.0.0";
-#endif
+                       string expected = "MonoTests.System.Configuration.ProviderPoker, net_4_x_System_test, Version=0.0.0.0";
                        Assert.AreEqual (expected, new SettingsProviderAttribute (typeof (ProviderPoker)).ProviderTypeName.Substring (0, expected.Length), "#1");
                        TestSettings2 settings = new TestSettings2 ();
 
@@ -379,15 +370,154 @@ namespace MonoTests.System.Configuration {
                 }
 
                 [Test] // bug #532180
-                public void DefaultSettingValueAsWithReload() {
+                public void DefaultSettingValueAsWithReload() 
+               {
                         Bug532180 settings = new Bug532180();
-                        Assert.AreEqual(10, settings.IntSetting, "A1");
+                        Assert.AreEqual (10, settings.IntSetting, "A1");
                         settings.IntSetting = 1;
-                        Assert.AreEqual(1, settings.IntSetting, "A2");
-                        settings.Reload();
-                        Assert.AreEqual(10, settings.IntSetting, "A3");
+                        Assert.AreEqual (1, settings.IntSetting, "A2");
+                        settings.Reload ();
+                        Assert.AreEqual (10, settings.IntSetting, "A3");
                 }                        
+               
+               class Bug8592ConfHolder : ApplicationSettingsBase {
+                       [UserScopedSetting]
+                       public string TestKey1OnHolder { 
+                               get { return (string) this ["TestKey1OnHolder"] ?? ""; }
+                               set { this ["TestKey1OnHolder"] = value; }
+                       }
+               }
+
+               [Test]
+               public void TestBug8592BasicOperations ()
+               {
+                       var holder = new Bug8592ConfHolder ();
+                       holder.Reset ();
+                       holder.Save ();
+                       Assert.AreEqual ("", holder.TestKey1OnHolder, "#1");
+                       holder.TestKey1OnHolder = "candy";
+                       Assert.AreEqual ("candy", holder.TestKey1OnHolder, "#2");
+                       holder.Reload ();
+                       Assert.AreEqual ("", holder.TestKey1OnHolder, "#3");
+                       holder.TestKey1OnHolder = "candy";
+                       Assert.AreEqual ("candy", holder.TestKey1OnHolder, "#4");
+                       holder.Save ();
+                       Assert.AreEqual ("candy", holder.TestKey1OnHolder, "#5");
+                       holder.Reload ();
+                       Assert.AreEqual ("candy", holder.TestKey1OnHolder, "#6");
+                       holder.Reset ();
+                       Assert.AreEqual ("", holder.TestKey1OnHolder, "#7");
+               }
+
+               class Bug8533ConfHolder1 : ApplicationSettingsBase {
+                       [UserScopedSetting]
+                       public string TestKey1OnHolder1 {
+                               get { return (string) this ["TestKey1OnHolder1"] ?? ""; }
+                               set { this ["TestKey1OnHolder1"] = value; }
+                       }
+
+                       [UserScopedSetting]
+                       public string TestKey1OnHolder2 {
+                               get { return (string) this ["TestKey1OnHolder2"] ?? ""; }
+                               set { this ["TestKey1OnHolder2"] = value; }
+                       }
+                       
+                       [UserScopedSetting]
+                       public string TestKey {
+                               get { return (string) this ["TestKey"] ?? ""; }
+                               set { this ["TestKey"] = value; }
+                       }
+               }
+
+               class Bug8533ConfHolder2 : ApplicationSettingsBase {
+                       [UserScopedSetting]
+                       public string TestKey1OnHolder2 {
+                               get { return (string) this ["TestKey1OnHolder2"] ?? ""; }
+                               set { this ["TestKey1OnHolder2"] = value; }
+                       }
+
+                       [UserScopedSetting]
+                       public string TestKey {
+                               get { return (string) this ["TestKey"] ?? ""; }
+                               set { this ["TestKey"] = value; }
+                       }
+               }
+
+               [Test]
+               public void TestBug8533ConfHandlerWronglyMixedUp ()
+               {
+                       var holder1 = new Bug8533ConfHolder1 ();
+                       holder1.TestKey1OnHolder1 = "candy";
+                       holder1.TestKey = "eclair";
+                       Assert.AreEqual ("", holder1.TestKey1OnHolder2, "#-1");
+                       holder1.Save ();
+                       Assert.AreEqual ("", holder1.TestKey1OnHolder2, "#0");
+                       holder1.Reload ();
+                       
+                       var holder2 = new Bug8533ConfHolder2 ();
+                       holder2.TestKey1OnHolder2 = "donut";
+                       Assert.AreEqual ("", holder1.TestKey1OnHolder2, "#1");
+                       holder2.Save ();
+                       holder2.Reload();
+                       Assert.AreEqual ("candy", holder1.TestKey1OnHolder1, "#2");
+                       Assert.AreEqual ("donut", holder2.TestKey1OnHolder2, "#3");
+                       Assert.AreEqual ("eclair", holder1.TestKey, "#4");
+                       Assert.AreEqual ("", holder2.TestKey, "#5");
+               }
+
+               class Settings : ApplicationSettingsBase
+               {
+                       [UserScopedSetting]
+                       public WindowPositionList WindowPositions {
+                               get {
+                                       return ((WindowPositionList)(this ["WindowPositions"]));
+                               }
+                               set {
+                                       this ["WindowPositions"] = value;
+                               }
+                       }
+               }
+
+               [Serializable]
+               public class WindowPositionList : IXmlSerializable
+               {
+                       public XmlSchema GetSchema ()
+                       {
+                               return null;
+                       }
+
+                       public void ReadXml (XmlReader reader)
+                       {
+                               reader.ReadStartElement ("sampleNode");
+                               reader.ReadEndElement ();
+                       }
+
+                       public void WriteXml (XmlWriter writer)
+                       {
+                               writer.WriteStartElement ("sampleNode");
+                               writer.WriteEndElement ();
+                       }
+               }
+
+               [Test] //Covers 36388
+               public void XmlHeader ()
+               {
+                       try {
+                               var settings = new Settings ();
+                               settings.Reset ();
+                               settings.Save ();
+
+                               settings.WindowPositions = new WindowPositionList ();
+
+                               settings.Save ();
+                               // If Reloads fails then saved data is corrupted
+                               settings.Reload ();
+                       } catch (ConfigurationErrorsException e) {
+                               // Delete corrupted config file so other test won't fail.
+                               File.Delete (e.Filename);
+                               Assert.Fail ("Invalid data was saved to config file.");
+                       }
+               }
        }
 }
 
-#endif