public void VerifyIsWrappingReturnsFalseForNoMatch() { JET_CALLBACK callback = CreateCallback(); var wrapper = new JetCallbackWrapper(callback); Assert.IsFalse(wrapper.IsWrapping(CreateCallback())); GC.KeepAlive(callback); }
public void VerifyWrapperCallsCallback() { bool callbackWasCalled = false; var wrapper = new JetCallbackWrapper( (sesid, dbid, tableid, cbtyp, arg1, arg2, context, unused) => { callbackWasCalled = true; return JET_err.Success; }); wrapper.NativeCallback(IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); Assert.IsTrue(callbackWasCalled); }
/// <summary> /// Wrap a callback and returns its wrapper. If the callback is /// already wrapped then the existing wrapper is returned. /// </summary> /// <param name="callback">The callback to add.</param> /// <returns>The callback wrapper for the callback.</returns> public JetCallbackWrapper Add(JET_CALLBACK callback) { lock (this.lockObject) { JetCallbackWrapper wrapper; if (!this.TryFindWrapperFor(callback, out wrapper)) { wrapper = new JetCallbackWrapper(callback); this.callbackWrappers.Add(wrapper); } return wrapper; } }
/// <summary> /// Look in the list of callback wrappers to see if there is already an entry for /// this callback. /// </summary> /// <param name="callback">The callback to look for.</param> /// <param name="wrapper">Returns the wrapper, if found.</param> /// <returns>True if a wrapper was found, false otherwise.</returns> private bool TryFindWrapperFor(JET_CALLBACK callback, out JetCallbackWrapper wrapper) { foreach (JetCallbackWrapper w in this.callbackWrappers) { if (w.IsWrapping(callback)) { wrapper = w; return(true); } } wrapper = null; return(false); }
/// <summary> /// Wrap a callback and returns its wrapper. If the callback is /// already wrapped then the existing wrapper is returned. /// </summary> /// <param name="callback">The callback to add.</param> /// <returns>The callback wrapper for the callback.</returns> public JetCallbackWrapper Add(JET_CALLBACK callback) { lock (this.lockObject) { JetCallbackWrapper wrapper; if (!this.TryFindWrapperFor(callback, out wrapper)) { wrapper = new JetCallbackWrapper(callback); this.callbackWrappers.Add(wrapper); } return(wrapper); } }
/// <summary> /// Look in the list of callback wrappers to see if there is already an entry for /// this callback. /// </summary> /// <param name="callback">The callback to look for.</param> /// <param name="wrapper">Returns the wrapper, if found.</param> /// <returns>True if a wrapper was found, false otherwise.</returns> private bool TryFindWrapperFor(JET_CALLBACK callback, out JetCallbackWrapper wrapper) { foreach (JetCallbackWrapper w in this.callbackWrappers) { if (w.IsWrapping(callback)) { wrapper = w; return true; } } wrapper = null; return false; }
public void VerifyWrapperReturnsReturnCode() { var wrapper = new JetCallbackWrapper( (sesid, dbid, tableid, cbtyp, arg1, arg2, context, unused) => JET_err.WriteConflict); Assert.AreEqual( JET_err.WriteConflict, wrapper.Callback(IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero)); }
public void VerifyWrapperPassesArguments() { JET_SESID expectedSesid = new JET_SESID { Value = (IntPtr)1 }; JET_DBID expectedDbid = new JET_DBID { Value = 2 }; JET_TABLEID expectedTableid = new JET_TABLEID { Value = (IntPtr)3 }; JET_cbtyp expectedCbtyp = JET_cbtyp.AfterReplace; object expectedArg1 = null; object expectedArg2 = null; IntPtr expectedContext = (IntPtr)4; JET_SESID actualSesid = new JET_SESID(); JET_DBID actualDbid = new JET_DBID(); JET_TABLEID actualTableid = new JET_TABLEID(); JET_cbtyp actualCbtyp = JET_cbtyp.Null; object actualArg1 = null; object actualArg2 = null; IntPtr actualContext = new IntPtr(); var wrapper = new JetCallbackWrapper( (sesid, dbid, tableid, cbtyp, arg1, arg2, context, unused) => { actualSesid = sesid; actualDbid = dbid; actualTableid = tableid; actualCbtyp = cbtyp; actualArg1 = arg1; actualArg2 = arg2; actualContext = context; return JET_err.Success; }); wrapper.Callback( expectedSesid.Value, expectedDbid.Value, expectedTableid.Value, (uint)expectedCbtyp, IntPtr.Zero, IntPtr.Zero, expectedContext, IntPtr.Zero); Assert.AreEqual(expectedSesid, actualSesid); Assert.AreEqual(expectedDbid, actualDbid); Assert.AreEqual(expectedTableid, actualTableid); Assert.AreEqual(expectedCbtyp, actualCbtyp); Assert.AreEqual(expectedArg1, actualArg1); Assert.AreEqual(expectedArg2, actualArg2); Assert.AreEqual(expectedContext, actualContext); }
public void VerifyExceptionInCallbackIsCaught() { var wrapper = new JetCallbackWrapper( (sesid, dbid, tableid, cbtyp, arg1, arg2, context, unused) => { throw new ArgumentNullException(); }); Assert.AreEqual( JET_err.CallbackFailed, wrapper.Callback(IntPtr.Zero, 0, IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero)); }