public void ActionWorkerAllOnUITypeTesting()
        {
            using (ShimsContext.Create())
              {
            Session session = new Microsoft.Deployment.WindowsInstaller.Fakes.ShimSession().Instance;
            Microsoft.Deployment.WindowsInstaller.Fakes.ShimSession.AllInstances.GetModeInstallRunMode =
              (@this, mode) => { return mode == InstallRunMode.Scheduled; };

            // Установим по умолчанию сессию, иначе будут вызываться с других тестом Stub-объекты.
            // Не понятно почему, разобрать позже...
            session.SetDefaultSessionService(null);

            var workers = new[]
            {
              new { Worker = (IActionWorker)new StubActionCheckConnectionWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionDatabaseUIControlWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionDefineSqlServerPathWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionInstallingExtendedProceduresWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionMefControlWorker(session), ServerMode = true, ClientMode = true },
              new { Worker = (IActionWorker)new StubActionRestoringDatabaseWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionRunSqlScriptNewDbWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionRunSqlScriptExistingDbWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionSelectDatabasesWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionServerUIControlWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionTempDirectoryControlWorker(session), ServerMode = true, ClientMode = true },
              new { Worker = (IActionWorker)new StubActionUITypeWorker(session), ServerMode = true, ClientMode = true },

              new { Worker = (IActionWorker)new StubActionInitializationFinishInfoWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionWidgetCreaterWorker(session), ServerMode = true, ClientMode = false },
              new { Worker = (IActionWorker)new StubActionInstallReportWorker(session), ServerMode = true, ClientMode = true }
            };

            // Берем все не абстрактные типы с реализацией IActionWorker и проверяем количество в тестируемом списке.
            var workerTypes = typeof(IActionWorker).Assembly.GetTypes().
              Where(v => !v.IsAbstract && v.GetInterface(typeof(IActionWorker).Name) != null).ToArray();

            Assert.AreEqual(workerTypes.Count(), workers.Length, string.Format("Не все тесты IActionWorker реализованы ({0} из {1}).",
              workers.Length, workerTypes.Count()));

            foreach (var type in workerTypes)
            {
              Assert.IsNotNull(workers.FirstOrDefault(v => v.Worker.GetType().IsSubclassOf(type)),
            string.Format("Нет реализации для {0}.", type.Name));
            }

            // Проверяем функциональность.
            foreach (var worker in workers)
              Check(worker.Worker, worker.ServerMode, worker.ClientMode);
              }
        }
示例#2
0
        public void WixListViewTesting()
        {
            using (ShimsContext.Create())
              {
            List<Record> list = new List<Record>(); // Используется для хранения добавленных и удаленных объетков.

            Microsoft.Deployment.WindowsInstaller.Fakes.ShimSession.AllInstances.DatabaseGet = delegate
            {
              return new Microsoft.Deployment.WindowsInstaller.Fakes.ShimDatabase().Instance;
            };
            Microsoft.Deployment.WindowsInstaller.Fakes.ShimDatabase.AllInstances.OpenViewStringObjectArray = (@this, sqlFormat, args) =>
            {
              // Логика удаления реализована здесь.
              if (sqlFormat.StartsWith("DELETE") && sqlFormat.Contains("Value"))
              {
            Record r = list.FirstOrDefault(v => v.GetString(3) == args[1].ToString());
            list.Remove(r);
              }
              // Логика очистки.
              if (sqlFormat.StartsWith("DELETE") && !sqlFormat.Contains("Value"))
              {
            list.Clear();
              }

              return new Microsoft.Deployment.WindowsInstaller.Fakes.ShimView().Instance;
            };
            Microsoft.Deployment.WindowsInstaller.Fakes.ShimDatabase.AllInstances.CreateRecordInt32 = (@this, fieldCount) => { return new Record(fieldCount); };
            int index = -1; // Для View.Fetch().
            Microsoft.Deployment.WindowsInstaller.Fakes.ShimView.AllInstances.Fetch = (@this) =>
            {
              // Сюда заходим при получении списка объектов (Items) и при получении максимального номера вставки.
              // Если в списке есть элементы, то передать их.
              if (++index < list.Count)
            return list[index];
              else
              {
            index = -1;
            return null;
              }
            };
            Microsoft.Deployment.WindowsInstaller.Fakes.ShimView.AllInstances.ModifyViewModifyModeRecord = (@this, mode, record) => { list.Add(record); }; // Логика добавления реализована здесь.
            Microsoft.Deployment.WindowsInstaller.Fakes.ShimInstallerHandle.AllInstances.Dispose = delegate { }; // Чтобы не освобождался Record.

            // Начало теста.
            Session session = new Microsoft.Deployment.WindowsInstaller.Fakes.ShimSession().Instance;

            WixListView view = new WixListView(session, "viewProperty");
            Assert.AreEqual(0, list.Count); // Дополнительная проверка.
            Check(list, view.Items);

            view.AddItem(new WixListItem("Text1", "Value1", "Icon1"));
            Assert.AreEqual(1, list.Count); // Дополнительная проверка.
            Check(list, view.Items);

            view.AddItems(new WixListItem[] { new WixListItem("Text2", "Value2", "Icon2"), new WixListItem("Text3", "Value3", "Icon3") });
            Assert.AreEqual(3, list.Count); // Дополнительная проверка.
            Check(list, view.Items);

            // Удаление.
            view.RemoveItem("Value2");
            Assert.AreEqual(2, list.Count); // Дополнительная проверка.
            Check(list, view.Items);

            // Очистка.
            view.ClearItems();
            Assert.AreEqual(0, list.Count); // Дополнительная проверка.
            Check(list, view.Items);
              }
        }