public void PreApplicationStartCodeDoesNotLoadIfAHigherVersionIsAvailableInGac()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification = false;
            // Hopefully we'd have figured out a better way to load Plan9 by v8.
            var webPagesVersion = new Version("8.0.0.0");
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.0.0.0", LatestVersion, "8.0.0.0");

            var fileSystem = new TestFileSystem();

            fileSystem.AddFile("Index.cshtml");
            var buildManager                   = new TestBuildManager();
            var nameValueCollection            = GetAppSettings(enabled: null, webPagesVersion: null);
            Action <Version> loadWebPages      = (version) => { loadedVersion = version; };
            Action           registerForChange = () => { registeredForChangeNotification = true; };

            // Act
            bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null);

            // Assert
            Assert.False(loaded);
            Assert.Null(loadedVersion);
            Assert.False(registeredForChangeNotification);
            Assert.Equal(0, buildManager.Stream.Length);
        }
예제 #2
0
 public static void Configure()
 {
     RouteTable.Routes.Add(new Route(BundleHelper.CLIENT_SCRIPT_VPATH.TrimStart('/') + "{path}.js", new ClientScriptRouteHandler()));
     BundleTable.Bundles.UseCdn      = ClientSettings.StoreBundles;
     BundleTable.EnableOptimizations = true;
     PreApplicationStartCode.Start();
 }
        public void PreApplicationStartCodeDoesNotLoadIfAHigherVersionIsAvailableInBin()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification     = false;
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion, "8.0.0.0");

            var binDirectory = DeploymentUtil.GetBinDirectory();

            var fileSystem = new TestFileSystem();

            fileSystem.AddFile("Index.cshtml");
            fileSystem.AddFile(Path.Combine(binDirectory, "System.Web.WebPages.Deployment.dll"));
            var buildManager        = new TestBuildManager();
            var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: null);
            Action <Version>            loadWebPages      = (version) => { loadedVersion = version; };
            Action                      registerForChange = () => { registeredForChangeNotification = true; };
            Func <string, AssemblyName> getAssembyName    = _ => new AssemblyName("System.Web.WebPages.Deployment, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");

            // Act
            bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", binDirectory, nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, getAssembyName);

            // Assert
            Assert.False(loaded);
            Assert.Null(loadedVersion);
            Assert.False(registeredForChangeNotification);
            Assert.Equal(0, buildManager.Stream.Length);
        }
        public void PreApplicationStartCodeDoesNotForceRecompileIfNewVersionIsV1AndCurrentAssemblyIsNotMaxVersion()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification     = false;
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion, "5.0.0.0");

            var fileSystem = new TestFileSystem();

            fileSystem.AddFile("Index.cshtml");
            var buildManager = new TestBuildManager();
            var content      = AssemblyUtils.ThisAssemblyName.Version + Environment.NewLine;

            buildManager.Stream = new MemoryStream(Encoding.Default.GetBytes(content));

            var nameValueCollection            = GetAppSettings(enabled: null, webPagesVersion: new Version("1.0.0"));
            Action <Version> loadWebPages      = (version) => { loadedVersion = version; };
            Action           registerForChange = () => { registeredForChangeNotification = true; };

            // Act
            bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", @"site\bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null);

            // Assert
            Assert.False(loaded);
            Assert.False(registeredForChangeNotification);
            VerifyVersionFile(buildManager, AssemblyUtils.ThisAssemblyName.Version);
            Assert.False(fileSystem.FileExists(@"site\bin\WebPagesRecompilation.deleteme"));
        }
        public void PreApplicationStartCodeForcesRecompileIfPreviousVersionIsNotTheSameAsCurrentVersion()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification     = false;
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion);

            var fileSystem = new TestFileSystem();

            fileSystem.AddFile("Index.cshtml");
            var buildManager = new TestBuildManager();
            var content      = "1.0.0.0" + Environment.NewLine;

            buildManager.Stream = new MemoryStream(Encoding.Default.GetBytes(content));

            var nameValueCollection            = GetAppSettings(enabled: null, webPagesVersion: new Version(LatestVersion));
            Action <Version> loadWebPages      = (version) => { loadedVersion = version; };
            Action           registerForChange = () => { registeredForChangeNotification = true; };

            // Act
            var ex = Assert.Throws <HttpCompileException>(() =>
                                                          PreApplicationStartCode.StartCore(fileSystem, "", @"site\bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null)
                                                          );

            // Assert
            Assert.Equal("Changes were detected in the Web Pages runtime version that require your application to be recompiled. Refresh your browser window to continue.", ex.Message);
            Assert.Equal(ex.Data["WebPages.VersionChange"], true);
            Assert.False(registeredForChangeNotification);
            VerifyVersionFile(buildManager, new Version(LatestVersion));
            Assert.True(fileSystem.FileExists(@"site\bin\WebPagesRecompilation.deleteme"));
        }
        public void PreApplicationStartCodeUsesVersionSpecifiedInConfigIfWebPagesIsImplicitlyEnabled()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification     = false;
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.12.123.1234", LatestVersion);
            Version webPagesVersion = new Version("1.12.123.1234");

            var fileSystem = new TestFileSystem();

            fileSystem.AddFile("Default.cshtml");
            var buildManager                   = new TestBuildManager();
            var nameValueCollection            = GetAppSettings(enabled: null, webPagesVersion: webPagesVersion);
            Action <Version> loadWebPages      = (version) => { loadedVersion = version; };
            Action           registerForChange = () => { registeredForChangeNotification = true; };

            // Act
            bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, getAssemblyNameThunk: null);

            // Assert
            Assert.True(loaded);
            Assert.Equal(webPagesVersion, loadedVersion);
            Assert.False(registeredForChangeNotification);
            VerifyVersionFile(buildManager, webPagesVersion);
        }
        public void PreApplicationStartCodeThrowsIfVersionIsSpecifiedInConfigAndDifferentVersionExistsInBin()
        {
            // Arrange
            Version loadedVersion = null;

            var binDirectory = DeploymentUtil.GetBinDirectory();
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.0.0.0", AssemblyUtils.ThisAssemblyName.Version.ToString());

            var fileSystem = new TestFileSystem();

            fileSystem.AddFile("Index.cshtml");
            fileSystem.AddFile(Path.Combine(binDirectory, "System.Web.WebPages.Deployment.dll"));
            var buildManager = new TestBuildManager();
            var content      = AssemblyUtils.ThisAssemblyName.Version + Environment.NewLine;

            buildManager.Stream = new MemoryStream(Encoding.Default.GetBytes(content));

            var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: new Version("1.0.0"));
            Action <Version>            loadWebPages      = (version) => { loadedVersion = version; };
            Action                      registerForChange = () => { };
            Func <string, AssemblyName> getAssembyName    = _ => new AssemblyName("System.Web.WebPages.Deployment, Version=" + AssemblyUtils.ThisAssemblyName.Version + ", Culture=neutral, PublicKeyToken=31bf3856ad364e35");

            // Act and Assert
            Assert.Throws <InvalidOperationException>(() =>
                                                      PreApplicationStartCode.StartCore(fileSystem, "", binDirectory, nameValueCollection, loadedAssemblies, buildManager: buildManager, loadWebPages: loadWebPages, registerForChangeNotification: registerForChange, getAssemblyNameThunk: getAssembyName),
                                                      String.Format(@"Conflicting versions of ASP.NET Web Pages detected: specified version is ""1.0.0.0"", but the version in bin is ""{0}"". To continue, remove files from the application's bin directory or remove the version specification in web.config.",
                                                                    AssemblyUtils.ThisAssemblyName.Version));
        }
