/src/EditorFeatures/CSharpTest/Diagnostics/GenerateVariable/GenerateVariableTests.cs

https://gitlab.com/sharadag/Roslyn · C# · 1245 lines · 1104 code · 138 blank · 3 comment · 0 complexity · 57bc17849f89af78045826d4c080a4e1 MD5 · raw file

  1. // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Threading.Tasks;
  5. using Microsoft.CodeAnalysis.CodeActions;
  6. using Microsoft.CodeAnalysis.CodeFixes;
  7. using Microsoft.CodeAnalysis.CSharp.CodeFixes.GenerateVariable;
  8. using Microsoft.CodeAnalysis.CSharp.CodeStyle;
  9. using Microsoft.CodeAnalysis.Diagnostics;
  10. using Microsoft.CodeAnalysis.Options;
  11. using Roslyn.Test.Utilities;
  12. using Xunit;
  13. namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Diagnostics.GenerateVariable
  14. {
  15. public class GenerateVariableTests : AbstractCSharpDiagnosticProviderBasedUserDiagnosticTest
  16. {
  17. internal override Tuple<DiagnosticAnalyzer, CodeFixProvider> CreateDiagnosticProviderAndFixer(Workspace workspace)
  18. {
  19. return new Tuple<DiagnosticAnalyzer, CodeFixProvider>(
  20. null, new GenerateVariableCodeFixProvider());
  21. }
  22. protected override IList<CodeAction> MassageActions(IList<CodeAction> actions)
  23. {
  24. return FlattenActions(actions);
  25. }
  26. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  27. public async Task TestSimpleLowercaseIdentifier1()
  28. {
  29. await TestAsync(
  30. @"class Class { void Method() { [|foo|]; } }",
  31. @"class Class { private object foo; void Method() { foo; } }");
  32. }
  33. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  34. public async Task TestSimpleLowercaseIdentifier2()
  35. {
  36. await TestAsync(
  37. @"class Class { void Method() { [|foo|]; } }",
  38. @"class Class { private readonly object foo; void Method() { foo; } }",
  39. index: 1);
  40. }
  41. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  42. public async Task TestTestSimpleLowercaseIdentifier3()
  43. {
  44. await TestAsync(
  45. @"class Class { void Method() { [|foo|]; } }",
  46. @"class Class { public object foo { get; private set; } void Method() { foo; } }",
  47. index: 2);
  48. }
  49. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  50. public async Task TestSimpleUppercaseIdentifier1()
  51. {
  52. await TestAsync(
  53. @"class Class { void Method() { [|Foo|]; } }",
  54. @"class Class { public object Foo { get; private set; } void Method() { Foo; } }");
  55. }
  56. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  57. public async Task TestSimpleUppercaseIdentifier2()
  58. {
  59. await TestAsync(
  60. @"class Class { void Method() { [|Foo|]; } }",
  61. @"class Class { private object Foo; void Method() { Foo; } }",
  62. index: 1);
  63. }
  64. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  65. public async Task TestSimpleUppercaseIdentifier3()
  66. {
  67. await TestAsync(
  68. @"class Class { void Method() { [|Foo|]; } }",
  69. @"class Class { private readonly object Foo; void Method() { Foo; } }",
  70. index: 2);
  71. }
  72. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  73. public async Task TestSimpleRead1()
  74. {
  75. await TestAsync(
  76. @"class Class { void Method(int i) { Method([|foo|]); } }",
  77. @"class Class { private int foo; void Method(int i) { Method(foo); } }");
  78. }
  79. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  80. public async Task TestSimpleWriteCount()
  81. {
  82. await TestExactActionSetOfferedAsync(
  83. @"class Class { void Method(int i) { [|foo|] = 1; } }",
  84. new[] { string.Format(FeaturesResources.GenerateFieldIn, "foo", "Class"), string.Format(FeaturesResources.GeneratePropertyIn, "foo", "Class"), string.Format(FeaturesResources.GenerateLocal, "foo") });
  85. }
  86. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  87. public async Task TestSimpleWrite1()
  88. {
  89. await TestAsync(
  90. @"class Class { void Method(int i) { [|foo|] = 1; } }",
  91. @"class Class { private int foo; void Method(int i) { foo = 1; } }");
  92. }
  93. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  94. public async Task TestSimpleWrite2()
  95. {
  96. await TestAsync(
  97. @"class Class { void Method(int i) { [|foo|] = 1; } }",
  98. @"class Class { public int foo{ get; private set; } void Method(int i) { foo = 1; } }",
  99. index: 1);
  100. }
  101. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  102. public async Task TestInRefCodeActionCount()
  103. {
  104. await TestExactActionSetOfferedAsync(
  105. @"class Class { void Method(ref int i) { Method(ref [|foo|]); } }",
  106. new[] { string.Format(FeaturesResources.GenerateFieldIn, "foo", "Class"), string.Format(FeaturesResources.GenerateLocal, "foo") });
  107. }
  108. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  109. public async Task TestInRef1()
  110. {
  111. await TestAsync(
  112. @"class Class { void Method(ref int i) { Method(ref [|foo|]); } }",
  113. @"class Class { private int foo; void Method(ref int i) { Method(ref foo); } }");
  114. }
  115. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  116. public async Task TestInOutCodeActionCount()
  117. {
  118. await TestExactActionSetOfferedAsync(
  119. @"class Class { void Method(out int i) { Method(out [|foo|]); } }",
  120. new[] { string.Format(FeaturesResources.GenerateFieldIn, "foo", "Class"), string.Format(FeaturesResources.GenerateLocal, "foo") });
  121. }
  122. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  123. public async Task TestInOut1()
  124. {
  125. await TestAsync(
  126. @"class Class { void Method(out int i) { Method(out [|foo|]); } }",
  127. @"class Class { private int foo; void Method(out int i) { Method(out foo); } }");
  128. }
  129. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  130. public async Task TestGenerateInStaticMember1()
  131. {
  132. await TestAsync(
  133. @"class Class { static void Method() { [|foo|]; } }",
  134. @"class Class { private static object foo; static void Method() { foo; } }");
  135. }
  136. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  137. public async Task TestGenerateInStaticMember2()
  138. {
  139. await TestAsync(
  140. @"class Class { static void Method() { [|foo|]; } }",
  141. @"class Class { private static readonly object foo; static void Method() { foo; } }",
  142. index: 1);
  143. }
  144. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  145. public async Task TestGenerateInStaticMember3()
  146. {
  147. await TestAsync(
  148. @"class Class { static void Method() { [|foo|]; } }",
  149. @"class Class { public static object foo { get; private set; } static void Method() { foo; } }",
  150. index: 2);
  151. }
  152. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  153. public async Task TestGenerateOffInstance1()
  154. {
  155. await TestAsync(
  156. @"class Class { void Method() { this.[|foo|]; } }",
  157. @"class Class { private object foo; void Method() { this.foo; } }");
  158. }
  159. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  160. public async Task TestGenerateOffInstance2()
  161. {
  162. await TestAsync(
  163. @"class Class { void Method() { this.[|foo|]; } }",
  164. @"class Class { private readonly object foo; void Method() { this.foo; } }",
  165. index: 1);
  166. }
  167. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  168. public async Task TestGenerateOffInstance3()
  169. {
  170. await TestAsync(
  171. @"class Class { void Method() { this.[|foo|]; } }",
  172. @"class Class { public object foo { get; private set; } void Method() { this.foo; } }",
  173. index: 2);
  174. }
  175. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  176. public async Task TestGenerateOffWrittenInstance1()
  177. {
  178. await TestAsync(
  179. @"class Class { void Method() { this.[|foo|] = 1; } }",
  180. @"class Class { private int foo; void Method() { this.foo = 1; } }");
  181. }
  182. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  183. public async Task TestGenerateOffWrittenInstance2()
  184. {
  185. await TestAsync(
  186. @"class Class { void Method() { this.[|foo|] = 1; } }",
  187. @"class Class { public int foo { get; private set; } void Method() { this.foo = 1; } }",
  188. index: 1);
  189. }
  190. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  191. public async Task TestGenerateOffStatic1()
  192. {
  193. await TestAsync(
  194. @"class Class { void Method() { Class.[|foo|]; } }",
  195. @"class Class { private static object foo; void Method() { Class.foo; } }");
  196. }
  197. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  198. public async Task TestGenerateOffStatic2()
  199. {
  200. await TestAsync(
  201. @"class Class { void Method() { Class.[|foo|]; } }",
  202. @"class Class { private static readonly object foo; void Method() { Class.foo; } }",
  203. index: 1);
  204. }
  205. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  206. public async Task TestGenerateOffStatic3()
  207. {
  208. await TestAsync(
  209. @"class Class { void Method() { Class.[|foo|]; } }",
  210. @"class Class { public static object foo { get; private set; } void Method() { Class.foo; } }",
  211. index: 2);
  212. }
  213. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  214. public async Task TestGenerateOffWrittenStatic1()
  215. {
  216. await TestAsync(
  217. @"class Class { void Method() { Class.[|foo|] = 1; } }",
  218. @"class Class { private static int foo; void Method() { Class.foo = 1; } }");
  219. }
  220. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  221. public async Task TestGenerateOffWrittenStatic2()
  222. {
  223. await TestAsync(
  224. @"class Class { void Method() { Class.[|foo|] = 1; } }",
  225. @"class Class { public static int foo { get; private set; } void Method() { Class.foo = 1; } }",
  226. index: 1);
  227. }
  228. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  229. public async Task TestGenerateInstanceIntoSibling1()
  230. {
  231. await TestAsync(
  232. @"class Class { void Method() { new D().[|foo|]; } } class D { }",
  233. @"class Class { void Method() { new D().foo; } } class D { internal object foo; }");
  234. }
  235. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  236. public async Task TestGenerateInstanceIntoOuter1()
  237. {
  238. await TestAsync(
  239. @"class Outer { class Class { void Method() { new Outer().[|foo|]; } } }",
  240. @"class Outer { private object foo; class Class { void Method() { new Outer().foo; } } }");
  241. }
  242. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  243. public async Task TestGenerateInstanceIntoDerived1()
  244. {
  245. await TestAsync(
  246. @"class Class : Base { void Method(Base b) { b.[|foo|]; } } class Base { }",
  247. @"class Class : Base { void Method(Base b) { b.foo; } } class Base { internal object foo; }");
  248. }
  249. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  250. public async Task TestGenerateStaticIntoDerived1()
  251. {
  252. await TestAsync(
  253. @"class Class : Base { void Method(Base b) { Base.[|foo|]; } } class Base { }",
  254. @"class Class : Base { void Method(Base b) { Base.foo; } } class Base { protected static object foo; }");
  255. }
  256. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  257. public async Task TestGenerateIntoInterfaceFixCount()
  258. {
  259. await TestActionCountAsync(
  260. @"class Class { void Method(I i) { i.[|foo|]; } } interface I { }",
  261. count: 2);
  262. }
  263. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  264. public async Task TestGenerateIntoInterface1()
  265. {
  266. await TestAsync(
  267. @"class Class { void Method(I i) { i.[|Foo|]; } } interface I { }",
  268. @"class Class { void Method(I i) { i.Foo; } } interface I { object Foo { get; set; } }");
  269. }
  270. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  271. public async Task TestGenerateIntoInterface2()
  272. {
  273. await TestAsync(
  274. @"class Class { void Method(I i) { i.[|Foo|]; } } interface I { }",
  275. @"class Class { void Method(I i) { i.Foo; } } interface I { object Foo { get; } }",
  276. index: 1);
  277. }
  278. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  279. public async Task TestGenerateStaticIntoInterfaceMissing()
  280. {
  281. await TestMissingAsync(
  282. @"class Class { void Method(I i) { I.[|Foo|]; } } interface I { }");
  283. }
  284. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  285. public async Task TestGenerateWriteIntoInterfaceFixCount()
  286. {
  287. await TestActionCountAsync(
  288. @"class Class { void Method(I i) { i.[|Foo|] = 1; } } interface I { }",
  289. count: 1);
  290. }
  291. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  292. public async Task TestGenerateWriteIntoInterface1()
  293. {
  294. await TestAsync(
  295. @"class Class { void Method(I i) { i.[|Foo|] = 1; } } interface I { }",
  296. @"class Class { void Method(I i) { i.Foo = 1; } } interface I { int Foo { get; set; } }");
  297. }
  298. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  299. public async Task TestGenerateInGenericType()
  300. {
  301. await TestAsync(
  302. @"class Class<T> { void Method(T t) { [|foo|] = t; } }",
  303. @"class Class<T> { private T foo; void Method(T t) { foo = t; } }");
  304. }
  305. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  306. public async Task TestGenerateInGenericMethod1()
  307. {
  308. await TestAsync(
  309. @"class Class { void Method<T>(T t) { [|foo|] = t; } }",
  310. @"class Class { private object foo; void Method<T>(T t) { foo = t; } }");
  311. }
  312. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  313. public async Task TestGenerateInGenericMethod2()
  314. {
  315. await TestAsync(
  316. @"class Class { void Method<T>(IList<T> t) { [|foo|] = t; } }",
  317. @"class Class { private IList<object> foo; void Method<T>(IList<T> t) { foo = t; } }");
  318. }
  319. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  320. public async Task TestGenerateFieldBeforeFirstField()
  321. {
  322. await TestAsync(
  323. @"class Class { int i; void Method() { [|foo|]; } }",
  324. @"class Class { private object foo; int i; void Method() { foo; } }");
  325. }
  326. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  327. public async Task TestGenerateFieldAfterLastField()
  328. {
  329. await TestAsync(
  330. @"class Class { void Method() { [|foo|]; } int i; }",
  331. @"class Class { void Method() { foo; } int i; private object foo; }");
  332. }
  333. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  334. public async Task TestGeneratePropertyAfterLastField1()
  335. {
  336. await TestAsync(
  337. @"class Class { int Bar; void Method() { [|Foo|]; } }",
  338. @"class Class { int Bar; public object Foo { get; private set; } void Method() { Foo; } }");
  339. }
  340. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  341. public async Task TestGeneratePropertyAfterLastField2()
  342. {
  343. await TestAsync(
  344. @"class Class { void Method() { [|Foo|]; } int Bar; }",
  345. @"class Class { void Method() { Foo; } int Bar; public object Foo { get; private set; } }");
  346. }
  347. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  348. public async Task TestGeneratePropertyBeforeFirstProperty()
  349. {
  350. await TestAsync(
  351. @"class Class { int Quux { get; } void Method() { [|Foo|]; } }",
  352. @"class Class { public object Foo { get; private set; } int Quux { get; } void Method() { Foo; } }");
  353. }
  354. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  355. public async Task TestGeneratePropertyBeforeFirstPropertyEvenWithField1()
  356. {
  357. await TestAsync(
  358. @"class Class { int Bar; int Quux { get; } void Method() { [|Foo|]; } }",
  359. @"class Class { int Bar; public object Foo { get; private set; } int Quux { get; } void Method() { Foo; } }");
  360. }
  361. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  362. public async Task TestGeneratePropertyAfterLastPropertyEvenWithField2()
  363. {
  364. await TestAsync(
  365. @"class Class { int Quux { get; } int Bar; void Method() { [|Foo|]; } }",
  366. @"class Class { int Quux { get; } public object Foo { get; private set; } int Bar; void Method() { Foo; } }");
  367. }
  368. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  369. public async Task TestMissingInInvocation()
  370. {
  371. await TestMissingAsync(
  372. @"class Class { void Method() { [|Foo|](); } }");
  373. }
  374. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  375. public async Task TestMissingInObjectCreation()
  376. {
  377. await TestMissingAsync(
  378. @"class Class { void Method() { new [|Foo|](); } }");
  379. }
  380. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  381. public async Task TestMissingInTypeDeclaration()
  382. {
  383. await TestMissingAsync(
  384. @"class Class { void Method() { [|A|] a; } }");
  385. await TestMissingAsync(
  386. @"class Class { void Method() { [|A.B|] a; } }");
  387. await TestMissingAsync(
  388. @"class Class { void Method() { [|A|].B a; } }");
  389. await TestMissingAsync(
  390. @"class Class { void Method() { A.[|B|] a; } }");
  391. await TestMissingAsync(
  392. @"class Class { void Method() { [|A.B.C|] a; } }");
  393. await TestMissingAsync(
  394. @"class Class { void Method() { [|A.B|].C a; } }");
  395. await TestMissingAsync(
  396. @"class Class { void Method() { A.B.[|C|] a; } }");
  397. await TestMissingAsync(
  398. @"class Class { void Method() { [|A|].B.C a; } }");
  399. await TestMissingAsync(
  400. @"class Class { void Method() { A.[|B|].C a; } }");
  401. }
  402. [WorkItem(539336, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539336")]
  403. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  404. public async Task TestMissingInAttribute()
  405. {
  406. await TestMissingAsync(
  407. @"[[|A|]]class Class { }");
  408. await TestMissingAsync(
  409. @"[[|A.B|]]class Class { }");
  410. await TestMissingAsync(
  411. @"[[|A|].B]class Class { }");
  412. await TestMissingAsync(
  413. @"[A.[|B|]]class Class { }");
  414. await TestMissingAsync(
  415. @"[[|A.B.C|]]class Class { }");
  416. await TestMissingAsync(
  417. @"[[|A.B|].C]class Class { }");
  418. await TestMissingAsync(
  419. @"[A.B.[|C|]]class Class { }");
  420. await TestMissingAsync(
  421. @"[[|A|].B.C]class Class { }");
  422. await TestMissingAsync(
  423. @"[A.B.[|C|]]class Class { }");
  424. }
  425. [WorkItem(539340, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539340")]
  426. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  427. public async Task TestSpansField()
  428. {
  429. await TestSpansAsync(
  430. @"class C { void M() { this.[|Foo|] }",
  431. @"class C { void M() { this.[|Foo|] }");
  432. await TestSpansAsync(
  433. @"class C { void M() { this.[|Foo|]; }",
  434. @"class C { void M() { this.[|Foo|]; }");
  435. await TestSpansAsync(
  436. @"class C { void M() { this.[|Foo|] = 1 }",
  437. @"class C { void M() { this.[|Foo|] = 1 }");
  438. await TestSpansAsync(
  439. @"class C { void M() { this.[|Foo|] = 1 + 2 }",
  440. @"class C { void M() { this.[|Foo|] = 1 + 2 }");
  441. await TestSpansAsync(
  442. @"class C { void M() { this.[|Foo|] = 1 + 2; }",
  443. @"class C { void M() { this.[|Foo|] = 1 + 2; }");
  444. await TestSpansAsync(
  445. @"class C { void M() { this.[|Foo|] += Bar() }",
  446. @"class C { void M() { this.[|Foo|] += Bar() }");
  447. await TestSpansAsync(
  448. @"class C { void M() { this.[|Foo|] += Bar(); }",
  449. @"class C { void M() { this.[|Foo|] += Bar(); }");
  450. }
  451. [WorkItem(539427, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539427")]
  452. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  453. public async Task TestGenerateFromLambda()
  454. {
  455. await TestAsync(
  456. @"class Class { void Method(int i) { [|foo|] = () => { return 2 }; } }",
  457. @"using System; class Class { private Func<int> foo; void Method(int i) { foo = () => { return 2 }; } }");
  458. }
  459. // TODO: Move to TypeInferrer.InferTypes, or something
  460. [WorkItem(539466, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539466")]
  461. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  462. public async Task TestGenerateInMethodOverload1()
  463. {
  464. await TestAsync(
  465. @"class Class { void Method(int i) { System.Console.WriteLine([|foo|]); } }",
  466. @"class Class { private bool foo; void Method(int i) { System.Console.WriteLine(foo); } }");
  467. }
  468. // TODO: Move to TypeInferrer.InferTypes, or something
  469. [WorkItem(539466, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539466")]
  470. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  471. public async Task TestGenerateInMethodOverload2()
  472. {
  473. await TestAsync(
  474. @"class Class { void Method(int i) { System.Console.WriteLine(this.[|foo|]); } }",
  475. @"class Class { private bool foo; void Method(int i) { System.Console.WriteLine(this.foo); } }");
  476. }
  477. [WorkItem(539468, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539468")]
  478. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  479. public async Task TestExplicitProperty1()
  480. {
  481. await TestAsync(
  482. @"class Class : ITest { bool ITest.[|SomeProp|] { get; set; } } interface ITest { }",
  483. @"class Class : ITest { bool ITest.SomeProp { get; set; } } interface ITest { bool SomeProp { get; set; } }");
  484. }
  485. [WorkItem(539468, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539468")]
  486. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  487. public async Task TestExplicitProperty2()
  488. {
  489. await TestAsync(
  490. @"class Class : ITest { bool ITest.[|SomeProp|] { } } interface ITest { }",
  491. @"class Class : ITest { bool ITest.SomeProp { } } interface ITest { bool SomeProp { get; set; } }");
  492. }
  493. [WorkItem(539468, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539468")]
  494. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  495. public async Task TestExplicitProperty3()
  496. {
  497. await TestAsync(
  498. @"class Class : ITest { bool ITest.[|SomeProp|] { } } interface ITest { }",
  499. @"class Class : ITest { bool ITest.SomeProp { } } interface ITest { bool SomeProp { get; } }",
  500. index: 1);
  501. }
  502. [WorkItem(539468, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539468")]
  503. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  504. public async Task TestExplicitProperty4()
  505. {
  506. await TestMissingAsync(
  507. @"class Class { bool ITest.[|SomeProp|] { } } interface ITest { }");
  508. }
  509. [WorkItem(539468, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539468")]
  510. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  511. public async Task TestExplicitProperty5()
  512. {
  513. await TestMissingAsync(
  514. @"class Class : ITest { bool ITest.[|SomeProp|] { } } interface ITest { bool SomeProp { get; } }");
  515. }
  516. [WorkItem(539489, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539489")]
  517. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  518. public async Task TestEscapedName()
  519. {
  520. await TestAsync(
  521. @"class Class { void Method() { [|@foo|]; } }",
  522. @"class Class { private object foo; void Method() { @foo; } }");
  523. }
  524. [WorkItem(539489, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539489")]
  525. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  526. public async Task TestEscapedKeyword()
  527. {
  528. await TestAsync(
  529. @"class Class { void Method() { [|@int|]; } }",
  530. @"class Class { private object @int; void Method() { @int; } }");
  531. }
  532. [WorkItem(539529, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539529")]
  533. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  534. public async Task TestRefLambda()
  535. {
  536. await TestAsync(
  537. @"class Class { void Method() { [|test|] = (ref int x) => x = 10; } }",
  538. @"class Class { private object test; void Method() { test = (ref int x) => x = 10; } }");
  539. }
  540. [WorkItem(539595, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539595")]
  541. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  542. public async Task TestNotOnError()
  543. {
  544. await TestMissingAsync(
  545. @"class Class { void F<U,V>(U u1, V v1) { Foo<string,int>([|u1|], u2); } }");
  546. }
  547. [WorkItem(539571, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539571")]
  548. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  549. public async Task TestNameSimplification()
  550. {
  551. await TestAsync(
  552. @"namespace TestNs { class Program { class Test { void Meth ( ) { Program . [|blah|] = new Test ( ) ; } } } } ",
  553. @"namespace TestNs { class Program { private static Test blah ; class Test { void Meth ( ) { Program . blah = new Test ( ) ; } } } } ");
  554. }
  555. [WorkItem(539717, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539717")]
  556. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  557. public async Task TestPostIncrement()
  558. {
  559. await TestAsync(
  560. @"class Program { static void Main ( string [ ] args ) { [|i|] ++ ; } } ",
  561. @"class Program { private static int i ; static void Main ( string [ ] args ) { i ++ ; } } ");
  562. }
  563. [WorkItem(539717, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539717")]
  564. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  565. public async Task TestPreDecrement()
  566. {
  567. await TestAsync(
  568. @"class Program { static void Main ( string [ ] args ) { -- [|i|] ; } } ",
  569. @"class Program { private static int i ; static void Main ( string [ ] args ) { -- i ; } } ");
  570. }
  571. [WorkItem(539738, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539738")]
  572. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  573. public async Task TestGenerateIntoScript()
  574. {
  575. await TestAsync(
  576. @"using C ; static class C { } C . [|i|] ++ ; ",
  577. @"using C ; static class C { internal static int i ; } C . i ++ ; ",
  578. parseOptions: Options.Script);
  579. }
  580. [WorkItem(539558, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539558")]
  581. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  582. public async Task BugFix5565()
  583. {
  584. await TestAsync(
  585. @"using System;
  586. using System.Collections.Generic;
  587. using System.Linq;
  588. class Program
  589. {
  590. static void Main(string[] args)
  591. {
  592. [|Foo|]#();
  593. }
  594. }",
  595. @"using System;
  596. using System.Collections.Generic;
  597. using System.Linq;
  598. class Program
  599. {
  600. public static object Foo { get; private set; }
  601. static void Main(string[] args)
  602. {
  603. Foo#();
  604. }
  605. }",
  606. compareTokens: false);
  607. }
  608. [WorkItem(539536, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539536")]
  609. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  610. public async Task BugFix5538()
  611. {
  612. await TestAsync(
  613. @"using System ; using System . Collections . Generic ; using System . Linq ; class Program { static void Main ( string [ ] args ) { new ( [|foo|] ) ( ) ; } } ",
  614. @"using System ; using System . Collections . Generic ; using System . Linq ; class Program { public static object foo { get ; private set ; } static void Main ( string [ ] args ) { new ( foo ) ( ) ; } } ",
  615. index: 2);
  616. }
  617. [WorkItem(539665, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539665")]
  618. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  619. public async Task BugFix5697()
  620. {
  621. await TestAsync(
  622. @"class C { }
  623. class D
  624. {
  625. void M()
  626. {
  627. C.[|P|] = 10;
  628. }
  629. }
  630. ",
  631. @"class C
  632. {
  633. public static int P { get; internal set; }
  634. }
  635. class D
  636. {
  637. void M()
  638. {
  639. C.P = 10;
  640. }
  641. }
  642. ",
  643. compareTokens: false);
  644. }
  645. [WorkItem(539793, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539793")]
  646. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  647. public async Task TestIncrement()
  648. {
  649. await TestExactActionSetOfferedAsync(
  650. @"class Program { static void Main ( ) { [|p|] ++ ; } } ",
  651. new[] { string.Format(FeaturesResources.GenerateFieldIn, "p", "Program"), string.Format(FeaturesResources.GeneratePropertyIn, "p", "Program"), string.Format(FeaturesResources.GenerateLocal, "p") });
  652. await TestAsync(
  653. @"class Program { static void Main ( ) { [|p|] ++ ; } } ",
  654. @"class Program { private static int p ; static void Main ( ) { p ++ ; } } ");
  655. }
  656. [WorkItem(539834, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539834")]
  657. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateType)]
  658. public async Task TestNotInGoto()
  659. {
  660. await TestMissingAsync(
  661. @"class Program { static void Main ( ) { goto [|foo|] ; } } ");
  662. }
  663. [WorkItem(539826, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539826")]
  664. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  665. public async Task TestOnLeftOfDot()
  666. {
  667. await TestAsync(
  668. @"class Program { static void Main ( ) { [|foo|] . ToString ( ) ; } } ",
  669. @"class Program { private static object foo ; static void Main ( ) { foo . ToString ( ) ; } } ");
  670. }
  671. [WorkItem(539840, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539840")]
  672. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  673. public async Task TestNotBeforeAlias()
  674. {
  675. await TestMissingAsync(
  676. @"using System ; using System . Collections . Generic ; using System . Linq ; class Program { static void Main ( string [ ] args ) { [|global|] :: System . String s ; } } ");
  677. }
  678. [WorkItem(539871, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539871")]
  679. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  680. public async Task TestMissingOnGenericName()
  681. {
  682. await TestMissingAsync(
  683. @"class C < T > { public delegate void Foo < R > ( R r ) ; static void M ( ) { Foo < T > r = [|Goo < T >|] ; } } ");
  684. }
  685. [WorkItem(539934, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539934")]
  686. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  687. public async Task TestOnDelegateAddition()
  688. {
  689. await TestAsync(
  690. @"class C { delegate void D ( ) ; void M ( ) { D d = [|M1|] + M2 ; } } ",
  691. @"class C { private D M1 { get ; set ; } delegate void D ( ) ; void M ( ) { D d = M1 + M2 ; } } ",
  692. parseOptions: null);
  693. }
  694. [WorkItem(539986, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539986")]
  695. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  696. public async Task TestReferenceTypeParameter1()
  697. {
  698. await TestAsync(
  699. @"class C < T > { public void Test ( ) { C < T > c = A . [|M|] ; } } class A { } ",
  700. @"class C < T > { public void Test ( ) { C < T > c = A . M ; } } class A { public static C < object > M { get ; internal set ; } } ");
  701. }
  702. [WorkItem(539986, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539986")]
  703. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  704. public async Task TestReferenceTypeParameter2()
  705. {
  706. await TestAsync(
  707. @"class C < T > { public void Test ( ) { C < T > c = A . [|M|] ; } class A { } } ",
  708. @"class C < T > { public void Test ( ) { C < T > c = A . M ; } class A { public static C < T > M { get ; internal set ; } } } ");
  709. }
  710. [WorkItem(540159, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540159")]
  711. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  712. public async Task TestEmptyIdentifierName()
  713. {
  714. await TestMissingAsync(
  715. @"class C { static void M ( ) { int i = [|@|] } } ");
  716. await TestMissingAsync(
  717. @"class C { static void M ( ) { int i = [|@ |]} } ");
  718. }
  719. [WorkItem(541194, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541194")]
  720. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  721. public async Task TestForeachVar()
  722. {
  723. await TestAsync(
  724. @"class C { void M ( ) { foreach ( var v in [|list|] ) { } } } ",
  725. @"using System.Collections.Generic; class C { private IEnumerable < object > list ; void M ( ) { foreach ( var v in list ) { } } } ");
  726. }
  727. [WorkItem(541265, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541265")]
  728. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  729. public async Task TestExtensionMethodUsedAsInstance()
  730. {
  731. await TestAsync(
  732. @"using System ; class C { public static void Main ( ) { string s = ""Hello"" ; [|f|] = s . ExtensionMethod ; } } public static class MyExtension { public static int ExtensionMethod ( this String s ) { return s . Length ; } } ",
  733. @"using System ; class C { private static Func < int > f ; public static void Main ( ) { string s = ""Hello"" ; f = s . ExtensionMethod ; } } public static class MyExtension { public static int ExtensionMethod ( this String s ) { return s . Length ; } } ",
  734. parseOptions: null);
  735. }
  736. [WorkItem(541549, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541549")]
  737. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  738. public async Task TestDelegateInvoke()
  739. {
  740. await TestAsync(
  741. @"using System ; class Program { static void Main ( string [ ] args ) { Func < int , int > f = x => x + 1 ; f ( [|x|] ) ; } } ",
  742. @"using System ; class Program { private static int x ; static void Main ( string [ ] args ) { Func < int , int > f = x => x + 1 ; f ( x ) ; } } ");
  743. }
  744. [WorkItem(541597, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541597")]
  745. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  746. public async Task TestComplexAssign1()
  747. {
  748. await TestAsync(
  749. @"class Program { static void Main ( string [ ] args ) { [|a|] = a + 10 ; } } ",
  750. @"class Program { private static int a ; static void Main ( string [ ] args ) { a = a + 10 ; } } ");
  751. }
  752. [WorkItem(541597, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541597")]
  753. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  754. public async Task TestComplexAssign2()
  755. {
  756. await TestAsync(
  757. @"class Program { static void Main ( string [ ] args ) { a = [|a|] + 10 ; } } ",
  758. @"class Program { private static int a ; static void Main ( string [ ] args ) { a = a + 10 ; } } ");
  759. }
  760. [WorkItem(541659, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541659")]
  761. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  762. public async Task TestTypeNamedVar()
  763. {
  764. await TestAsync(
  765. @"using System ; class Program { public static void Main ( ) { var v = [|p|] ; } } class var { } ",
  766. @"using System ; class Program { private static var p ; public static void Main ( ) { var v = p ; } } class var { } ");
  767. }
  768. [WorkItem(541675, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541675")]
  769. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  770. public async Task TestStaticExtensionMethodArgument()
  771. {
  772. await TestAsync(
  773. @"using System ; class Program { static void Main ( string [ ] args ) { MyExtension . ExMethod ( [|ss|] ) ; } } static class MyExtension { public static int ExMethod ( this string s ) { return s . Length ; } } ",
  774. @"using System ; class Program { private static string ss ; static void Main ( string [ ] args ) { MyExtension . ExMethod ( ss ) ; } } static class MyExtension { public static int ExMethod ( this string s ) { return s . Length ; } } ");
  775. }
  776. [WorkItem(539675, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539675")]
  777. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  778. public async Task AddBlankLineBeforeCommentBetweenMembers1()
  779. {
  780. await TestAsync(
  781. @"class Program
  782. {
  783. //method
  784. static void Main(string[] args)
  785. {
  786. [|P|] = 10;
  787. }
  788. }",
  789. @"class Program
  790. {
  791. public static int P { get; private set; }
  792. //method
  793. static void Main(string[] args)
  794. {
  795. P = 10;
  796. }
  797. }",
  798. compareTokens: false);
  799. }
  800. [WorkItem(539675, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539675")]
  801. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  802. public async Task AddBlankLineBeforeCommentBetweenMembers2()
  803. {
  804. await TestAsync(
  805. @"class Program
  806. {
  807. //method
  808. static void Main(string[] args)
  809. {
  810. [|P|] = 10;
  811. }
  812. }",
  813. @"class Program
  814. {
  815. private static int P;
  816. //method
  817. static void Main(string[] args)
  818. {
  819. P = 10;
  820. }
  821. }",
  822. index: 1,
  823. compareTokens: false);
  824. }
  825. [WorkItem(543813, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543813")]
  826. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  827. public async Task AddBlankLineBetweenMembers1()
  828. {
  829. await TestAsync(
  830. @"class Program
  831. {
  832. static void Main(string[] args)
  833. {
  834. [|P|] = 10;
  835. }
  836. }",
  837. @"class Program
  838. {
  839. private static int P;
  840. static void Main(string[] args)
  841. {
  842. P = 10;
  843. }
  844. }",
  845. index: 1,
  846. compareTokens: false);
  847. }
  848. [WorkItem(543813, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543813")]
  849. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  850. public async Task AddBlankLineBetweenMembers2()
  851. {
  852. await TestAsync(
  853. @"class Program
  854. {
  855. static void Main(string[] args)
  856. {
  857. [|P|] = 10;
  858. }
  859. }",
  860. @"class Program
  861. {
  862. public static int P { get; private set; }
  863. static void Main(string[] args)
  864. {
  865. P = 10;
  866. }
  867. }",
  868. index: 0,
  869. compareTokens: false);
  870. }
  871. [WorkItem(543813, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543813")]
  872. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  873. public async Task DontAddBlankLineBetweenFields()
  874. {
  875. await TestAsync(
  876. @"class Program
  877. {
  878. private static int P;
  879. static void Main(string[] args)
  880. {
  881. P = 10;
  882. [|A|] = 9;
  883. }
  884. }",
  885. @"class Program
  886. {
  887. private static int A;
  888. private static int P;
  889. static void Main(string[] args)
  890. {
  891. P = 10;
  892. A = 9;
  893. }
  894. }",
  895. index: 1,
  896. compareTokens: false);
  897. }
  898. [WorkItem(543813, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543813")]
  899. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  900. public async Task DontAddBlankLineBetweenAutoProperties()
  901. {
  902. await TestAsync(
  903. @"class Program
  904. {
  905. public static int P { get; private set; }
  906. static void Main(string[] args)
  907. {
  908. P = 10;
  909. [|A|] = 9;
  910. }
  911. }",
  912. @"class Program
  913. {
  914. public static int A { get; private set; }
  915. public static int P { get; private set; }
  916. static void Main(string[] args)
  917. {
  918. P = 10;
  919. A = 9;
  920. }
  921. }",
  922. index: 0,
  923. compareTokens: false);
  924. }
  925. [WorkItem(539665, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539665")]
  926. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  927. public async Task TestIntoEmptyClass()
  928. {
  929. await TestAsync(
  930. @"class C { }
  931. class D
  932. {
  933. void M()
  934. {
  935. C.[|P|] = 10;
  936. }
  937. }",
  938. @"class C
  939. {
  940. public static int P { get; internal set; }
  941. }
  942. class D
  943. {
  944. void M()
  945. {
  946. C.P = 10;
  947. }
  948. }",
  949. compareTokens: false);
  950. }
  951. [WorkItem(540595, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540595")]
  952. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  953. public async Task TestGeneratePropertyInScript()
  954. {
  955. await TestAsync(
  956. @"[|Foo|]",
  957. @"object Foo { get; private set; }
  958. Foo",
  959. parseOptions: Options.Script,
  960. compareTokens: false);
  961. }
  962. [WorkItem(542535, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542535")]
  963. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  964. public async Task TestConstantInParameterValue()
  965. {
  966. const string Initial = @"class C { const int y = 1 ; public void Foo ( bool x = [|undeclared|] ) { } } ";
  967. await TestActionCountAsync(
  968. Initial,
  969. count: 1);
  970. await TestAsync(
  971. Initial,
  972. @"class C { private const bool undeclared ; const int y = 1 ; public void Foo ( bool x = undeclared ) { } } ");
  973. }
  974. [WorkItem(542900, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542900")]
  975. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  976. public async Task TestGenerateFromAttributeNamedArgument1()
  977. {
  978. await TestAsync(
  979. @"using System ; class ProgramAttribute : Attribute { [ Program ( [|Name|] = 0 ) ] static void Main ( string [ ] args ) { } } ",
  980. @"using System ; class ProgramAttribute : Attribute { public int Name { get ; set ; } [ Program ( Name = 0 ) ] static void Main ( string [ ] args ) { } } ");
  981. }
  982. [WorkItem(542900, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542900")]
  983. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  984. public async Task TestGenerateFromAttributeNamedArgument2()
  985. {
  986. await TestAsync(
  987. @"using System ; class ProgramAttribute : Attribute { [ Program ( [|Name|] = 0 ) ] static void Main ( string [ ] args ) { } } ",
  988. @"using System ; class ProgramAttribute : Attribute { public int Name ; [ Program ( Name = 0 ) ] static void Main ( string [ ] args ) { } } ",
  989. index: 1);
  990. }
  991. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  992. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  993. public async Task TestMinimalAccessibility1_InternalPrivate()
  994. {
  995. await TestAsync(
  996. @"class Program { public static void Main ( ) { C c = [|P|] ; } private class C { } } ",
  997. @"class Program { private static C P { get ; set ; } public static void Main ( ) { C c = P ; } private class C { } } ",
  998. parseOptions: null);
  999. }
  1000. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1001. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1002. public async Task TestMinimalAccessibility2_InternalProtected()
  1003. {
  1004. await TestAsync(
  1005. @"class Program { public static void Main ( ) { C c = [|P|] ; } protected class C { } } ",
  1006. @"class Program { protected static C P { get ; private set ; } public static void Main ( ) { C c = P ; } protected class C { } } ",
  1007. parseOptions: null);
  1008. }
  1009. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1010. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1011. public async Task TestMinimalAccessibility3_InternalInternal()
  1012. {
  1013. await TestAsync(
  1014. @"class Program { public static void Main ( ) { C c = [|P|] ; } internal class C { } } ",
  1015. @"class Program { public static C P { get ; private set ; } public static void Main ( ) { C c = P ; } internal class C { } } ",
  1016. parseOptions: null);
  1017. }
  1018. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1019. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1020. public async Task TestMinimalAccessibility4_InternalProtectedInternal()
  1021. {
  1022. await TestAsync(
  1023. @"class Program { public static void Main ( ) { C c = [|P|] ; } protected internal class C { } } ",
  1024. @"class Program { public static C P { get ; private set ; } public static void Main ( ) { C c = P ; } protected internal class C { } } ",
  1025. parseOptions: null);
  1026. }
  1027. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1028. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1029. public async Task TestMinimalAccessibility5_InternalPublic()
  1030. {
  1031. await TestAsync(
  1032. @"class Program { public static void Main ( ) { C c = [|P|] ; } public class C { } } ",
  1033. @"class Program { public static C P { get ; private set ; } public static void Main ( ) { C c = P ; } public class C { } } ",
  1034. parseOptions: null);
  1035. }
  1036. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1037. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1038. public async Task TestMinimalAccessibility6_PublicInternal()
  1039. {
  1040. await TestAsync(
  1041. @"public class Program { public static void Main ( ) { C c = [|P|] ; } internal class C { } } ",
  1042. @"public class Program { internal static C P { get ; private set ; } public static void Main ( ) { C c = P ; } internal class C { } } ",
  1043. parseOptions: null);
  1044. }
  1045. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1046. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1047. public async Task TestMinimalAccessibility7_PublicProtectedInternal()
  1048. {
  1049. await TestAsync(
  1050. @"public class Program { public static void Main ( ) { C c = [|P|] ; } protected internal class C { } } ",
  1051. @"public class Program { protected internal static C P { get ; private set ; } public static void Main ( ) { C c = P ; } protected internal class C { } } ",
  1052. parseOptions: null);
  1053. }
  1054. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1055. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1056. public async Task TestMinimalAccessibility8_PublicProtected()
  1057. {
  1058. await TestAsync(
  1059. @"public class Program { public static void Main ( ) { C c = [|P|] ; } protected class C { } } ",
  1060. @"public class Program { protected static C P { get ; private set ; } public static void Main ( ) { C c = P ; } protected class C { } } ",
  1061. parseOptions: null);
  1062. }
  1063. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1064. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1065. public async Task TestMinimalAccessibility9_PublicPrivate()
  1066. {
  1067. await TestAsync(
  1068. @"public class Program { public static void Main ( ) { C c = [|P|] ; } private class C { } } ",
  1069. @"public class Program { private static C P { get ; set ; } public static void Main ( ) { C c = P ; } private class C { } } ",
  1070. parseOptions: null);
  1071. }
  1072. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1073. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1074. public async Task TestMinimalAccessibility10_PrivatePrivate()
  1075. {
  1076. await TestAsync(
  1077. @"class outer { private class Program { public static void Main ( ) { C c = [|P|] ; } private class C { } } }",
  1078. @"class outer { private class Program { public static C P { get ; private set ; } public static void Main ( ) { C c = P ; } private class C { } } }",
  1079. parseOptions: null);
  1080. }
  1081. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1082. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1083. public async Task TestMinimalAccessibility11_PrivateProtected()
  1084. {
  1085. await TestAsync(
  1086. @"class outer { private class Program { public static void Main ( ) { C c = [|P|] ; } protected class C { } } }",
  1087. @"class outer { private class Program { public static C P { get ; private set ; } public static void Main ( ) { C c = P ; } protected class C { } } }",
  1088. parseOptions: null);
  1089. }
  1090. [WorkItem(541698, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541698")]
  1091. [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateVariable)]
  1092. public async Task TestMinimalAccessibility12_PrivateProtectedInternal()
  1093. {
  1094. await TestAsync(
  1095. @"class outer { private class Program { public static void Main ( ) { C c = [|P|] ; } protected internal class C { } }