Пример #1
0
        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 }));
        }
Пример #6
0
        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"));
        }
Пример #7
0
        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);
        }
Пример #8
0
        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 }));
        }
Пример #10
0
        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"));
        }