mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-05-28 17:34:06 +02:00
Rewrite IO handling in unit tests
This commit is contained in:
parent
f5e3b34f30
commit
49db3074c6
@ -6,30 +6,30 @@
|
|||||||
|
|
||||||
namespace UnitTests.Data{
|
namespace UnitTests.Data{
|
||||||
[TestClass]
|
[TestClass]
|
||||||
public class TestCombinedFileStream{
|
public class TestCombinedFileStream : UnitTestIO{
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void TestNoFiles(){
|
public void TestNoFiles(){
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.WriteFile("cfs_empty"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenWrite("cfs_empty"))){
|
||||||
cfs.Flush();
|
cfs.Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert.IsTrue(File.Exists("cfs_empty"));
|
Assert.IsTrue(File.Exists("cfs_empty"));
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.ReadFile("cfs_empty"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenRead("cfs_empty"))){
|
||||||
Assert.IsNull(cfs.ReadFile());
|
Assert.IsNull(cfs.ReadFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.ReadFile("cfs_empty"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenRead("cfs_empty"))){
|
||||||
Assert.IsNull(cfs.SkipFile());
|
Assert.IsNull(cfs.SkipFile());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void TestEmptyFiles(){
|
public void TestEmptyFiles(){
|
||||||
TestUtils.WriteText("cfs_input_empty_1", string.Empty);
|
File.WriteAllText("cfs_input_empty_1", string.Empty);
|
||||||
TestUtils.WriteText("cfs_input_empty_2", string.Empty);
|
File.WriteAllText("cfs_input_empty_2", string.Empty);
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.WriteFile("cfs_blank_files"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenWrite("cfs_blank_files"))){
|
||||||
cfs.WriteFile("id1", "cfs_input_empty_1");
|
cfs.WriteFile("id1", "cfs_input_empty_1");
|
||||||
cfs.WriteFile("id2", "cfs_input_empty_2");
|
cfs.WriteFile("id2", "cfs_input_empty_2");
|
||||||
cfs.WriteFile("id2_clone", "cfs_input_empty_2");
|
cfs.WriteFile("id2_clone", "cfs_input_empty_2");
|
||||||
@ -38,7 +38,7 @@ public void TestEmptyFiles(){
|
|||||||
|
|
||||||
Assert.IsTrue(File.Exists("cfs_blank_files"));
|
Assert.IsTrue(File.Exists("cfs_blank_files"));
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.ReadFile("cfs_blank_files"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenRead("cfs_blank_files"))){
|
||||||
CombinedFileStream.Entry entry1 = cfs.ReadFile();
|
CombinedFileStream.Entry entry1 = cfs.ReadFile();
|
||||||
string entry2key = cfs.SkipFile();
|
string entry2key = cfs.SkipFile();
|
||||||
CombinedFileStream.Entry entry3 = cfs.ReadFile();
|
CombinedFileStream.Entry entry3 = cfs.ReadFile();
|
||||||
@ -58,21 +58,19 @@ public void TestEmptyFiles(){
|
|||||||
|
|
||||||
entry1.WriteToFile("cfs_blank_file_1");
|
entry1.WriteToFile("cfs_blank_file_1");
|
||||||
entry3.WriteToFile("cfs_blank_file_2");
|
entry3.WriteToFile("cfs_blank_file_2");
|
||||||
TestUtils.DeleteFileOnExit("cfs_blank_file_1");
|
|
||||||
TestUtils.DeleteFileOnExit("cfs_blank_file_2");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert.IsTrue(File.Exists("cfs_blank_file_1"));
|
Assert.IsTrue(File.Exists("cfs_blank_file_1"));
|
||||||
Assert.IsTrue(File.Exists("cfs_blank_file_2"));
|
Assert.IsTrue(File.Exists("cfs_blank_file_2"));
|
||||||
Assert.AreEqual(string.Empty, TestUtils.ReadText("cfs_blank_file_1"));
|
Assert.AreEqual(string.Empty, File.ReadAllText("cfs_blank_file_1"));
|
||||||
Assert.AreEqual(string.Empty, TestUtils.ReadText("cfs_blank_file_2"));
|
Assert.AreEqual(string.Empty, File.ReadAllText("cfs_blank_file_2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void TestTextFilesAndComplexKeys(){
|
public void TestTextFilesAndComplexKeys(){
|
||||||
TestUtils.WriteText("cfs_input_text_1", "Hello World!"+Environment.NewLine);
|
File.WriteAllText("cfs_input_text_1", "Hello World!"+Environment.NewLine);
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.WriteFile("cfs_text_files"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenWrite("cfs_text_files"))){
|
||||||
cfs.WriteFile(new string[]{ "key1", "a", "bb", "ccc", "dddd" }, "cfs_input_text_1");
|
cfs.WriteFile(new string[]{ "key1", "a", "bb", "ccc", "dddd" }, "cfs_input_text_1");
|
||||||
cfs.WriteFile(new string[]{ "key2", "a", "bb", "ccc", "dddd" }, "cfs_input_text_1");
|
cfs.WriteFile(new string[]{ "key2", "a", "bb", "ccc", "dddd" }, "cfs_input_text_1");
|
||||||
cfs.Flush();
|
cfs.Flush();
|
||||||
@ -80,7 +78,7 @@ public void TestTextFilesAndComplexKeys(){
|
|||||||
|
|
||||||
Assert.IsTrue(File.Exists("cfs_text_files"));
|
Assert.IsTrue(File.Exists("cfs_text_files"));
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.ReadFile("cfs_text_files"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenRead("cfs_text_files"))){
|
||||||
CombinedFileStream.Entry entry = cfs.ReadFile();
|
CombinedFileStream.Entry entry = cfs.ReadFile();
|
||||||
|
|
||||||
Assert.AreEqual("key2", cfs.SkipFile());
|
Assert.AreEqual("key2", cfs.SkipFile());
|
||||||
@ -92,11 +90,10 @@ public void TestTextFilesAndComplexKeys(){
|
|||||||
CollectionAssert.AreEqual(new string[]{ "a", "bb", "ccc", "dddd" }, entry.KeyValue);
|
CollectionAssert.AreEqual(new string[]{ "a", "bb", "ccc", "dddd" }, entry.KeyValue);
|
||||||
|
|
||||||
entry.WriteToFile("cfs_text_file_1");
|
entry.WriteToFile("cfs_text_file_1");
|
||||||
TestUtils.DeleteFileOnExit("cfs_text_file_1");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert.IsTrue(File.Exists("cfs_text_file_1"));
|
Assert.IsTrue(File.Exists("cfs_text_file_1"));
|
||||||
Assert.AreEqual("Hello World!"+Environment.NewLine, TestUtils.ReadText("cfs_text_file_1"));
|
Assert.AreEqual("Hello World!"+Environment.NewLine, File.ReadAllText("cfs_text_file_1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
@ -105,9 +102,9 @@ public void TestEntryWriteWithDirectory(){
|
|||||||
Directory.Delete("cfs_directory", true);
|
Directory.Delete("cfs_directory", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
TestUtils.WriteText("cfs_input_dir_1", "test");
|
File.WriteAllText("cfs_input_dir_1", "test");
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.WriteFile("cfs_dir_test"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenWrite("cfs_dir_test"))){
|
||||||
cfs.WriteFile("key1", "cfs_input_dir_1");
|
cfs.WriteFile("key1", "cfs_input_dir_1");
|
||||||
cfs.WriteFile("key2", "cfs_input_dir_1");
|
cfs.WriteFile("key2", "cfs_input_dir_1");
|
||||||
cfs.WriteFile("key3", "cfs_input_dir_1");
|
cfs.WriteFile("key3", "cfs_input_dir_1");
|
||||||
@ -117,7 +114,7 @@ public void TestEntryWriteWithDirectory(){
|
|||||||
|
|
||||||
Assert.IsTrue(File.Exists("cfs_dir_test"));
|
Assert.IsTrue(File.Exists("cfs_dir_test"));
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.ReadFile("cfs_dir_test"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenRead("cfs_dir_test"))){
|
||||||
try{
|
try{
|
||||||
cfs.ReadFile().WriteToFile("cfs_directory/cfs_dir_test_file", false);
|
cfs.ReadFile().WriteToFile("cfs_directory/cfs_dir_test_file", false);
|
||||||
Assert.Fail("WriteToFile did not trigger an exception.");
|
Assert.Fail("WriteToFile did not trigger an exception.");
|
||||||
@ -126,33 +123,31 @@ public void TestEntryWriteWithDirectory(){
|
|||||||
cfs.ReadFile().WriteToFile("cfs_directory/cfs_dir_test_file", true);
|
cfs.ReadFile().WriteToFile("cfs_directory/cfs_dir_test_file", true);
|
||||||
cfs.ReadFile().WriteToFile("cfs_dir_test_file", true);
|
cfs.ReadFile().WriteToFile("cfs_dir_test_file", true);
|
||||||
cfs.ReadFile().WriteToFile("cfs_dir_test_file.txt", true);
|
cfs.ReadFile().WriteToFile("cfs_dir_test_file.txt", true);
|
||||||
TestUtils.DeleteFileOnExit("cfs_dir_test_file");
|
|
||||||
TestUtils.DeleteFileOnExit("cfs_dir_test_file.txt");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert.IsTrue(Directory.Exists("cfs_directory"));
|
Assert.IsTrue(Directory.Exists("cfs_directory"));
|
||||||
Assert.IsTrue(File.Exists("cfs_directory/cfs_dir_test_file"));
|
Assert.IsTrue(File.Exists("cfs_directory/cfs_dir_test_file"));
|
||||||
Assert.IsTrue(File.Exists("cfs_dir_test_file"));
|
Assert.IsTrue(File.Exists("cfs_dir_test_file"));
|
||||||
Assert.IsTrue(File.Exists("cfs_dir_test_file.txt"));
|
Assert.IsTrue(File.Exists("cfs_dir_test_file.txt"));
|
||||||
Assert.AreEqual("test", TestUtils.ReadText("cfs_directory/cfs_dir_test_file"));
|
Assert.AreEqual("test", File.ReadAllText("cfs_directory/cfs_dir_test_file"));
|
||||||
Assert.AreEqual("test", TestUtils.ReadText("cfs_dir_test_file"));
|
Assert.AreEqual("test", File.ReadAllText("cfs_dir_test_file"));
|
||||||
Assert.AreEqual("test", TestUtils.ReadText("cfs_dir_test_file.txt"));
|
Assert.AreEqual("test", File.ReadAllText("cfs_dir_test_file.txt"));
|
||||||
|
|
||||||
Directory.Delete("cfs_directory", true);
|
Directory.Delete("cfs_directory", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void TestLongIdentifierSuccess(){
|
public void TestLongIdentifierSuccess(){
|
||||||
TestUtils.WriteText("cfs_long_identifier_fail_in", "test");
|
File.WriteAllText("cfs_long_identifier_fail_in", "test");
|
||||||
|
|
||||||
string identifier = string.Join("", Enumerable.Repeat("x", 255));
|
string identifier = string.Join("", Enumerable.Repeat("x", 255));
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.WriteFile("cfs_long_identifier_success"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenWrite("cfs_long_identifier_success"))){
|
||||||
cfs.WriteFile(identifier, "cfs_long_identifier_fail_in");
|
cfs.WriteFile(identifier, "cfs_long_identifier_fail_in");
|
||||||
cfs.Flush();
|
cfs.Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.ReadFile("cfs_long_identifier_success"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenRead("cfs_long_identifier_success"))){
|
||||||
Assert.AreEqual(identifier, cfs.ReadFile().Identifier);
|
Assert.AreEqual(identifier, cfs.ReadFile().Identifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -160,9 +155,9 @@ public void TestLongIdentifierSuccess(){
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
[ExpectedException(typeof(ArgumentOutOfRangeException))]
|
[ExpectedException(typeof(ArgumentOutOfRangeException))]
|
||||||
public void TestLongIdentifierFail(){
|
public void TestLongIdentifierFail(){
|
||||||
TestUtils.WriteText("cfs_long_identifier_fail_in", "test");
|
File.WriteAllText("cfs_long_identifier_fail_in", "test");
|
||||||
|
|
||||||
using(CombinedFileStream cfs = new CombinedFileStream(TestUtils.WriteFile("cfs_long_identifier_fail"))){
|
using(CombinedFileStream cfs = new CombinedFileStream(File.OpenWrite("cfs_long_identifier_fail"))){
|
||||||
cfs.WriteFile(string.Join("", Enumerable.Repeat("x", 256)), "cfs_long_identifier_fail_in");
|
cfs.WriteFile(string.Join("", Enumerable.Repeat("x", 256)), "cfs_long_identifier_fail_in");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
namespace UnitTests.Data{
|
namespace UnitTests.Data{
|
||||||
[TestClass]
|
[TestClass]
|
||||||
public class TestFileSerializer{
|
public class TestFileSerializer : UnitTestIO{
|
||||||
private enum TestEnum{
|
private enum TestEnum{
|
||||||
A, B, C, D, E
|
A, B, C, D, E
|
||||||
}
|
}
|
||||||
@ -31,9 +31,7 @@ public void TestBasicWriteRead(){
|
|||||||
};
|
};
|
||||||
|
|
||||||
serializer.Write("serialized_basic", write);
|
serializer.Write("serialized_basic", write);
|
||||||
|
|
||||||
Assert.IsTrue(File.Exists("serialized_basic"));
|
Assert.IsTrue(File.Exists("serialized_basic"));
|
||||||
TestUtils.DeleteFileOnExit("serialized_basic");
|
|
||||||
|
|
||||||
SerializationTestBasic read = new SerializationTestBasic();
|
SerializationTestBasic read = new SerializationTestBasic();
|
||||||
serializer.Read("serialized_basic", read);
|
serializer.Read("serialized_basic", read);
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using System.Linq;
|
|
||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
||||||
|
|
||||||
namespace UnitTests{
|
|
||||||
public static class TestUtils{
|
|
||||||
private static readonly HashSet<string> CreatedFiles = new HashSet<string>();
|
|
||||||
|
|
||||||
public static void WriteText(string file, string text){
|
|
||||||
DeleteFileOnExit(file);
|
|
||||||
File.WriteAllText(file, text, Encoding.UTF8);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void WriteLines(string file, IEnumerable<string> lines){
|
|
||||||
DeleteFileOnExit(file);
|
|
||||||
File.WriteAllLines(file, lines, Encoding.UTF8);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FileStream WriteFile(string file){
|
|
||||||
DeleteFileOnExit(file);
|
|
||||||
return new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string ReadText(string file){
|
|
||||||
try{
|
|
||||||
return File.ReadAllText(file, Encoding.UTF8);
|
|
||||||
}catch(Exception){
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IEnumerable<string> ReadLines(string file){
|
|
||||||
try{
|
|
||||||
return File.ReadLines(file, Encoding.UTF8);
|
|
||||||
}catch(Exception){
|
|
||||||
return Enumerable.Empty<string>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FileStream ReadFile(string file){
|
|
||||||
return new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void DeleteFileOnExit(string file){
|
|
||||||
CreatedFiles.Add(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
[TestClass]
|
|
||||||
public static class Cleanup{
|
|
||||||
[AssemblyCleanup]
|
|
||||||
public static void DeleteFilesOnExit(){
|
|
||||||
foreach(string file in CreatedFiles){
|
|
||||||
try{
|
|
||||||
File.Delete(file);
|
|
||||||
}catch(Exception){
|
|
||||||
// ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
32
tests/UnitTestIO.cs
Normal file
32
tests/UnitTestIO.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
|
||||||
|
namespace UnitTests{
|
||||||
|
[TestClass]
|
||||||
|
public class UnitTestIO{
|
||||||
|
private static readonly HashSet<string> CreatedFolders = new HashSet<string>();
|
||||||
|
|
||||||
|
[TestInitialize]
|
||||||
|
public void InitTest(){
|
||||||
|
string folder = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, GetType().Name);
|
||||||
|
CreatedFolders.Add(folder);
|
||||||
|
Directory.CreateDirectory(folder);
|
||||||
|
Directory.SetCurrentDirectory(folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
[AssemblyCleanup]
|
||||||
|
public static void DeleteFilesOnExit(){
|
||||||
|
Directory.SetCurrentDirectory(AppDomain.CurrentDomain.SetupInformation.ApplicationBase);
|
||||||
|
|
||||||
|
foreach(string folder in CreatedFolders){
|
||||||
|
try{
|
||||||
|
Directory.Delete(folder, true);
|
||||||
|
}catch(Exception){
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -56,7 +56,7 @@
|
|||||||
<Compile Include="Data\TestInjectedHTML.cs" />
|
<Compile Include="Data\TestInjectedHTML.cs" />
|
||||||
<Compile Include="Data\TestTwoKeyDictionary.cs" />
|
<Compile Include="Data\TestTwoKeyDictionary.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="TestUtils.cs" />
|
<Compile Include="UnitTestIO.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\TweetDuck.csproj">
|
<ProjectReference Include="..\TweetDuck.csproj">
|
||||||
|
Loading…
Reference in New Issue
Block a user