Skip to content

Commit 75feb2f

Browse files
authored
Add operator == and != for DocumentUri (#78756)
Razor uses these operators on Uri and will expect the same behavior on DocumentUri when it switches to using that.
1 parent e6367e0 commit 75feb2f

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/LanguageServer/Protocol/Protocol/DocumentUri.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,15 @@ public override int GetHashCode()
136136
return this.ParsedUri.GetHashCode();
137137
}
138138
}
139+
140+
public static bool operator ==(DocumentUri? uri1, DocumentUri? uri2)
141+
=> (uri1, uri2) switch
142+
{
143+
(null, null) => true,
144+
(null, _) or (_, null) => false,
145+
_ => uri1.Equals(uri2)
146+
};
147+
148+
public static bool operator !=(DocumentUri? uri1, DocumentUri? uri2)
149+
=> !(uri1 == uri2);
139150
}

src/LanguageServer/ProtocolUnitTests/UriTests.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,23 @@ public async Task TestOpenDocumentWithInvalidUri(bool mutatingLspWorkspace, stri
352352
Assert.Equal("hello", (await document!.GetTextAsync()).ToString());
353353
}
354354

355+
[Theory]
356+
[InlineData(true, null, null)]
357+
[InlineData(false, "file://c:\\valid", null)]
358+
[InlineData(false, null, "file://c:\\valid")]
359+
[InlineData(true, "file://c:\\valid", "file://c:\\valid")]
360+
[InlineData(true, "file://c:\\valid", "file:///c:/valid")]
361+
[InlineData(true, "file://c:\\valid", "file://c:\\VALID")]
362+
[InlineData(false, "file://c:\\valid", "file://c:\\valid2")]
363+
public void TestUriEquality(bool areEqual, string? uriString1, string? uriString2)
364+
{
365+
var documentUri1 = uriString1 != null ? new DocumentUri(uriString1) : null;
366+
var documentUri2 = uriString2 != null ? new DocumentUri(uriString2) : null;
367+
368+
Assert.True(areEqual == (documentUri1 == documentUri2));
369+
Assert.True(areEqual != (documentUri1 != documentUri2));
370+
}
371+
355372
private sealed record class ResolvedDocumentInfo(string WorkspaceKind, string ProjectLanguage);
356373
private sealed record class CustomResolveParams([property: JsonPropertyName("textDocument")] LSP.TextDocumentIdentifier TextDocument);
357374

0 commit comments

Comments
 (0)