コード例 #1
0
        public void ImmutableList(string call)
        {
            var testCode = @"
namespace RoslynSandbox
{
    using System.Collections.Immutable;

    class Foo
    {
        public Foo(ImmutableList<int> values)
        {
            ↓values.Add(1);
        }
    }
}".AssertReplace("Add(1)", call);

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #2
0
        public void TranslationGetOrCreateNameofPropertyFullyQualified()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using Gu.Localization;

    public class Foo
    {
        public Foo()
        {
            var translation = Translation.GetOrCreate(Properties.Resources.ResourceManager, ↓nameof(Foo));
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, ResourcesCode, testCode);
        }
コード例 #3
0
        public void ResourceManagerGetObjectMissingNameof()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using RoslynSandbox.Properties;

    public class Foo
    {
        public Foo()
        {
            var translate = Properties.Resources.ResourceManager.GetObject(↓Resources.Key);
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, ResourcesCode, TranslateCode, testCode);
        }
コード例 #4
0
ファイル: Diagnostics.cs プロジェクト: AArnott/Gu.Analyzers
        public void TestAttributeAndParameter_Multiple()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using NUnit.Framework;

    public class FooTests
    {
        [Test]
        public void Test↓(string text, int index, bool value)
        {
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #5
0
        public void TranslateTranslationForStringLiteralFullyQualified()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using Gu.Localization;

    public class Foo
    {
        public Foo()
        {
            var translate = Properties.Translate.TranslationFor(↓""Missing"");
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, ResourcesCode, TranslateCode, testCode);
        }
コード例 #6
0
        public void DoubleToInt()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using NUnit.Framework;

    public class FooTests
    {
        [TestCase(↓1.0)]
        public void Test(int i)
        {
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #7
0
        public void ArgumentIsNullAndParameterIsInt()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using NUnit.Framework;

    public class FooTests
    {
        [TestCase(↓null)]
        public void Test(int obj)
        {
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #8
0
            public void ParamsConstructorSecondParameter(string call)
            {
                var code = @"
namespace RoslynSandbox
{
    using System;

    public class C
    {
        public C(int i, params int[] ints)
        {
            var foo = Activator.CreateInstance(typeof(C), 1, null);
        }
    }
}".AssertReplace("Activator.CreateInstance(typeof(C), 1, null)", call);

                AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, code);
            }
コード例 #9
0
            public void OneConstructorOneStringParameters(string call)
            {
                var code = @"
namespace RoslynSandbox
{
    using System;

    public class C
    {
        public C(string text1)
        {
            var foo = Activator.CreateInstance(typeof(C), ↓null);
        }
    }
}".AssertReplace("Activator.CreateInstance(typeof(C), ↓null)", call);

                AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, code);
            }
コード例 #10
0
        public void SetPropertyToSelfWithThis()
        {
            var testCode = @"
namespace RoslynSandbox
{
    public class Foo
    {
        public int A { get; private set; }

        private void Bar()
        {
            ↓this.A = this.A;
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #11
0
        public void AnalyzeWhenTestMethodHasTaskReturnTypeAndExpectedResult()
        {
            var expectedDiagnostic = ExpectedDiagnostic.Create(
                AnalyzerIdentifiers.TestMethodAsyncExpectedResultAndNonGenricTaskReturnTypeUsage);

            var testCode = TestUtility.WrapClassInNamespaceAndAddUsing(@"
    public sealed class AnalyzeWhenTestMethodHasTaskReturnTypeAndExpectedResult
    {
        [↓TestCase(ExpectedResult = 1)]
        public Task TaskTestCaseWithExpectedResult()
        {
          return Task.Run(() => 1);
        }
    }");
            var message  = "Async test method must have Task<T> return type when a result is expected, but the return type was 'System.Threading.Tasks.Task'.";

            AnalyzerAssert.Diagnostics(analyzer, expectedDiagnostic.WithMessage(message), testCode);
        }
コード例 #12
0
        public void SetPropertyToSelf(string before, string after)
        {
            var testCode = @"
namespace RoslynSandbox
{
    public class Foo
    {
        public int A { get; private set; }

        private void Bar()
        {
            ↓this.A = this.A;
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic.WithMessage("Assigning made to same, did you mean to assign something else?"), testCode);
        }
コード例 #13
0
        public void UselessDefaultGuid()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using System;

    public class A
    {
        public void F()
        {
            var g = ↓new System.Guid();
        }
    }
}";

            AnalyzerAssert.Diagnostics <Analyzers.GU0070DefaultConstructedValueTypeWithNoUsefulDefault>(testCode);
        }
コード例 #14
0
        public void SimpleLambdaExpression()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using System;

    internal static class Foo
    {
        internal static void Bar()
        {
            Func<int,object> f = x => ↓System.IO.File.OpenRead(null);
        }
    }
}";

            AnalyzerAssert.Diagnostics <IDISP005ReturntypeShouldIndicateIDisposable>(testCode);
        }
コード例 #15
0
        public void AnalyzeWhenIncompatibleTypesProvided_WithLambdaActualValue()
        {
            var testCode = TestUtility.WrapClassInNamespaceAndAddUsing(@"
    class A { }
    class B { }

    public class Tests
    {
        [Test]
        public void AnalyzeWhenIncompatibleTypesProvided_WithNegatedAssert()
        {
            var expected = new B();
            Assert.That(() => new A(), Is.Not.EqualTo(↓expected));
        }
    }");

            AnalyzerAssert.Diagnostics(analyzer, expectedDiagnostic, testCode);
        }
コード例 #16
0
        public void DisposingParameter()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using System;

    public class Foo
    {
        public void Bar(IDisposable meh)
        {
            ↓meh.Dispose();
        }
    }
}";

            AnalyzerAssert.Diagnostics <IDISP007DontDisposeInjected>(testCode);
        }
コード例 #17
0
        public void SingleArgument()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using NUnit.Framework;

    public class FooTests
    {
        [TestCase(↓1)]
        public void Test(string str)
        {
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #18
0
            public void PassingNullAsObj(string call)
            {
                var code = @"
namespace RoslynSandbox
{
    public class C
    {
        public C(int value)
        {
            var foo = typeof(C).GetConstructor(new[] { typeof(int) }).Invoke(null, new object[] { 1 });
        }
    }
}".AssertReplace("GetConstructor(new[] { typeof(int) }).Invoke(null, new object[] { 1 })", call);

                var message = "Use overload of Invoke without obj parameter.";

                AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic.WithMessage(message), code);
            }
コード例 #19
0
        public void TestCaseAttribute_IfMultipleParametersAreWrong()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using NUnit.Framework;

    public class FooTests
    {
        [TestCase(1, ↓2)]
        public void Test(int i, string str)
        {
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #20
0
        public void WhenNoAttribute()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using System;
    
    public class ↓FooException : Exception
    {
        public FooException()
        : base(string.Empty)
        {
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #21
0
        public void WrongArrayType()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using NUnit.Framework;

    public class FooTests
    {
        [TestCase(↓new double[] {3, 5})]
        public void Test(int[] array)
        {
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #22
0
        public void MissingPropertyGetAccessor()
        {
            var code = @"
namespace RoslynSandbox
{
    public sealed class C
    {
        public C()
        {
            var methodInfo = typeof(C).GetMethod(↓""get_Bar"");
        }

        public int Bar { set; }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, code);
        }
コード例 #23
0
ファイル: Diagnostics.cs プロジェクト: AArnott/Gu.Analyzers
        public void TestCaseParams()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using NUnit.Framework;

    class Foo
    {
        [TestCase(1)]
        public void Test↓(int i, int j, params int[] ints)
        {
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #24
0
        public void UselessDefaultDateTime()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using System;

    public class A
    {
        public void F()
        {
            var g = ↓new System.DateTime();
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, testCode);
        }
コード例 #25
0
        public void TranslateKeyNameofPropertyFullyQualified()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using Gu.Localization;

    public class Foo
    {
        public Foo()
        {
            var translate = Properties.Translate.Key(↓nameof(Foo));
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, ResourcesCode, TranslateCode, testCode);
        }
コード例 #26
0
            public void OneErrorWithExpectedDiagnosticsWithMessageAndErrorIndicatedInCode()
            {
                var code = @"
namespace RoslynSandbox
{
    class Foo
    {
        private readonly int ↓_value1;
    }
}";

                var expectedDiagnostic = ExpectedDiagnostic.CreateFromCodeWithErrorsIndicated("SA1309", "Field '_value1' must not begin with an underscore", code, out code);
                var analyzer           = new FieldNameMustNotBeginWithUnderscore();

                AnalyzerAssert.Diagnostics <FieldNameMustNotBeginWithUnderscore>(new[] { expectedDiagnostic }, code);
                AnalyzerAssert.Diagnostics(analyzer.GetType(), new[] { expectedDiagnostic }, code);
                AnalyzerAssert.Diagnostics(analyzer, new[] { expectedDiagnostic }, code);
            }
コード例 #27
0
        public void ResourceManagerGetObjectStringLiteralWithUsing()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using RoslynSandbox.Properties;

    public class Foo
    {
        public Foo()
        {
            var translate = Resources.ResourceManager.GetObject(↓""Missing"");
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, ResourcesCode, TranslateCode, testCode);
        }
コード例 #28
0
            public void WithExpectedDiagnosticWhenOneReportsError()
            {
                var code = @"
namespace RoslynSandbox
{
    class Foo
    {
        private readonly int ↓wrongName;
        
        public int WrongName { get; set; }
    }
}";

                var expectedDiagnostic = ExpectedDiagnostic.Create(FieldAndPropertyMustBeNamedFooAnalyzer.FieldDiagnosticId);

                AnalyzerAssert.Diagnostics <FieldAndPropertyMustBeNamedFooAnalyzer>(expectedDiagnostic, code);
                AnalyzerAssert.Diagnostics(new FieldAndPropertyMustBeNamedFooAnalyzer(), expectedDiagnostic, code);
            }
コード例 #29
0
        public void ResourceManagerGetObjectWithCultureNameofPropertyWithUsing()
        {
            var testCode = @"
namespace RoslynSandbox
{
    using RoslynSandbox.Properties;

    public class Foo
    {
        public Foo()
        {
            var translate = Resources.ResourceManager.GetObject(↓nameof(Resources), System.Globalization.CultureInfo.GetCultureInfo(""sv-SE""));
        }
    }
}";

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic, ResourcesCode, TranslateCode, testCode);
        }
コード例 #30
0
        public void Linq(string linq)
        {
            var testCode = @"
namespace RoslynSandbox
{
    using System.Linq;
    class Foo
    {
        void Bar()
        {
            var ints = new[] { 1, 2, 3 };
            ↓ints.Select(x => x);
        }
    }
}".AssertReplace("ints.Select(x => x);", linq);

            AnalyzerAssert.Diagnostics(Analyzer, ExpectedDiagnostic.WithMessage("Don't ignore the return value."), testCode);
        }