public void DataContainerBase_SetBinding_MustBindOneWayToSource()
        {
            const string PROP_NAME = "IntProperty";
            const int    VALUE     = 42;
            const int    NEW_VALUE = 14;

            DataContainerBase property = (DataContainerBase)PropertyContainerBuilder.Create()
                                         .Property(PROP_NAME, VALUE)
                                         .Build();

            var bindingTarget = new BindingTestObject();

            Assert.NotEqual(VALUE, bindingTarget.IntProperty);

            property.SetBinding(PROP_NAME, () => bindingTarget.IntProperty, BindingMode.OneWayToSource);

            Assert.Equal(VALUE, bindingTarget.IntProperty);

            property.SetValue(PROP_NAME, NEW_VALUE);

            Assert.NotEqual(NEW_VALUE, bindingTarget.IntProperty);
            Assert.Equal(VALUE, bindingTarget.IntProperty);

            bindingTarget.IntProperty = 32;

            int propertyValue = 0;

            property.GetValue(PROP_NAME, ref propertyValue);

            property.RemoveBinding(PROP_NAME, () => bindingTarget.IntProperty);

            Assert.Equal(propertyValue, bindingTarget.IntProperty);
        }
Пример #2
0
 public List<ITreeItem> GetColumns(DataContainerBase table)
 {
     if( table.Columns.Count == 0 ) {
         table.Columns.AddRange(_db.GetColumns(table.Name, table.Parent.Name).ConvertAll(t => new Column(t)));
     }
     return table.Columns.Cast<ITreeItem>().ToList();
 }
