in src/EditorFeatures/CSharpTest/Diagnostics/GenerateType/GenerateTypeTests.cs [4230:4878]
public async Task CompareIncompleteMembersToEqual()
{
await TestInRegularAndScriptAsync(
@"class C
{
X.X,X class X
{
X
}
X void X<X void X
x, [|x|])",
@"class C
{
X.X,X class X
{
X
}
X void X<X void X
x, x)private class x
{
}
}
",
index: 2);
}
[WorkItem(544168, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544168")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestNotOnAbstractClassCreation()
{
await TestMissingInRegularAndScriptAsync(
@"abstract class Goo
{
}
class SomeClass
{
void goo()
{
var q = new [|Goo|]();
}
}");
}
[WorkItem(545362, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545362")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestGenerateInVenus1()
{
var code = @"
#line hidden
#line 1 ""Default.aspx""
class Program
{
static void Main(string[] args)
{
[|Goo|] f;
#line hidden
#line 2 ""Default.aspx""
}
}
";
await TestExactActionSetOfferedAsync(code,
new[]
{
string.Format(FeaturesResources.Generate_0_1_in_new_file, "class", "Goo", FeaturesResources.Global_Namespace),
string.Format(FeaturesResources.Generate_nested_0_1, "class", "Goo", "Program"),
FeaturesResources.Generate_new_type
});
await TestInRegularAndScriptAsync(code,
@"
#line hidden
#line 1 ""Default.aspx""
class Program
{
static void Main(string[] args)
{
[|Goo|] f;
#line hidden
#line 2 ""Default.aspx""
}
private class Goo
{
}
}
", index: 1);
}
[WorkItem(869506, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/869506")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestGenerateTypeOutsideCurrentProject()
{
var code = @"<Workspace>
<Project Language=""C#"" AssemblyName=""Assembly1"" CommonReferences=""true"">
<ProjectReference>Assembly2</ProjectReference>
<Document FilePath=""Test1.cs"">
class Program
{
static void Main(string[] args)
{
[|A.B.C$$|].D f;
}
}
namespace A
{
}
</Document>
</Project>
<Project Language=""C#"" AssemblyName=""Assembly2"" CommonReferences=""true"">
<Document FilePath=""Test2.cs"">
namespace A
{
public class B
{
}
}
</Document>
</Project>
</Workspace>";
var expected = @"
namespace A
{
public class B
{
public class C
{
}
}
}
";
await TestInRegularAndScriptAsync(code, expected);
}
[WorkItem(932602, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/932602")]
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestGenerateTypeInFolderNotDefaultNamespace_0()
{
var code = @"<Workspace>
<Project Language=""C#"" AssemblyName=""Assembly1"" CommonReferences=""true"" DefaultNamespace = ""Namespace1.Namespace2"">
<Document FilePath=""Test1.cs"">
namespace Namespace1.Namespace2
{
public class ClassA : [|$$ClassB|]
{
}
}
</Document>
</Project>
</Workspace>";
var expected = @"namespace Namespace1.Namespace2
{
public class ClassB
{
}
}";
await TestAddDocumentInRegularAndScriptAsync(code,
expected,
expectedContainers: ImmutableArray<string>.Empty,
expectedDocumentName: "ClassB.cs");
}
[WorkItem(932602, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/932602")]
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestGenerateTypeInFolderNotDefaultNamespace_1()
{
var code = @"<Workspace>
<Project Language=""C#"" AssemblyName=""Assembly1"" CommonReferences=""true"" DefaultNamespace = ""Namespace1.Namespace2"" >
<Document FilePath=""Test1.cs"" Folders=""Namespace1\Namespace2"">
namespace Namespace1.Namespace2.Namespace3
{
public class ClassA : [|$$ClassB|]
{
}
}
</Document>
</Project>
</Workspace>";
var expected = @"namespace Namespace1.Namespace2.Namespace3
{
public class ClassB
{
}
}";
await TestAddDocumentInRegularAndScriptAsync(code,
expected,
expectedContainers: ImmutableArray.Create("Namespace1", "Namespace2"),
expectedDocumentName: "ClassB.cs");
}
[WorkItem(612700, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/612700")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestGenerateTypeWithNoBraces()
{
var code = @"class Test : [|Base|]";
var expected = @"class Test : Base
internal class Base
{
}";
await TestInRegularAndScriptAsync(code, expected, index: 1);
}
[WorkItem(940003, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/940003")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestWithProperties1()
{
var code = @"using System;
class Program
{
static void Main(string[] args)
{
var c = new [|Customer|](x: 1, y: ""Hello"") {Name = ""John"", Age = DateTime.Today};
}
}";
var expected = @"using System;
class Program
{
static void Main(string[] args)
{
var c = new Customer(x: 1, y: ""Hello"") {Name = ""John"", Age = DateTime.Today};
}
}
internal class Customer
{
private int x;
private string y;
public Customer(int x, string y)
{
this.x = x;
this.y = y;
}
public string Name { get; set; }
public DateTime Age { get; set; }
}";
await TestInRegularAndScriptAsync(code, expected, index: 1);
}
[WorkItem(940003, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/940003")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestWithProperties2()
{
var code = @"using System;
class Program
{
static void Main(string[] args)
{
var c = new [|Customer|](x: 1, y: ""Hello"") {Name = null, Age = DateTime.Today};
}
}";
var expected = @"using System;
class Program
{
static void Main(string[] args)
{
var c = new Customer(x: 1, y: ""Hello"") {Name = null, Age = DateTime.Today};
}
}
internal class Customer
{
private int x;
private string y;
public Customer(int x, string y)
{
this.x = x;
this.y = y;
}
public object Name { get; set; }
public DateTime Age { get; set; }
}";
await TestInRegularAndScriptAsync(code, expected, index: 1);
}
[WorkItem(940003, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/940003")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestWithProperties3()
{
var code = @"using System;
class Program
{
static void Main(string[] args)
{
var c = new [|Customer|](x: 1, y: ""Hello"") {Name = Goo, Age = DateTime.Today};
}
}";
var expected = @"using System;
class Program
{
static void Main(string[] args)
{
var c = new Customer(x: 1, y: ""Hello"") {Name = Goo, Age = DateTime.Today};
}
}
internal class Customer
{
private int x;
private string y;
public Customer(int x, string y)
{
this.x = x;
this.y = y;
}
public object Name { get; set; }
public DateTime Age { get; set; }
}";
await TestInRegularAndScriptAsync(code, expected, index: 1);
}
[WorkItem(1082031, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1082031")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestWithProperties4()
{
var code = @"using System;
class Program
{
static void Main(string[] args)
{
var c = new [|Customer|] {Name = ""John"", Age = DateTime.Today};
}
}";
var expected = @"using System;
class Program
{
static void Main(string[] args)
{
var c = new Customer {Name = ""John"", Age = DateTime.Today};
}
}
internal class Customer
{
public string Name { get; set; }
public DateTime Age { get; set; }
}";
await TestInRegularAndScriptAsync(code, expected, index: 1);
}
[WorkItem(1032176, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1032176"), WorkItem(1073099, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1073099")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestWithNameOf()
{
var code = @"class C
{
void M()
{
var x = nameof([|Z|]);
}
}
";
var expected = @"class C
{
void M()
{
var x = nameof(Z);
}
}
internal class Z
{
}";
await TestInRegularAndScriptAsync(code, expected, index: 1);
}
[WorkItem(1032176, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1032176"), WorkItem(1073099, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1073099")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestWithNameOf2()
{
var code = @"class C
{
void M()
{
var x = nameof([|C.Test|]);
}
}";
var expected = @"class C
{
void M()
{
var x = nameof(C.Test);
}
private class Test
{
}
}";
await TestInRegularAndScriptAsync(code, expected);
}
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestWithUsingStatic()
{
await TestInRegularAndScriptAsync(
@"using static [|Sample|];",
@"using static Sample;
internal class Sample
{
}",
index: 1);
}
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestWithUsingStatic2()
{
await TestMissingInRegularAndScriptAsync(
@"using [|Sample|];");
}
[WorkItem(1107929, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107929")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestAccessibilityForPublicFields()
{
await TestInRegularAndScriptAsync(
@"class A
{
public B b = new [|B|]();
}",
@"public class B
{
public B()
{
}
}");
}
[WorkItem(1107929, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107929")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestAccessibilityForPublicFields2()
{
await TestInRegularAndScriptAsync(
@"class A
{
public B b = new [|B|]();
}",
@"class A
{
public B b = new B();
}
public class B
{
public B()
{
}
}",
index: 1);
}
[WorkItem(1107929, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107929")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestAccessibilityForPublicFields3()
{
await TestInRegularAndScriptAsync(
@"class A
{
public B b = new [|B|]();
}",
@"class A
{
public B b = new B();
public class B
{
public B()
{
}
}
}",
index: 2);
}
[WorkItem(1107929, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107929")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestAccessibilityForPublicFields4()
{
await TestInRegularAndScriptAsync(
@"class A
{
public B<int> b = new [|B|]<int>();
}",
@"public class B<T>
{
public B()
{
}
}");
}
[WorkItem(1107929, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107929")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestAccessibilityForPublicFields5()
{
await TestInRegularAndScriptAsync(
@"class A
{
public B<int> b = new [|B|]<int>();
}",
@"class A
{
public B<int> b = new B<int>();
}
public class B<T>
{
public B()
{
}
}",
index: 1);
}
[WorkItem(1107929, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1107929")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestAccessibilityForPublicFields6()
{
await TestInRegularAndScriptAsync(
@"class A
{
public B<int> b = new [|B|]<int>();
}",
@"class A
{
public B<int> b = new B<int>();
public class B<T>
{
public B()
{
}
}
}",
index: 2);
}
[WorkItem(17361, "https://github.com/dotnet/roslyn/issues/17361")]
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestPreserveFileBanner1()
{
await TestAddDocumentInRegularAndScriptAsync(
@"// I am a banner
class Program
{
void Main ( )
{
[|Goo|] f ;
}
} ",
@"// I am a banner
internal class Goo
{
}",
expectedContainers: ImmutableArray<string>.Empty,
expectedDocumentName: "Goo.cs");
}
[WorkItem(17361, "https://github.com/dotnet/roslyn/issues/17361")]
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestPreserveFileBanner2()
{
await TestAddDocumentInRegularAndScriptAsync(
@"/// I am a doc comment
class Program
{
void Main ( )
{
[|Goo|] f ;
}
} ",
@"internal class Goo
{
}",
expectedContainers: ImmutableArray<string>.Empty,
expectedDocumentName: "Goo.cs");
}
[WorkItem(17361, "https://github.com/dotnet/roslyn/issues/17361")]
[WpfFact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
public async Task TestPreserveFileBanner3()
{
await TestAddDocumentInRegularAndScriptAsync(
@"// I am a banner
using System;
class Program
{
void Main (StackOverflowException e)
{
var f = new [|Goo|](e);
}
}",
@"// I am a banner
using System;
internal class Goo
{
private StackOverflowException e;
public Goo(StackOverflowException e)
{
this.e = e;
}
}",
expectedContainers: ImmutableArray<string>.Empty,
expectedDocumentName: "Goo.cs");
}
}