From d25cc20a34f1d2b57e33488884b56863887dbbbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Bj=C3=B6rkstr=C3=B6m?= Date: Mon, 22 Jul 2019 00:01:48 +0300 Subject: [PATCH] (GH-159) Fixes BooleanOrConverter - Serialize object type correctly - Fixes #159 --- .../Converters/BooleanOrConverter.cs | 10 ++- .../Lsp.Tests/Models/InitializeResultTests.cs | 43 +++++++++++++ .../InitializeResultTests_$BooleanOrTest.json | 61 +++++++++++++++++++ 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 test/Lsp.Tests/Models/InitializeResultTests_$BooleanOrTest.json diff --git a/src/Protocol/Serialization/Converters/BooleanOrConverter.cs b/src/Protocol/Serialization/Converters/BooleanOrConverter.cs index 590ae63fb..d40476e80 100644 --- a/src/Protocol/Serialization/Converters/BooleanOrConverter.cs +++ b/src/Protocol/Serialization/Converters/BooleanOrConverter.cs @@ -25,7 +25,15 @@ private static void WriteJsonGeneric(JsonWriter writer, BooleanOr value, J { if (value.IsValue) { - new JValue(value.Value).WriteTo(writer); + if (typeof(T).IsValueType) + { + new JValue(value.Value).WriteTo(writer); + } + else + { + serializer.Serialize(writer, value.Value); + } + return; } diff --git a/test/Lsp.Tests/Models/InitializeResultTests.cs b/test/Lsp.Tests/Models/InitializeResultTests.cs index fed883437..c2731eac1 100644 --- a/test/Lsp.Tests/Models/InitializeResultTests.cs +++ b/test/Lsp.Tests/Models/InitializeResultTests.cs @@ -70,5 +70,48 @@ public void SimpleTest(string expected) var deresult = new Serializer(ClientVersion.Lsp3).DeserializeObject(expected); deresult.Should().BeEquivalentTo(model); } + + [Theory, JsonFixture] + public void BooleanOrTest(string expected) + { + var model = new InitializeResult() { + Capabilities = new ServerCapabilities { + CodeActionProvider = new CodeActionOptions { + CodeActionKinds = new [] { + CodeActionKind.QuickFix + } + }, + ColorProvider = new ColorOptions { + DocumentSelector = DocumentSelector.ForPattern("**/*.foo"), + Id = "foo" + }, + DeclarationProvider = new DeclarationOptions { + DocumentSelector = DocumentSelector.ForPattern("**/*.foo"), + Id = "foo" + }, + FoldingRangeProvider = new FoldingRangeOptions { + DocumentSelector = DocumentSelector.ForPattern("**/*.foo"), + Id = "foo" + }, + ImplementationProvider = new ImplementationOptions { + DocumentSelector = DocumentSelector.ForPattern("**/*.foo"), + Id = "foo" + }, + RenameProvider = new RenameOptions { + PrepareProvider = true + }, + TypeDefinitionProvider = new TypeDefinitionOptions { + DocumentSelector = DocumentSelector.ForPattern("**/*.foo"), + Id = "foo" + } + } + }; + var result = Fixture.SerializeObject(model); + + result.Should().Be(expected); + + var deresult = new Serializer(ClientVersion.Lsp3).DeserializeObject(expected); + deresult.Should().BeEquivalentTo(model); + } } } diff --git a/test/Lsp.Tests/Models/InitializeResultTests_$BooleanOrTest.json b/test/Lsp.Tests/Models/InitializeResultTests_$BooleanOrTest.json new file mode 100644 index 000000000..071027e7b --- /dev/null +++ b/test/Lsp.Tests/Models/InitializeResultTests_$BooleanOrTest.json @@ -0,0 +1,61 @@ +{ + "capabilities": { + "hoverProvider": false, + "definitionProvider": false, + "referencesProvider": false, + "documentHighlightProvider": false, + "documentSymbolProvider": false, + "workspaceSymbolProvider": false, + "codeActionProvider": { + "codeActionKinds": [ + "quickfix" + ] + }, + "documentFormattingProvider": false, + "documentRangeFormattingProvider": false, + "renameProvider": { + "prepareProvider": true + }, + "experimental": {}, + "typeDefinitionProvider": { + "id": "foo", + "documentSelector": [ + { + "pattern": "**/*.foo" + } + ] + }, + "implementationProvider": { + "id": "foo", + "documentSelector": [ + { + "pattern": "**/*.foo" + } + ] + }, + "colorProvider": { + "id": "foo", + "documentSelector": [ + { + "pattern": "**/*.foo" + } + ] + }, + "foldingRangeProvider": { + "id": "foo", + "documentSelector": [ + { + "pattern": "**/*.foo" + } + ] + }, + "declarationProvider": { + "id": "foo", + "documentSelector": [ + { + "pattern": "**/*.foo" + } + ] + } + } +}