public void WriteRazorCompiledItemAttribute_RendersCorrectly()
        {
            // Arrange
            var extension = new MetadataAttributeTargetExtension()
            {
                CompiledItemAttributeName = "global::TestItem",
            };
            var context = TestCodeRenderingContext.CreateRuntime();

            var node = new RazorCompiledItemAttributeIntermediateNode()
            {
                TypeName   = "Foo.Bar",
                Kind       = "test",
                Identifier = "Foo/Bar",
            };

            // Act
            extension.WriteRazorCompiledItemAttribute(context, node);

            // Assert
            var csharp = context.CodeWriter.GenerateCode();

            Assert.Equal(
                @"[assembly: global::TestItem(typeof(Foo.Bar), @""test"", @""Foo/Bar"")]
",
                csharp,
                ignoreLineEndingDifferences: true);
        }
        public void WriteRazorCompiledItemAttribute(CodeRenderingContext context, RazorCompiledItemAttributeIntermediateNode node)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            // [assembly: global::...RazorCompiledItem(typeof({node.TypeName}), @"{node.Kind}", @"{node.Identifier}")]
            context.CodeWriter.Write("[assembly: ");
            context.CodeWriter.Write(CompiledItemAttributeName);
            context.CodeWriter.Write("(typeof(");
            context.CodeWriter.Write(node.TypeName);
            context.CodeWriter.Write("), @\"");
            context.CodeWriter.Write(node.Kind);
            context.CodeWriter.Write("\", @\"");
            context.CodeWriter.Write(node.Identifier);
            context.CodeWriter.WriteLine("\")]");
        }