Пример #3
0
 public List <ITreeItem> GetColumns(DataContainerBase table)
 {
     if (table.Columns.Count == 0)
     {
         table.Columns.AddRange(_db.GetColumns(table.Name, table.Parent.Name).ConvertAll(t => new Column(t)));
     }
     return(table.Columns.Cast <ITreeItem>().ToList());
 }
        public void DataContainerAutoUpdater_ShouldAddNewValuesWithMultiLevelData()
        {
            string path = Path.GetTempFileName();

            DataContainerBase A = (DataContainerBase)DataContainerBuilder.Create("A")
                                  .Data("A", 1)
                                  .Data("B", 2)
                                  .Data("D", 3)
                                  .DataContainer("AB", b => b
                                                 .Data("AB1", 1))
                                  .Build();

            A.FilePath = path;
            A.SaveAsXml(path);

            var tester = new AutoUpateTester(A);

            tester.AutoUpdater.PollingInterval = 10;

            // allow adding
            tester.AutoUpdater.CanAddItems = true;

            Assert.False(tester.UpdateStartedInvoked);
            Assert.False(tester.UpdateFinishedInvoked);

            IDataContainer Updated = (DataContainerBase)DataContainerBuilder.Create("A")
                                     .Data("A", 1)
                                     .Data("B", 2)
                                     .Data("D", 3)
                                     .DataContainer("AB", b => b
                                                    .Data("AB1", 1)
                                                    .Data("AB2", 2))
                                     .Build();

            Updated.SaveAsXml(path);

            // wait timer
            Thread.Sleep((int)tester.AutoUpdater.PollingInterval + 20);

            Assert.True(tester.UpdateStartedInvoked);
            Assert.True(tester.UpdateFinishedInvoked);

            IDataContainer AB = (IDataContainer)A["AB"];

            // 1 value added
            Assert.Equal(2, AB.Count);
            // check if value exist
            Assert.True(AB.ContainsData("AB2"));
            // check it has correct value
            Assert.Equal(2, (int)AB["AB2"]);

            File.Delete(path);
        }
        public void DataContainerBase_Get_MustReturnDefaultIfNotPresent()
        {
            const string PROP_NAME = "IntProperty";

            DataContainerBase property = (DataContainerBase)PropertyContainerBuilder.Create()
                                         .Property(PROP_NAME, 42)
                                         .Build();

            int  prop             = 0;
            bool containsProperty = property.GetValue("blah", ref prop);

            Assert.False(containsProperty);
            Assert.Equal(default, prop);
        public void DataContainerBase_CanAccessChildDataFromRoot()
        {
            DataContainerBase Root = (DataContainerBase)DataContainerBuilder.Create("Root")
                                     .DataContainer("Child", b => b
                                                    .DataContainer("GrandChild", c => c
                                                                   .Data("A", 1)
                                                                   .Data("B", 2)))
                                     .Build();

            int a = Root.GetValue(new Key <int>("Child.GrandChild.A"));
            int b = Root.GetValue(new Key <int>("Child.GrandChild.B"));

            Assert.Equal(1, a);
            Assert.Equal(2, b);
        }
        public void DataContainerBase_Morph_MustRecreatesSameObject(Type t)
        {
            var obj = Activator.CreateInstance(t);

            DataContainerBase data = (DataContainerBase)DataContainerBuilder.CreateObject("Untitiled", obj);

            var morphedData = data.Morph();

            foreach (var prop in t.GetProperties())
            {
                var expected   = prop.GetValue(obj);
                var actualData = prop.GetValue(morphedData);

                Assert.Equal(expected, actualData);
            }
        }
        public void DataContainerAutoUpdater_ShouldAddNewValues()
        {
            string path = Path.GetTempFileName();

            DataContainerBase A = (DataContainerBase)DataContainerBuilder.Create("A")
                                  .Data("A", 1)
                                  .Data("B", 2)
                                  .Data("D", 3)
                                  .Build();

            A.FilePath = path;
            A.SaveAsXml(path);

            var tester = new AutoUpateTester(A);

            Assert.False(tester.UpdateStartedInvoked);
            Assert.False(tester.UpdateFinishedInvoked);

            // allow adding new items
            tester.AutoUpdater.CanAddItems     = true;
            tester.AutoUpdater.PollingInterval = 10;

            IDataContainer Updated = (DataContainerBase)DataContainerBuilder.Create("A")
                                     .Data("A", 1)
                                     .Data("B", 2)
                                     .Data("C", 3)
                                     .Data("D", 5)
                                     .Build();

            Updated.SaveAsXml(path);

            // wait timer
            Thread.Sleep((int)tester.AutoUpdater.PollingInterval + 20);

            Assert.True(tester.UpdateStartedInvoked);
            Assert.True(tester.UpdateFinishedInvoked);

            // 1 new property added
            Assert.Equal(4, A.Count);
            // new value is present
            Assert.True(A.ContainsData("C"));
            // has correct value
            Assert.Equal(3, (int)A["C"]);

            File.Delete(path);
        }
        public void DataContainerAutoUpdater_ShouldUpdateValuesWithMultiLevelData()
        {
            string path = Path.GetTempFileName();

            DataContainerBase A = (DataContainerBase)DataContainerBuilder.Create("A")
                                  .Data("A", 1)
                                  .Data("B", 2)
                                  .Data("D", 3)
                                  .DataContainer("AB", b => b
                                                 .Data("AB1", 1))
                                  .Build();

            A.FilePath = path;
            A.SaveAsXml(path);

            var tester = new AutoUpateTester(A);

            tester.AutoUpdater.PollingInterval = 10;

            Assert.False(tester.UpdateStartedInvoked);
            Assert.False(tester.UpdateFinishedInvoked);

            IDataContainer Updated = (DataContainerBase)DataContainerBuilder.Create("A")
                                     .Data("A", 1)
                                     .Data("B", 2)
                                     .Data("D", 3)
                                     .DataContainer("AB", b => b
                                                    .Data("AB1", 2))
                                     .Build();

            Updated.SaveAsXml(path);

            // wait timer
            Thread.Sleep((int)tester.AutoUpdater.PollingInterval + 20);

            Assert.True(tester.UpdateStartedInvoked);
            Assert.True(tester.UpdateFinishedInvoked);

            IDataContainer AB   = (IDataContainer)A["AB"];
            IDataContainer U_AB = (IDataContainer)Updated["AB"];

            Assert.Equal(2, (int)AB["AB1"]);
            Assert.Equal(U_AB["AB1"], AB["AB1"]);

            File.Delete(path);
        }
        public void DataContainerAutoUpdater_ShouldRemoveValues()
        {
            string path = Path.GetTempFileName();

            DataContainerBase A = (DataContainerBase)DataContainerBuilder.Create("A")
                                  .Data("A", 1)
                                  .Data("B", 2)
                                  .Data("D", 3)
                                  .Build();

            A.FilePath = path;
            A.SaveAsXml(path);

            var tester = new AutoUpateTester(A);

            tester.AutoUpdater.PollingInterval = 10;

            Assert.False(tester.UpdateStartedInvoked);
            Assert.False(tester.UpdateFinishedInvoked);

            // allow removing items
            tester.AutoUpdater.CanRemoveItems = true;

            IDataContainer Updated = (DataContainerBase)DataContainerBuilder.Create("A")
                                     .Data("A", 1)
                                     .Data("D", 5)
                                     .Build();

            Updated.SaveAsXml(path);

            // wait timer
            Thread.Sleep((int)tester.AutoUpdater.PollingInterval + 20);

            Assert.True(tester.UpdateStartedInvoked);
            Assert.True(tester.UpdateFinishedInvoked);

            // 1 new property removed
            Assert.Equal(2, A.Count);
            // new value is not present
            Assert.False(A.ContainsData("B"));

            File.Delete(path);
        }
        public void DataContainerBase_Get_MustGetCorrectValue()
        {
            const string PROP_NAME = "IntProperty";

            DataContainerBase property = (DataContainerBase)PropertyContainerBuilder.Create()
                                         .Property(PROP_NAME, 42)
                                         .Build();

            int  prop             = 0;
            bool containsProperty = property.GetValue(PROP_NAME, ref prop);

            Assert.True(containsProperty);
            Assert.NotEqual(0, prop);
            Assert.Equal(42, prop);

            int prop2 = property.GetValue <int>(PROP_NAME);

            Assert.NotEqual(0, prop2);
            Assert.Equal(42, prop2);
        }
        public void DataContainerBase_Store_MustDeserialize(Type t)
        {
            var obj = Activator.CreateInstance(t);

            DataContainerBase data = (DataContainerBase)DataContainerBuilder.CreateObject("Untitiled", obj);

            var serializedData = XmlHelper.SerializeToString(data);

            var recreatedData = XmlHelper.DeserializeFromString <System.Configuration.DataContainer>(serializedData);

            Assert.NotNull(recreatedData);

            var morphedData = recreatedData.Morph();

            foreach (var prop in t.GetProperties())
            {
                var expected   = prop.GetValue(obj);
                var actualData = prop.GetValue(morphedData);

                Assert.Equal(expected, actualData);
            }
        }