Example #1
0
        private void AnalyzeRunTest(IMethodSymbol method)
        {
            SemanticModel model    = null;
            var           runTests = method.GetDescendantNodes <InvocationExpressionSyntax>().Where(m => _Compilation.HasMethod(m, _RunTestMethods));

            foreach (var runTest in runTests)
            {
                // Get Tested Member
                var argument1Syntax = runTest.GetArgument(1);
                if (argument1Syntax == null)
                {
                    // ?!?!?
                    continue;
                }

                if (model == null)
                {
                    model = _Compilation.GetSemanticModel(runTest.SyntaxTree);
                    Debug.Assert(model != null);
                }
                var member = AnalyzeMember(model, argument1Syntax.Expression);
                if (member == null)
                {
                    // ?!?!?
                    continue;
                }


                // Collect criterias
                var argument0Syntax = runTest.GetArgument(0);
                if (argument0Syntax == null)
                {
                    // ?!?!?
                    continue;
                }

                var runTestSymbol = model.GetSymbol(runTest) as IMethodSymbol;
                if (runTestSymbol == null)
                {
                    // ?!?!?
                    return;
                }

                var aCase = runTestSymbol.Parameters[0].Type == _CaseType
                                ? GetCases(model, argument0Syntax.Expression, argument0Syntax.Expression)
                                : argument0Syntax.Expression.Accept(new CriteriaVisitor(model, argument0Syntax.Expression, null, _ReportDiagnostic));

                if (aCase == null)
                {
                    // ?!?
                    continue;
                }

                var testedMember    = CreateTestedMember(model, member, runTest.ArgumentList.Arguments[1].Expression);
                var memberTestCases = MembersTestCases.GetOrCreate(testedMember);
                memberTestCases.CombineOr(aCase);
            }
        }