-
Notifications
You must be signed in to change notification settings - Fork 16
/
EDFFileTest.cs
140 lines (113 loc) · 4.63 KB
/
EDFFileTest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using NUnit.Framework;
namespace EOLib.Localization.Test
{
[TestFixture, ExcludeFromCodeCoverage]
public class EDFFileTest
{
private const string FILE_NAME = "test.edf";
[TearDown]
public void TearDown()
{
if (File.Exists(FILE_NAME))
File.Delete(FILE_NAME);
}
[Test]
public void GivenNonExistingFile_ExpectFileNotFoundException()
{
Assert.Throws<FileNotFoundException>(() => new EDFFile("fileThatDoesNotExist", DataFiles.Checksum));
}
[Test]
public void GivenCurseFile_DecodeStringDelimitedByColons()
{
const string curseString = "CsusrAs:e5:4C3uErSsReU2C:";
GivenDataFileWithContents(FILE_NAME, curseString);
var file = new EDFFile(FILE_NAME, DataFiles.CurseFilter);
var expectedCurses = new[]
{
"Curse", "Curse2", "CURSE345", "Ass"
};
CollectionAssert.AreEqual(expectedCurses, file.Data.Values);
}
[Test]
public void GivenCurseFile_DecodeStringDelimitedByColons_HandlesMultipleLines()
{
const string curseString = "CsusrAs:e5:4C3uErSsReU2C:\nARBQCPDOEN:MF:GLHKIJ:";
GivenDataFileWithContents(FILE_NAME, curseString);
var file = new EDFFile(FILE_NAME, DataFiles.CurseFilter);
var expectedCurses = new[]
{
"Curse", "Curse2", "CURSE345", "Ass",
"ABCDE", "FGHI", "JKL", "MNOPQR"
};
CollectionAssert.AreEqual(expectedCurses, file.Data.Values);
}
[Test]
public void GivenCreditsFile_DoesNotDecodeFileContents_SplitsByLines()
{
const string credits = "Created By\nMe :)\nMe again!";
GivenDataFileWithContents(FILE_NAME, credits);
var file = new EDFFile(FILE_NAME, DataFiles.Credits);
var expectedCredits = credits.Split('\n');
CollectionAssert.AreEqual(expectedCredits, file.Data.Values);
}
[Test]
public void GivenChecksumFile_DoesNotDecodeFileContents()
{
const string checksum = "218:13:2:176";
GivenDataFileWithContents(FILE_NAME, checksum);
var file = new EDFFile(FILE_NAME, DataFiles.Checksum);
Assert.AreEqual(1, file.Data.Count);
Assert.AreEqual(checksum, file.Data.Values.Single());
}
[Test]
public void NonSpecialDataFiles_AreDecodedCorrectly()
{
const string fileData = "a7b6cg1f2e3d4 5";
const string expectedString = "abc12345 defg67";
GivenDataFileWithContents(FILE_NAME, fileData);
var valuesToTest = ((DataFiles[]) Enum.GetValues(typeof(DataFiles))).Skip(3);
foreach (var file in valuesToTest)
{
var edf = new EDFFile(FILE_NAME, file);
Assert.AreEqual(expectedString, edf.Data.Values.Single());
}
}
[Test]
public void NonSpecialDataFiles_AreDecodedCorrectly_MultipleLines()
{
const string fileData = "a7b6cg1f2e3d4 5\na7b6cg1f2e3d4 5";
var expectedStrings = new[] { "abc12345 defg67", "abc12345 defg67"};
GivenDataFileWithContents(FILE_NAME, fileData);
var valuesToTest = ((DataFiles[])Enum.GetValues(typeof(DataFiles))).Skip(3);
foreach (var file in valuesToTest)
{
var edf = new EDFFile(FILE_NAME, file);
CollectionAssert.AreEqual(expectedStrings, edf.Data.Values);
}
}
[Test]
public void NonSpecialDataFiles_SwapAdjacentCharacterValues_MultiplesOfSeven()
{
//p, p, and i are adjacent multiples of 7 in this example
//see https://eoserv.net/wiki/EDF_Data_Files for more info
//the expected string would be Crazy steippng without this step
const string fileData = "Cgrnapzpyi est";
var expectedString = "Crazy stepping";
GivenDataFileWithContents(FILE_NAME, fileData);
var valuesToTest = ((DataFiles[])Enum.GetValues(typeof(DataFiles))).Skip(3);
foreach (var file in valuesToTest)
{
var edf = new EDFFile(FILE_NAME, file);
Assert.AreEqual(expectedString, edf.Data.Values.Single());
}
}
private void GivenDataFileWithContents(string fileName, string fileData)
{
File.WriteAllText(fileName, fileData);
}
}
}