private void FetchLevelsCallback(bool success, string response)
    {
        if (!success)
        {
            Prompt(FETCH_LEVELS_FAILURE_PROMPT);
            return;
        }

        ParsedResponse parsedResponse = JsonUtility.FromJson <ParsedResponse>(response);

        if (!parsedResponse.success)
        {
            Prompt(FETCH_LEVELS_FAILURE_PROMPT);
            return;
        }

        Prompt(FETCH_LEVELS_SUCCESS_PROMPT);
        SessionManager.Instance.InitializeSession(parsedResponse.username, parsedResponse.session_id);

        ParsedLevelCollection parsedLevelCollection = JsonUtility.FromJson <ParsedLevelCollection>(parsedResponse.data);

        levelListManager.ClearLevels();
        foreach (ParsedLevel parsedLevel in parsedLevelCollection.levels)
        {
            levelListManager.AddLevelEntry(parsedLevel.level_id, parsedLevel.level_name, parsedLevel.level_designer,
                                           parsedLevel.level_metadata);
        }
    }
    private void FetchAttemptsCallback(bool success, string response)
    {
        if (!success)
        {
            Prompt(FETCH_ATTEMPTS_FAILURE_PROMPT);
            return;
        }

        ParsedResponse parsedResponse = JsonUtility.FromJson <ParsedResponse>(response);

        if (!parsedResponse.success)
        {
            Prompt(FETCH_ATTEMPTS_FAILURE_PROMPT);
            return;
        }

        Prompt(FETCH_ATTEMPTS_SUCCESS_PROMPT);
        SessionManager.Instance.InitializeSession(parsedResponse.username, parsedResponse.session_id);

        ParsedAttemptCollection parsedAttemptCollection = JsonUtility.FromJson <ParsedAttemptCollection>(parsedResponse.data);

        levelListManager.ClearAttempts();
        foreach (ParsedAttempt parsedAttempt in parsedAttemptCollection.attempts)
        {
            levelListManager.AddAttemptEntry(
                parsedAttempt.level_id, parsedAttempt.level_name, parsedAttempt.attempt_designer,
                parsedAttempt.level_metadata, parsedAttempt.attempt_metadata,
                parsedAttempt.avg_speed, parsedAttempt.budget_req, parsedAttempt.score);
        }

        levelListManager.OpenOverlay();
    }
示例#3
0
        public async Task PrecompiledView_RendersCorrectly()
        {
            // Arrange
            IServiceCollection serviceCollection = null;
            var server = TestHelper.CreateServer(_app, SiteName, services =>
            {
                _configureServices(services);
                serviceCollection = services;
            });
            var client = server.CreateClient();

            var serviceProvider        = serviceCollection.BuildServiceProvider();
            var applicationEnvironment = serviceProvider.GetRequiredService <IApplicationEnvironment>();

            var viewsDirectory = Path.Combine(applicationEnvironment.ApplicationBasePath, "Views", "Home");
            var indexContent   = File.ReadAllText(Path.Combine(viewsDirectory, "Index.cshtml"));

            // We will render a view that writes the fully qualified name of the Assembly containing the type of
            // the view. If the view is precompiled, this assembly will be PrecompilationWebsite.
            var assemblyNamePrefix = GetAssemblyNamePrefix();

            try
            {
                // Act - 1
                var response = await client.GetAsync("http://localhost/Home/Index");

                var responseContent = await response.Content.ReadAsStringAsync();

                // Assert - 1
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                var parsedResponse1 = new ParsedResponse(responseContent);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.ViewStart);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Layout);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Index);

                // Act - 2
                // Touch the Index file and verify it remains unaffected.
                await TouchFile(viewsDirectory, "Index.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 2
                var response2 = new ParsedResponse(responseContent);
                Assert.StartsWith(assemblyNamePrefix, response2.ViewStart);
                Assert.StartsWith(assemblyNamePrefix, response2.Index);
                Assert.StartsWith(assemblyNamePrefix, response2.Layout);
            }
            finally
            {
                File.WriteAllText(Path.Combine(viewsDirectory, "Index.cshtml"), indexContent.TrimEnd(' '));
            }
        }
