Skip to content

Commit bd6673c

Browse files
Fixed remaining tests
1 parent 8a894e6 commit bd6673c

10 files changed

+123
-8
lines changed

src/Protocol/Serialization/ContractResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Newtonsoft.Json.Serialization;
66
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
77
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
8+
using OmniSharp.Extensions.LanguageServer.Protocol.Server.Capabilities;
89

910
namespace OmniSharp.Extensions.LanguageServer.Protocol.Serialization
1011
{
@@ -55,7 +56,6 @@ protected override JsonProperty CreateProperty(MemberInfo member, MemberSerializ
5556
)
5657
{
5758
property.NullValueHandling = NullValueHandling.Ignore;
58-
// property.DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate;
5959
}
6060

6161
if (property.DeclaringType == typeof(CompletionItem) && property.PropertyType == typeof(CompletionItemKind))

src/Protocol/Serialization/Converters/BooleanNumberStringConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using Newtonsoft.Json;
33
using Newtonsoft.Json.Linq;
44
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
using System;
2+
using System.Reflection;
3+
using Newtonsoft.Json;
4+
using Newtonsoft.Json.Linq;
5+
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
6+
7+
namespace OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters
8+
{
9+
class BooleanOrConverter : JsonConverter
10+
{
11+
private static readonly MethodInfo WriteJsonGenericMethod = typeof(BooleanOrConverter)
12+
.GetTypeInfo()
13+
.GetMethod(nameof(WriteJsonGeneric), BindingFlags.NonPublic | BindingFlags.Static);
14+
private static readonly MethodInfo ReadJsonGenericMethod = typeof(BooleanOrConverter)
15+
.GetTypeInfo()
16+
.GetMethod(nameof(ReadJsonGeneric), BindingFlags.NonPublic | BindingFlags.Static);
17+
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
18+
{
19+
if (value == null) return;
20+
WriteJsonGenericMethod.MakeGenericMethod(value.GetType().GetTypeInfo().GenericTypeArguments[0])
21+
.Invoke(null, new object[] { writer, value, serializer });
22+
}
23+
24+
private static void WriteJsonGeneric<T>(JsonWriter writer, BooleanOr<T> value, JsonSerializer serializer)
25+
{
26+
if (value.IsValue)
27+
{
28+
new JValue(value.Value).WriteTo(writer);
29+
return;
30+
}
31+
32+
if (value.IsBool && value.Bool)
33+
{
34+
new JValue(value.Bool).WriteTo(writer);
35+
return;
36+
}
37+
38+
writer.WriteNull();
39+
}
40+
41+
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
42+
{
43+
var parentType = objectType.GetTypeInfo().GenericTypeArguments[0];
44+
return ReadJsonGenericMethod.MakeGenericMethod(parentType)
45+
.Invoke(null, new object[] { reader, existingValue, serializer });
46+
}
47+
48+
private static BooleanOr<T> ReadJsonGeneric<T>(JsonReader reader, object existingValue, JsonSerializer serializer)
49+
{
50+
if (reader.TokenType == JsonToken.Boolean)
51+
{
52+
return new BooleanOr<T>((bool)reader.Value);
53+
}
54+
55+
if (reader.TokenType == JsonToken.StartObject)
56+
{
57+
return new BooleanOr<T>(JObject.Load(reader).ToObject<T>(serializer));
58+
}
59+
60+
return new BooleanOr<T>();
61+
}
62+
63+
public override bool CanRead => true;
64+
65+
public override bool CanConvert(Type objectType) => objectType.GetTypeInfo().IsGenericType && objectType.GetTypeInfo().GetGenericTypeDefinition() == typeof(BooleanOr<>);
66+
}
67+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System;
2+
using Newtonsoft.Json;
3+
using Newtonsoft.Json.Linq;
4+
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
5+
6+
namespace OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters
7+
{
8+
class BooleanStringConverter : JsonConverter
9+
{
10+
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
11+
{
12+
var v = value as BooleanString?;
13+
if (v.HasValue)
14+
{
15+
new JValue(v.Value.Value).WriteTo(writer);
16+
}
17+
else
18+
{
19+
writer.WriteNull();
20+
}
21+
}
22+
23+
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
24+
{
25+
switch (reader.TokenType)
26+
{
27+
case JsonToken.String:
28+
return new BooleanString((string)reader.Value);
29+
case JsonToken.Boolean:
30+
return new BooleanString((bool)reader.Value);
31+
}
32+
33+
return new BooleanString();
34+
}
35+
36+
public override bool CanRead => true;
37+
38+
public override bool CanConvert(Type objectType) => objectType == typeof(BooleanString);
39+
}
40+
}

src/Protocol/Serialization/Serializer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ private static void AddOrReplaceConverters(ICollection<JsonConverter> converters
6666
ReplaceConverter(converters, new StringOrMarkupContentConverter());
6767
ReplaceConverter(converters, new TextDocumentSyncConverter());
6868
ReplaceConverter(converters, new BooleanNumberStringConverter());
69+
ReplaceConverter(converters, new BooleanStringConverter());
70+
ReplaceConverter(converters, new BooleanOrConverter());
6971
ReplaceConverter(converters, new MarkedStringsOrMarkupContentConverter());
7072
}
7173

test/Lsp.Tests/Capabilities/Server/ServerCapabilitiesTests_$SimpleTest.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,7 @@
5353
},
5454
"experimental": {
5555
"abc": "123"
56-
}
57-
}
56+
},
57+
"typeDefinitionProvider": null,
58+
"implementationProvider": null
59+
}

test/Lsp.Tests/Models/InitializeParamsTests_$SimpleTest.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,7 @@
7878
"abc": "test"
7979
}
8080
},
81-
"trace": "verbose"
81+
"trace": "verbose",
82+
"workspaceFolders": null
8283
}
84+

test/Lsp.Tests/Models/InitializeResultTests_$SimpleTest.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{
1+
{
22
"capabilities": {
33
"textDocumentSync": {
44
"openClose": true,
@@ -54,6 +54,8 @@
5454
},
5555
"experimental": {
5656
"abc": "123"
57-
}
57+
},
58+
"typeDefinitionProvider": null,
59+
"implementationProvider": null
5860
}
59-
}
61+
}

0 commit comments

Comments
 (0)