Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/System.Windows.Forms/tests/AxHosts/AxHosts.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,23 @@
<Isolated>false</Isolated>
<EmbedInteropTypes>false</EmbedInteropTypes>
</COMReference>
<COMReference Include="SHDocVw">
<VersionMinor>1</VersionMinor>
<VersionMajor>1</VersionMajor>
<Guid>eab22ac0-30c1-11cf-a7eb-0000c05bae0b</Guid>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>false</Isolated>
<EmbedInteropTypes>false</EmbedInteropTypes>
</COMReference>
<COMReference Include="AxSHDocVw">
<WrapperTool>aximp</WrapperTool>
<VersionMinor>1</VersionMinor>
<VersionMajor>1</VersionMajor>
<Guid>eab22ac0-30c1-11cf-a7eb-0000c05bae0b</Guid>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
</COMReference>
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,15 @@
</Reference>
</ItemGroup>

<ItemGroup>
<Reference Include="AxInterop.SHDocVw">
<HintPath>$(ArtifactsBinDir)\AxHosts\$(Configuration)\net472\AxInterop.SHDocVw.dll</HintPath>
</Reference>
<Reference Include="Interop.SHDocVw">
<HintPath>$(ArtifactsBinDir)\AxHosts\$(Configuration)\net472\Interop.SHDocVw.dll</HintPath>
</Reference>
</ItemGroup>

<ItemGroup>
<Content Include="TestResources\Files\*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.ComponentModel;
using System.Reflection;
using AxSHDocVw;
using SHDocVw;

namespace System.Windows.Forms.Tests;
public class AxWebBrowserTests : IDisposable
{
private readonly Form _form;
private readonly AxWebBrowser _control;
private object _url = "https://github.com/dotnet/winforms";

public AxWebBrowserTests()
{
_form = new Form();
_control = new AxWebBrowser();
((ISupportInitialize)_control).BeginInit();
_form.Controls.Add(_control);
((ISupportInitialize)_control).EndInit();
}

[WinFormsFact]
public void AxWebBrowser_WhenInitialized_ExpectsProperties()
{
var properties = TypeDescriptor.GetProperties(_control);
var events = TypeDescriptor.GetEvents(_control);

properties.Count.Should().BeGreaterThan(0);
events.Count.Should().BeGreaterThan(0);

// Filters testing control properties and events so only those related to the AxWebBrowser assembly remain.
Type assemblyType = typeof(AxWebBrowser);
Assembly assembly = Assembly.GetAssembly(assemblyType);
string assemblyNameFromType = assembly.GetName().Name;

var testingControlProps = properties
.Cast<PropertyDescriptor>()
.Where(prop => prop.ComponentType.Assembly.GetName().Name == assemblyNameFromType)
.Select(prop => prop.Name)
.ToList();

var testingControlEvents = events
.Cast<EventDescriptor>()
.Where(ev => ev.ComponentType.Assembly.GetName().Name == assemblyNameFromType)
.Select(ev => ev.Name)
.ToList();

// Compares testing control's properties and events to those of the assembly
TypeInfo assemblyTypeInfo = assembly.GetType(assemblyType.FullName).GetTypeInfo();
testingControlProps.All(p => assemblyTypeInfo.DeclaredProperties.Any(ap => ap.Name == p)).Should().BeTrue();
testingControlEvents.All(e => assemblyTypeInfo.DeclaredEvents.Any(ae => ae.Name == e)).Should().BeTrue();
}

[WinFormsFact]
public void AxWebBrowser_GoHome_ShouldNotThrowException()
{
_control.Invoking(c => c.GoHome()).Should().NotThrow();
}

[WinFormsFact]
public void AxWebBrowser_GoSearch_ShouldNotThrowException()
{
_control.Invoking(c => c.GoSearch()).Should().NotThrow();
}

[WinFormsFact]
public void AxWebBrowser_Navigate_ShouldNotThrowException()
{
_control.Invoking(c => c.Navigate(_url.ToString())).Should().NotThrow();
}

[WinFormsFact]
public void AxWebBrowser_Navigate2_ShouldRaiseBeforeNavigate2()
{
bool eventRaised = false;
_control.BeforeNavigate2 += (sender, e) => eventRaised = true;

_control.Invoking(c => c.Navigate2(ref _url)).Should().NotThrow();

eventRaised.Should().BeTrue();
}

[WinFormsFact]
public void AxWebBrowser_Stop_ShouldNotThrowException()
{
_control.Invoking(c => c.Stop()).Should().NotThrow();
}

[WinFormsFact]
public void AxWebBrowser_GetProperty_ShouldNotThrowException()
{
_control.Invoking(c => c.GetProperty("url")).Should().NotThrow();
}

[WinFormsFact]
public void AxWebBrowser_PutProperty_ReturnsExpected()
{
object prop = _control.GetProperty("url");
prop.Should().BeNull();

_control.Invoking(c => c.PutProperty("url", _url)).Should().NotThrow();
Comment thread
ricardobossan marked this conversation as resolved.

prop = _control.GetProperty("url");
prop.Should().NotBeNull();
Comment thread
ricardobossan marked this conversation as resolved.
prop.Should().Be(_url.ToString());
}

[WinFormsTheory]
[InlineData(OLECMDID.OLECMDID_OPEN)]
[InlineData(OLECMDID.OLECMDID_FOCUSVIEWCONTROLS)]
[InlineData(OLECMDID.OLECMDID_CLOSE)]
public void AxWebBrowser_QueryStatusWB_ShouldNotThrowException(OLECMDID cmdId)
{
_control.Invoking(c => c.QueryStatusWB(cmdId)).Should().NotThrow();
}

[WinFormsTheory]
[InlineData(OLECMDID.OLECMDID_COPY, OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT)]
[InlineData(OLECMDID.OLECMDID_COPY, OLECMDEXECOPT.OLECMDEXECOPT_PROMPTUSER)]
[InlineData(OLECMDID.OLECMDID_COPY, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER)]
[InlineData(OLECMDID.OLECMDID_COPY, OLECMDEXECOPT.OLECMDEXECOPT_SHOWHELP)]
[InlineData(OLECMDID.OLECMDID_STOP, OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT)]
[InlineData(OLECMDID.OLECMDID_STOP, OLECMDEXECOPT.OLECMDEXECOPT_PROMPTUSER)]
[InlineData(OLECMDID.OLECMDID_STOP, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER)]
[InlineData(OLECMDID.OLECMDID_STOP, OLECMDEXECOPT.OLECMDEXECOPT_SHOWHELP)]
[InlineData(OLECMDID.OLECMDID_CLOSE, OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT)]
[InlineData(OLECMDID.OLECMDID_CLOSE, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER)]
[InlineData(OLECMDID.OLECMDID_CLOSE, OLECMDEXECOPT.OLECMDEXECOPT_PROMPTUSER)]
[InlineData(OLECMDID.OLECMDID_CLOSE, OLECMDEXECOPT.OLECMDEXECOPT_SHOWHELP)]
public void AxWebBrowser_ExecWB_ShouldNotThrowException(OLECMDID cmdId, OLECMDEXECOPT cmdExecOpt)
{
_control.Invoking(c => c.ExecWB(cmdId, cmdExecOpt)).Should().NotThrow();
}

public void Dispose()
{
_control.Dispose();
_form.Dispose();
}
}