示例#4
0
        public async Task PrecompiledView_RendersCorrectly()
        {
            // Arrange
            IServiceCollection serviceCollection = null;
            var server = TestHelper.CreateServer(_app, SiteName, services =>
            {
                _configureServices(services);
                serviceCollection = services;
            });
            var client = server.CreateClient();

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var applicationEnvironment = serviceProvider.GetRequiredService<IApplicationEnvironment>();

            var viewsDirectory = Path.Combine(applicationEnvironment.ApplicationBasePath, "Views", "Home");
            var indexContent = File.ReadAllText(Path.Combine(viewsDirectory, "Index.cshtml"));

            // We will render a view that writes the fully qualified name of the Assembly containing the type of
            // the view. If the view is precompiled, this assembly will be PrecompilationWebsite.
            var assemblyNamePrefix = GetAssemblyNamePrefix();

            try
            {
                // Act - 1
                var response = await client.GetAsync("http://localhost/Home/Index");
                var responseContent = await response.Content.ReadAsStringAsync();

                // Assert - 1
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                var parsedResponse1 = new ParsedResponse(responseContent);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.ViewStart);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Layout);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Index);

                // Act - 2
                // Touch the Index file and verify it remains unaffected.
                await TouchFile(viewsDirectory, "Index.cshtml");
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 2
                var response2 = new ParsedResponse(responseContent);
                Assert.StartsWith(assemblyNamePrefix, response2.ViewStart);
                Assert.StartsWith(assemblyNamePrefix, response2.Index);
                Assert.StartsWith(assemblyNamePrefix, response2.Layout);
            }
            finally
            {
                File.WriteAllText(Path.Combine(viewsDirectory, "Index.cshtml"), indexContent.TrimEnd(' '));
            }
        }
    private void PublishCallback(bool success, string response)
    {
        if (!success)
        {
            UIManager.Instance.Prompt(PUBLISH_ATTEMPT_FAILURE_PROMPT);
            return;
        }

        ParsedResponse parsedResponse = JsonUtility.FromJson <ParsedResponse>(response);

        if (!parsedResponse.success)
        {
            UIManager.Instance.Prompt(PUBLISH_ATTEMPT_FAILURE_PROMPT);
            return;
        }

        UIManager.Instance.Prompt(PUBLISH_ATTEMPT_SUCCESS_PROMPT);
        SessionManager.Instance.InitializeSession(parsedResponse.username, parsedResponse.session_id);
    }
示例#6
0
        public async Task PrecompiledView_RendersCorrectly()
        {
            // Arrange
            // We will render a view that writes the fully qualified name of the Assembly containing the type of
            // the view. If the view is precompiled, this assembly will be PrecompilationWebsite.
            var assemblyNamePrefix = GetAssemblyNamePrefix();

            // Act
            var response = await Client.GetAsync("http://localhost/Home/Index");

            var responseContent = await response.Content.ReadAsStringAsync();

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            var parsedResponse1 = new ParsedResponse(responseContent);

            Assert.StartsWith(assemblyNamePrefix, parsedResponse1.ViewStart);
            Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Layout);
            Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Index);
        }
    private void RegisterCallback(bool success, string response)
    {
        if (!success)
        {
            Prompt(REGISTER_FAILURE_PROMPT);
            FocusUsername();
            return;
        }

        ParsedResponse parsedResponse = JsonUtility.FromJson <ParsedResponse>(response);

        if (!parsedResponse.success)
        {
            Prompt(REGISTER_FAILURE_PROMPT);
            FocusUsername();
            return;
        }

        Prompt(REGISTER_SUCCESS_PROMPT);
    }
示例#8
0
        public ResponseBase(string rawResponse, int statusCode, bool successful)
        {
            RawResponse = rawResponse;
            StatusCode  = statusCode;
            Successful  = successful;

            try
            {
                ParsedResponse = JToken.Parse(rawResponse);

                //Seems to be an error response, populate the Error property
                if (ParsedResponse[nameof(Error.ErrorIdentifier)] != null)
                {
                    Error = ParsedResponse.ToObject <Error>();
                }
            }
            catch
            {
                //ignore
            }
        }
