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 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 }));
        }