Skip to content

Commit c1f612c

Browse files
committed
Use CRLF for C# programs
1 parent 1ee32e3 commit c1f612c

8 files changed

Lines changed: 918 additions & 918 deletions

File tree

‎BrowserGuard.Tests/ConfigLoaderTests.cs‎

Lines changed: 199 additions & 199 deletions
Large diffs are not rendered by default.
Lines changed: 95 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,95 @@
1-
using System.Text.Json.Nodes;
2-
using Xunit;
3-
4-
namespace BrowserGuard.Tests
5-
{
6-
// The registry side needs elevation, so these cover the JSON merging that
7-
// PolicyCommand performs on the ExtensionSettings value.
8-
public class PolicyCommandTests
9-
{
10-
const string Id = "ddniogodiahgpmfkljajobgkaecabnif";
11-
const string Url = "file:///C:/Program%20Files/BrowserGuard/BrowserGuardExtension/manifest.xml";
12-
13-
static JsonObject Parse(string json) => (JsonObject)JsonNode.Parse(json)!;
14-
15-
[Fact]
16-
public void AddsTheEntryToAnEmptyObject()
17-
{
18-
var settings = new JsonObject();
19-
20-
PolicyCommand.SetEntry(settings, Id, Url);
21-
22-
Assert.Single(settings);
23-
var entry = (JsonObject)settings[Id]!;
24-
Assert.Equal("force_installed", (string?)entry["installation_mode"]);
25-
Assert.Equal(Url, (string?)entry["update_url"]);
26-
Assert.True((bool)entry["override_update_url"]!);
27-
}
28-
29-
[Fact]
30-
public void KeepsSettingsBelongingToOtherExtensions()
31-
{
32-
var settings = Parse("""
33-
{
34-
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { "installation_mode": "blocked" },
35-
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": { "runtime_blocked_hosts": ["*://*.example.com"] }
36-
}
37-
""");
38-
39-
PolicyCommand.SetEntry(settings, Id, Url);
40-
41-
Assert.Equal(3, settings.Count);
42-
Assert.Equal("blocked",
43-
(string?)settings["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]!["installation_mode"]);
44-
Assert.Single((JsonArray)settings["bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]!["runtime_blocked_hosts"]!);
45-
}
46-
47-
[Fact]
48-
public void ReplacesAnEntryThatIsAlreadyThere()
49-
{
50-
var settings = Parse($$"""
51-
{ "{{Id}}": { "installation_mode": "normal_installed", "update_url": "http://old/x.xml" } }
52-
""");
53-
54-
PolicyCommand.SetEntry(settings, Id, Url);
55-
56-
Assert.Single(settings);
57-
var entry = (JsonObject)settings[Id]!;
58-
Assert.Equal("force_installed", (string?)entry["installation_mode"]);
59-
Assert.Equal(Url, (string?)entry["update_url"]);
60-
}
61-
62-
[Fact]
63-
public void RemovesOnlyOurEntry()
64-
{
65-
var settings = Parse($$"""
66-
{
67-
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { "installation_mode": "blocked" },
68-
"{{Id}}": { "installation_mode": "force_installed" }
69-
}
70-
""");
71-
72-
Assert.True(settings.Remove(Id));
73-
74-
Assert.Single(settings);
75-
Assert.True(settings.ContainsKey("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
76-
}
77-
78-
// Values written by other products may contain braces and quotes, which
79-
// a hand rolled string parser would have to special case.
80-
[Fact]
81-
public void SurvivesBracesInsideOtherValues()
82-
{
83-
var settings = Parse("""
84-
{ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { "blocked_install_message": "use {IT} portal }" } }
85-
""");
86-
87-
PolicyCommand.SetEntry(settings, Id, Url);
88-
var roundTripped = Parse(settings.ToJsonString());
89-
90-
Assert.Equal("use {IT} portal }",
91-
(string?)roundTripped["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]!["blocked_install_message"]);
92-
Assert.Equal(Url, (string?)roundTripped[Id]!["update_url"]);
93-
}
94-
}
95-
}
1+
using System.Text.Json.Nodes;
2+
using Xunit;
3+
4+
namespace BrowserGuard.Tests
5+
{
6+
// The registry side needs elevation, so these cover the JSON merging that
7+
// PolicyCommand performs on the ExtensionSettings value.
8+
public class PolicyCommandTests
9+
{
10+
const string Id = "ddniogodiahgpmfkljajobgkaecabnif";
11+
const string Url = "file:///C:/Program%20Files/BrowserGuard/BrowserGuardExtension/manifest.xml";
12+
13+
static JsonObject Parse(string json) => (JsonObject)JsonNode.Parse(json)!;
14+
15+
[Fact]
16+
public void AddsTheEntryToAnEmptyObject()
17+
{
18+
var settings = new JsonObject();
19+
20+
PolicyCommand.SetEntry(settings, Id, Url);
21+
22+
Assert.Single(settings);
23+
var entry = (JsonObject)settings[Id]!;
24+
Assert.Equal("force_installed", (string?)entry["installation_mode"]);
25+
Assert.Equal(Url, (string?)entry["update_url"]);
26+
Assert.True((bool)entry["override_update_url"]!);
27+
}
28+
29+
[Fact]
30+
public void KeepsSettingsBelongingToOtherExtensions()
31+
{
32+
var settings = Parse("""
33+
{
34+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { "installation_mode": "blocked" },
35+
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": { "runtime_blocked_hosts": ["*://*.example.com"] }
36+
}
37+
""");
38+
39+
PolicyCommand.SetEntry(settings, Id, Url);
40+
41+
Assert.Equal(3, settings.Count);
42+
Assert.Equal("blocked",
43+
(string?)settings["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]!["installation_mode"]);
44+
Assert.Single((JsonArray)settings["bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]!["runtime_blocked_hosts"]!);
45+
}
46+
47+
[Fact]
48+
public void ReplacesAnEntryThatIsAlreadyThere()
49+
{
50+
var settings = Parse($$"""
51+
{ "{{Id}}": { "installation_mode": "normal_installed", "update_url": "http://old/x.xml" } }
52+
""");
53+
54+
PolicyCommand.SetEntry(settings, Id, Url);
55+
56+
Assert.Single(settings);
57+
var entry = (JsonObject)settings[Id]!;
58+
Assert.Equal("force_installed", (string?)entry["installation_mode"]);
59+
Assert.Equal(Url, (string?)entry["update_url"]);
60+
}
61+
62+
[Fact]
63+
public void RemovesOnlyOurEntry()
64+
{
65+
var settings = Parse($$"""
66+
{
67+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { "installation_mode": "blocked" },
68+
"{{Id}}": { "installation_mode": "force_installed" }
69+
}
70+
""");
71+
72+
Assert.True(settings.Remove(Id));
73+
74+
Assert.Single(settings);
75+
Assert.True(settings.ContainsKey("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
76+
}
77+
78+
// Values written by other products may contain braces and quotes, which
79+
// a hand rolled string parser would have to special case.
80+
[Fact]
81+
public void SurvivesBracesInsideOtherValues()
82+
{
83+
var settings = Parse("""
84+
{ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": { "blocked_install_message": "use {IT} portal }" } }
85+
""");
86+
87+
PolicyCommand.SetEntry(settings, Id, Url);
88+
var roundTripped = Parse(settings.ToJsonString());
89+
90+
Assert.Equal("use {IT} portal }",
91+
(string?)roundTripped["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]!["blocked_install_message"]);
92+
Assert.Equal(Url, (string?)roundTripped[Id]!["update_url"]);
93+
}
94+
}
95+
}
Lines changed: 103 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,103 @@
1-
using System;
2-
using System.IO;
3-
using System.Text;
4-
using System.Text.Json;
5-
using BrowserGuard;
6-
using Xunit;
7-
8-
namespace BrowserGuard.Tests
9-
{
10-
public class ReadMessageTests
11-
{
12-
// The browser wraps the command in an object, because
13-
// runtime.sendNativeMessage does not accept a bare string.
14-
static MessageCommunicator MakeCommunicator(string text)
15-
{
16-
return MakeRawCommunicator(JsonSerializer.Serialize(new { message = text }));
17-
}
18-
19-
static MessageCommunicator MakeRawCommunicator(string json)
20-
{
21-
var body = Encoding.UTF8.GetBytes(json);
22-
var stream = new MemoryStream();
23-
stream.Write(BitConverter.GetBytes((uint)body.Length), 0, 4);
24-
stream.Write(body, 0, body.Length);
25-
stream.Position = 0;
26-
return new MessageCommunicator(stream, new MemoryStream());
27-
}
28-
29-
static MessageCommunicator MakeCommunicator(Stream input)
30-
{
31-
return new MessageCommunicator(input, new MemoryStream());
32-
}
33-
34-
[Fact]
35-
public void ParsesCommandAndPath()
36-
{
37-
var command = MakeCommunicator("C").ReadMessage();
38-
39-
Assert.Equal("C", command);
40-
}
41-
42-
[Fact]
43-
public void ParsesJsonEncodedWindowsPath()
44-
{
45-
var command = MakeCommunicator(@"S").ReadMessage();
46-
47-
Assert.Equal("S", command);
48-
}
49-
50-
[Fact]
51-
public void TrimsSurroundingWhitespace()
52-
{
53-
var command = MakeCommunicator(" C \r\n").ReadMessage();
54-
55-
Assert.Equal("C", command);
56-
}
57-
58-
[Theory]
59-
[InlineData("")]
60-
public void ThrowsFormatExceptionWhenTooShort(string text)
61-
{
62-
Assert.Throws<InvalidDataException>(() => MakeCommunicator(text).ReadMessage());
63-
}
64-
65-
[Theory]
66-
[InlineData("{}")]
67-
[InlineData("""{ "message": null }""")]
68-
public void ThrowsWhenTheMessageMemberIsMissing(string json)
69-
{
70-
Assert.Throws<InvalidDataException>(() => MakeRawCommunicator(json).ReadMessage());
71-
}
72-
73-
[Fact]
74-
public void ThrowsWhenTheBodyIsNotJson()
75-
{
76-
Assert.Throws<InvalidDataException>(() => MakeRawCommunicator("not json").ReadMessage());
77-
}
78-
79-
// The browser sends a lowercase member name.
80-
[Fact]
81-
public void MemberNameIsCaseInsensitive()
82-
{
83-
Assert.Equal("C edge", MakeRawCommunicator("""{ "Message": "C edge" }""").ReadMessage());
84-
}
85-
86-
87-
[Fact]
88-
public void ThrowsEndOfStreamWhenStreamIsEmpty()
89-
{
90-
var communicator = MakeCommunicator(new MemoryStream());
91-
92-
Assert.Throws<EndOfStreamException>(() => communicator.ReadMessage());
93-
}
94-
95-
[Fact]
96-
public void ThrowsEndOfStreamWhenLengthPrefixIsIncomplete()
97-
{
98-
var communicator = MakeCommunicator(new MemoryStream(new byte[] { 0x01, 0x02 }));
99-
100-
Assert.Throws<EndOfStreamException>(() => communicator.ReadMessage());
101-
}
102-
}
103-
}
1+
using System;
2+
using System.IO;
3+
using System.Text;
4+
using System.Text.Json;
5+
using BrowserGuard;
6+
using Xunit;
7+
8+
namespace BrowserGuard.Tests
9+
{
10+
public class ReadMessageTests
11+
{
12+
// The browser wraps the command in an object, because
13+
// runtime.sendNativeMessage does not accept a bare string.
14+
static MessageCommunicator MakeCommunicator(string text)
15+
{
16+
return MakeRawCommunicator(JsonSerializer.Serialize(new { message = text }));
17+
}
18+
19+
static MessageCommunicator MakeRawCommunicator(string json)
20+
{
21+
var body = Encoding.UTF8.GetBytes(json);
22+
var stream = new MemoryStream();
23+
stream.Write(BitConverter.GetBytes((uint)body.Length), 0, 4);
24+
stream.Write(body, 0, body.Length);
25+
stream.Position = 0;
26+
return new MessageCommunicator(stream, new MemoryStream());
27+
}
28+
29+
static MessageCommunicator MakeCommunicator(Stream input)
30+
{
31+
return new MessageCommunicator(input, new MemoryStream());
32+
}
33+
34+
[Fact]
35+
public void ParsesCommandAndPath()
36+
{
37+
var command = MakeCommunicator("C").ReadMessage();
38+
39+
Assert.Equal("C", command);
40+
}
41+
42+
[Fact]
43+
public void ParsesJsonEncodedWindowsPath()
44+
{
45+
var command = MakeCommunicator(@"S").ReadMessage();
46+
47+
Assert.Equal("S", command);
48+
}
49+
50+
[Fact]
51+
public void TrimsSurroundingWhitespace()
52+
{
53+
var command = MakeCommunicator(" C \r\n").ReadMessage();
54+
55+
Assert.Equal("C", command);
56+
}
57+
58+
[Theory]
59+
[InlineData("")]
60+
public void ThrowsFormatExceptionWhenTooShort(string text)
61+
{
62+
Assert.Throws<InvalidDataException>(() => MakeCommunicator(text).ReadMessage());
63+
}
64+
65+
[Theory]
66+
[InlineData("{}")]
67+
[InlineData("""{ "message": null }""")]
68+
public void ThrowsWhenTheMessageMemberIsMissing(string json)
69+
{
70+
Assert.Throws<InvalidDataException>(() => MakeRawCommunicator(json).ReadMessage());
71+
}
72+
73+
[Fact]
74+
public void ThrowsWhenTheBodyIsNotJson()
75+
{
76+
Assert.Throws<InvalidDataException>(() => MakeRawCommunicator("not json").ReadMessage());
77+
}
78+
79+
// The browser sends a lowercase member name.
80+
[Fact]
81+
public void MemberNameIsCaseInsensitive()
82+
{
83+
Assert.Equal("C edge", MakeRawCommunicator("""{ "Message": "C edge" }""").ReadMessage());
84+
}
85+
86+
87+
[Fact]
88+
public void ThrowsEndOfStreamWhenStreamIsEmpty()
89+
{
90+
var communicator = MakeCommunicator(new MemoryStream());
91+
92+
Assert.Throws<EndOfStreamException>(() => communicator.ReadMessage());
93+
}
94+
95+
[Fact]
96+
public void ThrowsEndOfStreamWhenLengthPrefixIsIncomplete()
97+
{
98+
var communicator = MakeCommunicator(new MemoryStream(new byte[] { 0x01, 0x02 }));
99+
100+
Assert.Throws<EndOfStreamException>(() => communicator.ReadMessage());
101+
}
102+
}
103+
}

0 commit comments

Comments
 (0)