示例#9
0
    private void FetchRankCallback(bool success, string response)
    {
        if (!success)
        {
            score.text = string.Format("{0:0.000} (?th percentile)", simulationStats.Score);
            return;
        }

        ParsedResponse parsedResponse = JsonUtility.FromJson <ParsedResponse>(response);

        if (!parsedResponse.success)
        {
            score.text = string.Format("{0:0.000} (?th percentile)", simulationStats.Score);
            return;
        }

        SessionManager.Instance.InitializeSession(parsedResponse.username, parsedResponse.session_id);

        ParsedRank parsedRank = JsonUtility.FromJson <ParsedRank>(parsedResponse.data);
        float      percentile = 100.0f * (parsedRank.above + 1) / (parsedRank.above + 1 + parsedRank.below);

        score.text = string.Format("{0:0.000} ({1:0.#}th percentile)", simulationStats.Score, percentile);
    }
    private void LoginCallback(bool success, string response)
    {
        if (!success)
        {
            Prompt(LOG_IN_FAILURE_PROMPT);
            FocusUsername();
            return;
        }

        ParsedResponse parsedResponse = JsonUtility.FromJson <ParsedResponse>(response);

        if (!parsedResponse.success)
        {
            Prompt(LOG_IN_FAILURE_PROMPT);
            FocusUsername();
            return;
        }

        Prompt(LOG_IN_SUCCESS_PROMPT);
        SessionManager.Instance.InitializeSession(parsedResponse.username, parsedResponse.session_id);

        SceneManager.LoadScene(SceneUtils.LOBBY);
    }
示例#11
0
        public async Task PrecompiledView_RendersCorrectly()
        {
            // Arrange
            IServiceCollection serviceCollection = null;
            var server = TestHelper.CreateServer(_app, SiteName, services =>
            {
                _configureServices(services);
                serviceCollection = services;
            });
            var client = server.CreateClient();

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var applicationEnvironment = serviceProvider.GetRequiredService<IApplicationEnvironment>();

            var viewsDirectory = Path.Combine(applicationEnvironment.ApplicationBasePath, "Views", "Home");
            var layoutContent = File.ReadAllText(Path.Combine(viewsDirectory, "Layout.cshtml"));
            var indexContent = File.ReadAllText(Path.Combine(viewsDirectory, "Index.cshtml"));
            var viewstartContent = File.ReadAllText(Path.Combine(viewsDirectory, "_ViewStart.cshtml"));
            var globalContent = File.ReadAllText(Path.Combine(viewsDirectory, "_ViewImports.cshtml"));

            // We will render a view that writes the fully qualified name of the Assembly containing the type of
            // the view. If the view is precompiled, this assembly will be PrecompilationWebsite.
            var assemblyNamePrefix = GetAssemblyNamePrefix();

            try
            {
                // Act - 1
                var response = await client.GetAsync("http://localhost/Home/Index");
                var responseContent = await response.Content.ReadAsStringAsync();

                // Assert - 1
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                var parsedResponse1 = new ParsedResponse(responseContent);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.ViewStart);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Layout);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Index);

                // Act - 2
                // Touch the Layout file and verify it is now dynamically compiled.
                await TouchFile(viewsDirectory, "Layout.cshtml");
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 2
                var response2 = new ParsedResponse(responseContent);
                Assert.StartsWith(assemblyNamePrefix, response2.ViewStart);
                Assert.StartsWith(assemblyNamePrefix, response2.Index);
                Assert.DoesNotContain(assemblyNamePrefix, response2.Layout);

                // Act - 3
                // Touch the _ViewStart file and verify it is is dynamically compiled.
                await TouchFile(viewsDirectory, "_ViewStart.cshtml");
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 3
                var response3 = new ParsedResponse(responseContent);
                Assert.NotEqual(assemblyNamePrefix, response3.ViewStart);
                Assert.Equal(response2.Index, response3.Index);
                Assert.Equal(response2.Layout, response3.Layout);

                // Act - 4
                // Touch the _ViewImports file and verify it causes all files to recompile.
                await TouchFile(viewsDirectory, "_ViewImports.cshtml");
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 4
                var response4 = new ParsedResponse(responseContent);
                Assert.NotEqual(response3.ViewStart, response4.ViewStart);
                Assert.NotEqual(response3.Index, response4.Index);
                Assert.NotEqual(response3.Layout, response4.Layout);

                // Act - 5
                // Touch Index file and verify it is the only page that recompiles.
                await TouchFile(viewsDirectory, "Index.cshtml");
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 5
                var response5 = new ParsedResponse(responseContent);
                // Layout and _ViewStart should not have changed.
                Assert.Equal(response4.Layout, response5.Layout);
                Assert.Equal(response4.ViewStart, response5.ViewStart);
                Assert.NotEqual(response4.Index, response5.Index);

                // Act - 6
                // Touch the _ViewImports file. This time, we'll verify the Non-precompiled -> Non-precompiled workflow.
                await TouchFile(viewsDirectory, "_ViewImports.cshtml");
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 6
                var response6 = new ParsedResponse(responseContent);
                // Everything should've recompiled.
                Assert.NotEqual(response5.ViewStart, response6.ViewStart);
                Assert.NotEqual(response5.Index, response6.Index);
                Assert.NotEqual(response5.Layout, response6.Layout);

                // Act - 7
                // Add a new _ViewImports file
                var newViewImports = await TouchFile(Path.GetDirectoryName(viewsDirectory), "_ViewImports.cshtml");
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 7
                // Everything should've recompiled.
                var response7 = new ParsedResponse(responseContent);
                Assert.NotEqual(response6.ViewStart, response7.ViewStart);
                Assert.NotEqual(response6.Index, response7.Index);
                Assert.NotEqual(response6.Layout, response7.Layout);

                // Act - 8
                // Remove new _ViewImports file
                File.Delete(newViewImports);
                await Task.Delay(_cacheDelayInterval);
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 8
                // Everything should've recompiled.
                var response8 = new ParsedResponse(responseContent);
                Assert.NotEqual(response7.ViewStart, response8.ViewStart);
                Assert.NotEqual(response7.Index, response8.Index);
                Assert.NotEqual(response7.Layout, response8.Layout);

                // Act - 9
                // Refetch and verify we get cached types
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 9
                var response9 = new ParsedResponse(responseContent);
                Assert.Equal(response8.ViewStart, response9.ViewStart);
                Assert.Equal(response8.Index, response9.Index);
                Assert.Equal(response8.Layout, response9.Layout);
            }
            finally
            {
                File.WriteAllText(Path.Combine(viewsDirectory, "Layout.cshtml"), layoutContent.TrimEnd(' '));
                File.WriteAllText(Path.Combine(viewsDirectory, "Index.cshtml"), indexContent.TrimEnd(' '));
                File.WriteAllText(Path.Combine(viewsDirectory, "_ViewStart.cshtml"), viewstartContent.TrimEnd(' '));
                File.WriteAllText(Path.Combine(viewsDirectory, "_ViewImports.cshtml"), globalContent.TrimEnd(' '));
            }
        }
