public void LocateFields_LocatesOnlyUnitializedFields() { var classSource = @"public class TestClass { private string s; private object o = new object(); public TestClass() { } }"; var(semanticModel, syntax) = CompiledSourceFileProvider.CompileClass(classSource); var fieldLocator = new FieldLocator(syntax, semanticModel); var fields = fieldLocator.LocateFields(); Assert.That(fields, Has.One.Items); var field = fields.Single(); Assert.That(field.Declaration.Type.ToString(), Is.EqualTo("string")); Assert.That(field.Declaration.Variables, Has.One.Items); Assert.That(field.Declaration.Variables, Has.One.Items); var variable = field.Declaration.Variables.Single(); Assert.That(variable.Identifier.ToString(), Is.EqualTo("s")); }
public void ClassFieldNotInitializedAnnotator_DoesAnnotateSingleUninitializedField() { var(semantic, syntax) = CompiledSourceFileProvider.CompileClass(c_classWithOneUnitializedField); var(_, expected) = CompiledSourceFileProvider.CompileClass(c_classWithOneUnitializedFieldAnnotated); var annotator = new ClassFieldNotInitializedAnnotator(semantic); var annotatedClass = annotator.Visit(syntax); Assert.That(annotatedClass.ToString(), Is.EqualTo(expected.ToString())); }
public void GetUnitializedFields_WithNoInitializations_FiltersNothing() { var(semantic, syntax) = CompiledSourceFileProvider.CompileClass(string.Format(c_constructorTemplate, "", "")); var(f1, f2, f3) = GetTestFields(syntax); var constructorInitFilter = new ConstructorInitializationFilter(syntax, new[] { f1, f2, f3 }); var uninitialized = constructorInitFilter.GetUnitializedFields(); Assert.That(uninitialized, Has.Exactly(3).Items); Assert.That(uninitialized, Is.EquivalentTo(new[] { f1, f2, f3 })); }
public void GetUnitializedFields_WithInitializerInCtorOverload_IsNotRecognized() { var(semantic, syntax) = CompiledSourceFileProvider.CompileClass(string.Format(c_constructorTemplate, @"field1 = ""hello""; ", @"field2 = """";")); var(f1, f2, f3) = GetTestFields(syntax); var constructorInitFilter = new ConstructorInitializationFilter(syntax, new[] { f1, f2, f3 }); var uninitialized = constructorInitFilter.GetUnitializedFields(); Assert.That(uninitialized, Has.Exactly(2).Items); Assert.That(uninitialized, Is.EquivalentTo(new[] { f1, f3 })); }
public void GetUnitializedFields_WithBaseInitializer() { var(_, syntax) = CompiledSourceFileProvider.CompileClass(string.Format(c_multipleConstructorWithBaseCallTemplate, @"field1 = ""hello""; ")); var(f1, f2, f3) = GetTestFields(syntax); var constructorInitFilter = new ConstructorInitializationFilter(syntax, new[] { f1, f2, f3 }); var uninitialized = constructorInitFilter.GetUnitializedFields(); Assert.That(uninitialized, Has.Exactly(2).Items); Assert.That(uninitialized, Is.EquivalentTo(new[] { f2, f3 })); }
public void MethodArgumentFromInvocationNullAnnotator_InvokesCallbackWithSingleNullableArgument() { var source = string.Format(c_argumentTemplate, "TestMethod (1, null, 2.3, new string())"); var(semanticModel, classSyntax) = CompiledSourceFileProvider.CompileClass(source); var callSiteMethod = classSyntax.Members[1] as MethodDeclarationSyntax; var list = new List <ParameterSyntax>(); var rewriter = new MethodArgumentFromInvocationNullAnnotator(semanticModel, p => list.Add(p)); var rewritten = rewriter.Visit(callSiteMethod); Assert.That(rewritten, Is.EqualTo(callSiteMethod)); Assert.That(list, Has.One.Items); Assert.That(list[0].Identifier.ToString(), Is.EqualTo("referenceType1")); }
public void LocateFields_LocatesNoFields() { var classSource = @"public class TestClass { public TestClass() { } }"; var(semanticModel, syntax) = CompiledSourceFileProvider.CompileClass(classSource); var fieldLocator = new FieldLocator(syntax, semanticModel); var fields = fieldLocator.LocateFields(); Assert.That(fields, Has.Exactly(0).Items); }
public void LocateFields_LocatesMultipleFields() { var classSource = @"public class TestClass { private string s; private object o; public TestClass() { s = """"; } }"; var(semanticModel, syntax) = CompiledSourceFileProvider.CompileClass(classSource); var fieldLocator = new FieldLocator(syntax, semanticModel); var fields = fieldLocator.LocateFields(); Assert.That(fields, Has.Exactly(2).Items); }
public void GetUnitializedFields_WithMultipleValidCtors_MissingInitInMultipleCtors() { var(semantic, syntax) = CompiledSourceFileProvider.CompileClass(string.Format(c_multipleConstructorTemplate, "field1 = \"hello\"; \r\n" + "field3 = \"\"; \r\n", "field1 = \"hello\"; \r\n" + "field3 = \"\"; \r\n", "field1 = \"hello\"; \r\n" + "field2 = \"\"; \r\n")); var(f1, f2, f3) = GetTestFields(syntax); var constructorInitFilter = new ConstructorInitializationFilter(syntax, new[] { f1, f2, f3 }); var uninitialized = constructorInitFilter.GetUnitializedFields(); Assert.That(uninitialized, Has.Exactly(2).Items); Assert.That(uninitialized, Is.EquivalentTo(new[] { f2, f3 })); }
public void LocateFields_IgnoresValueTypes() { const string classSource = @"public class Test { private int i; private decimal d; private System.DayOfWeek day; private string s; public Test() {} }"; var(semantic, syntax) = CompiledSourceFileProvider.CompileClass(classSource); var fieldLocator = new FieldLocator(syntax, semantic); var fields = fieldLocator.LocateFields(); Assert.That(fields, Has.One.Items); var field = fields.Single(); Assert.That(field.Declaration.Type.ToString(), Is.EqualTo("string")); }