2012-08-13 10:04:31 -01:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
|
using Umbraco.Core.IO;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Umbraco.Tests.IO
|
|
|
|
|
|
{
|
2013-02-21 23:07:37 +06:00
|
|
|
|
[TestFixture, RequiresSTA]
|
Updates PartialView & PartialViewMacros models/services/repositories, streamlines their operations, fixes up other underlying problems with the FileRepository, fixes tree syncing for partial views, partial view macros and scripts, fixes scripts being created in folders, allows partial views and partial view macros to be managed and created in folders, fixes FileUnitOfWork to use a queue, publicizes some internal test classes, fixes tree syncing when dealing with invariant case, adds correct validation to the create dialogs of scripts and partial views (and partial view macros)
2014-10-22 16:44:45 +10:00
|
|
|
|
public abstract class AbstractFileSystemTests
|
2012-08-13 10:04:31 -01:00
|
|
|
|
{
|
|
|
|
|
|
protected IFileSystem _fileSystem;
|
|
|
|
|
|
|
|
|
|
|
|
protected AbstractFileSystemTests(IFileSystem fileSystem)
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem = fileSystem;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Create_And_Delete_Files()
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem.AddFile("test.txt", CreateStream());
|
|
|
|
|
|
|
|
|
|
|
|
Assert.IsTrue(_fileSystem.FileExists("test.txt"));
|
|
|
|
|
|
|
|
|
|
|
|
_fileSystem.DeleteFile("test.txt");
|
|
|
|
|
|
|
|
|
|
|
|
Assert.IsFalse(_fileSystem.FileExists("test.txt"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Overwrite_File()
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem.AddFile("test/test.txt", CreateStream());
|
|
|
|
|
|
_fileSystem.AddFile("test/test.txt", CreateStream());
|
|
|
|
|
|
|
|
|
|
|
|
var files = _fileSystem.GetFiles("test");
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(1, files.Count());
|
|
|
|
|
|
|
2012-11-09 14:45:28 -01:00
|
|
|
|
foreach (var file in files)
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem.DeleteFile(file);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2012-08-13 10:04:31 -01:00
|
|
|
|
_fileSystem.DeleteDirectory("test", true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
[ExpectedException(typeof(InvalidOperationException))]
|
|
|
|
|
|
public void Cant_Overwrite_File()
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem.AddFile("test.txt", CreateStream());
|
|
|
|
|
|
_fileSystem.AddFile("test.txt", CreateStream(), false);
|
|
|
|
|
|
|
|
|
|
|
|
_fileSystem.DeleteFile("test.txt");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Files()
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem.AddFile("test/test1.txt", CreateStream());
|
|
|
|
|
|
_fileSystem.AddFile("test/test2.txt", CreateStream());
|
|
|
|
|
|
_fileSystem.AddFile("test/test3.txt", CreateStream());
|
|
|
|
|
|
_fileSystem.AddFile("test/test4.bak", CreateStream());
|
|
|
|
|
|
|
|
|
|
|
|
var files = _fileSystem.GetFiles("test");
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(4, files.Count());
|
|
|
|
|
|
|
|
|
|
|
|
files = _fileSystem.GetFiles("test", "*.txt");
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(3, files.Count());
|
|
|
|
|
|
|
|
|
|
|
|
_fileSystem.DeleteDirectory("test", true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Read_File()
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem.AddFile("test.txt", CreateStream("hello world"));
|
|
|
|
|
|
|
|
|
|
|
|
var stream = _fileSystem.OpenFile("test.txt");
|
|
|
|
|
|
var reader = new StreamReader(stream);
|
|
|
|
|
|
var contents = reader.ReadToEnd();
|
|
|
|
|
|
reader.Close();
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual("hello world", contents);
|
|
|
|
|
|
|
|
|
|
|
|
_fileSystem.DeleteFile("test.txt");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Directories()
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem.AddFile("test/sub1/test.txt", CreateStream());
|
|
|
|
|
|
_fileSystem.AddFile("test/sub2/test.txt", CreateStream());
|
|
|
|
|
|
_fileSystem.AddFile("test/sub3/test.txt", CreateStream());
|
|
|
|
|
|
|
|
|
|
|
|
var dirs = _fileSystem.GetDirectories("test");
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(3, dirs.Count());
|
|
|
|
|
|
Assert.IsTrue(_fileSystem.DirectoryExists("test/sub1"));
|
|
|
|
|
|
Assert.IsTrue(_fileSystem.DirectoryExists("test/sub2"));
|
|
|
|
|
|
Assert.IsTrue(_fileSystem.DirectoryExists("test/sub3"));
|
|
|
|
|
|
|
|
|
|
|
|
_fileSystem.DeleteDirectory("test", true);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_File_Dates()
|
|
|
|
|
|
{
|
2012-11-09 09:57:46 -01:00
|
|
|
|
_fileSystem.DeleteFile("test.txt");
|
|
|
|
|
|
|
|
|
|
|
|
_fileSystem.AddFile("test.txt", CreateStream());
|
2012-08-13 10:04:31 -01:00
|
|
|
|
|
|
|
|
|
|
var created = _fileSystem.GetCreated("test.txt");
|
|
|
|
|
|
var modified = _fileSystem.GetLastModified("test.txt");
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(DateTime.Today.Year, created.Year);
|
|
|
|
|
|
Assert.AreEqual(DateTime.Today.Month, created.Month);
|
2013-11-28 00:09:09 +01:00
|
|
|
|
Assert.AreEqual(DateTime.UtcNow.Date, created.Date);
|
2012-08-13 10:04:31 -01:00
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(DateTime.Today.Year, modified.Year);
|
|
|
|
|
|
Assert.AreEqual(DateTime.Today.Month, modified.Month);
|
2013-11-28 00:09:09 +01:00
|
|
|
|
Assert.AreEqual(DateTime.UtcNow.Date, modified.Date);
|
2012-08-13 10:04:31 -01:00
|
|
|
|
|
|
|
|
|
|
_fileSystem.DeleteFile("test.txt");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_File_Url()
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem.AddFile("test.txt", CreateStream());
|
|
|
|
|
|
|
|
|
|
|
|
var url = _fileSystem.GetUrl("test.txt");
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(ConstructUrl("test.txt"), url);
|
|
|
|
|
|
|
|
|
|
|
|
_fileSystem.DeleteFile("test.txt");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2012-08-14 09:11:49 -01:00
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Convert_Full_Path_And_Url_To_Relative_Path()
|
|
|
|
|
|
{
|
|
|
|
|
|
_fileSystem.AddFile("test.txt", CreateStream());
|
|
|
|
|
|
|
|
|
|
|
|
var url = _fileSystem.GetUrl("test.txt");
|
|
|
|
|
|
var fullPath = _fileSystem.GetFullPath("test.txt");
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreNotEqual("test.txt", url);
|
|
|
|
|
|
Assert.AreNotEqual("test.txt", fullPath);
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual("test.txt", _fileSystem.GetRelativePath(url));
|
|
|
|
|
|
Assert.AreEqual("test.txt", _fileSystem.GetRelativePath(fullPath));
|
|
|
|
|
|
|
|
|
|
|
|
_fileSystem.DeleteFile("test.txt");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Size()
|
|
|
|
|
|
{
|
|
|
|
|
|
var stream = CreateStream();
|
|
|
|
|
|
var streamLength = stream.Length;
|
|
|
|
|
|
_fileSystem.AddFile("test.txt", stream);
|
|
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(streamLength, _fileSystem.GetSize("test.txt"));
|
|
|
|
|
|
|
|
|
|
|
|
_fileSystem.DeleteFile("test.txt");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2012-08-13 10:04:31 -01:00
|
|
|
|
#region Helper Methods
|
|
|
|
|
|
|
|
|
|
|
|
protected Stream CreateStream(string contents = null)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(string.IsNullOrEmpty(contents))
|
|
|
|
|
|
contents = "test";
|
|
|
|
|
|
|
|
|
|
|
|
var bytes = Encoding.UTF8.GetBytes(contents);
|
|
|
|
|
|
var stream = new MemoryStream(bytes);
|
|
|
|
|
|
|
|
|
|
|
|
return stream;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected abstract string ConstructUrl(string path);
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|