mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Added project item commands, work on project manager, implemented project manager tests
This commit is contained in:
22
RainmeterStudio.Tests/Business/DocumentManagerTest.cs
Normal file
22
RainmeterStudio.Tests/Business/DocumentManagerTest.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using RainmeterStudio.Business;
|
||||
|
||||
namespace RainmeterStudio.Tests.Business
|
||||
{
|
||||
[TestClass]
|
||||
public class DocumentManagerTest
|
||||
{
|
||||
DocumentManager documentManager;
|
||||
|
||||
[TestInitialize]
|
||||
public void Initialize()
|
||||
{
|
||||
documentManager = new DocumentManager();
|
||||
}
|
||||
}
|
||||
}
|
553
RainmeterStudio.Tests/Business/ProjectManagerClipboardTest.cs
Normal file
553
RainmeterStudio.Tests/Business/ProjectManagerClipboardTest.cs
Normal file
@ -0,0 +1,553 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using RainmeterStudio.Core.Model;
|
||||
|
||||
namespace RainmeterStudio.Tests.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests the project item operations for the project manager
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Initial project structure:
|
||||
/// root
|
||||
/// + folder1
|
||||
/// | + sub1
|
||||
/// | | + file2.png
|
||||
/// | | + file3.txt
|
||||
/// | + file1.txt
|
||||
/// + folder2
|
||||
/// + file1.txt
|
||||
/// + sub1
|
||||
/// </remarks>
|
||||
[TestClass]
|
||||
public class ProjectManagerProjectItemOperationsTest : ProjectManagerTestBase
|
||||
{
|
||||
private Reference Root
|
||||
{
|
||||
get
|
||||
{
|
||||
return ProjectManager.ActiveProject.Root;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets up test
|
||||
/// </summary>
|
||||
public override void OnInitialize()
|
||||
{
|
||||
// Create a new project
|
||||
string projectName = "test";
|
||||
string projectPath = projectName + ".rsproj";
|
||||
|
||||
ProjectManager.CreateProject(projectName, projectPath, ProjectTemplate);
|
||||
|
||||
// Create a project structure
|
||||
var root = ProjectManager.ActiveProject.Root;
|
||||
ProjectManager.CreateFolder("folder1", root);
|
||||
ProjectManager.CreateFolder("folder2", root);
|
||||
ProjectManager.CreateFolder("sub1", root.Children[0]);
|
||||
ProjectManager.CreateFolder("sub1", root);
|
||||
|
||||
File.Create("file1.txt").Close();
|
||||
File.Create("folder1\\file1.txt").Close();
|
||||
File.Create("folder1\\sub1\\file2.png").Close();
|
||||
File.Create("folder1\\sub1\\file3.txt").Close();
|
||||
|
||||
root.Add(new Reference("file1.txt", "file1.txt"));
|
||||
root.Children[0].Add(new Reference("file1.txt", "folder1\\file1.txt"));
|
||||
root.Children[0].Children[0].Add(new Reference("file2.png", "folder1\\sub1\\file2.png"));
|
||||
root.Children[0].Children[0].Add(new Reference("file3.txt", "folder1\\sub1\\file3.txt"));
|
||||
|
||||
}
|
||||
|
||||
#region Cut & paste for files
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCutPasteFileTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var folder2 = Root.GetReference("test/folder2");
|
||||
var file1 = Root.GetReference("test/folder1/file1.txt");
|
||||
var file2 = Root.GetReference("test/folder1/sub1/file2.png");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(0, folder2.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Cut
|
||||
ProjectManager.ProjectItemCutClipboard(file1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(0, folder2.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Paste in folder 2
|
||||
ProjectManager.ProjectItemPasteClipboard(folder2);
|
||||
Assert.IsFalse(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(1, folder1.Count);
|
||||
Assert.AreEqual(1, folder2.Count);
|
||||
Assert.AreEqual(folder2, file1.Parent);
|
||||
|
||||
// Cut and paste in root
|
||||
ProjectManager.ProjectItemCutClipboard(file2);
|
||||
ProjectManager.ProjectItemPasteClipboard(Root);
|
||||
|
||||
Assert.AreEqual(Root, file2.Parent);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCutPasteFileNameConflictTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var file1 = Root.GetReference("test/folder1/file1.txt");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Cut
|
||||
ProjectManager.ProjectItemCutClipboard(file1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Paste in root
|
||||
try
|
||||
{
|
||||
ProjectManager.ProjectItemPasteClipboard(Root);
|
||||
Assert.Fail("File should already exist, should not overwrite.");
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
}
|
||||
|
||||
// Item shouldn't be in clipboard any more, but state should remain the same
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCutPasteFileSameDirectoryTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var file1 = Root.GetReference("test/folder1/file1.txt");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Cut
|
||||
ProjectManager.ProjectItemCutClipboard(file1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Paste in root
|
||||
ProjectManager.ProjectItemPasteClipboard(folder1);
|
||||
|
||||
// Item shouldn't be in clipboard any more, but state should remain the same
|
||||
Assert.IsFalse(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cut & paste for directories
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCutPasteDirectoryTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var folder2 = Root.GetReference("test/folder2");
|
||||
var sub1 = Root.GetReference("test/folder1/sub1");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(0, folder2.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
|
||||
// Cut
|
||||
ProjectManager.ProjectItemCutClipboard(sub1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(0, folder2.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
|
||||
// Paste in folder 2
|
||||
ProjectManager.ProjectItemPasteClipboard(folder2);
|
||||
Assert.IsFalse(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(1, folder1.Count);
|
||||
Assert.AreEqual(1, folder2.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder2, sub1.Parent);
|
||||
Assert.AreEqual("test/folder2/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder2\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCutPasteDirectoryNameConflictTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var sub1 = Root.GetReference("test/folder1/sub1");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
|
||||
// Cut
|
||||
ProjectManager.ProjectItemCutClipboard(sub1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
|
||||
// Paste in root
|
||||
try
|
||||
{
|
||||
ProjectManager.ProjectItemPasteClipboard(Root);
|
||||
Assert.Fail("Directory already exists, should not overwrite.");
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
}
|
||||
|
||||
// Object remains in clipboard, state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCutPasteDirectorySameDirectoryTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var sub1 = Root.GetReference("test/folder1/sub1");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
|
||||
// Cut
|
||||
ProjectManager.ProjectItemCutClipboard(sub1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
|
||||
// Paste in folder 2
|
||||
try
|
||||
{
|
||||
ProjectManager.ProjectItemPasteClipboard(folder1);
|
||||
Assert.Fail("Directory is same.");
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
}
|
||||
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Copy & paste for files
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCopyPasteFileTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var folder2 = Root.GetReference("test/folder2");
|
||||
var file1 = Root.GetReference("test/folder1/file1.txt");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(0, folder2.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Copy
|
||||
ProjectManager.ProjectItemCopyClipboard(file1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(0, folder2.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Paste in folder 2
|
||||
ProjectManager.ProjectItemPasteClipboard(folder2);
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(1, folder2.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCopyPasteFileNameConflictTest()
|
||||
{
|
||||
Reference folder1 = Root.GetReference("test/folder1");
|
||||
Reference file1 = Root.GetReference("test/folder1/file1.txt");
|
||||
Reference copy;
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Copy
|
||||
ProjectManager.ProjectItemCopyClipboard(file1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Paste in root
|
||||
ProjectManager.ProjectItemPasteClipboard(Root);
|
||||
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(5, Root.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
Assert.IsTrue(Root.TryGetReference("test/file1_2.txt", out copy));
|
||||
|
||||
// Paste again in root
|
||||
ProjectManager.ProjectItemPasteClipboard(Root);
|
||||
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(6, Root.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
Assert.IsTrue(Root.TryGetReference("test/file1_3.txt", out copy));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCopyPasteFileSameDirectoryTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var file1 = Root.GetReference("test/folder1/file1.txt");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Copy
|
||||
ProjectManager.ProjectItemCopyClipboard(file1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
|
||||
// Paste in root
|
||||
ProjectManager.ProjectItemPasteClipboard(folder1);
|
||||
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(3, folder1.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
Assert.IsTrue(Root.TryGetReference("test/folder1/file1_2.txt", out file1));
|
||||
|
||||
// Past again in root
|
||||
ProjectManager.ProjectItemPasteClipboard(folder1);
|
||||
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(4, folder1.Count);
|
||||
Assert.AreEqual(folder1, file1.Parent);
|
||||
Assert.IsTrue(Root.TryGetReference("test/folder1/file1_3.txt", out file1));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Copy & paste for directories
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCopyPasteDirectoryTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var folder2 = Root.GetReference("test/folder2");
|
||||
var sub1 = Root.GetReference("test/folder1/sub1");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(0, folder2.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
|
||||
// Copy
|
||||
ProjectManager.ProjectItemCopyClipboard(sub1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(0, folder2.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
|
||||
// Paste in folder 2
|
||||
ProjectManager.ProjectItemPasteClipboard(folder2);
|
||||
Reference sub2;
|
||||
Assert.IsTrue(Root.TryGetReference("test/folder2/sub1", out sub2));
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(1, folder2.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.AreEqual(2, sub2.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.IsFalse(sub2.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual(folder2, sub2.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
Assert.AreEqual("test/folder2/sub1/file2.png", sub2.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder2\\sub1\\file2.png", sub2.Children[0].StoragePath);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCopyPasteDirectoryNameConflictTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var sub1 = Root.GetReference("test/folder1/sub1");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
|
||||
// Copy
|
||||
ProjectManager.ProjectItemCopyClipboard(sub1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
|
||||
// Paste in root
|
||||
try
|
||||
{
|
||||
ProjectManager.ProjectItemPasteClipboard(Root);
|
||||
Assert.Fail("Directory already exists, should not overwrite.");
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
}
|
||||
|
||||
// Object remains in clipboard, state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(4, Root.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ProjectManagerCopyPasteDirectorySameDirectoryTest()
|
||||
{
|
||||
var folder1 = Root.GetReference("test/folder1");
|
||||
var sub1 = Root.GetReference("test/folder1/sub1");
|
||||
|
||||
// Initial state
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
|
||||
// Copy
|
||||
ProjectManager.ProjectItemCopyClipboard(sub1);
|
||||
|
||||
// The item should be in the clipboard, but state unchanged
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
|
||||
// Paste in folder 2
|
||||
try
|
||||
{
|
||||
ProjectManager.ProjectItemPasteClipboard(folder1);
|
||||
Assert.Fail("Directory is same.");
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
}
|
||||
|
||||
Assert.IsTrue(ProjectManager.HaveProjectItemInClipboard());
|
||||
Assert.AreEqual(2, folder1.Count);
|
||||
Assert.AreEqual(2, sub1.Count);
|
||||
Assert.IsFalse(sub1.Children.Any(x => !File.Exists(x.StoragePath)));
|
||||
Assert.AreEqual(folder1, sub1.Parent);
|
||||
Assert.AreEqual("test/folder1/sub1/file2.png", sub1.Children[0].QualifiedName);
|
||||
Assert.AreEqual("folder1\\sub1\\file2.png", sub1.Children[0].StoragePath);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
79
RainmeterStudio.Tests/Business/ProjectManagerTest.cs
Normal file
79
RainmeterStudio.Tests/Business/ProjectManagerTest.cs
Normal file
@ -0,0 +1,79 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using RainmeterStudio.Business;
|
||||
using RainmeterStudio.Core.Model;
|
||||
|
||||
namespace RainmeterStudio.Tests.Business
|
||||
{
|
||||
[TestClass]
|
||||
public class ProjectManagerTest : ProjectManagerTestBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests if the sample template is registered
|
||||
/// </summary>
|
||||
[TestMethod]
|
||||
public void ProjectManagerTemplatesTest()
|
||||
{
|
||||
Assert.AreEqual(1, ProjectManager.ProjectTemplates.Count());
|
||||
Assert.AreEqual(ProjectTemplate, ProjectManager.ProjectTemplates.First());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the project create functionality
|
||||
/// </summary>
|
||||
[TestMethod]
|
||||
public void ProjectManagerCreateProjectTest()
|
||||
{
|
||||
bool loaded = false;
|
||||
string projName = "test";
|
||||
string projPath = TestContext.TestName + ".rsproj";
|
||||
|
||||
ProjectManager.ActiveProjectChanged += new EventHandler((sender, e) => loaded = true);
|
||||
ProjectManager.CreateProject(projName, projPath, ProjectTemplate);
|
||||
|
||||
Assert.IsTrue(loaded);
|
||||
Assert.AreEqual(projName, ProjectManager.ActiveProject.Name);
|
||||
Assert.AreEqual(projPath, ProjectManager.ActiveProject.Path);
|
||||
Assert.IsTrue(File.Exists(projPath));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the open project functionality
|
||||
/// </summary>
|
||||
[TestMethod]
|
||||
public void ProjectManagerOpenProjectTest()
|
||||
{
|
||||
// Create a new project
|
||||
bool changed = false;
|
||||
string projName = "test";
|
||||
string projPath = TestContext.TestName + ".rsproj";
|
||||
|
||||
ProjectManager.ActiveProjectChanged += new EventHandler((sender, e) => changed = true);
|
||||
ProjectManager.CreateProject(projName, projPath, ProjectTemplate);
|
||||
|
||||
// Reopen new project
|
||||
changed = false;
|
||||
ProjectManager.OpenProject(projPath);
|
||||
Assert.IsTrue(changed);
|
||||
|
||||
// Close project
|
||||
changed = false;
|
||||
ProjectManager.Close();
|
||||
Assert.IsTrue(changed);
|
||||
|
||||
// Open a copy
|
||||
changed = false;
|
||||
Directory.CreateDirectory("projectDir");
|
||||
string proj2Path = Path.Combine("projectDir", TestContext.TestName + "2.rsproj");
|
||||
File.Copy(projPath, proj2Path);
|
||||
ProjectManager.OpenProject(proj2Path);
|
||||
Assert.AreEqual(proj2Path, ProjectManager.ActiveProject.Path);
|
||||
Assert.AreEqual(projName, ProjectManager.ActiveProject.Name);
|
||||
}
|
||||
}
|
||||
}
|
84
RainmeterStudio.Tests/Business/ProjectManagerTestBase.cs
Normal file
84
RainmeterStudio.Tests/Business/ProjectManagerTestBase.cs
Normal file
@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using RainmeterStudio.Business;
|
||||
using RainmeterStudio.Core.Model;
|
||||
|
||||
namespace RainmeterStudio.Tests.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// Common stuff for project manager tests
|
||||
/// </summary>
|
||||
public class ProjectManagerTestBase
|
||||
{
|
||||
#region Project template
|
||||
|
||||
/// <summary>
|
||||
/// A sample project template
|
||||
/// </summary>
|
||||
protected class TestTemplate : IProjectTemplate
|
||||
{
|
||||
public string Name
|
||||
{
|
||||
get { return "TestTemplate"; }
|
||||
}
|
||||
|
||||
public IEnumerable<Property> Properties
|
||||
{
|
||||
get { return Enumerable.Empty<Property>(); }
|
||||
}
|
||||
|
||||
public Project CreateProject()
|
||||
{
|
||||
return new Project();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the text context
|
||||
/// </summary>
|
||||
public TestContext TestContext { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the project manager
|
||||
/// </summary>
|
||||
protected virtual ProjectManager ProjectManager { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the sample project template
|
||||
/// </summary>
|
||||
protected virtual IProjectTemplate ProjectTemplate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Sets up the test
|
||||
/// </summary>
|
||||
[TestInitialize]
|
||||
public void Initialize()
|
||||
{
|
||||
string testDirectory = Path.Combine(TestContext.DeploymentDirectory, TestContext.TestName);
|
||||
|
||||
Directory.CreateDirectory(testDirectory);
|
||||
Directory.SetCurrentDirectory(testDirectory);
|
||||
|
||||
// Set up project manager
|
||||
ProjectManager = new ProjectManager();
|
||||
|
||||
// Set up project template
|
||||
ProjectTemplate = new TestTemplate();
|
||||
ProjectManager.RegisterProjectTemplate(ProjectTemplate);
|
||||
|
||||
OnInitialize();
|
||||
}
|
||||
|
||||
public virtual void OnInitialize()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user