public void Pass_SetsNamespace_ComputedFromSource_ForView()
    {
        // Arrange
        var document = new DocumentIntermediateNode();
        var builder  = IntermediateNodeBuilder.Create(document);

        // This will be ignored.
        builder.Push(new DirectiveIntermediateNode()
        {
            Directive = NamespaceDirective.Directive,
            Source    = new SourceSpan("/Account/_ViewImports.cshtml", 0, 0, 0, 0),
        });
        builder.Add(new DirectiveTokenIntermediateNode()
        {
            Content = "ignored"
        });
        builder.Pop();

        // This will be used.
        builder.Push(new DirectiveIntermediateNode()
        {
            Directive = NamespaceDirective.Directive,
            Source    = new SourceSpan("/Account/Manage/AddUser.cshtml", 0, 0, 0, 0),
        });
        builder.Add(new DirectiveTokenIntermediateNode()
        {
            Content = "WebApplication.Account.Manage"
        });
        builder.Pop();

        var @namespace = new NamespaceDeclarationIntermediateNode()
        {
            Content = "default"
        };

        builder.Push(@namespace);

        var @class = new ClassDeclarationIntermediateNode()
        {
            ClassName = "default"
        };

        builder.Add(@class);

        document.DocumentKind = MvcViewDocumentClassifierPass.MvcViewDocumentKind;

        var codeDocument = RazorCodeDocument.Create(RazorSourceDocument.Create("ignored", "/Account/Manage/AddUser.cshtml"));

        var pass = new NamespaceDirective.Pass();

        pass.Engine = Mock.Of <RazorEngine>();

        // Act
        pass.Execute(codeDocument, document);

        // Assert
        Assert.Equal("WebApplication.Account.Manage", @namespace.Content);
        Assert.Equal("default", @class.ClassName);
    }
    public void Pass_DoesNothing_ForUnknownDocumentKind()
    {
        // Arrange
        var document = new DocumentIntermediateNode();
        var builder  = IntermediateNodeBuilder.Create(document);

        builder.Push(new DirectiveIntermediateNode()
        {
            Directive = NamespaceDirective.Directive,
            Source    = new SourceSpan(null, 0, 0, 0, 0),
        });
        builder.Add(new DirectiveTokenIntermediateNode()
        {
            Content = "WebApplication.Account"
        });
        builder.Pop();

        var @namespace = new NamespaceDeclarationIntermediateNode()
        {
            Content = "default"
        };

        builder.Push(@namespace);

        var @class = new ClassDeclarationIntermediateNode()
        {
            ClassName = "default"
        };

        builder.Add(@class);

        document.DocumentKind = null;

        var codeDocument = RazorCodeDocument.Create(RazorSourceDocument.Create("ignored", "/Account/Manage/AddUser.cshtml"));

        var pass = new NamespaceDirective.Pass();

        pass.Engine = Mock.Of <RazorEngine>();

        // Act
        pass.Execute(codeDocument, document);

        // Assert
        Assert.Equal("default", @namespace.Content);
        Assert.Equal("default", @class.ClassName);
    }