Skip to content

Commit 9293392

Browse files
David BritchDavid Britch
authored andcommitted
View model unit tests added.
1 parent 299a3b7 commit 9293392

17 files changed

Lines changed: 543 additions & 52 deletions

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/EventToCommandBehavior.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class EventToCommandBehavior : BindableBehavior<View>
3131
BindableProperty.CreateAttached("EventArgsConverterParameter", typeof(object), typeof(EventToCommandBehavior), null,
3232
BindingMode.OneWay);
3333

34-
private Delegate _handler;
34+
protected Delegate _handler;
3535
private EventInfo _eventInfo;
3636

3737
public string EventName

src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/MainActivity.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ protected override void OnCreate(Bundle bundle)
1414
AddExecutionAssembly(typeof(ExtensibilityPointFactory).Assembly);
1515

1616
// or in any reference assemblies getting the Assembly from any type/class
17-
AddTestAssembly(typeof(UnitTests.DummyTests).Assembly);
17+
AddTestAssembly(typeof(UnitTests.CatalogViewModelTests).Assembly);
1818

1919
base.OnCreate(bundle);
2020
}

src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.Droid/eShopOnContainers.TestRunner.Droid.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
2121
<NuGetPackageImportStamp>
2222
</NuGetPackageImportStamp>
23+
<AndroidTlsProvider></AndroidTlsProvider>
2324
</PropertyGroup>
2425
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
2526
<DebugSymbols>true</DebugSymbols>

src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/AppDelegate.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public override bool FinishedLaunching(UIApplication app, NSDictionary options)
1717

1818
// Otherwise you need to ensure that the test assemblies will
1919
// become part of the app bundle
20-
AddTestAssembly(typeof(UnitTests.DummyTests).Assembly);
20+
AddTestAssembly(typeof(UnitTests.CatalogViewModelTests).Assembly);
2121

2222
return base.FinishedLaunching(app, options);
2323
}

src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/eShopOnContainers.TestRunner.iOS.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,12 @@
155155
<HintPath>..\..\..\..\packages\xunit.runner.utility.2.2.0-beta4-build3444\lib\netstandard1.1\xunit.runner.utility.dotnet.dll</HintPath>
156156
<Private>True</Private>
157157
</Reference>
158+
<Reference Include="Plugin.Settings.Abstractions">
159+
<HintPath>..\..\..\..\packages\Xam.Plugins.Settings.2.6.0.12-beta\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll</HintPath>
160+
</Reference>
161+
<Reference Include="Plugin.Settings">
162+
<HintPath>..\..\..\..\packages\Xam.Plugins.Settings.2.6.0.12-beta\lib\Xamarin.iOS10\Plugin.Settings.dll</HintPath>
163+
</Reference>
158164
</ItemGroup>
159165
<ItemGroup>
160166
<Content Include="AppDelegate.cs.txt" />

src/Mobile/eShopOnContainers/eShopOnContainers.TestRunner.iOS/packages.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
33
<package id="CommonServiceLocator" version="1.3" targetFramework="xamarinios10" />
4+
<package id="Xam.Plugins.Settings" version="2.6.0.12-beta" targetFramework="xamarinios10" />
45
<package id="Xamarin.Forms" version="2.3.3.175" targetFramework="xamarinios10" />
56
<package id="xunit" version="2.2.0-beta4-build3444" targetFramework="xamarinios10" />
67
<package id="xunit.abstractions" version="2.0.1" targetFramework="xamarinios10" />
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
using Xunit;
2+
using Xamarin.Forms;
3+
using System;
4+
using System.Globalization;
5+
6+
namespace eShopOnContainers.UnitTests
7+
{
8+
public class EventToCommandBehaviorTests
9+
{
10+
[Fact]
11+
public void InvalidEventNameShouldThrowArgumentExceptionText()
12+
{
13+
var behavior = new MockEventToCommandBehavior
14+
{
15+
EventName = "OnItemTapped"
16+
};
17+
var listView = new ListView();
18+
19+
Assert.Throws<ArgumentException>(() => listView.Behaviors.Add(behavior));
20+
}
21+
22+
[Fact]
23+
public void CommandExecutedWhenEventFiresText()
24+
{
25+
bool executedCommand = false;
26+
var behavior = new MockEventToCommandBehavior
27+
{
28+
EventName = "ItemTapped",
29+
Command = new Command(() =>
30+
{
31+
executedCommand = true;
32+
})
33+
};
34+
var listView = new ListView();
35+
listView.Behaviors.Add(behavior);
36+
37+
behavior.RaiseEvent(listView, null);
38+
39+
Assert.True(executedCommand);
40+
}
41+
42+
[Fact]
43+
public void CommandCanExecuteTest()
44+
{
45+
var behavior = new MockEventToCommandBehavior
46+
{
47+
EventName = "ItemTapped",
48+
Command = new Command(() => Assert.True(false), () => false)
49+
};
50+
var listView = new ListView();
51+
listView.Behaviors.Add(behavior);
52+
53+
behavior.RaiseEvent(listView, null);
54+
}
55+
56+
[Fact]
57+
public void CommandCanExecuteWithParameterShouldNotExecuteTest()
58+
{
59+
bool shouldExecute = false;
60+
var behavior = new MockEventToCommandBehavior
61+
{
62+
EventName = "ItemTapped",
63+
CommandParameter = shouldExecute,
64+
Command = new Command<string>(o => Assert.True(false), o => o.Equals(true))
65+
};
66+
var listView = new ListView();
67+
listView.Behaviors.Add(behavior);
68+
69+
behavior.RaiseEvent(listView, null);
70+
}
71+
72+
[Fact]
73+
public void CommandWithConverterTest()
74+
{
75+
const string item = "ItemProperty";
76+
bool executedCommand = false;
77+
var behavior = new MockEventToCommandBehavior
78+
{
79+
EventName = "ItemTapped",
80+
EventArgsConverter = new ItemTappedEventArgsConverter(false),
81+
Command = new Command<string>(o =>
82+
{
83+
executedCommand = true;
84+
Assert.NotNull(o);
85+
Assert.Equal(item, o);
86+
})
87+
};
88+
var listView = new ListView();
89+
listView.Behaviors.Add(behavior);
90+
91+
behavior.RaiseEvent(listView, new ItemTappedEventArgs(listView, item));
92+
93+
Assert.True(executedCommand);
94+
}
95+
96+
private class ItemTappedEventArgsConverter : IValueConverter
97+
{
98+
private readonly bool _returnParameter;
99+
100+
public bool HasConverted { get; private set; }
101+
102+
public ItemTappedEventArgsConverter(bool returnParameter)
103+
{
104+
_returnParameter = returnParameter;
105+
}
106+
107+
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
108+
{
109+
HasConverted = true;
110+
return _returnParameter ? parameter : (value as ItemTappedEventArgs)?.Item;
111+
}
112+
113+
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
114+
{
115+
throw new NotImplementedException();
116+
}
117+
}
118+
}
119+
120+
}

src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/DummyTests.cs

Lines changed: 0 additions & 27 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using eShopOnContainers.Core.Behaviors;
2+
3+
namespace eShopOnContainers.UnitTests
4+
{
5+
public class MockEventToCommandBehavior : EventToCommandBehavior
6+
{
7+
public void RaiseEvent(params object[] args)
8+
{
9+
_handler.DynamicInvoke(args);
10+
}
11+
}
12+
}

src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/BasketServiceTests.cs renamed to src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Services/BasketServiceTests.cs

File renamed without changes.

0 commit comments

Comments
 (0)