Esempio n. 1
0
        public void FindOrCreateReversalEntry()
        {
            int            wsEn     = Cache.DefaultAnalWs;
            IReversalIndex revIndex = null;

            UndoableUnitOfWorkHelper.Do("undo make index", "redo make index", m_actionHandler,
                                        () =>
            {
                revIndex =
                    Cache.ServiceLocator.GetInstance <IReversalIndexRepository>().FindOrCreateIndexForWs(wsEn);
            });
            IReversalIndexEntry empty = null;

            UndoableUnitOfWorkHelper.Do("undo make rie", "redo make rie", m_actionHandler,
                                        () =>
            {
                empty = revIndex.FindOrCreateReversalEntry("");
            });
            IReversalIndexEntry bank = null;

            UndoableUnitOfWorkHelper.Do("undo make rie", "redo make rie", m_actionHandler,
                                        () =>
            {
                bank = revIndex.FindOrCreateReversalEntry("bank");
            });

            Assert.IsNotNull(bank);
            Assert.AreEqual("bank", bank.LongName);

            m_actionHandler.Undo();             // deletes bank

            IReversalIndexEntry bank2 = null;

            UndoableUnitOfWorkHelper.Do("undo make rie", "redo make rie", m_actionHandler,
                                        () =>
            {
                bank2 = revIndex.FindOrCreateReversalEntry("bank");
            });
            Assert.AreNotEqual(bank, bank2, "should make a new rie after Undo deletes old one");

            // Enhance JohnT: if we could look for one without creating it, we should test that Redo will
            // reinstate the old object. But we can't Redo that action, because we've made new actions since.

            bank = bank2;             // treat that as the base from here on.
            UndoableUnitOfWorkHelper.Do("undo make rie", "redo make rie", m_actionHandler,
                                        () =>
            {
                bank2 = revIndex.FindOrCreateReversalEntry("bank");
            });
            Assert.AreEqual(bank, bank2, "should find the same RIE for the same name");

            IReversalIndexEntry moneybank = null;

            UndoableUnitOfWorkHelper.Do("undo set rie name", "redo set rie name", m_actionHandler,
                                        () =>
            {
                bank.ReversalForm.set_String(wsEn, bank.Cache.TsStrFactory.MakeString("moneybank", wsEn));
                moneybank = revIndex.FindOrCreateReversalEntry("moneybank");
            });
            Assert.AreEqual(bank, moneybank, "changing existing name should allow us to find old one under new name");

            m_actionHandler.Undo();                            // name is back to 'bank'
            bank = revIndex.FindOrCreateReversalEntry("bank"); // should not need UOW
            Assert.AreEqual(bank, moneybank, "after Undo should find same item under original name");
            m_actionHandler.Redo();
            moneybank = revIndex.FindOrCreateReversalEntry("moneybank");
            Assert.AreEqual(bank, moneybank, "after Redodo should find same item under new name");

            UndoableUnitOfWorkHelper.Do("undo rest of stuff", "redo rest of stuff", m_actionHandler,
                                        () =>
            {
                bank = revIndex.FindOrCreateReversalEntry("bank");
                Assert.IsNotNull(bank);
                Assert.AreNotEqual(bank, moneybank,
                                   "after rename, should make new object when looking up old name");

                var riverbank = revIndex.FindOrCreateReversalEntry("bank:of river");
                Assert.AreEqual("of river", riverbank.ShortName);
                Assert.AreEqual("bank: of river", riverbank.LongName);
                Assert.AreEqual(bank, riverbank.Owner);
                var riverbank2 = revIndex.FindOrCreateReversalEntry("bank: of river");
                Assert.AreEqual(riverbank, riverbank2);

                moneybank = revIndex.FindOrCreateReversalEntry("bank: for money");
                Assert.IsNotNull(moneybank);
                Assert.AreNotEqual(riverbank, moneybank);
                Assert.AreEqual("bank: for money", moneybank.LongName);

                var planebank = revIndex.FindOrCreateReversalEntry("bank: tilt:plane");
                Assert.AreEqual("bank: tilt: plane", planebank.LongName);
                Assert.AreEqual(bank, planebank.Owner.Owner);
            });
        }