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