Пример #1
0
        private async Task CoreHandler()
        {
            var canEnter = await once.WaitAsync(BindSettings.DelayTime);

            if (canEnter && Interlocked.CompareExchange(ref notify, 0, 1) == 1)
            {
                try
                {
                    var infos = ChangeWatcher.ChangeInfos;
                    ChangeWatcher.Clear();
                    var repo  = ChangeReport.FromChanges(GetConfiguration(), infos);
                    var saver = new ChangeSaver(repo, BindSettings.Conditions);
                    saver.EmitAndSave();
                    OnConfigChanged(infos);
                    Saved?.Invoke(this, infos);
                }
                catch (Exception ex)
                {
                    SaveException?.Invoke(this, ex);
                }
                finally
                {
                    Interlocked.Exchange(ref notify, 1);
                }
            }
        }
Пример #2
0
        public void EmitWithTransfer_MustReturnResult()
        {
            var reports = new ChangeReport[]
            {
                new ChangeReport(null, null, new IConfigurationChangeInfo[]
                {
                    new ConfigurationChangeInfo()
                })
            };
            var condition = new IChangeTransferCondition[]
            {
                new NullTransfer()
            };
            var saver = new ChangeSaver(reports, condition);
            var map   = saver.Emit();

            Assert.AreEqual(1, map.Count);
            Assert.IsTrue(map.ContainsKey(reports[0]));
            var res = map[reports[0]];

            Assert.AreEqual(map.Keys.First(), res.Report);
            Assert.AreEqual(condition[0], res.Transfer);
            Assert.AreEqual(condition[0], res.SelectCondition);
            Assert.AreEqual(string.Empty, res.Transfed);
        }
Пример #3
0
        public void EmitWithNoting_MutReturnEmptyDic()
        {
            var reports   = new ChangeReport[0];
            var condition = new IChangeTransferCondition[0];
            var saver     = new ChangeSaver(reports, condition);
            var map       = saver.Emit();

            Assert.AreEqual(0, map.Count);
        }
Пример #4
0
        public void EmptyChangeInfo_MustSkip()
        {
            var reports = new ChangeReport[]
            {
                new ChangeReport(null, null, new IConfigurationChangeInfo[0])
            };
            var saver = new ChangeSaver(reports, new NullTransfer());
            var res   = saver.Emit();

            Assert.AreEqual(0, res.Count);
        }
Пример #5
0
        public void PropertyValueMustEqualInput()
        {
            var reports   = new ChangeReport[0];
            var condition = new IChangeTransferCondition[0];
            var saver     = new ChangeSaver(reports, condition);

            Assert.AreEqual(reports, saver.Reports);
            Assert.AreEqual(condition, saver.Transfers);

            saver = new ChangeSaver(reports, (IEnumerable <IChangeTransferCondition>)condition);
            Assert.AreEqual(reports, saver.Reports);
            Assert.AreEqual(condition, saver.Transfers);
        }
Пример #6
0
        public void CallEmitAndSave_MustReturnReport()
        {
            var reports = new ChangeReport[]
            {
                new ChangeReport(null, null, new IConfigurationChangeInfo[]
                {
                    new ConfigurationChangeInfo()
                })
            };
            var saver = new IChangeTransferCondition[]
            {
                new NullTransfer()
            };
            var rep = new ChangeSaver(reports, saver);
            var res = ChangeSaverExtensions.EmitAndSave(rep);

            Assert.IsNotNull(res);
        }
Пример #7
0
 private async Task CoreHandler()
 {
     if (notify && await once.WaitAsync(BindSettings.DelayTime))
     {
         try
         {
             var infos = ChangeWatcher.ChangeInfos;
             ChangeWatcher.Clear();
             var repo  = ChangeReport.FromChanges(ChangeNotifyable, infos);
             var saver = new ChangeSaver(repo, BindSettings.Conditions);
             var res   = saver.EmitAndSave();
             Updater(BindValue);
             Saved?.Invoke(this, infos);
         }
         catch (Exception ex)
         {
             SaveException?.Invoke(this, ex);
         }
     }
 }