public void CreateContextReinitializesPreviouslyStoredDefaultHttpContext()
    {
        // Arrange
        var hostingApplication = CreateApplication();
        var features           = new FeaturesWithContext <Context>(new DefaultHttpContext().Features);
        var previousContext    = new DefaultHttpContext();

        // Pretend like we had previous HttpContext
        features.HostContext             = new Context();
        features.HostContext.HttpContext = previousContext;

        var context = hostingApplication.CreateContext(features);

        Assert.Same(previousContext, context.HttpContext);

        // Act/Assert
        hostingApplication.DisposeContext(context, null);
        Assert.Same(previousContext, context.HttpContext);
    }
    public void CreateContextCreatesNewContextIfNotUsingDefaultHttpContextFactory()
    {
        // Arrange
        var factory = new Mock <IHttpContextFactory>();

        factory.Setup(m => m.Create(It.IsAny <IFeatureCollection>())).Returns <IFeatureCollection>(f => new DefaultHttpContext(f));
        factory.Setup(m => m.Dispose(It.IsAny <HttpContext>())).Callback(() => { });

        var hostingApplication = CreateApplication(factory.Object);
        var features           = new FeaturesWithContext <Context>(new DefaultHttpContext().Features);
        var previousContext    = new DefaultHttpContext();

        // Pretend like we had previous HttpContext
        features.HostContext             = new Context();
        features.HostContext.HttpContext = previousContext;

        var context = hostingApplication.CreateContext(features);

        Assert.NotSame(previousContext, context.HttpContext);

        // Act/Assert
        hostingApplication.DisposeContext(context, null);
    }