Skip to content

Commit 61ac2ba

Browse files
moved ClientCapabilityProviderTests to it's own file
1 parent 747e1bb commit 61ac2ba

File tree

2 files changed

+129
-125
lines changed

2 files changed

+129
-125
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Reflection;
5+
using FluentAssertions;
6+
using NSubstitute;
7+
using OmniSharp.Extensions.JsonRpc;
8+
using OmniSharp.Extensions.LanguageServer;
9+
using OmniSharp.Extensions.LanguageServer.Capabilities.Client;
10+
using OmniSharp.Extensions.LanguageServer.Models;
11+
using Xunit;
12+
using HandlerCollection = OmniSharp.Extensions.LanguageServer.HandlerCollection;
13+
14+
namespace Lsp.Tests
15+
{
16+
public class ClientCapabilityProviderTests
17+
{
18+
private static readonly Type[] Capabilities = {
19+
typeof(CompletionCapability),
20+
typeof(HoverCapability),
21+
typeof(SignatureHelpCapability),
22+
typeof(ReferencesCapability),
23+
typeof(DocumentHighlightCapability),
24+
typeof(DocumentSymbolCapability),
25+
typeof(DocumentFormattingCapability),
26+
typeof(DocumentRangeFormattingCapability),
27+
typeof(DocumentOnTypeFormattingCapability),
28+
typeof(DefinitionCapability),
29+
typeof(CodeActionCapability),
30+
typeof(CodeLensCapability),
31+
typeof(DocumentLinkCapability),
32+
typeof(RenameCapability),
33+
typeof(WorkspaceSymbolCapability),
34+
typeof(ExecuteCommandCapability),
35+
};
36+
37+
[Theory, MemberData(nameof(AllowSupportedCapabilities))]
38+
public void Should_AllowSupportedCapabilities(IJsonRpcHandler handler, object instance)
39+
{
40+
var textDocumentSyncHandler = TextDocumentSyncHandlerExtensions.With(DocumentSelector.ForPattern("**/*.cs"));
41+
42+
var collection = new HandlerCollection { textDocumentSyncHandler, handler };
43+
var provider = new ClientCapabilityProvider(collection);
44+
45+
HasHandler(provider, instance).Should().BeTrue();
46+
}
47+
48+
public static IEnumerable<object[]> AllowSupportedCapabilities()
49+
{
50+
return GetItems(Capabilities, type => {
51+
var handlerType = GetHandlerType(type);
52+
var handler = Substitute.For(new Type[] { handlerType }, new object[0]);
53+
return new[] { handler, Activator.CreateInstance(typeof(Supports<>).MakeGenericType(type), true, Activator.CreateInstance(type)) };
54+
});
55+
}
56+
57+
[Theory, MemberData(nameof(DisallowUnsupportedCapabilities))]
58+
public void Should_DisallowUnsupportedCapabilities(IJsonRpcHandler handler, object instance)
59+
{
60+
var textDocumentSyncHandler = TextDocumentSyncHandlerExtensions.With(DocumentSelector.ForPattern("**/*.cs"));
61+
62+
var collection = new HandlerCollection { textDocumentSyncHandler, handler };
63+
var provider = new ClientCapabilityProvider(collection);
64+
65+
HasHandler(provider, instance).Should().BeFalse();
66+
}
67+
68+
public static IEnumerable<object[]> DisallowUnsupportedCapabilities()
69+
{
70+
return GetItems(Capabilities, type => {
71+
var handlerType = GetHandlerType(type);
72+
var handler = Substitute.For(new Type[] { handlerType }, new object[0]);
73+
return new[] { handler, Activator.CreateInstance(typeof(Supports<>).MakeGenericType(type), false) };
74+
});
75+
}
76+
77+
[Theory, MemberData(nameof(DisallowNullSupportsCapabilities))]
78+
public void Should_DisallowNullSupportedCapabilities(IJsonRpcHandler handler, object instance)
79+
{
80+
var textDocumentSyncHandler = TextDocumentSyncHandlerExtensions.With(DocumentSelector.ForPattern("**/*.cs"));
81+
82+
var collection = new HandlerCollection { textDocumentSyncHandler, handler };
83+
var provider = new ClientCapabilityProvider(collection);
84+
85+
HasHandler(provider, instance).Should().BeFalse();
86+
}
87+
88+
public static IEnumerable<object[]> DisallowNullSupportsCapabilities()
89+
{
90+
return GetItems(Capabilities, type => {
91+
var handlerType = GetHandlerType(type);
92+
var handler = Substitute.For(new Type[] { handlerType }, new object[0]);
93+
return new[] { handler, Activator.CreateInstance(typeof(Supports<>).MakeGenericType(type), true) };
94+
});
95+
}
96+
97+
private static bool HasHandler(ClientCapabilityProvider provider, object instance)
98+
{
99+
return (bool)typeof(ClientCapabilityProviderTests).GetTypeInfo()
100+
.GetMethod(nameof(GenericHasHandler), BindingFlags.Static | BindingFlags.NonPublic)
101+
.MakeGenericMethod(instance.GetType().GetTypeInfo().GetGenericArguments()[0]).Invoke(null, new[] { provider, instance });
102+
}
103+
104+
private static bool HasHandler(ClientCapabilityProvider provider, Type type)
105+
{
106+
return (bool)typeof(ClientCapabilityProviderTests).GetTypeInfo()
107+
.GetMethod(nameof(GenericHasHandler), BindingFlags.Static | BindingFlags.NonPublic)
108+
.MakeGenericMethod(type).Invoke(null, new object[] { provider, null });
109+
}
110+
111+
private static bool GenericHasHandler<T>(ClientCapabilityProvider provider, Supports<T> supports)
112+
where T : DynamicCapability, ConnectedCapability<IJsonRpcHandler>
113+
{
114+
return provider.HasHandler(supports);
115+
}
116+
117+
private static IEnumerable<object[]> GetItems<T>(IEnumerable<T> types, Func<T, IEnumerable<object>> func)
118+
{
119+
return types.Select(x => func(x).ToArray());
120+
}
121+
122+
private static Type GetHandlerType(Type type)
123+
{
124+
return type.GetTypeInfo().ImplementedInterfaces
125+
.Single(x => x.GetTypeInfo().IsGenericType && x.GetTypeInfo().GetGenericTypeDefinition() == typeof(ConnectedCapability<>))
126+
.GetTypeInfo().GetGenericArguments()[0];
127+
}
128+
}
129+
}