예제 #8
0
        public void StartTest()
        {
            AppDomainUtils.RunInSeparateAppDomain(
                () =>
            {
                AppDomainUtils.SetPreAppStartStage();
                PreApplicationStartCode.Start();
                // Call a second time to ensure multiple calls do not cause issues
                PreApplicationStartCode.Start();

                Assert.False(
                    RouteTable.Routes.RouteExistingFiles,
                    "We should not be setting RouteExistingFiles"
                    );
                Assert.Empty(RouteTable.Routes);

                Assert.False(PageParser.EnableLongStringsAsResources);

                string formsAuthLoginUrl = (string)typeof(FormsAuthentication)
                                           .GetField("_LoginUrl", BindingFlags.Static | BindingFlags.NonPublic)
                                           .GetValue(null);
                Assert.Null(formsAuthLoginUrl);
            }
                );
        }
        public void PreApplicationStartCodeThrowsIfVersionSpecifiedInConfigIsNotAvailable()
        {
            // Arrange
            Version loadedVersion = null;

            var binDirectory = DeploymentUtil.GetBinDirectory();
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.0.0.0", AssemblyUtils.ThisAssemblyName.Version.ToString());

            var fileSystem = new TestFileSystem();

            fileSystem.AddFile("Index.cshtml");
            var buildManager = new TestBuildManager();
            var content      = AssemblyUtils.ThisAssemblyName.Version + Environment.NewLine;

            buildManager.Stream = new MemoryStream(Encoding.Default.GetBytes(content));

            var nameValueCollection            = GetAppSettings(enabled: null, webPagesVersion: new Version("1.5"));
            Action <Version> loadWebPages      = (version) => { loadedVersion = version; };
            Action           registerForChange = () => { };

            // Act and Assert
            Assert.Throws <InvalidOperationException>(() =>
                                                      PreApplicationStartCode.StartCore(fileSystem, "", binDirectory, nameValueCollection, loadedAssemblies, buildManager: buildManager, loadWebPages: loadWebPages, registerForChangeNotification: registerForChange, getAssemblyNameThunk: null),
                                                      String.Format("Specified Web Pages version \"1.5.0.0\" could not be found. Update your web.config to specify a different version. Current version: \"{0}\".",
                                                                    AssemblyUtils.ThisAssemblyName.Version));
        }
        public void PreApplicationStartCodeLoadsV1IfNoVersionIsSpecifiedAndCurrentAssemblyIsTheMaximumVersionAvailable()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification = false;
            var     webPagesVersion = AssemblyUtils.ThisAssemblyName.Version;
            var     v1Version       = new Version("1.0.0.0");
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.0.0.0", LatestVersion);

            // Note: For this test to work with future versions we would need to create corresponding embedded resources with that version in it.
            var fileSystem   = new TestFileSystem();
            var buildManager = new TestBuildManager();

            fileSystem.AddFile("Index.cshtml");
            var nameValueCollection            = GetAppSettings(enabled: null, webPagesVersion: null);
            Action <Version> loadWebPages      = (version) => { loadedVersion = version; };
            Action           registerForChange = () => { registeredForChangeNotification = true; };

            // Act
            bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null);

            // Assert
            Assert.True(loaded);
            Assert.Equal(v1Version, loadedVersion);
            Assert.False(registeredForChangeNotification);
            VerifyVersionFile(buildManager, v1Version);
        }
