mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-04 02:06:36 +02:00
[0.16]: Merge Preview Handlers in Master (#1516)
* Added project template for common library * Added reference to stylecop.json * Fixed xml documetation file path for common project * Added reference to stylecop.json * Added COM interface interpolations to C# * Changed namespace to Common * Added xml doc to com interfaces * Removed AnyCPU configuration from solution file * Added Preview Hander and form User Control Implementation * Fix stylecop warnings * Added test control and handler * Added Xaml description for preview handler * Added Xml documenatation * Updated the control to form * Added registration and unregistration logic for the handler * Moved the files in separate folder and fix PR comments * updated the name of previewhandler class to base class * Added the DoPreview to PreviewHandlerControl Interface * Modified the Dopreview and Unload as virtual method * Uncommented the DocumentText to help bug repro * HTML Parsing Extension for preview pane markdown renderer (#1108) * Added Extension for html post processing * Added unit test poroject for preview pane * Added pipline test and base test function * Added Tests for extension * Added tests for url slashes * Added tests for url and figure caption * Markdown preview pane (#1128) * Added Extension for html post processing * Added unit test poroject for preview pane * Added pipline test and base test function * Added Tests for extension * Added handler and control for markdown * Tests added * Locally working version for markdown * Working image relative url's in markdown * Added CSS to preview display * Updates CSS for code block * Removed html file write comment in markdown control * Updated assembly version and web browser control test * Add Svg preview handler (#1129) * Added a new project for Svg preview handler * Added initial implementation of Svg Preview Handler * Fixed output path * Added Unit Test Project * Added StreamWrapper and Update Svg Control * Updated Svg Handler Guid * Removed migration backup folder * Removed Fluent Assertions NuGet * Added Comments for StreamWrapper * Removed the manual GC collect * Added unit tests for Svg preview Handler * Updated the xml doc for stream wrapper * User/lamotile/add_powerpreviewsettings (#1075) * Added powersettings to PowerToys Settings UI * added settings library * updated settings-web * updated project oncfiguration * updated project onfiguration * updated project .sln file * removed .etl file and added it to git-ignore * separated the PowerPreviewModule into split classes .cpp and .h * moved PowerPreviewModule implemnetations to .cpp file * fixed StringTable formatter * fixed spacing in resource.h * added m_ to member varibales * initiliaze m_isPreviewEnabled in the base class * removed duplication of objects by using pass by refference and std::move * made the getters const * updated naming convention * Split test calsses * Add const string * Replaced move with const string * Made attributes private * Made attributes private * removed unused constructor * Update resource.h formatted resource.h * Adding unit tests for preview handler common (#1156) * Changed the name of the Common library to PreviewHandlerCommon * Added unit tests project for PreviewHandlerCommon * Updated ComInterop accessor type * Added unit tests for PreviewHandlerbase * Added tests for file and stream based handler * Added unit tests for StreamWrapper * Added form handler unit tests * Added Unit tests for FormHandlerControl * Added file header * Add Powerpreview project * Add spacing in sln file * swapped string refferences (#1199) * added registry methods and enable/disable preview handlers (#1230) * added registry methods and enable/disable preview handlers * formatted .rc file. * formatted resource file * formatted .rc file. * formatted settings.cpp * formatted settings.h * formatted SVGPreviewSettingsClassTest.cpp * Formatted MarkDownPreviewSettingsClassTest.cpp * using wide strings * formatted settings.h * FileExplorerPreviewSettingsTest.cpp formatting * fixed typo and formatting * closing Registry and fixing typos * formmarted code using ctrl+k+d * fixed naming * fixed typo * changed if/else reverse order * Markdown preview pane (#1220) * Added rich text bar for information display * Added infobar * Added tests for extension and markdown control * Added xml docstring for markdown preview handler control * Updated assembly file for markdown preview pane * Updated removal of script tag without modifying CSS * Added info bar text string to resource file. * Removed error with infobar display on first rendering * Updated assembly version * Remove script and image element from Svg (#1231) * Added implementation to remove script and image tag * Added Unit tests for SvgPreviewHandlerHelper * Updated Unit tests for SvgPreviewControl * Moved the hardcoded string to resource file * Changed the LocalMachine to CurrentUser for preview handler registration * Added unit tests for multiple blocked elements tags * User/lamotile/update settings objects (#1263) * added registry methods and enable/disable preview handlers * formatted .rc file. * formatted resource file * formatted .rc file. * formatted settings.cpp * formatted settings.h * formatted SVGPreviewSettingsClassTest.cpp * Formatted MarkDownPreviewSettingsClassTest.cpp * using wide strings * formatted settings.h * FileExplorerPreviewSettingsTest.cpp formatting * fixed typo and formatting * closing Registry and fixing typos * formmarted code using ctrl+k+d * fixed naming * fixed typo * changed if/else reverse order * updated setiings_objects.cpp * removed changes on files that are not part of this PR * removed const ref on primative types * updated pass by ref semantic and removed pas by reff on primative types * fixed spaces in the commas * fixed spaces in brackets * Preview pane telemetry (#1299) * Added telemetry base class and markdown telemetry class * Updated docstring for telemetry event. * Added telemetry to markdown for error * Added try catch for markdown preview handler and display error bar * Updated markdown telemetry to make event names global variable * Updated parameter name to camel casing and telemetry event name naming. * Corrected assembbly version for svg renderer * Markdown Image files display (#1303) * Added telemetry base class and markdown telemetry class * Updated docstring for telemetry event. * Added telemetry to markdown for error * Added try catch for markdown preview handler and display error bar * Updated markdown telemetry to make event names global variable * Updated Markdown preview to display without vertical scrollbar and removed xml doc to html agility pack. * Updated parameter name to camel casing and telemetry event name naming. * Corrected assembbly version for svg renderer * Removed duplicate function * Add telemetry for Svg preview handler (#1314) * Added telemetry events for Svg Preview Handler * Added unit test in case preview handler throws * Updated the Error event name * Remove the not required return statement * User/lamotile/add read me (#1332) * add readme * moved images * re-added images' * Fixed gramma * Update figure number refference * improve preview handler intergration (#1319) * improve preview handler intergration * Fixed typo * updated typo * updated enable() function * updated is enabled() * re-updated is enabled() * added this-> key word * (0.16) - Install preview handler with msix (#1339) * Removed the registration logic from preview handlers * Updated the output path * Added logic to shim the activation of .net assembly * Updated manifest file * Fix the allowedsilenttakeover filed in manifest * Updated the appxmanifest file * Added AllowSilentDefaultTakeOver in manifest * Fix returned error code by DllGetClassObject * Moved the CLSID to a common header file * Added info about where CLSID needs to be updated * Added a .reg file for the Keys added in registry.dat * Added comments for DllGetClassObject * Svg Preview Handler block external component (#1368) * Removed the registration logic from preview handlers * Updated the output path * Added logic to shim the activation of .net assembly * Updated manifest file * Fix the allowedsilenttakeover filed in manifest * Updated the appxmanifest file * Added AllowSilentDefaultTakeOver in manifest * Fix returned error code by DllGetClassObject * Moved the CLSID to a common header file * Added info about where CLSID needs to be updated * Added a .reg file for the Keys added in registry.dat * Added comments for DllGetClassObject * Extended WebBrowserSite for setting flags in DISPID_AMBIENT_DLCONTROL * Added XML Documenatation * Removed the logic for deleting image and script element from Svg * Updated Unit Tests * Updated typecast of uint * Forwarded calls to Type.InvokeMember * Resolve PR Comments * Adding MSI Installation for Preview Handler (#1436) * Updated wxs for including dll and registry keys for preview handlers * Changed the casing for registry key * Resolve PR Comments * Added comments for File element * Call GC on preview unloading (#1456) * Call GC collect on preview unloading * Added github issue link * Update Web browser control for Markdown Previewer (#1464) * Updated Webbrowser control * Updated Unit tests * Disabled Navigation for Svg Previewer * Fix power preview unit tests (#1508) * Decoupled registry interaction logic * Updated File explorer settings * Updated unit tests for PowerPreview Settings * Added Asserrtion for Scope of registry key * Updated the registry value to match with installation registry value * Sync master settings.cpp * Merge settings changes from PreviewHandlers * Remove newline changes added into in example_powertoy\trace.cpp * Chaned .net framework to 4.7.2 * Updated Csproj files to auto generate Assembly.info files * Updated msi installer to use version variable for preview handlers assembly * Removed the signing of Assembly and updated wxs to not include PublicKeyToken * Updated the Path in Packaginglayout.xml to modules from Gac and the registry hive binary * Regenerated updated JS and html file * Resolve PR Comments * Readded the wprp file Co-authored-by: Divyansh <divyan@microsoft.com> Co-authored-by: Divyansh <somm14divi@gmail.com> Co-authored-by: Lavius Motileng <58791731+laviusmotileng-ms@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using Common;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Moq;
|
||||
|
||||
namespace UnitTests_PreviewHandlerCommon
|
||||
{
|
||||
[TestClass]
|
||||
public class FileBasedPreviewHandlerTests
|
||||
{
|
||||
public class TestFileBasedPreviewHandler : FileBasedPreviewHandler
|
||||
{
|
||||
public override void DoPreview()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override IPreviewHandlerControl CreatePreviewHandlerControl()
|
||||
{
|
||||
return new Mock<IPreviewHandlerControl>().Object;
|
||||
}
|
||||
}
|
||||
|
||||
[DataTestMethod]
|
||||
[DataRow((uint)0)]
|
||||
[DataRow((uint)1)]
|
||||
public void FileBasedPreviewHandler_ShouldSetFilePath_WhenInitializeCalled(uint grfMode)
|
||||
{
|
||||
// Arrange
|
||||
var fileBasedPreviewHandler = new TestFileBasedPreviewHandler();
|
||||
var filePath = "C:\\valid-path";
|
||||
|
||||
// Act
|
||||
fileBasedPreviewHandler.Initialize(filePath, grfMode);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(fileBasedPreviewHandler.FilePath, filePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using Common;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace UnitTests_PreviewHandlerCommon
|
||||
{
|
||||
[TestClass]
|
||||
public class FormHandlerControlTests
|
||||
{
|
||||
private class TestFormControl : FormHandlerControl
|
||||
{ }
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldCreateHandle_OnIntialization()
|
||||
{
|
||||
// Arrange and act
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(testFormHandlerControl.IsHandleCreated);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldSetVisibleFalse_OnIntialization()
|
||||
{
|
||||
// Arrange and act
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(testFormHandlerControl.Visible);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldSetFormBorderStyle_OnIntialization()
|
||||
{
|
||||
// Arrange and act
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(FormBorderStyle.None, testFormHandlerControl.FormBorderStyle);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldReturnValidHandle_WhenGetHandleCalled()
|
||||
{
|
||||
// Arrange
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
|
||||
// Act
|
||||
var handle = testFormHandlerControl.GetHandle();
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(testFormHandlerControl.Handle, handle);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldSetBackgroundColor_WhenSetBackgroundColorCalled()
|
||||
{
|
||||
// Arrange
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
var color = Color.Navy;
|
||||
|
||||
// Act
|
||||
testFormHandlerControl.SetBackgroundColor(color);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(color, testFormHandlerControl.BackColor);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldSetFont_WhenSetFontCalled()
|
||||
{
|
||||
// Arrange
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
var font = new Font("Arial", 20);
|
||||
|
||||
// Act
|
||||
testFormHandlerControl.SetFont(font);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(font, testFormHandlerControl.Font);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldUpdateBounds_WhenSetRectCalled()
|
||||
{
|
||||
// Arrange
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
var bounds = new Rectangle(2, 2, 4, 4);
|
||||
|
||||
// Act
|
||||
testFormHandlerControl.SetRect(bounds);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(bounds, testFormHandlerControl.Bounds);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldSetTextColor_WhenSetTextColorCalled()
|
||||
{
|
||||
// Arrange
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
var color = Color.Navy;
|
||||
|
||||
// Act
|
||||
testFormHandlerControl.SetTextColor(color);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(color, testFormHandlerControl.ForeColor);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldClearAllControls_WhenUnloadCalled()
|
||||
{
|
||||
// Arrange
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
testFormHandlerControl.Controls.Add(new TextBox());
|
||||
testFormHandlerControl.Controls.Add(new RichTextBox());
|
||||
|
||||
// Act
|
||||
testFormHandlerControl.Unload();
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(0, testFormHandlerControl.Controls.Count);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldSetVisibleFalse_WhenUnloadCalled()
|
||||
{
|
||||
// Arrange
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
|
||||
// Act
|
||||
testFormHandlerControl.Unload();
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(testFormHandlerControl.Visible);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldSetVisibletrue_WhenDoPreviewCalled()
|
||||
{
|
||||
// Arrange
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
|
||||
// Act
|
||||
testFormHandlerControl.DoPreview("valid-path");
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(testFormHandlerControl.Visible);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormHandlerControl_ShouldSetParentHandle_WhenSetWindowCalled()
|
||||
{
|
||||
// Arrange
|
||||
var testFormHandlerControl = new TestFormControl();
|
||||
var parentFormWindow = new UserControl();
|
||||
var parentHwnd = parentFormWindow.Handle;
|
||||
var rect = new Rectangle(2, 2, 4, 4);
|
||||
|
||||
// Act
|
||||
testFormHandlerControl.SetWindow(parentHwnd, rect);
|
||||
var actualParentHwnd = GetAncestor(testFormHandlerControl.Handle, 1); // GA_PARENT 1
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(parentHwnd, actualParentHwnd);
|
||||
}
|
||||
|
||||
// Gets the ancestor window: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getancestor
|
||||
[DllImport("user32.dll")]
|
||||
private static extern IntPtr GetAncestor(IntPtr hWnd, uint gaFlags);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,391 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using Common;
|
||||
using Common.ComInterlop;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Moq;
|
||||
|
||||
namespace UnitTests_PreviewHandlerCommon
|
||||
{
|
||||
[TestClass]
|
||||
public class PreviewHandlerBaseTests
|
||||
{
|
||||
private static IPreviewHandlerControl previewHandlerControl;
|
||||
|
||||
public class TestPreviewHandler : PreviewHandlerBase
|
||||
{
|
||||
public override void DoPreview()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override IPreviewHandlerControl CreatePreviewHandlerControl()
|
||||
{
|
||||
return GetMockPreviewHandlerControl();
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldCallPreviewControlSetWindow_WhenSetWindowCalled()
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
var handle = new IntPtr(5);
|
||||
var bounds = GetRectangle(2, 2, 4, 4);
|
||||
|
||||
var actualHandle = IntPtr.Zero;
|
||||
var actualBounds = Rectangle.Empty;
|
||||
mockPreviewControl
|
||||
.Setup(_ => _.SetWindow(It.IsAny<IntPtr>(), It.IsAny<Rectangle>()))
|
||||
.Callback<IntPtr, Rectangle>((hwnd, rect) =>
|
||||
{
|
||||
actualHandle = hwnd;
|
||||
actualBounds = rect;
|
||||
});
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
|
||||
// Act
|
||||
testPreviewHandler.SetWindow(handle, ref bounds);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(actualHandle, handle);
|
||||
Assert.AreEqual(actualBounds, bounds.ToRectangle());
|
||||
mockPreviewControl.Verify(_ => _.SetWindow(It.IsAny<IntPtr>(), It.IsAny<Rectangle>()), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldCallPreviewControlSetrect_WhenSetRectCalled()
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
var bounds = GetRectangle(2, 2, 4, 4);
|
||||
|
||||
var actualBounds = Rectangle.Empty;
|
||||
mockPreviewControl
|
||||
.Setup(_ => _.SetRect(It.IsAny<Rectangle>()))
|
||||
.Callback<Rectangle>((rect) =>
|
||||
{
|
||||
actualBounds = rect;
|
||||
});
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
|
||||
// Act
|
||||
testPreviewHandler.SetRect(ref bounds);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(actualBounds, bounds.ToRectangle());
|
||||
mockPreviewControl.Verify(_ => _.SetRect(It.IsAny<Rectangle>()), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldCallPreviewControlUnload_WhenUnloadCalled()
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
|
||||
// Act
|
||||
testPreviewHandler.Unload();
|
||||
|
||||
// Assert
|
||||
mockPreviewControl.Verify(_ => _.Unload(), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldCallPreviewControlSetBackgroundColor_WhenSetBackgroundColorCalled()
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
var color = new COLORREF();
|
||||
|
||||
// Act
|
||||
testPreviewHandler.SetBackgroundColor(color);
|
||||
|
||||
// Assert
|
||||
mockPreviewControl.Verify(_ => _.SetBackgroundColor(It.Is<Color>(c => (c == color.Color))), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldCallPreviewControlSetTextColor_WhenSetTextColorCalled()
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
var color = new COLORREF();
|
||||
|
||||
// Act
|
||||
testPreviewHandler.SetTextColor(color);
|
||||
|
||||
// Assert
|
||||
mockPreviewControl.Verify(_ => _.SetTextColor(It.Is<Color>(c => (c == color.Color))), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldCallPreviewControlSetFont_WhenSetFontCalled()
|
||||
{
|
||||
// Arrange
|
||||
Font actualFont = null;
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
mockPreviewControl
|
||||
.Setup(x => x.SetFont(It.IsAny<Font>()))
|
||||
.Callback<Font>((font) =>
|
||||
{
|
||||
actualFont = font;
|
||||
});
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
var logFont = GetLogFont();
|
||||
|
||||
// Act
|
||||
testPreviewHandler.SetFont(ref logFont);
|
||||
|
||||
// Assert
|
||||
mockPreviewControl.Verify(_ => _.SetFont(It.IsAny<Font>()), Times.Once);
|
||||
Assert.AreEqual(Font.FromLogFont(logFont), actualFont);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldCallPreviewControlSetFocus_WhenSetFocusCalled()
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
|
||||
// Act
|
||||
testPreviewHandler.SetFocus();
|
||||
|
||||
// Assert
|
||||
mockPreviewControl.Verify(_ => _.SetFocus(), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldSetHandleOnQueryFocus_WhenPreviewControlsReturnValidHandle()
|
||||
{
|
||||
// Arrange
|
||||
var hwnd = new IntPtr(5);
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
mockPreviewControl.Setup(x => x.QueryFocus(out hwnd));
|
||||
var actualHwnd = IntPtr.Zero;
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
|
||||
// Act
|
||||
testPreviewHandler.QueryFocus(out actualHwnd);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(actualHwnd, hwnd);
|
||||
mockPreviewControl.Verify(_ => _.QueryFocus(out hwnd), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldThrowOnQueryFocus_WhenPreviewControlsReturnNotValidHandle()
|
||||
{
|
||||
// Arrange
|
||||
var hwnd = IntPtr.Zero;
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
mockPreviewControl.Setup(x => x.QueryFocus(out hwnd));
|
||||
var actualHwnd = IntPtr.Zero;
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
Win32Exception exception = null;
|
||||
|
||||
// Act
|
||||
try
|
||||
{
|
||||
testPreviewHandler.QueryFocus(out actualHwnd);
|
||||
}
|
||||
catch (Win32Exception ex)
|
||||
{
|
||||
exception = ex;
|
||||
}
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(exception);
|
||||
mockPreviewControl.Verify(_ => _.QueryFocus(out hwnd), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldDirectKeyStrokesToIPreviewHandlerFrame_IfIPreviewHandlerFrameIsSet()
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
var mockPreviewHandlerFrame = new Mock<IPreviewHandlerFrame>();
|
||||
var msg = new MSG();
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
testPreviewHandler.SetSite(mockPreviewHandlerFrame.Object);
|
||||
|
||||
// Act
|
||||
testPreviewHandler.TranslateAccelerator(ref msg);
|
||||
|
||||
// Assert
|
||||
mockPreviewHandlerFrame.Verify(_ => _.TranslateAccelerator(ref msg), Times.Once);
|
||||
}
|
||||
|
||||
[DataTestMethod]
|
||||
[DataRow((uint)0)]
|
||||
[DataRow((uint)1)]
|
||||
public void PreviewHandlerBase_ShouldReturnIPreviewHandlerFrameResponse_IfIPreviewHandlerFrameIsSet(uint resultCode)
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
var mockPreviewHandlerFrame = new Mock<IPreviewHandlerFrame>();
|
||||
var msg = new MSG();
|
||||
mockPreviewHandlerFrame
|
||||
.Setup(x => x.TranslateAccelerator(ref msg))
|
||||
.Returns(resultCode);
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
testPreviewHandler.SetSite(mockPreviewHandlerFrame.Object);
|
||||
|
||||
// Act
|
||||
var actualResultCode = testPreviewHandler.TranslateAccelerator(ref msg);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(resultCode, actualResultCode);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldReturnS_FALSE_IfIPreviewHandlerFrameIsNotSet()
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
var msg = new MSG();
|
||||
uint S_FALSE = 1;
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
|
||||
// Act
|
||||
var result = testPreviewHandler.TranslateAccelerator(ref msg);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(result, S_FALSE);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldReturnPreviewControlHandle_IfGetWindowCalled()
|
||||
{
|
||||
// Arrange
|
||||
var previewControlHandle = new IntPtr(5);
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
mockPreviewControl.Setup(x => x.GetHandle())
|
||||
.Returns(previewControlHandle);
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
var hwndReceived = IntPtr.Zero;
|
||||
|
||||
// Act
|
||||
testPreviewHandler.GetWindow(out hwndReceived);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(hwndReceived, previewControlHandle);
|
||||
}
|
||||
|
||||
[DataTestMethod]
|
||||
[DataRow(true)]
|
||||
[DataRow(false)]
|
||||
public void PreviewHandlerBase_ShouldThrowNotImplementedException_IfContextSensitiveHelpCalled(bool fEnterMode)
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
NotImplementedException exception = null;
|
||||
|
||||
// Act
|
||||
try
|
||||
{
|
||||
testPreviewHandler.ContextSensitiveHelp(fEnterMode);
|
||||
}
|
||||
catch (NotImplementedException ex)
|
||||
{
|
||||
exception = ex;
|
||||
}
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(exception);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void PreviewHandlerBase_ShouldReturnSite_WhenGetSiteCalled()
|
||||
{
|
||||
// Arrange
|
||||
var mockPreviewControl = new Mock<IPreviewHandlerControl>();
|
||||
|
||||
previewHandlerControl = mockPreviewControl.Object;
|
||||
var testPreviewHandler = new TestPreviewHandler();
|
||||
var site = new Mock<IPreviewHandlerFrame>().Object;
|
||||
testPreviewHandler.SetSite(site);
|
||||
object actualSite = null;
|
||||
var riid = Guid.Empty;
|
||||
|
||||
// Act
|
||||
testPreviewHandler.GetSite(ref riid, out actualSite);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(actualSite, site);
|
||||
}
|
||||
|
||||
private LOGFONT GetLogFont()
|
||||
{
|
||||
var logFont = new LOGFONT();
|
||||
logFont.LfHeight = 12;
|
||||
logFont.LfWidth = 0;
|
||||
logFont.LfEscapement = 0;
|
||||
logFont.LfWeight = 400; // FW_NORMAL
|
||||
logFont.LfItalic = Convert.ToByte(false);
|
||||
logFont.LfUnderline = Convert.ToByte(false);
|
||||
logFont.LfStrikeOut = Convert.ToByte(0);
|
||||
logFont.LfCharSet = Convert.ToByte(0); // ANSI_CHARSET
|
||||
logFont.LfOutPrecision = Convert.ToByte(0); // OUT_DEFAULT_PRECIS
|
||||
logFont.LfClipPrecision = Convert.ToByte(0);
|
||||
logFont.LfQuality = Convert.ToByte(0);
|
||||
logFont.LfPitchAndFamily = Convert.ToByte(0);
|
||||
logFont.LfFaceName = "valid-font";
|
||||
|
||||
return logFont;
|
||||
}
|
||||
|
||||
private RECT GetRectangle(int left, int top, int right, int bottom)
|
||||
{
|
||||
var rect = new RECT();
|
||||
rect.Left = left;
|
||||
rect.Top = top;
|
||||
rect.Right = right;
|
||||
rect.Bottom = bottom;
|
||||
|
||||
return rect;
|
||||
}
|
||||
|
||||
private static IPreviewHandlerControl GetMockPreviewHandlerControl()
|
||||
{
|
||||
return previewHandlerControl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices.ComTypes;
|
||||
using Common;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Moq;
|
||||
|
||||
namespace UnitTests_PreviewHandlerCommon
|
||||
{
|
||||
[TestClass]
|
||||
public class StreamBasedPreviewHandlerTests
|
||||
{
|
||||
public class TestStreamBasedPreviewHandler : StreamBasedPreviewHandler
|
||||
{
|
||||
public override void DoPreview()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override IPreviewHandlerControl CreatePreviewHandlerControl()
|
||||
{
|
||||
return new Mock<IPreviewHandlerControl>().Object;
|
||||
}
|
||||
}
|
||||
|
||||
[DataTestMethod]
|
||||
[DataRow((uint)0)]
|
||||
[DataRow((uint)1)]
|
||||
public void FileBasedPreviewHandler_ShouldSetFilePath_WhenInitializeCalled(uint grfMode)
|
||||
{
|
||||
// Arrange
|
||||
var streamBasedPreviewHandler = new TestStreamBasedPreviewHandler();
|
||||
var stream = new Mock<IStream>().Object;
|
||||
|
||||
// Act
|
||||
streamBasedPreviewHandler.Initialize(stream, grfMode);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(streamBasedPreviewHandler.Stream, stream);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,332 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using Castle.Core.Logging;
|
||||
using Common.Utilities;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Moq;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Sockets;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.InteropServices.ComTypes;
|
||||
|
||||
namespace UnitTests_PreviewHandlerCommon
|
||||
{
|
||||
[TestClass]
|
||||
public class StreamWrapperTests
|
||||
{
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldThrow_IfInitializeWithNullStream()
|
||||
{
|
||||
// Arrange
|
||||
IStream stream = null;
|
||||
ArgumentNullException exception = null;
|
||||
|
||||
// Act
|
||||
try
|
||||
{
|
||||
var streamWrapper = new StreamWrapper(stream);
|
||||
}
|
||||
catch (ArgumentNullException ex)
|
||||
{
|
||||
exception = ex;
|
||||
}
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(exception);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldReturnCanReadTrue()
|
||||
{
|
||||
// Arrange
|
||||
var streamMock = new Mock<IStream>();
|
||||
|
||||
// Act
|
||||
var streamWrapper = new StreamWrapper(streamMock.Object);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(streamWrapper.CanRead, true);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldReturnCanSeekTrue()
|
||||
{
|
||||
// Arrange
|
||||
var streamMock = new Mock<IStream>();
|
||||
|
||||
// Act
|
||||
var streamWrapper = new StreamWrapper(streamMock.Object);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(streamWrapper.CanSeek, true);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldReturnCanWriteFalse()
|
||||
{
|
||||
// Arrange
|
||||
var streamMock = new Mock<IStream>();
|
||||
|
||||
// Act
|
||||
var streamWrapper = new StreamWrapper(streamMock.Object);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(streamWrapper.CanWrite, false);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldReturnValidLength()
|
||||
{
|
||||
// Arrange
|
||||
long streamLength = 5;
|
||||
var stremMock = new Mock<IStream>();
|
||||
var stat = new System.Runtime.InteropServices.ComTypes.STATSTG();
|
||||
stat.cbSize = streamLength;
|
||||
|
||||
stremMock
|
||||
.Setup(x => x.Stat(out stat, It.IsAny<int>()));
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
|
||||
// Act
|
||||
var actualLength = streamWrapper.Length;
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(actualLength, streamLength);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldReturnValidPosition()
|
||||
{
|
||||
// Arrange
|
||||
int expectedDwOrigin = 1; // STREAM_SEEK_CUR
|
||||
long expectedOffset = 0;
|
||||
long currPosition = 5;
|
||||
var stremMock = new Mock<IStream>();
|
||||
|
||||
stremMock
|
||||
.Setup(x => x.Seek(It.IsAny<long>(), It.IsAny<int>(), It.IsAny<IntPtr>()))
|
||||
.Callback<long, int, IntPtr>((dlibMove, dwOrigin, plibNewPosition) =>
|
||||
{
|
||||
Marshal.WriteInt64(plibNewPosition, currPosition);
|
||||
});
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
|
||||
// Act
|
||||
var actualPosition = streamWrapper.Position;
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(actualPosition, currPosition);
|
||||
stremMock.Verify(_ => _.Seek(It.Is<long>(offset => offset == expectedOffset), It.Is<int>(dworigin => dworigin == expectedDwOrigin), It.IsAny<IntPtr>()), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldCallIStreamSeek_WhenSetPosition()
|
||||
{
|
||||
// Arrange
|
||||
long positionToSet = 5;
|
||||
int expectedDwOrigin = 0; // STREAM_SEEK_SET
|
||||
var stremMock = new Mock<IStream>();
|
||||
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
|
||||
// Act
|
||||
streamWrapper.Position = positionToSet;
|
||||
|
||||
// Assert
|
||||
stremMock.Verify(_ => _.Seek(It.Is<long>(offset => offset == positionToSet), It.Is<int>(dworigin => dworigin == expectedDwOrigin), It.IsAny<IntPtr>()), Times.Once);
|
||||
}
|
||||
|
||||
[DataTestMethod]
|
||||
[DataRow((long)0, SeekOrigin.Begin)]
|
||||
[DataRow((long)5, SeekOrigin.Begin)]
|
||||
[DataRow((long)0, SeekOrigin.Current)]
|
||||
[DataRow((long)5, SeekOrigin.Current)]
|
||||
[DataRow((long)0, SeekOrigin.End)]
|
||||
[DataRow((long)5, SeekOrigin.End)]
|
||||
public void StreamWrapper_ShouldCallIStreamSeekWithValidArguments_WhenSeekCalled(long offset, SeekOrigin origin)
|
||||
{
|
||||
// Arrange
|
||||
int expectedDwOrigin = 0;
|
||||
switch (origin)
|
||||
{
|
||||
case SeekOrigin.Begin:
|
||||
expectedDwOrigin = 0;
|
||||
break;
|
||||
|
||||
case SeekOrigin.Current:
|
||||
expectedDwOrigin = 1;
|
||||
break;
|
||||
|
||||
case SeekOrigin.End:
|
||||
expectedDwOrigin = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
var stremMock = new Mock<IStream>();
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
|
||||
// Act
|
||||
streamWrapper.Seek(offset, origin);
|
||||
|
||||
// Assert
|
||||
stremMock.Verify(_ => _.Seek(It.Is<long>(actualOffset => actualOffset == offset), It.Is<int>(actualDwOrigin => actualDwOrigin == expectedDwOrigin), It.IsAny<IntPtr>()), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldReturnValidPosition_WhenSeekCalled()
|
||||
{
|
||||
// Arrange
|
||||
long position = 5;
|
||||
var stremMock = new Mock<IStream>();
|
||||
|
||||
stremMock
|
||||
.Setup(x => x.Seek(It.IsAny<long>(), It.IsAny<int>(), It.IsAny<IntPtr>()))
|
||||
.Callback<long, int, IntPtr>((dlibMove, dwOrigin, plibNewPosition) =>
|
||||
{
|
||||
Marshal.WriteInt64(plibNewPosition, position);
|
||||
});
|
||||
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
|
||||
// Act
|
||||
var actualPosition = streamWrapper.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(position, actualPosition);
|
||||
}
|
||||
|
||||
[DataTestMethod]
|
||||
[DataRow(10, -1, 5)]
|
||||
[DataRow(10, 0, -5)]
|
||||
[DataRow(10, 0, 11)]
|
||||
[DataRow(10, 5, 6)]
|
||||
public void StreamWrapper_ShouldThrow_WhenReadCalledWithOutOfRangeArguments(int bufferLength, int offSet, int bytesToRead)
|
||||
{
|
||||
// Arrange
|
||||
var buffer = new byte[bufferLength];
|
||||
var stremMock = new Mock<IStream>();
|
||||
ArgumentOutOfRangeException exception = null;
|
||||
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
|
||||
// Act
|
||||
try
|
||||
{
|
||||
streamWrapper.Read(buffer, offSet, bytesToRead);
|
||||
}
|
||||
catch (ArgumentOutOfRangeException ex)
|
||||
{
|
||||
exception = ex;
|
||||
}
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(exception);
|
||||
}
|
||||
|
||||
[DataTestMethod]
|
||||
[DataRow(5, 0)]
|
||||
[DataRow(5, 5)]
|
||||
[DataRow(0, 5)]
|
||||
public void StreamWrapper_ShouldSetValidBuffer_WhenReadCalled(int count, int offset)
|
||||
{
|
||||
// Arrange
|
||||
var inputBuffer = new byte[1024];
|
||||
var streamBytes = new byte[count];
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
streamBytes[i] = (byte)i;
|
||||
}
|
||||
|
||||
var stremMock = new Mock<IStream>();
|
||||
|
||||
stremMock
|
||||
.Setup(x => x.Read(It.IsAny<byte []>(), It.IsAny<int>(), It.IsAny<IntPtr>()))
|
||||
.Callback<byte [], int, IntPtr>((buffer, countToRead , bytesReadPtr) =>
|
||||
{
|
||||
Array.Copy(streamBytes, 0, buffer, 0, streamBytes.Length);
|
||||
Marshal.WriteInt32(bytesReadPtr, count);
|
||||
});
|
||||
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
|
||||
// Act
|
||||
var bytesRead = streamWrapper.Read(inputBuffer, offset, count);
|
||||
|
||||
// Assert
|
||||
CollectionAssert.AreEqual(streamBytes, inputBuffer.Skip(offset).Take(count).ToArray());
|
||||
Assert.AreEqual(count, bytesRead);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldThrowNotImplementedException_WhenFlushCalled()
|
||||
{
|
||||
// Arrange
|
||||
var stremMock = new Mock<IStream>();
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
NotImplementedException exception = null;
|
||||
|
||||
// Act
|
||||
try
|
||||
{
|
||||
streamWrapper.Flush();
|
||||
}
|
||||
catch (NotImplementedException ex)
|
||||
{
|
||||
exception = ex;
|
||||
}
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(exception);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldThrowNotImplementedException_WhenSetLengthCalled()
|
||||
{
|
||||
// Arrange
|
||||
var stremMock = new Mock<IStream>();
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
NotImplementedException exception = null;
|
||||
|
||||
// Act
|
||||
try
|
||||
{
|
||||
streamWrapper.SetLength(5);
|
||||
}
|
||||
catch (NotImplementedException ex)
|
||||
{
|
||||
exception = ex;
|
||||
}
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(exception);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void StreamWrapper_ShouldThrowNotImplementedException_WhenWriteCalled()
|
||||
{
|
||||
// Arrange
|
||||
var stremMock = new Mock<IStream>();
|
||||
var streamWrapper = new StreamWrapper(stremMock.Object);
|
||||
NotImplementedException exception = null;
|
||||
|
||||
// Act
|
||||
try
|
||||
{
|
||||
streamWrapper.Write(new byte[5], 0, 0);
|
||||
}
|
||||
catch (NotImplementedException ex)
|
||||
{
|
||||
exception = ex;
|
||||
}
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(exception);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<Import Project="..\..\..\..\installer\Version.props" />
|
||||
<!-- We don't have GenerateAssemblyInfo task until we use .net core, so we generate it with WriteLinesToFile -->
|
||||
<PropertyGroup>
|
||||
<AssemblyTitle>UnitTests_PreviewHandlerCommon</AssemblyTitle>
|
||||
<AssemblyCompany>Microsoft Corp.</AssemblyCompany>
|
||||
<AssemblyCopyright>Copyright (C) 2019 Microsoft Corp.</AssemblyCopyright>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<AssemblyVersionFiles Include="Generated Files\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<Target Name="GenerateAssemblyInfo" BeforeTargets="PrepareForBuild">
|
||||
<ItemGroup>
|
||||
<HeaderLines Include="// Copyright (c) Microsoft Corporation" />
|
||||
<HeaderLines Include="// The Microsoft Corporation licenses this file to you under the MIT license." />
|
||||
<HeaderLines Include="// See the LICENSE file in the project root for more information." />
|
||||
<HeaderLines Include="#pragma warning disable SA1516" />
|
||||
<HeaderLines Include="using System.Reflection%3b" />
|
||||
<HeaderLines Include="using System.Resources%3b" />
|
||||
<HeaderLines Include="using System.Runtime.CompilerServices%3b" />
|
||||
<HeaderLines Include="using System.Runtime.InteropServices%3b" />
|
||||
<HeaderLines Include="[assembly: AssemblyTitle("$(AssemblyTitle)")]" />
|
||||
<HeaderLines Include="[assembly: AssemblyDescription("")]" />
|
||||
<HeaderLines Include="[assembly: AssemblyConfiguration("")]" />
|
||||
<HeaderLines Include="[assembly: AssemblyCompany("$(AssemblyCompany)")]" />
|
||||
<HeaderLines Include="[assembly: AssemblyCopyright("$(AssemblyCopyright)")]" />
|
||||
<HeaderLines Include="[assembly: AssemblyProduct("$(AssemblyTitle)")]" />
|
||||
<HeaderLines Include="[assembly: AssemblyTrademark("")]" />
|
||||
<HeaderLines Include="[assembly: AssemblyCulture("")]" />
|
||||
<HeaderLines Include="[assembly: ComVisible(false)]" />
|
||||
<HeaderLines Include="[assembly: NeutralResourcesLanguage("en-US")]" />
|
||||
<HeaderLines Include="[assembly: AssemblyVersion("$(Version).0")]" />
|
||||
<HeaderLines Include="[assembly: AssemblyFileVersion("$(Version).0")]" />
|
||||
</ItemGroup>
|
||||
<WriteLinesToFile File="Generated Files\AssemblyInfo.cs" Lines="@(HeaderLines)" Overwrite="true" Encoding="Unicode" WriteOnlyWhenDifferent="true" />
|
||||
</Target>
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{748417CA-F17E-487F-9411-CAFB6D3F4877}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>UnitTests_PreviewHandlerCommon</RootNamespace>
|
||||
<AssemblyName>UnitTests-PreviewHandlerCommon</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
||||
<IsCodedUITest>False</IsCodedUITest>
|
||||
<TestProjectType>UnitTest</TestProjectType>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\modules\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\modules\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Generated Files\AssemblyInfo.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FileBasedPreviewHandlerTests.cs" />
|
||||
<Compile Include="FormHandlerControlTests.cs" />
|
||||
<Compile Include="PreviewHandlerBaseTests.cs" />
|
||||
<Compile Include="StreamBasedPreviewHandlerTests.cs" />
|
||||
<Compile Include="StreamWrapperTests.cs" />
|
||||
<Compile Include="WebBrowserExtUnitTests.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Moq">
|
||||
<Version>4.13.1</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="MSTest.TestAdapter">
|
||||
<Version>1.3.2</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="MSTest.TestFramework">
|
||||
<Version>1.3.2</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Common\PreviewHandlerCommon.csproj">
|
||||
<Project>{af2349b8-e5b6-4004-9502-687c1c7730b1}</Project>
|
||||
<Name>PreviewHandlerCommon</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -0,0 +1,59 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using PreviewHandlerCommon;
|
||||
using System.Reflection;
|
||||
|
||||
namespace UnitTests_PreviewHandlerCommon
|
||||
{
|
||||
[TestClass]
|
||||
public class WebBrowserExtUnitTests : WebBrowserExt
|
||||
{
|
||||
private const string DISPIDAMBIENTDLCONTROL = "[DISPID=-5512]";
|
||||
|
||||
[TestMethod]
|
||||
public void InvokeMember_ShouldSetValidFlags_WhenCalledWithValidDispId()
|
||||
{
|
||||
// Arrange
|
||||
var extendedSite = CreateWebBrowserSiteBase() as WebBrowserSiteExt;
|
||||
|
||||
// Act
|
||||
var actualFlags = (int)extendedSite.InvokeMember(DISPIDAMBIENTDLCONTROL, BindingFlags.InvokeMethod, null, null, null, null, null, null);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.PRAGMA_NO_CACHE) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.FORCEOFFLINE) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.NO_CLIENTPULL) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.NO_SCRIPTS) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.NO_JAVA) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.NO_FRAMEDOWNLOAD) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.NOFRAMES) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.NO_DLACTIVEXCTLS) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.NO_RUNACTIVEXCTLS) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.NO_BEHAVIORS) >= 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.SILENT) >= 0);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void InvokeMember_ShouldOnlySetValidFlags_WhenCalledWithValidDispId()
|
||||
{
|
||||
// Arrange
|
||||
var extendedSite = CreateWebBrowserSiteBase() as WebBrowserSiteExt;
|
||||
|
||||
// Act
|
||||
var actualFlags = (int)extendedSite.InvokeMember(DISPIDAMBIENTDLCONTROL, BindingFlags.InvokeMethod, null, null, null, null, null, null);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.DLIMAGES) == 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.VIDEOS) == 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.BGSOUNDS) == 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.DOWNLOADONLY) == 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.RESYNCHRONIZE) == 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.NO_METACHARSET) == 0);
|
||||
Assert.IsTrue((actualFlags & (int)WebBrowserDownloadControlFlags.URL_ENCODING_DISABLE_UTF8) == 0);
|
||||
Assert.IsTrue((actualFlags & (uint)WebBrowserDownloadControlFlags.URL_ENCODING_ENABLE_UTF8) == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user