test/Lsp.Tests/TestLoggerFactory.cs

Lines changed: 0 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,9 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Reflection;
5-
using FluentAssertions;
62
using Microsoft.Extensions.Logging;
7-
using NSubstitute;
8-
using OmniSharp.Extensions.JsonRpc;
9-
using OmniSharp.Extensions.LanguageServer;
103
using OmniSharp.Extensions.LanguageServer.Abstractions;
11-
using OmniSharp.Extensions.LanguageServer.Capabilities.Client;
12-
using OmniSharp.Extensions.LanguageServer.Models;
134
using Serilog;
145
using Serilog.Extensions.Logging;
15-
using Xunit;
166
using Xunit.Abstractions;
17-
using HandlerCollection = OmniSharp.Extensions.LanguageServer.HandlerCollection;
187
using ILogger = Microsoft.Extensions.Logging.ILogger;
198

209
namespace Lsp.Tests
@@ -42,118 +31,4 @@ void ILoggerFactory.AddProvider(ILoggerProvider provider) { }
4231

4332
void IDisposable.Dispose() { }
4433
}
45-
46-
public class ClientCapabilityProviderTests
47-
{
48-
private static Type[] TextDocumentCapabilities = {
49-
typeof(CompletionCapability),
50-
typeof(HoverCapability),
51-
typeof(SignatureHelpCapability),
52-
typeof(ReferencesCapability),
53-
typeof(DocumentHighlightCapability),
54-
typeof(DocumentSymbolCapability),
55-
typeof(DocumentFormattingCapability),
56-
typeof(DocumentRangeFormattingCapability),
57-
typeof(DocumentOnTypeFormattingCapability),
58-
typeof(DefinitionCapability),
59-
typeof(CodeActionCapability),
60-
typeof(CodeLensCapability),
61-
typeof(DocumentLinkCapability),
62-
typeof(RenameCapability),
63-
typeof(WorkspaceSymbolCapability),
64-
typeof(ExecuteCommandCapability),
65-
};
66-
67-
[Theory, MemberData(nameof(AllowSupportedCapabilities))]
68-
public void Should_AllowSupportedCapabilities(IJsonRpcHandler handler, object instance)
69-
{
70-
var textDocumentSyncHandler = TextDocumentSyncHandlerExtensions.With(DocumentSelector.ForPattern("**/*.cs"));
71-
72-
var collection = new HandlerCollection { textDocumentSyncHandler, handler };
73-
var provider = new ClientCapabilityProvider(collection);
74-
75-
HasHandler(provider, instance).Should().BeTrue();
76-
}
77-
78-
public static IEnumerable<object[]> AllowSupportedCapabilities()
79-
{
80-
return GetItems(TextDocumentCapabilities, type => {
81-
var handlerType = GetHandlerType(type);
82-
var handler = Substitute.For(new Type[] { handlerType }, new object[0]);
83-
return new[] { handler, Activator.CreateInstance(typeof(Supports<>).MakeGenericType(type), true, Activator.CreateInstance(type)) };
84-
});
85-
}
86-
87-
[Theory, MemberData(nameof(DisallowUnsupportedCapabilities))]
88-
public void Should_DisallowUnsupportedCapabilities(IJsonRpcHandler handler, object instance)
89-
{
90-
var textDocumentSyncHandler = TextDocumentSyncHandlerExtensions.With(DocumentSelector.ForPattern("**/*.cs"));
91-
92-
var collection = new HandlerCollection { textDocumentSyncHandler, handler };
93-
var provider = new ClientCapabilityProvider(collection);
94-
95-
HasHandler(provider, instance).Should().BeFalse();
96-
}
97-
98-
public static IEnumerable<object[]> DisallowUnsupportedCapabilities()
99-
{
100-
return GetItems(TextDocumentCapabilities, type => {
101-
var handlerType = GetHandlerType(type);
102-
var handler = Substitute.For(new Type[] { handlerType }, new object[0]);
103-
return new[] { handler, Activator.CreateInstance(typeof(Supports<>).MakeGenericType(type), false) };
104-
});
105-
}
106-
107-
[Theory, MemberData(nameof(DisallowNullSupportsCapabilities))]
108-
public void Should_DisallowNullSupportedCapabilities(IJsonRpcHandler handler, object instance)
109-
{
110-
var textDocumentSyncHandler = TextDocumentSyncHandlerExtensions.With(DocumentSelector.ForPattern("**/*.cs"));
111-
112-
var collection = new HandlerCollection { textDocumentSyncHandler, handler };
113-
var provider = new ClientCapabilityProvider(collection);
114-
115-
HasHandler(provider, instance).Should().BeFalse();
116-
}
117-
118-
public static IEnumerable<object[]> DisallowNullSupportsCapabilities()
119-
{
120-
return GetItems(TextDocumentCapabilities, type => {
121-
var handlerType = GetHandlerType(type);
122-
var handler = Substitute.For(new Type[] { handlerType }, new object[0]);
123-
return new[] { handler, Activator.CreateInstance(typeof(Supports<>).MakeGenericType(type), true) };
124-
});
125-
}
126-
127-
private static bool HasHandler(ClientCapabilityProvider provider, object instance)
128-
{
129-
return (bool)typeof(ClientCapabilityProviderTests).GetTypeInfo()
130-
.GetMethod(nameof(GenericHasHandler), BindingFlags.Static | BindingFlags.NonPublic)
131-
.MakeGenericMethod(instance.GetType().GetTypeInfo().GetGenericArguments()[0]).Invoke(null, new[] { provider, instance });
132-
}
133-
134-
private static bool HasHandler(ClientCapabilityProvider provider, Type type)
135-
{
136-
return (bool)typeof(ClientCapabilityProviderTests).GetTypeInfo()
137-
.GetMethod(nameof(GenericHasHandler), BindingFlags.Static | BindingFlags.NonPublic)
138-
.MakeGenericMethod(type).Invoke(null, new object[] { provider, null });
139-
}
140-
141-
private static bool GenericHasHandler<T>(ClientCapabilityProvider provider, Supports<T> supports)
142-
where T : DynamicCapability, ConnectedCapability<IJsonRpcHandler>
143-
{
144-
return provider.HasHandler(supports);
145-
}
146-
147-
private static IEnumerable<object[]> GetItems<T>(IEnumerable<T> types, Func<T, IEnumerable<object>> func)
148-
{
149-
return types.Select(x => func(x).ToArray());
150-
}
151-
152-
private static Type GetHandlerType(Type type)
153-
{
154-
return type.GetTypeInfo().ImplementedInterfaces
155-
.Single(x => x.GetTypeInfo().IsGenericType && x.GetTypeInfo().GetGenericTypeDefinition() == typeof(ConnectedCapability<>))
156-
.GetTypeInfo().GetGenericArguments()[0];
157-
}
158-
}
15934
}

0 commit comments

Comments
 (0)