示例#12
0
        public async Task PrecompiledView_RendersCorrectly()
        {
            // Arrange
            IServiceCollection serviceCollection = null;
            var server = TestHelper.CreateServer(_app, SiteName, services =>
            {
                _configureServices(services);
                serviceCollection = services;
            });
            var client = server.CreateClient();

            var serviceProvider        = serviceCollection.BuildServiceProvider();
            var applicationEnvironment = serviceProvider.GetRequiredService <IApplicationEnvironment>();

            var viewsDirectory   = Path.Combine(applicationEnvironment.ApplicationBasePath, "Views", "Home");
            var layoutContent    = File.ReadAllText(Path.Combine(viewsDirectory, "Layout.cshtml"));
            var indexContent     = File.ReadAllText(Path.Combine(viewsDirectory, "Index.cshtml"));
            var viewstartContent = File.ReadAllText(Path.Combine(viewsDirectory, "_ViewStart.cshtml"));
            var globalContent    = File.ReadAllText(Path.Combine(viewsDirectory, "_ViewImports.cshtml"));

            // We will render a view that writes the fully qualified name of the Assembly containing the type of
            // the view. If the view is precompiled, this assembly will be PrecompilationWebsite.
            var assemblyNamePrefix = GetAssemblyNamePrefix();

            try
            {
                // Act - 1
                var response = await client.GetAsync("http://localhost/Home/Index");

                var responseContent = await response.Content.ReadAsStringAsync();

                // Assert - 1
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                var parsedResponse1 = new ParsedResponse(responseContent);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.ViewStart);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Layout);
                Assert.StartsWith(assemblyNamePrefix, parsedResponse1.Index);

                // Act - 2
                // Touch the Layout file and verify it is now dynamically compiled.
                await TouchFile(viewsDirectory, "Layout.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 2
                var response2 = new ParsedResponse(responseContent);
                Assert.StartsWith(assemblyNamePrefix, response2.ViewStart);
                Assert.StartsWith(assemblyNamePrefix, response2.Index);
                Assert.DoesNotContain(assemblyNamePrefix, response2.Layout);

                // Act - 3
                // Touch the _ViewStart file and verify it is is dynamically compiled.
                await TouchFile(viewsDirectory, "_ViewStart.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 3
                var response3 = new ParsedResponse(responseContent);
                Assert.NotEqual(assemblyNamePrefix, response3.ViewStart);
                Assert.Equal(response2.Index, response3.Index);
                Assert.Equal(response2.Layout, response3.Layout);

                // Act - 4
                // Touch the _ViewImports file and verify it causes all files to recompile.
                await TouchFile(viewsDirectory, "_ViewImports.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 4
                var response4 = new ParsedResponse(responseContent);
                Assert.NotEqual(response3.ViewStart, response4.ViewStart);
                Assert.NotEqual(response3.Index, response4.Index);
                Assert.NotEqual(response3.Layout, response4.Layout);

                // Act - 5
                // Touch Index file and verify it is the only page that recompiles.
                await TouchFile(viewsDirectory, "Index.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 5
                var response5 = new ParsedResponse(responseContent);
                // Layout and _ViewStart should not have changed.
                Assert.Equal(response4.Layout, response5.Layout);
                Assert.Equal(response4.ViewStart, response5.ViewStart);
                Assert.NotEqual(response4.Index, response5.Index);

                // Act - 6
                // Touch the _ViewImports file. This time, we'll verify the Non-precompiled -> Non-precompiled workflow.
                await TouchFile(viewsDirectory, "_ViewImports.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 6
                var response6 = new ParsedResponse(responseContent);
                // Everything should've recompiled.
                Assert.NotEqual(response5.ViewStart, response6.ViewStart);
                Assert.NotEqual(response5.Index, response6.Index);
                Assert.NotEqual(response5.Layout, response6.Layout);

                // Act - 7
                // Add a new _ViewImports file
                var newViewImports = await TouchFile(Path.GetDirectoryName(viewsDirectory), "_ViewImports.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 7
                // Everything should've recompiled.
                var response7 = new ParsedResponse(responseContent);
                Assert.NotEqual(response6.ViewStart, response7.ViewStart);
                Assert.NotEqual(response6.Index, response7.Index);
                Assert.NotEqual(response6.Layout, response7.Layout);

                // Act - 8
                // Remove new _ViewImports file
                File.Delete(newViewImports);
                await Task.Delay(_cacheDelayInterval);

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 8
                // Everything should've recompiled.
                var response8 = new ParsedResponse(responseContent);
                Assert.NotEqual(response7.ViewStart, response8.ViewStart);
                Assert.NotEqual(response7.Index, response8.Index);
                Assert.NotEqual(response7.Layout, response8.Layout);

                // Act - 9
                // Refetch and verify we get cached types
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 9
                var response9 = new ParsedResponse(responseContent);
                Assert.Equal(response8.ViewStart, response9.ViewStart);
                Assert.Equal(response8.Index, response9.Index);
                Assert.Equal(response8.Layout, response9.Layout);
            }
            finally
            {
                File.WriteAllText(Path.Combine(viewsDirectory, "Layout.cshtml"), layoutContent.TrimEnd(' '));
                File.WriteAllText(Path.Combine(viewsDirectory, "Index.cshtml"), indexContent.TrimEnd(' '));
                File.WriteAllText(Path.Combine(viewsDirectory, "_ViewStart.cshtml"), viewstartContent.TrimEnd(' '));
                File.WriteAllText(Path.Combine(viewsDirectory, "_ViewImports.cshtml"), globalContent.TrimEnd(' '));
            }
        }
示例#13
0
        public async Task PrecompiledView_RendersCorrectly()
        {
            // Arrange
            var applicationEnvironment = _services.GetRequiredService <IApplicationEnvironment>();

            var viewsDirectory   = Path.Combine(applicationEnvironment.ApplicationBasePath, "Views", "Home");
            var layoutContent    = File.ReadAllText(Path.Combine(viewsDirectory, "Layout.cshtml"));
            var indexContent     = File.ReadAllText(Path.Combine(viewsDirectory, "Index.cshtml"));
            var viewstartContent = File.ReadAllText(Path.Combine(viewsDirectory, "_ViewStart.cshtml"));

            var server = TestServer.Create(_services, _app);
            var client = server.CreateClient();

            // We will render a view that writes the fully qualified name of the Assembly containing the type of
            // the view. If the view is precompiled, this assembly will be PrecompilationWebsite.
            var assemblyName = typeof(Startup).GetTypeInfo().Assembly.GetName().ToString();

            try
            {
                // Act - 1
                var response = await client.GetAsync("http://localhost/Home/Index");

                var responseContent = await response.Content.ReadAsStringAsync();

                // Assert - 1
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                var parsedResponse1 = new ParsedResponse(responseContent);
                Assert.Equal(assemblyName, parsedResponse1.ViewStart);
                Assert.Equal(assemblyName, parsedResponse1.Layout);
                Assert.Equal(assemblyName, parsedResponse1.Index);

                // Act - 2
                // Touch the Layout file and verify it is now dynamically compiled.
                await TouchFile(viewsDirectory, "Layout.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 2
                var response2 = new ParsedResponse(responseContent);
                Assert.NotEqual(assemblyName, response2.Layout);
                Assert.Equal(assemblyName, response2.ViewStart);
                Assert.Equal(assemblyName, response2.Index);

                // Act - 3
                // Touch the _ViewStart file and verify it causes all files to recompile.
                await TouchFile(viewsDirectory, "_ViewStart.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 3
                var response3 = new ParsedResponse(responseContent);
                Assert.NotEqual(assemblyName, response3.ViewStart);
                Assert.NotEqual(assemblyName, response3.Index);
                Assert.NotEqual(response2.Layout, response3.Layout);

                // Act - 4
                // Touch Index file and verify it is the only page that recompiles.
                await TouchFile(viewsDirectory, "Index.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 4
                var response4 = new ParsedResponse(responseContent);
                // Layout and _ViewStart should not have changed.
                Assert.Equal(response3.Layout, response4.Layout);
                Assert.Equal(response3.ViewStart, response4.ViewStart);
                Assert.NotEqual(response3.Index, response4.Index);

                // Act - 5
                // Touch the _ViewStart file. This time, we'll verify the Non-precompiled -> Non-precompiled workflow.
                await TouchFile(viewsDirectory, "_ViewStart.cshtml");

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 5
                var response5 = new ParsedResponse(responseContent);
                // Everything should've recompiled.
                Assert.NotEqual(response4.ViewStart, response5.ViewStart);
                Assert.NotEqual(response4.Index, response5.Index);
                Assert.NotEqual(response4.Layout, response5.Layout);

                // Act - 6
                // Add a new _ViewStart file
                File.WriteAllText(Path.Combine(viewsDirectory, "..", "_ViewStart.cshtml"), string.Empty);
                await Task.Delay(_cacheDelayInterval);

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 6
                // Everything should've recompiled.
                var response6 = new ParsedResponse(responseContent);
                Assert.NotEqual(response5.ViewStart, response6.ViewStart);
                Assert.NotEqual(response5.Index, response6.Index);
                Assert.NotEqual(response5.Layout, response6.Layout);

                // Act - 7
                // Remove new _ViewStart file
                File.Delete(Path.Combine(viewsDirectory, "..", "_ViewStart.cshtml"));
                await Task.Delay(_cacheDelayInterval);

                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 7
                // Everything should've recompiled.
                var response7 = new ParsedResponse(responseContent);
                Assert.NotEqual(response6.ViewStart, response7.ViewStart);
                Assert.NotEqual(response6.Index, response7.Index);
                Assert.NotEqual(response6.Layout, response7.Layout);

                // Act - 8
                // Refetch and verify we get cached types
                responseContent = await client.GetStringAsync("http://localhost/Home/Index");

                // Assert - 7
                var response8 = new ParsedResponse(responseContent);
                Assert.Equal(response7.ViewStart, response8.ViewStart);
                Assert.Equal(response7.Index, response8.Index);
                Assert.Equal(response7.Layout, response8.Layout);
            }
            finally
            {
                File.WriteAllText(Path.Combine(viewsDirectory, "Layout.cshtml"), layoutContent);
                File.WriteAllText(Path.Combine(viewsDirectory, "Index.cshtml"), indexContent);
                File.WriteAllText(Path.Combine(viewsDirectory, "_ViewStart.cshtml"), viewstartContent);
            }
        }