public ITestDeclaration GetTestDeclaration(IClassDeclaration classDeclaration)
        {
            var text = _treePresenter.Present(classDeclaration, suiteAttributeType: "TestFx.SpecK.SubjectAttribute");

            if (text == null)
            {
                return(null);
            }

            var identity   = _assemblyIdentity.CreateChildIdentity(classDeclaration.CLRName);
            var clazz      = classDeclaration.DeclaredElement.NotNull <IClass>();
            var categories = clazz.GetAttributeData <CategoriesAttribute>()
                             .GetValueOrDefault(
                x => x.PositionParameter(paramIndex: 0).ArrayValue.NotNull().Select(y => (string)y.ConstantValue.Value),
                () => new string[0]).NotNull();
            var constructorDeclaration = classDeclaration.ConstructorDeclarations.SingleOrDefault(x => !x.IsStatic && x.ParameterDeclarations.Count == 0);
            var expressionTests        = TreeNodeEnumerable.Create(
                () =>
            {
                return(GetInvocationExpressions(constructorDeclaration)
                       .TakeWhile(_notInterrupted)
                       .Select(x => GetInvocationTest(x, identity))
                       .WhereNotNull());
            });

            return(new ClassTestDeclaration(identity, _project, categories, text, expressionTests, classDeclaration));
        }
Esempio n. 2
0
        public ITestDeclaration GetTestDeclaration(IClassDeclaration classDeclaration)
        {
            var clazz = classDeclaration.DeclaredElement.NotNull <IClass>();

            if (!IsSuite(clazz))
            {
                return(null);
            }

            var identity   = _assemblyIdentity.CreateChildIdentity(classDeclaration.CLRName);
            var categories = clazz.GetAttributeData <CategoriesAttribute>()
                             .GetValueOrDefault(
                x => x.PositionParameter(paramIndex: 0).ArrayValue.NotNull().Select(y => (string)y.ConstantValue.Value),
                () => new string[0]).NotNull();
            var text       = GetText(clazz);
            var fieldTests = TreeNodeEnumerable.Create(
                () =>
            {
                return(classDeclaration.FieldDeclarations
                       .TakeWhile(_notInterrupted)
                       .Select(x => GetFieldTest(x, identity))
                       .WhereNotNull());
            });

            return(new ClassTestDeclaration(identity, _project, categories, text, fieldTests, classDeclaration));
        }
Esempio n. 3
0
        public ITestDeclaration GetTestDeclaration(IClassDeclaration classDeclaration)
        {
            var clazz           = classDeclaration.DeclaredElement.NotNull <IClass>();
            var hasBecauseField = clazz.Fields.Any(x => x.Type.GetTypeElement()?.GetClrName().FullName == "Machine.Specifications.Because");

            if (!hasBecauseField)
            {
                return(null);
            }

            var text = clazz.DescendantsAndSelf(x => x.GetContainingType() as IClass)
                       .Select(
                x =>
            {
                var subjectAttributeData = x.GetAttributeData("Machine.Specifications.SubjectAttribute");
                if (subjectAttributeData == null)
                {
                    return(null);
                }

                var subjectType = subjectAttributeData.PositionParameter(paramIndex: 0).TypeValue.NotNull().ToCommon();

                return(subjectType.Name + ", " + clazz.ToCommon().Name.Replace(oldChar: '_', newChar: ' '));
            })
                       .WhereNotNull().FirstOrDefault();

            if (text == null)
            {
                return(null);
            }

            var identity   = _assemblyIdentity.CreateChildIdentity(classDeclaration.CLRName);
            var categories = clazz.GetAttributeData <CategoriesAttribute>()
                             .GetValueOrDefault(
                x => x.PositionParameter(0).ArrayValue.NotNull().Select(y => (string)y.ConstantValue.Value),
                () => new string[0]).NotNull();
            var fieldTests = TreeNodeEnumerable.Create(
                () =>
            {
                return(classDeclaration.FieldDeclarations.SelectMany(Flatten)
                       .TakeWhile(_notInterrupted)
                       .Select(x => GetFieldTest(x, identity))
                       .WhereNotNull());
            });

            return(new ClassTestDeclaration(identity, _project, categories, text, fieldTests, classDeclaration));
        }
