private IEnumerable <IOperationProvider> GetSetupOperationProviders( IEnumerable <Type> hierarchyTypes, IEnumerable <Type> behaviorTypes, object suite, Type suiteType) { var establishAndCleanupOperationProviders = hierarchyTypes.Select(x => GetEstablishOperationProviderOrNull(x, GetInstance(x, suite))); var becauseFields = GetFields <Because>(suiteType).ToList(); Trace.Assert(becauseFields.Count <= 1, "Multiple 'Because' fields provided."); var becauseOperationProvider = becauseFields.Select(x => OperationProvider.Create <Operation>(OperationType.Action, "Because", CreateUnwrappingAction(x, suite))); IOperationProvider fieldsCopyingOperationProvider = null; var behaviorTypeList = behaviorTypes.ToList(); if (behaviorTypeList.Count > 0) { fieldsCopyingOperationProvider = OperationProvider.Create <Operation>( OperationType.Action, "<CopyBehaviorFields>", GetFieldsCopyingAction(suiteType, behaviorTypeList)); } return(establishAndCleanupOperationProviders .Concat(becauseOperationProvider) .Concat(fieldsCopyingOperationProvider) .WhereNotNull()); }
private void Add <T> (OperationType type, string text, Action action) where T : IOperationDescriptor { var operationProvider = OperationProvider.Create <T>(type, text, action); var unsortedOperationProviders = _provider.OperationProviders.Concat(operationProvider); _provider.OperationProviders = _operationSorter.Sort(unsortedOperationProviders); }
private void Add <T> (OperationType type, string text, Action <ITestContext> action) where T : IOperationDescriptor { var operationProvider = OperationProvider.Create <T>(type, text, InjectContextAndGuardAction(action)); var unsortedOperationProviders = _provider.OperationProviders.Concat(operationProvider); _provider.OperationProviders = _operationSorter.Sort(unsortedOperationProviders); }
private TestProvider CreateTestProvider(IIdentity parentIdentity, object instance, FieldInfo actionField) { var text = actionField.Name.Replace("_", " "); var testProvider = TestProvider.Create(parentIdentity.CreateChildIdentity(actionField.Name), text, ignoreReason: null); var action = CreateUnwrappingAction(actionField, instance); var assertion = OperationProvider.Create <Operation>(OperationType.Assertion, text, action); testProvider.OperationProviders = new[] { assertion }; return(testProvider); }
public void Replace <T> (Action <ITestContext, Action> replacingAction) where T : IOperationDescriptor { var newOperationProviders = _provider.OperationProviders.Where(x => typeof(T).IsAssignableFrom(x.Descriptor)) .Select(x => OperationProvider.Create <T>(x.Type, x.Text, () => replacingAction(_context, x.Action), x.CleanupProvider)); RemoveAll <T>(); var unsortedOperationProviders = _provider.OperationProviders.Concat(newOperationProviders); _provider.OperationProviders = _operationSorter.Sort(unsortedOperationProviders); }
public void AddSetupCleanup <TSetup, TCleanup> (string setupText, Action setup, string cleanupText, Action cleanup) where TSetup : IActionDescriptor where TCleanup : ICleanupDescriptor { // TODO: shared code with TestController IOperationProvider cleanupProvider = null; if (cleanup != null) { cleanupProvider = OperationProvider.Create <TCleanup>(OperationType.Action, cleanupText, cleanup); } var setupProvider = OperationProvider.Create <TSetup>(OperationType.Action, setupText, setup, cleanupProvider); var unsortedOperationProviders = cleanupProvider.Concat(_provider.ContextProviders).Concat(setupProvider).WhereNotNull(); _provider.ContextProviders = _operationSorter.Sort(unsortedOperationProviders); }
public void AddSetupCleanup <TSetup, TCleanup> ( string setupText, Action <ITestContext> setup, [CanBeNull] string cleanupText, [CanBeNull] Action <ITestContext> cleanup) where TSetup : IActionDescriptor where TCleanup : ICleanupDescriptor { // TODO: shared code with SuiteController IOperationProvider cleanupProvider = null; if (cleanup != null) { cleanupProvider = OperationProvider.Create <TCleanup>(OperationType.Action, cleanupText.NotNull(), InjectContextAndGuardAction(cleanup)); } var setupProvider = OperationProvider.Create <TSetup>(OperationType.Action, setupText, InjectContextAndGuardAction(setup), cleanupProvider); var unsortedOperationProviders = cleanupProvider.Concat(_provider.OperationProviders).Concat(setupProvider).WhereNotNull(); _provider.OperationProviders = _operationSorter.Sort(unsortedOperationProviders); }
private IOperationProvider GetEstablishOperationProviderOrNull(Type type, object instance) { var setupField = GetFields <Establish>(type).SingleOrDefault(); var cleanupField = GetFields <Cleanup>(type).SingleOrDefault(); if (setupField == null && cleanupField == null) { return(null); } IOperationProvider cleanupProvider = null; if (cleanupField != null) { var cleanupAction = CreateUnwrappingAction(cleanupField, instance); cleanupProvider = OperationProvider.Create <Operation>(OperationType.Action, "Cleanup " + type.Name, cleanupAction); } var setupAction = setupField != null?CreateUnwrappingAction(setupField, instance) : () => { }; return(OperationProvider.Create <Operation>(OperationType.Action, "Establish " + type.Name, setupAction, cleanupProvider)); }