1
// ****************************************************************
2
// Copyright 2011, Charlie Poole
3
// This is free software licensed under the NUnit license. You may
4
// obtain a copy of the license at http://nunit.org
5
// ****************************************************************
10
using NUnit.Framework;
11
using NUnit.TestUtilities;
13
namespace NUnit.ProjectEditor.Tests.Presenters
15
[TestFixture, Platform("Net-3.5,Mono-3.5,Net-4.0")]
16
public class MainPresenterTests
18
// TODO: Embed project resources
19
private static readonly string GOOD_PROJECT = "NUnitTests.nunit";
20
private static readonly string BAD_PROJECT = "BadProject.nunit";
21
private static readonly string NONEXISTENT_PROJECT = "NonExistent.nunit";
23
private IMainView view;
24
private IProjectDocument doc;
25
private MainPresenter presenter;
28
public void Initialize()
30
view = Substitute.For<IMainView>();
31
doc = new ProjectDocument();
32
presenter = new MainPresenter(doc, view);
36
public void ActiveViewChanged_WhenNoProjectIsOpen_TabViewsRemainHidden()
38
view.SelectedView.Returns(SelectedView.XmlView);
39
view.ActiveViewChanged += Raise.Event<ActiveViewChangedHandler>();
40
Assert.False(view.PropertyView.Visible);
41
Assert.False(view.XmlView.Visible);
43
view.SelectedView.Returns(SelectedView.PropertyView);
44
view.ActiveViewChanged += Raise.Event<ActiveViewChangedHandler>();
45
Assert.False(view.PropertyView.Visible);
46
Assert.False(view.XmlView.Visible);
50
public void ActiveViewChanged_WhenProjectIsOpen_TabViewsAreVisible()
52
doc.CreateNewProject();
54
view.SelectedView.Returns(SelectedView.XmlView);
55
view.ActiveViewChanged += Raise.Event<ActiveViewChangedHandler>();
57
Assert.True(view.PropertyView.Visible);
58
Assert.True(view.XmlView.Visible);
63
public void CloseProject_OnLoad_IsDisabled()
65
Assert.False(view.CloseProjectCommand.Enabled);
69
public void CloseProject_AfterCreatingNewProject_IsEnabled()
71
view.NewProjectCommand.Execute += Raise.Event<CommandDelegate>();
73
Assert.True(view.CloseProjectCommand.Enabled);
77
public void CloseProject_AfterOpeningGoodProject_IsEnabled()
79
using (TempFile file = new TempFile(GOOD_PROJECT))
81
view.DialogManager.GetFileOpenPath("", "", "").ReturnsForAnyArgs(file.Path);
82
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
84
Assert.True(view.CloseProjectCommand.Enabled);
89
public void NewProject_OnLoad_IsEnabled()
91
Assert.True(view.NewProjectCommand.Enabled);
95
public void NewProject_WhenClicked_CreatesNewProject()
97
view.NewProjectCommand.Execute += Raise.Event<CommandDelegate>();
99
Assert.IsNotNull(doc.RootNode);
100
Assert.That(doc.Name, Is.StringMatching("Project\\d"));
104
public void OpenProject_OnLoad_IsEnabled()
106
Assert.True(view.OpenProjectCommand.Enabled);
110
public void OpenProject_WhenClickedAndProjectIsValid_OpensProject()
112
using (TempFile file = new TempFile(GOOD_PROJECT))
114
view.DialogManager.GetFileOpenPath("Open", "", "").ReturnsForAnyArgs(file.Path);
115
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
117
Assert.NotNull(doc.XmlText);
118
Assert.NotNull(doc.RootNode);
119
Assert.AreEqual("NUnitTests", doc.Name);
124
public void OpenProject_WhenClickedAndProjectXmlIsNotValid_OpensProject()
126
using (TempFile file = new TempFile(BAD_PROJECT))
128
view.DialogManager.GetFileOpenPath("Open", "", "").ReturnsForAnyArgs(file.Path);
129
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
131
Assert.NotNull(doc.XmlText);
132
Assert.Null(doc.RootNode);
133
Assert.AreEqual("BadProject", doc.Name);
135
Assert.AreEqual(SelectedView.XmlView, view.SelectedView);
140
public void OpenProject_WhenClickedAndProjectDoesNotExist_DisplaysError()
142
view.DialogManager.GetFileOpenPath("Open", "", "").ReturnsForAnyArgs(NONEXISTENT_PROJECT);
143
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
145
view.MessageDisplay.Received().Error(Arg.Is((string x) => x.StartsWith("Could not find file")));
147
Assert.Null(doc.XmlText);
148
Assert.Null(doc.RootNode);
152
public void SaveProject_OnLoad_IsDisabled()
154
Assert.False(view.SaveProjectCommand.Enabled);
158
public void SaveProject_AfterCreatingNewProject_IsEnabled()
160
view.NewProjectCommand.Execute += Raise.Event<CommandDelegate>();
162
Assert.True(view.SaveProjectCommand.Enabled);
166
public void SaveProject_AfterOpeningGoodProject_IsEnabled()
168
using (TempFile file = new TempFile(GOOD_PROJECT))
170
view.DialogManager.GetFileOpenPath("", "", "").ReturnsForAnyArgs(file.Path);
171
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
173
Assert.True(view.SaveProjectCommand.Enabled);
178
public void SaveProjectAs_OnLoad_IsDisabled()
180
Assert.False(view.SaveProjectAsCommand.Enabled);
184
public void SaveProjectAs_AfterCreatingNewProject_IsEnabled()
186
view.NewProjectCommand.Execute += Raise.Event<CommandDelegate>();
188
Assert.True(view.SaveProjectAsCommand.Enabled);
192
public void SaveProjectAs_AfterOpeningGoodProject_IsEnabled()
194
using (TempFile file = new TempFile(GOOD_PROJECT))
196
view.DialogManager.GetFileOpenPath("", "", "").ReturnsForAnyArgs(file.Path);
197
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
199
Assert.True(view.SaveProjectAsCommand.Enabled);
203
private class TempFile : TempResourceFile
205
public TempFile(string name) : base(typeof(NUnitProjectXml), "resources." + name, name) { }
1
// ****************************************************************
2
// Copyright 2011, Charlie Poole
3
// This is free software licensed under the NUnit license. You may
4
// obtain a copy of the license at http://nunit.org
5
// ****************************************************************
7
#if NET_3_5 || NET_4_0 || NET_4_5
10
using NUnit.Framework;
11
using NUnit.TestUtilities;
13
namespace NUnit.ProjectEditor.Tests.Presenters
15
[TestFixture, Platform("Net-3.5,Mono-3.5,Net-4.0")]
16
public class MainPresenterTests
18
// TODO: Embed project resources
19
private static readonly string GOOD_PROJECT = "NUnitTests.nunit";
20
private static readonly string BAD_PROJECT = "BadProject.nunit";
21
private static readonly string NONEXISTENT_PROJECT = "NonExistent.nunit";
23
private IMainView view;
24
private IProjectDocument doc;
25
private MainPresenter presenter;
28
public void Initialize()
30
view = Substitute.For<IMainView>();
31
doc = new ProjectDocument();
32
presenter = new MainPresenter(doc, view);
36
public void ActiveViewChanged_WhenNoProjectIsOpen_TabViewsRemainHidden()
38
view.SelectedView.Returns(SelectedView.XmlView);
39
view.ActiveViewChanged += Raise.Event<ActiveViewChangedHandler>();
40
Assert.False(view.PropertyView.Visible);
41
Assert.False(view.XmlView.Visible);
43
view.SelectedView.Returns(SelectedView.PropertyView);
44
view.ActiveViewChanged += Raise.Event<ActiveViewChangedHandler>();
45
Assert.False(view.PropertyView.Visible);
46
Assert.False(view.XmlView.Visible);
50
public void ActiveViewChanged_WhenProjectIsOpen_TabViewsAreVisible()
52
doc.CreateNewProject();
54
view.SelectedView.Returns(SelectedView.XmlView);
55
view.ActiveViewChanged += Raise.Event<ActiveViewChangedHandler>();
57
Assert.True(view.PropertyView.Visible);
58
Assert.True(view.XmlView.Visible);
63
public void CloseProject_OnLoad_IsDisabled()
65
Assert.False(view.CloseProjectCommand.Enabled);
69
public void CloseProject_AfterCreatingNewProject_IsEnabled()
71
view.NewProjectCommand.Execute += Raise.Event<CommandDelegate>();
73
Assert.True(view.CloseProjectCommand.Enabled);
77
public void CloseProject_AfterOpeningGoodProject_IsEnabled()
79
using (TempFile file = new TempFile(GOOD_PROJECT))
81
view.DialogManager.GetFileOpenPath("", "", "").ReturnsForAnyArgs(file.Path);
82
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
84
Assert.True(view.CloseProjectCommand.Enabled);
89
public void NewProject_OnLoad_IsEnabled()
91
Assert.True(view.NewProjectCommand.Enabled);
95
public void NewProject_WhenClicked_CreatesNewProject()
97
view.NewProjectCommand.Execute += Raise.Event<CommandDelegate>();
99
Assert.IsNotNull(doc.RootNode);
100
Assert.That(doc.Name, Is.StringMatching("Project\\d"));
104
public void OpenProject_OnLoad_IsEnabled()
106
Assert.True(view.OpenProjectCommand.Enabled);
110
public void OpenProject_WhenClickedAndProjectIsValid_OpensProject()
112
using (TempFile file = new TempFile(GOOD_PROJECT))
114
view.DialogManager.GetFileOpenPath("Open", "", "").ReturnsForAnyArgs(file.Path);
115
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
117
Assert.NotNull(doc.XmlText);
118
Assert.NotNull(doc.RootNode);
119
Assert.AreEqual("NUnitTests", doc.Name);
124
public void OpenProject_WhenClickedAndProjectXmlIsNotValid_OpensProject()
126
using (TempFile file = new TempFile(BAD_PROJECT))
128
view.DialogManager.GetFileOpenPath("Open", "", "").ReturnsForAnyArgs(file.Path);
129
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
131
Assert.NotNull(doc.XmlText);
132
Assert.Null(doc.RootNode);
133
Assert.AreEqual("BadProject", doc.Name);
135
Assert.AreEqual(SelectedView.XmlView, view.SelectedView);
140
public void OpenProject_WhenClickedAndProjectDoesNotExist_DisplaysError()
142
view.DialogManager.GetFileOpenPath("Open", "", "").ReturnsForAnyArgs(NONEXISTENT_PROJECT);
143
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
145
view.MessageDisplay.Received().Error(Arg.Is((string x) => x.Contains(NONEXISTENT_PROJECT)));
147
Assert.Null(doc.XmlText);
148
Assert.Null(doc.RootNode);
152
public void SaveProject_OnLoad_IsDisabled()
154
Assert.False(view.SaveProjectCommand.Enabled);
158
public void SaveProject_AfterCreatingNewProject_IsEnabled()
160
view.NewProjectCommand.Execute += Raise.Event<CommandDelegate>();
162
Assert.True(view.SaveProjectCommand.Enabled);
166
public void SaveProject_AfterOpeningGoodProject_IsEnabled()
168
using (TempFile file = new TempFile(GOOD_PROJECT))
170
view.DialogManager.GetFileOpenPath("", "", "").ReturnsForAnyArgs(file.Path);
171
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
173
Assert.True(view.SaveProjectCommand.Enabled);
178
public void SaveProjectAs_OnLoad_IsDisabled()
180
Assert.False(view.SaveProjectAsCommand.Enabled);
184
public void SaveProjectAs_AfterCreatingNewProject_IsEnabled()
186
view.NewProjectCommand.Execute += Raise.Event<CommandDelegate>();
188
Assert.True(view.SaveProjectAsCommand.Enabled);
192
public void SaveProjectAs_AfterOpeningGoodProject_IsEnabled()
194
using (TempFile file = new TempFile(GOOD_PROJECT))
196
view.DialogManager.GetFileOpenPath("", "", "").ReturnsForAnyArgs(file.Path);
197
view.OpenProjectCommand.Execute += Raise.Event<CommandDelegate>();
199
Assert.True(view.SaveProjectAsCommand.Enabled);
203
private class TempFile : TempResourceFile
205
public TempFile(string name) : base(typeof(NUnitProjectXml), "resources." + name, name) { }