Esempio n. 4
0
        public static MemberDecoration GetDecoration(IAccessModifiers accessModifiers,
                                                     TreeNodeEnumerable <IFSharpAttribute> attributes)
        {
            var decoration = MemberDecoration.DefaultValue;
            var modifiers  = new JetHashSet <TokenNodeType>();

            if (accessModifiers != null)
            {
                foreach (var modifier in accessModifiers.Modifiers)
                {
                    modifiers.Add(modifier.GetTokenType());
                }
            }

            if (modifiers.Contains(FSharpTokenType.PUBLIC))
            {
                decoration.Modifiers |= Modifiers.PUBLIC;
            }
            if (modifiers.Contains(FSharpTokenType.INTERNAL))
            {
                decoration.Modifiers |= Modifiers.INTERNAL;
            }
            if (modifiers.Contains(FSharpTokenType.PRIVATE))
            {
                decoration.Modifiers |= Modifiers.PRIVATE;
            }

            foreach (var attr in attributes)
            {
                switch (attr.GetShortName())
                {
                case FSharpImplUtil.AbstractClass:
                    decoration.Modifiers |= Modifiers.ABSTRACT;
                    break;

                case FSharpImplUtil.Sealed:
                    decoration.Modifiers |= Modifiers.SEALED;
                    break;
                }
            }

            return(Normalize(decoration));
        }
        private static string GetExpressionUri(TreeNodeEnumerable <IIdentifier> expressionIdentifiers)
        {
            using (var e = expressionIdentifiers.GetEnumerator())
            {
                IIdentifier    identifier;
                IUriIdentifier uriIdentifier;
                string         uri;
                if (e.MoveNext() &&
                    (identifier = e.Current) != null &&
                    !e.MoveNext() &&
                    (uriIdentifier = identifier.FirstChild as IUriIdentifier) != null &&
                    !string.IsNullOrEmpty(uri = uriIdentifier.GetUri()))
                {
                    // The expression has the only child identifier that is the URI identifier that is not empty
                    return(uri);
                }
            }

            return(null);
        }
Esempio n. 6
0
        public static MemberDecoration GetDecoration(IAccessModifiers accessModifiers,
                                                     TreeNodeEnumerable <IFSharpAttribute> attributes)
        {
            var decoration = MemberDecoration.DefaultValue;
            var modifiers  = new JetHashSet <TokenNodeType>();

            foreach (var modifier in accessModifiers.Modifiers)
            {
                modifiers.Add(modifier.GetTokenType());
            }

            if (modifiers.Contains(FSharpTokenType.PUBLIC))
            {
                decoration.Modifiers |= Modifiers.PUBLIC;
            }
            if (modifiers.Contains(FSharpTokenType.INTERNAL))
            {
                decoration.Modifiers |= Modifiers.INTERNAL;
            }
            if (modifiers.Contains(FSharpTokenType.PRIVATE))
            {
                decoration.Modifiers |= Modifiers.PRIVATE;
            }

            foreach (var attr in attributes)
            {
                var ids = attr.LongIdentifier.Identifiers;
                if (ids.IsEmpty)
                {
                    continue;
                }

                var attributeShortName = ids.Last().GetText().GetAttributeShortName();
                if (attributeShortName.Equals(AbstractClass, StringComparison.Ordinal))
                {
                    decoration.Modifiers |= Modifiers.ABSTRACT;
                    break;
                }
            }
            return(Normalize(decoration));
        }
        private static string GetExpressionUri(TreeNodeEnumerable<IIdentifier> expressionIdentifiers)
        {
            using (var e = expressionIdentifiers.GetEnumerator())
            {
                IIdentifier identifier;
                IUriIdentifier uriIdentifier;
                string uri;
                if (e.MoveNext() &&
                    (identifier = e.Current) != null &&
                    !e.MoveNext() &&
                    (uriIdentifier = identifier.FirstChild as IUriIdentifier) != null &&
                    !string.IsNullOrEmpty(uri = uriIdentifier.GetUri()))
                {
                    // The expression has the only child identifier that is the URI identifier that is not empty
                    return uri;
                }
            }

            return null;
        }