Ejemplo n.º 1
0
        public void FormatsTheMessageAsExpected()
        {
            var buffer = new IntPtr(1);

            var api = new Mock <IKernel32>();

            api.Setup(o => o.FormatMessage(It.IsAny <int>(), IntPtr.Zero, 6, 0, ref It.Ref <IntPtr> .IsAny, 0, IntPtr.Zero)).Returns(new FormatMessageCallback(
                                                                                                                                         (int dwFlags, IntPtr lpSource, int dwMessageId, int dwLanguageId, ref IntPtr lpBuffer, int nSize, IntPtr arguments) =>
            {
                Assert.AreEqual(IntPtr.Zero, lpBuffer);

                lpBuffer = buffer;
                return(1);
            }));

            var marshaller = new Mock <IMarshaller>();

            marshaller.Setup(o => o.PtrToUnicodeString(buffer, 1)).Returns("test");

            var target = new Win32FormatMessageService(api.Object, marshaller.Object);
            var result = target.FormatMessage(6);

            Assert.AreEqual("test", result);
            marshaller.Verify(o => o.FreeHGlobalIfNeeded(buffer), Times.Once);
        }
Ejemplo n.º 2
0
        public void ThrowsAnExceptionWhenTheErrorCodeIsLessThanZer0()
        {
            var api        = new Mock <IKernel32>();
            var marshaller = new Mock <IMarshaller>();

            var target = new Win32FormatMessageService(api.Object, marshaller.Object);

            Assert.Throws <ArgumentException>(() => target.FormatMessage(-1));
        }
Ejemplo n.º 3
0
        public void ThrowsAnExceptionWhenTheResultIsZero()
        {
            var api = new Mock <IKernel32>();

            api.Setup(o => o.FormatMessage(It.IsAny <int>(), IntPtr.Zero, 6, 0, ref It.Ref <IntPtr> .IsAny, 0, IntPtr.Zero)).Returns(0);

            var marshaller = new Mock <IMarshaller>();

            var target = new Win32FormatMessageService(api.Object, marshaller.Object);

            Assert.Throws <Win32Exception>(() => target.FormatMessage(6));

            marshaller.Verify(o => o.FreeHGlobalIfNeeded(IntPtr.Zero), Times.Once);
        }