public void SimpleTreeBuild()
        {
            var packages = PackageFeatureTreeBuilder.BuildPackageTrees(this.buildPackageInfos(), this.buildFeatureInfos()).ToList();

            // Testing package 3
            var package3 = packages[2];

            Assert.IsTrue(package3.Features.Count() == 1);
            Assert.IsTrue(package3.Features.First().SubFeatureCount == 0);
        }
        public void TestUnorderedTreeBuild()
        {
            var packages = PackageFeatureTreeBuilder.BuildPackageTrees(this.buildPackageInfos(), this.buildFeatureInfos()).ToList();

            // Testing package 2
            var package1 = packages[1];

            Assert.IsTrue(package1.Features.Count() == 1);
            var features = package1.Features.ToList();

            Assert.IsTrue(features[0].SubFeatureCount == 2);
            features = features[0].SubFeatures.ToList();
            Assert.IsTrue(features[0].SubFeatureCount == 1);
            Assert.IsTrue(features[1].SubFeatureCount == 0);
            features = features[0].SubFeatures.ToList();
            Assert.IsTrue(features[0].SubFeatureCount == 2);
        }
        protected override void Run()
        {
#if DEBUG
            Debugger.Launch();
#endif

            this.BootstrapperDispatcher = Dispatcher.CurrentDispatcher;

            this.mainWindow = this.ResolveMainWindow();

            var bootstrapperMainWindow = this.mainWindow as IBootstrapperMainWindow;

            var bundleLoader = new BurnApplicationDataLoader();
            var info         = bundleLoader.Load();

            var packageTrees = PackageFeatureTreeBuilder.BuildPackageTrees(info.Packages, info.PackageFeatures);

            foreach (var packageTree in packageTrees)
            {
                bootstrapperMainWindow.Viewmodel.BootstrapperController.PackageManager.AddPackage(packageTree);
            }

            this.Engine.Log(LogLevel.Verbose, "Starting MaxBootstrapper");

            this.mainWindow.Closed += delegate
            {
                this.Engine.Quit(0);
            };

            this.mainWindow.Show();

            this.Engine.Detect();

            Dispatcher.Run();

            // Figured there should be a null check here even though it should be theoretically impossible to ever not be null
            if (bootstrapperMainWindow != null)
            {
                this.Engine.Quit(bootstrapperMainWindow.Viewmodel.BootstrapperController.FinalResult);
            }
            else
            {
                this.Engine.Quit(-1);
            }
        }