예제 #11
0
        public void PreApplicationStartCodeDoesNothingIfItIsAvailableInBinAndFileExistsInRootOfWebSite()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification = false;
            var     webPagesVersion = AssemblyUtils.ThisAssemblyName.Version;
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(AssemblyUtils.ThisAssemblyName.Version.ToString());

            var fileSystem   = new TestFileSystem();
            var binDirectory = DeploymentUtil.GetBinDirectory();

            var buildManager = new TestBuildManager();

            fileSystem.AddFile("Default.cshtml");
            fileSystem.AddFile(Path.Combine(binDirectory, "System.Web.WebPages.Deployment.dll"));
            var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: null);
            Action <Version>            loadWebPages      = (version) => { loadedVersion = version; };
            Action                      registerForChange = () => { registeredForChangeNotification = true; };
            Func <string, AssemblyName> getAssembyName    = _ => new AssemblyName("System.Web.WebPages.Deployment, Version=" + AssemblyUtils.ThisAssemblyName.Version.ToString() + ", Culture=neutral, PublicKeyToken=2f9147bba06de483");

            // Act
            bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", binDirectory, nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, getAssembyName);

            // Assert
            Assert.False(loaded);
            Assert.Null(loadedVersion);
            Assert.False(registeredForChangeNotification);
            Assert.Equal(0, buildManager.Stream.Length);
        }
        public void PreApplicationStartCodeThrowsIfNoVersionIsSpecifiedAndV1IsNotAvailable()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification = false;
            var     webPagesVersion = AssemblyUtils.ThisAssemblyName.Version;
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion);

            // Note: For this test to work with future versions we would need to create corresponding embedded resources with that version in it.
            var fileSystem   = new TestFileSystem();
            var buildManager = new TestBuildManager();

            fileSystem.AddFile("Index.cshtml");
            var nameValueCollection            = GetAppSettings(enabled: null, webPagesVersion: null);
            Action <Version> loadWebPages      = (version) => { loadedVersion = version; };
            Action           registerForChange = () => { registeredForChangeNotification = true; };

            // Act and Assert
            Assert.Throws <InvalidOperationException>(() =>
                                                      PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null),
                                                      @"Could not determine which version of ASP.NET Web Pages to use.

