/// <summary> /// Overload of BuildFrom called by tests that have arguments. /// Builds a fixture using the provided type and information /// in the ITestFixtureData object. /// </summary> /// <param name="typeInfo">The TypeInfo for which to construct a fixture.</param> /// <param name="filter">Filter used to select methods as tests.</param> /// <param name="testFixtureData">An object implementing ITestFixtureData or null.</param> /// <returns></returns> public TestSuite BuildFrom(ITypeInfo typeInfo, IPreFilter filter, ITestFixtureData testFixtureData) { Guard.ArgumentNotNull(testFixtureData, nameof(testFixtureData)); object[] arguments = testFixtureData.Arguments; if (typeInfo.ContainsGenericParameters) { Type[] typeArgs = testFixtureData.TypeArgs; if (typeArgs == null || typeArgs.Length == 0) { int cnt = 0; foreach (object o in arguments) { if (o is Type) { cnt++; } else { break; } } typeArgs = new Type[cnt]; for (int i = 0; i < cnt; i++) { typeArgs[i] = (Type)arguments[i]; } if (cnt > 0) { object[] args = new object[arguments.Length - cnt]; for (int i = 0; i < args.Length; i++) { args[i] = arguments[cnt + i]; } arguments = args; } } if (typeArgs.Length > 0 || TypeHelper.CanDeduceTypeArgsFromArgs(typeInfo.Type, arguments, ref typeArgs)) { typeInfo = typeInfo.MakeGenericType(typeArgs); } } var fixture = new TestFixture(typeInfo, arguments); string name = fixture.Name; if (testFixtureData.TestName != null) { fixture.Name = testFixtureData.TestName; } else { var argDisplayNames = (testFixtureData as TestParameters)?.ArgDisplayNames; if (argDisplayNames != null) { fixture.Name = typeInfo.GetDisplayName(); if (argDisplayNames.Length != 0) { fixture.Name += '(' + string.Join(", ", argDisplayNames) + ')'; } } else if (arguments != null && arguments.Length > 0) { fixture.Name = typeInfo.GetDisplayName(arguments); } } if (fixture.Name != name) // name was changed { string nspace = typeInfo.Namespace; fixture.FullName = nspace != null && nspace != "" ? nspace + "." + fixture.Name : fixture.Name; } if (fixture.RunState != RunState.NotRunnable) { fixture.RunState = testFixtureData.RunState; } foreach (string key in testFixtureData.Properties.Keys) { foreach (object val in testFixtureData.Properties[key]) { fixture.Properties.Add(key, val); } } if (fixture.RunState != RunState.NotRunnable) { CheckTestFixtureIsValid(fixture); } fixture.ApplyAttributesToTest(typeInfo.Type.GetTypeInfo()); AddTestCasesToFixture(fixture, filter); return(fixture); }
/// <summary> /// Overload of BuildFrom called by tests that have arguments. /// Builds a fixture using the provided type and information /// in the ITestFixtureData object. /// </summary> /// <param name="typeInfo">The TypeInfo for which to construct a fixture.</param> /// <param name="filter">Filter used to select methods as tests.</param> /// <param name="testFixtureData">An object implementing ITestFixtureData or null.</param> /// <returns></returns> public TestSuite BuildFrom(ITypeInfo typeInfo, IPreFilter filter, ITestFixtureData testFixtureData) { //Guard.ArgumentNotNull(testFixtureData, nameof(testFixtureData)); if (testFixtureData is null) { throw new ArgumentNullException(nameof(testFixtureData)); } object[] arguments = testFixtureData.Arguments; if (typeInfo.ContainsGenericParameters) { Type[] typeArgs = testFixtureData.TypeArgs; if (typeArgs is null || typeArgs.Length == 0) { int cnt = 0; foreach (object o in arguments) { if (o is Type) { cnt++; } else { break; } } typeArgs = new Type[cnt]; for (int i = 0; i < cnt; i++) { typeArgs[i] = (Type)arguments[i]; } if (cnt > 0) { object[] args = new object[arguments.Length - cnt]; for (int i = 0; i < args.Length; i++) { args[i] = arguments[cnt + i]; } arguments = args; } } if (typeArgs.Length > 0 || TypeHelper.CanDeduceTypeArgsFromArgs(typeInfo.Type, arguments, ref typeArgs)) { typeInfo = typeInfo.MakeGenericType(typeArgs); } } // Build our custom SetUpFixture to get the NUnit runner to initialize us // even though we don't own the test assembly. var setUpFixture = _setUpFixtureBuilder.BuildFrom(typeInfo); var fixture = new TestFixture(typeInfo, arguments); SetUpRandomizedContext(setUpFixture, fixture); string name = fixture.Name; if (testFixtureData.TestName != null) { fixture.Name = testFixtureData.TestName; } else { //var argDisplayNames = (testFixtureData as NUnit.Framework.Internal.TestParameters)?.ArgDisplayNames; var testParameters = testFixtureData as NUnit.Framework.Internal.TestParameters; string[] argDisplayNames = null; if (testParameters != null) { // Hack so we can call the same internal field that NUnit does BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; FieldInfo field = typeof(NUnit.Framework.Internal.TestParameters).GetField("_argDisplayNames", bindFlags); argDisplayNames = (string[])field.GetValue(testFixtureData); } if (argDisplayNames != null) { fixture.Name = typeInfo.GetDisplayName(); if (argDisplayNames.Length != 0) { fixture.Name += '(' + string.Join(", ", argDisplayNames) + ')'; } } else if (arguments != null && arguments.Length > 0) { fixture.Name = typeInfo.GetDisplayName(arguments); } } if (fixture.Name != name) // name was changed { string nspace = typeInfo.Namespace; fixture.FullName = nspace != null && nspace != "" ? nspace + "." + fixture.Name : fixture.Name; } if (fixture.RunState != RunState.NotRunnable) { fixture.RunState = testFixtureData.RunState; } foreach (string key in testFixtureData.Properties.Keys) { foreach (object val in testFixtureData.Properties[key]) { fixture.Properties.Add(key, val); } } if (fixture.RunState != RunState.NotRunnable) { CheckTestFixtureIsValid(fixture); } fixture.ApplyAttributesToTest(typeInfo.Type.GetTypeInfo()); AddTestCasesToFixture(fixture, filter); setUpFixture.Add(fixture); return(setUpFixture); }
public TestFixtureParameters(ITestFixtureData data) : base(data) { TypeArgs = data.TypeArgs; }
/// <summary> /// Overload of BuildFrom called by tests that have arguments. /// Builds a fixture using the provided type and information /// in the ITestFixtureData object. /// </summary> /// <param name="typeInfo">The TypeInfo for which to construct a fixture.</param> /// <param name="testFixtureData">An object implementing ITestFixtureData or null.</param> /// <returns></returns> public TestSuite BuildFrom(ITypeInfo typeInfo, ITestFixtureData testFixtureData) { Guard.ArgumentNotNull(testFixtureData, "testFixtureData"); object[] arguments = testFixtureData.Arguments; if (typeInfo.ContainsGenericParameters) { Type[] typeArgs = testFixtureData.TypeArgs; if (typeArgs.Length == 0) { int cnt = 0; foreach (object o in arguments) if (o is Type) cnt++; else break; typeArgs = new Type[cnt]; for (int i = 0; i < cnt; i++) typeArgs[i] = (Type)arguments[i]; if (cnt > 0) { object[] args = new object[arguments.Length - cnt]; for (int i = 0; i < args.Length; i++) args[i] = arguments[cnt + i]; arguments = args; } } if (typeArgs.Length > 0 || TypeHelper.CanDeduceTypeArgsFromArgs(typeInfo.Type, arguments, ref typeArgs)) { typeInfo = typeInfo.MakeGenericType(typeArgs); } } var fixture = new TestFixture(typeInfo); if (arguments != null && arguments.Length > 0) { string name = fixture.Name = typeInfo.GetDisplayName(arguments); string nspace = typeInfo.Namespace; fixture.FullName = nspace != null && nspace != "" ? nspace + "." + name : name; fixture.Arguments = arguments; } if (fixture.RunState != RunState.NotRunnable) fixture.RunState = testFixtureData.RunState; foreach (string key in testFixtureData.Properties.Keys) foreach (object val in testFixtureData.Properties[key]) fixture.Properties.Add(key, val); if (fixture.RunState != RunState.NotRunnable) CheckTestFixtureIsValid(fixture); fixture.ApplyAttributesToTest(typeInfo.Type.GetTypeInfo()); AddTestCasesToFixture(fixture); return fixture; }
/// <summary> /// Creates the test suite for the type described by <paramref name="typeInfo"/> which /// requires dependencies specified by <paramref name="testFixtureData"/> to be injected. /// </summary> /// <param name="typeInfo">The type into which dependencies are injected.</param> /// <param name="testFixtureData">The parameters required by the <paramref name="typeInfo"/>.</param> /// <returns> /// A non-null test suite. /// </returns> protected virtual IEnumerable <TestSuite> CreateTestSuite( ITypeInfo typeInfo, ITestFixtureData testFixtureData) { yield return(_builder.BuildFrom(typeInfo, _emptyPreFilter, testFixtureData)); }
public IFixtureFinder Add(ITestFixtureData fixture) { fixtures.Add(fixture); return this; }
/// <summary> /// Construct a ParameterSet from an object implementing ITestCaseData /// </summary> /// <param name="data"></param> public TestFixtureParameters(ITestFixtureData data) : base(data) { TypeArgs = data.TypeArgs; }
/// <summary> /// Overload of BuildFrom called by tests that have arguments. /// Builds a fixture using the provided type and information /// in the ITestFixtureData object. /// </summary> /// <param name="type">The Type for which to construct a fixture.</param> /// <param name="testFixtureData">An object implementing ITestFixtureData or null.</param> /// <returns></returns> public TestSuite BuildFrom(Type type, ITestFixtureData testFixtureData) { Guard.ArgumentNotNull(testFixtureData, "testFixtureData"); object[] arguments = testFixtureData.Arguments; if (type.ContainsGenericParameters) { Type[] typeArgs = testFixtureData.TypeArgs; if (typeArgs.Length == 0) { int cnt = 0; foreach (object o in arguments) { if (o is Type) { cnt++; } else { break; } } typeArgs = new Type[cnt]; for (int i = 0; i < cnt; i++) { typeArgs[i] = (Type)arguments[i]; } if (cnt > 0) { object[] args = new object[arguments.Length - cnt]; for (int i = 0; i < args.Length; i++) { args[i] = arguments[cnt + i]; } arguments = args; } } if (typeArgs.Length > 0 || TypeHelper.CanDeduceTypeArgsFromArgs(type, arguments, ref typeArgs)) { type = TypeHelper.MakeGenericType(type, typeArgs); } } var fixture = new TestFixture(type); if (arguments != null && arguments.Length > 0) { string name = fixture.Name = TypeHelper.GetDisplayName(type, arguments); string nspace = type.Namespace; fixture.FullName = nspace != null && nspace != "" ? nspace + "." + name : name; fixture.Arguments = arguments; } if (fixture.RunState != RunState.NotRunnable) { fixture.RunState = testFixtureData.RunState; } foreach (string key in testFixtureData.Properties.Keys) { foreach (object val in testFixtureData.Properties[key]) { fixture.Properties.Add(key, val); } } if (fixture.RunState != RunState.NotRunnable) { CheckTestFixtureIsValid(fixture); } fixture.ApplyAttributesToTest(type); AddTestCasesToFixture(fixture); return(fixture); }