private static void CreateFaultInjectionTypeLibs(MockTypeLibrariesFailurePoints failurePoint, out MockTypeLib mainTypeLib, out MockTypeLib dependencyTypeLibGood1, out MockTypeLib dependencyTypeLibBad1, out MockTypeLib dependencyTypeLibGood2, out MockTypeLib dependencyTypeLibBad2) { mainTypeLib = new MockTypeLib(); mainTypeLib.AddTypeInfo(new MockTypeInfo()); mainTypeLib.AddTypeInfo(new MockTypeInfo()); dependencyTypeLibGood1 = new MockTypeLib(); dependencyTypeLibGood1.AddTypeInfo(new MockTypeInfo()); // Make it the StdOle lib to exercise the ITypeInfo.GetDocumentation failure point dependencyTypeLibBad1 = new MockTypeLib(NativeMethods.IID_StdOle); dependencyTypeLibBad1.AddTypeInfo(new MockTypeInfo()); dependencyTypeLibGood2 = new MockTypeLib(); dependencyTypeLibGood2.AddTypeInfo(new MockTypeInfo()); // Make it the StdOle lib to exercise the ITypeInfo.GetDocumentation failure point dependencyTypeLibBad2 = new MockTypeLib(NativeMethods.IID_StdOle); dependencyTypeLibBad2.AddTypeInfo(new MockTypeInfo()); COMException failureException = new COMException("unhandled exception in " + failurePoint.ToString()); dependencyTypeLibBad1.InjectFailure(failurePoint, failureException); dependencyTypeLibBad2.InjectFailure(failurePoint, failureException); }
public void FaultInjectionMainLib() { // The primary test here is that we don't throw, which can't be explicitly expressed in NUnit... // other asserts are secondary foreach (MockTypeLibrariesFailurePoints failurePoint in Enum.GetValues(typeof(MockTypeLibrariesFailurePoints))) { MockTypeLib mainTypeLib = new MockTypeLib(); mainTypeLib.AddTypeInfo(new MockTypeInfo()); // Make it the StdOle lib to exercise the ITypeInfo.GetDocumentation failure point MockTypeLib dependencyTypeLib = new MockTypeLib(NativeMethods.IID_StdOle); dependencyTypeLib.AddTypeInfo(new MockTypeInfo()); COMException failureException = new COMException("unhandled exception in " + failurePoint.ToString()); mainTypeLib.InjectFailure(failurePoint, failureException); dependencyTypeLib.InjectFailure(failurePoint, failureException); mainTypeLib.ContainedTypeInfos[0].ImplementsInterface(dependencyTypeLib.ContainedTypeInfos[0]); mainTypeLib.ContainedTypeInfos[0].DefinesVariable(dependencyTypeLib.ContainedTypeInfos[0]); mainTypeLib.ContainedTypeInfos[0].DefinesFunction( new MockTypeInfo[] { dependencyTypeLib.ContainedTypeInfos[0] }, dependencyTypeLib.ContainedTypeInfos[0]); ComDependencyWalker walker = new ComDependencyWalker(new MarshalReleaseComObject(MockReleaseComObject)); walker.AnalyzeTypeLibrary(mainTypeLib); Assert.Single(walker.EncounteredProblems); // "Test failed for failure point " + failurePoint.ToString() Assert.Equal(failureException, walker.EncounteredProblems[0]); // "Test failed for failure point " + failurePoint.ToString() mainTypeLib.AssertAllHandlesReleased(); dependencyTypeLib.AssertAllHandlesReleased(); } }