Skip to content

Commit 355432d

Browse files
authored
Merge pull request #1463 from nunit/issue-1415
Validate addins files and display useful message
2 parents 9e119bd + 9454108 commit 355432d

16 files changed

+557
-950
lines changed

src/NUnitEngine/nunit.engine.core.tests/Internal/AddinsFileReaderTests2.cs

-67
This file was deleted.

src/NUnitEngine/nunit.engine.core.tests/Internal/AddinsFileReaderTests.cs src/NUnitEngine/nunit.engine.core.tests/Internal/AddinsFileTests.cs

+36-37
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,27 @@
55
using System;
66
using System.Collections.Generic;
77
using System.IO;
8+
using System.Linq;
89
using System.Text;
910

1011
namespace NUnit.Engine.Internal.Tests
1112
{
1213
/// <summary>
13-
/// Tests the implementation of <see cref="AddinsFileReader"/>.
14+
/// Tests the implementation of <see cref="AddinsFile"/>.
1415
/// </summary>
1516
[TestFixture]
16-
public class AddinsFileReaderTests
17+
public class AddinsFileTests
1718
{
1819
[Test]
1920
public void Read_IFile_Null()
2021
{
21-
var reader = new AddinsFileReader();
22-
23-
Assert.That(() => reader.Read((IFile)null), Throws.ArgumentNullException);
22+
Assert.That(() => AddinsFile.Read((IFile)null), Throws.ArgumentNullException);
2423
}
2524

2625
[Test]
2726
public void Read_Stream()
2827
{
29-
var input = string.Join(Environment.NewLine, new string[]
28+
var content = new[]
3029
{
3130
"# This line is a comment and is ignored. The next (blank) line is ignored as well.",
3231
"",
@@ -36,59 +35,59 @@ public void Read_Stream()
3635
"some/other/directory/ # process another directory, which may contain its own addins file",
3736
"# note that an absolute path is allowed, but is probably not a good idea in most cases",
3837
"/unix/absolute/directory"
39-
});
40-
41-
IEnumerable<string> result;
38+
};
4239

43-
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(input)))
40+
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(string.Join(Environment.NewLine, content))))
4441
{
45-
// Act
46-
result = AddinsFileReader.Read(stream);
42+
var result = AddinsFile.Read(stream);
43+
44+
Assert.That(result, Has.Count.EqualTo(8));
45+
for (int i = 0; i < 8; i++)
46+
Assert.That(result[i], Is.EqualTo(
47+
new AddinsFileEntry(i + 1, content[i])));
4748
}
49+
}
4850

49-
Assert.That(result, Has.Count.EqualTo(5));
50-
Assert.That(result, Contains.Item("*.dll"));
51-
Assert.That(result, Contains.Item("addins/*.dll"));
52-
Assert.That(result, Contains.Item("special/myassembly.dll"));
53-
Assert.That(result, Contains.Item("some/other/directory/"));
54-
Assert.That(result, Contains.Item("/unix/absolute/directory"));
51+
[Test]
52+
public void Read_InvalidEntry()
53+
{
54+
var content = "// This is not valid";
55+
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(content)))
56+
{
57+
Assert.That(() => AddinsFile.Read(stream), Throws.Exception);
58+
}
5559
}
5660

5761
[Test]
5862
[Platform("win")]
5963
public void Read_Stream_TransformBackslash_Windows()
6064
{
61-
var input = string.Join(Environment.NewLine, new string[]
62-
{
63-
"c:\\windows\\absolute\\directory"
64-
});
65+
var content = "c:\\windows\\absolute\\directory";
6566

66-
IEnumerable<string> result;
67-
68-
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(input)))
67+
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(content)))
6968
{
70-
// Act
71-
result = AddinsFileReader.Read(stream);
72-
}
69+
var result = AddinsFile.Read(stream);
7370

74-
Assert.That(result, Has.Count.EqualTo(1));
75-
Assert.That(result, Contains.Item("c:/windows/absolute/directory"));
71+
Assert.That(result, Has.Count.EqualTo(1));
72+
Assert.That(result[0], Is.EqualTo(new AddinsFileEntry(1, content)));
73+
Assert.That(result[0].Text, Is.EqualTo("c:/windows/absolute/directory"));
74+
}
7675
}
7776

7877
[Test]
7978
[Platform("linux,macosx,unix")]
8079
public void Read_Stream_TransformBackslash_NonWindows()
8180
{
82-
IEnumerable<string> result;
81+
var content = "this/is/a\\ path\\ with\\ spaces/";
8382

84-
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes("this/is/a\\ path\\ with\\ spaces/")))
83+
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(content)))
8584
{
86-
// Act
87-
result = AddinsFileReader.Read(stream);
88-
}
85+
var result = AddinsFile.Read(stream);
8986

90-
Assert.That(result, Has.Count.EqualTo(1));
91-
Assert.That(result, Contains.Item("this/is/a\\ path\\ with\\ spaces/"));
87+
Assert.That(result, Has.Count.EqualTo(1));
88+
Assert.That(result[0], Is.EqualTo(new AddinsFileEntry(1, content)));
89+
Assert.That(result[0].Text, Is.EqualTo(content));
90+
}
9291
}
9392
}
9493
}

src/NUnitEngine/nunit.engine.core.tests/Internal/Backports/PathTests.cs

-60
This file was deleted.

src/NUnitEngine/nunit.engine.core.tests/Internal/PathUtilTests.cs

+28-1
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,36 @@ public void IsFullyQualifiedWindowsPath_PathIsNull()
6363
{
6464
Assert.That(() => PathUtils.IsFullyQualifiedWindowsPath(null), Throws.ArgumentNullException);
6565
}
66+
67+
[TestCase("X")]
68+
[TestCase("X/")]
69+
[TestCase("/X/")]
70+
[TestCase("\\X\\")]
71+
[TestCase("X/Y/Z")]
72+
[TestCase("X/Y/Z/")]
73+
[TestCase("/X/Y/Z")]
74+
[TestCase("/X/Y/Z/")]
75+
[TestCase("\\X\\Y\\Z\\")]
76+
[TestCase("C:X/Y/Z/")]
77+
[TestCase("C:/X/Y/Z")]
78+
[TestCase("C:/X/Y/Z/")]
79+
[TestCase("C:\\X\\Y\\Z\\")]
80+
public void IsValidPath(string path)
81+
{
82+
Assert.That(PathUtils.IsValidPath(path), Is.True);
83+
}
84+
85+
[TestCase(":")]
86+
[TestCase("?")]
87+
[TestCase("*")]
88+
[TestCase("// Spurious comment")]
89+
public void IsValidPath_Fails(string path)
90+
{
91+
Assert.That(PathUtils.IsValidPath(path), Is.False);
92+
}
6693
}
6794

68-
[TestFixture]
95+
[TestFixture]
6996
public class PathUtilDefaultsTests : PathUtils
7097
{
7198
[Test]

0 commit comments

Comments
 (0)