In order to use this site, specify a version in the site’s web.config file. For more information, see the following article on the Microsoft support site: http://go.microsoft.com/fwlink/?LinkId=254126");
            Assert.False(registeredForChangeNotification);
            Assert.Equal(0, buildManager.Stream.Length);
        }
예제 #13
0
        public void PreApplicationStartCodeDoesNothingIfVersionDoesNotMatchBootstrapperVersion()
        {
            // Act
            bool loaded = PreApplicationStartCode.StartCore(testVersion: new Version(2, 0, 0, 0));

            // Assert
            Assert.IsFalse(loaded);
        }
예제 #14
0
        public void PreApplicationStartCodeLoadsWebPagesIfVersionMatchesBootstrapperVersion()
        {
            // Act
            bool loaded = PreApplicationStartCode.StartCore(testVersion: new Version(1, 0, 0, 0));

            // Assert
            Assert.IsTrue(loaded);
        }
 public void StartTest()
 {
     AppDomainUtils.RunInSeparateAppDomain(() => {
         AppDomainUtils.SetPreAppStartStage();
         PreApplicationStartCode.Start();
         var buildProviders = typeof(BuildProvider).GetField("s_dynamicallyRegisteredProviders", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
         Assert.AreEqual(2, buildProviders.GetType().GetProperty("Count", BindingFlags.Public | BindingFlags.Instance).GetValue(buildProviders, new object[] { }));
     });
 }
예제 #16
0
 public void StartCanRunTwice()
 {
     AppDomainUtils.RunInSeparateAppDomain(() => {
         AppDomainUtils.SetPreAppStartStage();
         PreApplicationStartCode.Start();
         // Call a second time to ensure multiple calls do not cause issues
         PreApplicationStartCode.Start();
     });
 }
        public void StartInitializesFormsAuthByDefault()
        {
            AppDomainUtils.RunInSeparateAppDomain(() =>
            {
                AppDomainUtils.SetPreAppStartStage();
                PreApplicationStartCode.Start();

                string formsAuthLoginUrl = (string)typeof(FormsAuthentication).GetField("_LoginUrl", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
                Assert.Equal(FormsAuthenticationSettings.DefaultLoginUrl, formsAuthLoginUrl);
            });
        }
        public void StartDoesNotInitializeFormsAuthWhenDisabled()
        {
            AppDomainUtils.RunInSeparateAppDomain(() =>
            {
                AppDomainUtils.SetPreAppStartStage();
                ConfigurationManager.AppSettings[WebSecurity.EnableSimpleMembershipKey] = "False";
                PreApplicationStartCode.Start();

                string formsAuthLoginUrl = (string)typeof(FormsAuthentication).GetField("_LoginUrl", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
                Assert.Null(formsAuthLoginUrl);
            });
        }
예제 #19
0
        public void StartTest()
        {
            AppDomainUtils.RunInSeparateAppDomain(() => {
                // Act
                AppDomainUtils.SetPreAppStartStage();
                PreApplicationStartCode.Start();

                // Assert
                var imports = WebPageRazorHost.GetGlobalImports();
                Assert.IsTrue(imports.Any(ns => ns.Equals("Microsoft.Web.Helpers")));
            });
        }
        public void StartInitializesSimpleMembershipByDefault()
        {
            AppDomainUtils.RunInSeparateAppDomain(() =>
            {
                AppDomainUtils.SetPreAppStartStage();
                PreApplicationStartCode.Start();

                // Verify simple membership
                var providers = Membership.Providers;
                Assert.NotEmpty(providers.OfType <SimpleMembershipProvider>());
                Assert.True(Roles.Enabled);
            });
        }
        public void StartDoesNotInitializeSimpleMembershipWhenDisabled()
        {
            AppDomainUtils.RunInSeparateAppDomain(() =>
            {
                AppDomainUtils.SetPreAppStartStage();
                ConfigurationManager.AppSettings[WebSecurity.EnableSimpleMembershipKey] = "False";
                PreApplicationStartCode.Start();

                // Verify simple membership
                var providers = Membership.Providers;
                Assert.Empty(providers.OfType <SimpleMembershipProvider>());
                Assert.False(Roles.Enabled);
            });
        }
        public void StartRegistersRazorNamespaces()
        {
            AppDomainUtils.RunInSeparateAppDomain(() =>
            {
                AppDomainUtils.SetPreAppStartStage();
                PreApplicationStartCode.Start();
                // Call a second time to ensure multiple calls do not cause issues
                PreApplicationStartCode.Start();

                // Verify namespaces
                var imports = WebPageRazorHost.GetGlobalImports();
                Assert.Contains(imports, ns => ns.Equals("WebMatrix.Data"));
                Assert.Contains(imports, ns => ns.Equals("WebMatrix.WebData"));
            });
        }
        public void StartTest()
        {
            AppDomainUtils.RunInSeparateAppDomain(() =>
            {
                var adminPackageAssembly = typeof(PreApplicationStartCode).Assembly;
                AppDomainUtils.SetPreAppStartStage();
                PreApplicationStartCode.Start();
                // Call a second time to ensure multiple calls do not cause issues
                PreApplicationStartCode.Start();

                // TODO: Need a way to see if the module was actually registered
                var registeredAssemblies = ApplicationPart.GetRegisteredParts().ToList();
                Assert.Equal(1, registeredAssemblies.Count);
                registeredAssemblies.First().Assembly.Equals(adminPackageAssembly);
            });
        }
예제 #24
0
        public static void Configure()
        {
            var scriptProvider = new ClientScriptVirtualPathProvider();

            if (ClientSettings.BundlingEnabled)
            {
                BundleTable.VirtualPathProvider = scriptProvider;
            }
            else
            {
                RouteTable.Routes.Add(new Route(BundleHelper.CLIENT_SCRIPT_VPATH.TrimStart('/') + "{path}.js", scriptProvider));
            }
            BundleTable.Bundles.UseCdn      = ClientSettings.StoreBundles;
            BundleTable.EnableOptimizations = true;
            PreApplicationStartCode.Start();
        }
        public void StartInitializesSimpleMembershipByDefault()
        {
            AppDomainUtils.RunInSeparateAppDomain(() =>
            {
                AppDomainUtils.SetPreAppStartStage();
                PreApplicationStartCode.Start();

                // Verify simple membership
                var providers = Membership.Providers;
                Assert.Equal(1, providers.Count);
                foreach (var provider in providers)
                {
                    Assert.IsAssignableFrom <SimpleMembershipProvider>(provider);
                }
                Assert.True(Roles.Enabled);
            });
        }
예제 #26
0
        public void StartTest()
        {
            AppDomainUtils.RunInSeparateAppDomain(() => {
                AppDomainUtils.SetPreAppStartStage();
                PreApplicationStartCode.Start();
                // Call a second time to ensure multiple calls do not cause issues
                PreApplicationStartCode.Start();

                Assert.IsFalse(RouteTable.Routes.RouteExistingFiles, "We should not be setting RouteExistingFiles");
                Assert.AreEqual(0, RouteTable.Routes.Count, "We should not be adding any routes");

                Assert.IsFalse(PageParser.EnableLongStringsAsResources);

                string formsAuthLoginUrl = (string)typeof(FormsAuthentication).GetField("_LoginUrl", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
                Assert.IsNull(formsAuthLoginUrl, "Form Auth should not be set up by this assembly's PreAppStart - it should happen in WebMatrix.WebData.dll");
            });
        }
        public void StartDoesNotInitializeSimpleMembershipWhenDisabled()
        {
            AppDomainUtils.RunInSeparateAppDomain(() =>
            {
                AppDomainUtils.SetPreAppStartStage();
                ConfigurationManager.AppSettings[WebSecurity.EnableSimpleMembershipKey] = "False";
                PreApplicationStartCode.Start();

                // Verify simple membership
                var providers = Membership.Providers;
                Assert.Equal(1, providers.Count);
                foreach (var provider in providers)
                {
                    Assert.IsAssignableFrom <SqlMembershipProvider>(provider);
                }
                Assert.False(Roles.Enabled);
            });
        }
        public void PreApplicationStartCodeDoesNotLoadCurrentWebPagesIfOnlyVersionIsListedInConfigAndNoFilesAreFoundInSiteRoot()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification = false;
            Version webPagesVersion = AssemblyUtils.ThisAssemblyName.Version;
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion);

            var fileSystem          = new TestFileSystem();
            var buildManager        = new TestBuildManager();
            var nameValueCollection = GetAppSettings(
                enabled: null,
                webPagesVersion: webPagesVersion
                );
            Action <Version> loadWebPages = (version) =>
            {
                loadedVersion = version;
            };
            Action registerForChange = () =>
            {
                registeredForChangeNotification = true;
            };

            // Arrange
            bool loaded = PreApplicationStartCode.StartCore(
                fileSystem,
                "",
                "bin",
                nameValueCollection,
                loadedAssemblies,
                buildManager,
                loadWebPages,
                registerForChange,
                null
                );

            // Assert
            Assert.False(loaded);
            Assert.Null(loadedVersion);
            Assert.True(registeredForChangeNotification);
            Assert.Equal(0, buildManager.Stream.Length);
        }
        public void PreApplicationStartCodeRegistersForChangeNotificationIfNotExplicitlyDisabledAndNoFilesFoundInSiteRoot()
        {
            // Arrange
            Version loadedVersion = null;
            bool    registeredForChangeNotification     = false;
            IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion);

            var fileSystem                     = new TestFileSystem();
            var buildManager                   = new TestBuildManager();
            var nameValueCollection            = GetAppSettings(enabled: null, webPagesVersion: null);
            Action <Version> loadWebPages      = (version) => { loadedVersion = version; };
            Action           registerForChange = () => { registeredForChangeNotification = true; };

            // Act
            bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null);

            // Assert
            Assert.False(loaded);
            Assert.Null(loadedVersion);
            Assert.True(registeredForChangeNotification);
            Assert.Equal(0, buildManager.Stream.Length);
        }