Skip to content
This repository was archived by the owner on Feb 23, 2021. It is now read-only.

Commit ff6cd44

Browse files
author
N. Taylor Mullen
committed
Add PluginProtocol message type.
- Returns the current Protocol. - Added a test to validate that the Protocol is being returned. #13
1 parent c82d814 commit ff6cd44

4 files changed

Lines changed: 54 additions & 10 deletions

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
6+
namespace Microsoft.AspNet.Tooling.Razor.Models.OutgoingMessages
7+
{
8+
public class PluginProtocolMessage : RazorPluginMessage<string>
9+
{
10+
public PluginProtocolMessage(Version protocol)
11+
: base(messageType: RazorPluginMessageTypes.PluginProtocol, data: protocol.ToString())
12+
{
13+
}
14+
}
15+
}

src/Microsoft.AspNet.Tooling.Razor/RazorPlugin.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ namespace Microsoft.AspNet.Tooling.Razor
1515
{
1616
public class RazorPlugin : IPlugin
1717
{
18+
private static readonly Version Protocol = new Version(1, 0, 0);
1819
private readonly IPluginMessageBroker _messageBroker;
1920

2021
public RazorPlugin(IPluginMessageBroker messageBroker)
@@ -34,17 +35,20 @@ public void ProcessMessage(JObject data, IAssemblyLoadContext assemblyLoadContex
3435
nameof(RazorPluginRequestMessage)));
3536
}
3637

37-
if (message.Data == null)
38-
{
39-
throw new InvalidOperationException(
40-
Resources.FormatValueMustBeProvidedInMessage(
41-
nameof(message.Data),
42-
nameof(RazorPluginRequestMessage)));
43-
}
44-
4538
switch (message.MessageType)
4639
{
40+
case RazorPluginMessageTypes.PluginProtocol:
41+
_messageBroker.SendMessage(new PluginProtocolMessage(Protocol));
42+
break;
4743
case RazorPluginMessageTypes.ResolveTagHelperDescriptors:
44+
if (message.Data == null)
45+
{
46+
throw new InvalidOperationException(
47+
Resources.FormatValueMustBeProvidedInMessage(
48+
nameof(message.Data),
49+
RazorPluginMessageTypes.ResolveTagHelperDescriptors));
50+
}
51+
4852
var messageData = message.Data.ToObject<ResolveTagHelperDescriptorsRequestData>();
4953

5054
if (messageData.AssemblyName == null)

src/Microsoft.AspNet.Tooling.Razor/RazorPluginMessageTypes.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ namespace Microsoft.AspNet.Tooling.Razor
55
{
66
public static class RazorPluginMessageTypes
77
{
8-
public const string ResolveTagHelperDescriptors = "ResolveTagHelperDescriptors";
8+
public const string ResolveTagHelperDescriptors = nameof(ResolveTagHelperDescriptors);
9+
public const string PluginProtocol = nameof(PluginProtocol);
910
}
1011
}

test/Microsoft.AspNet.Tooling.Razor.Tests/RazorPluginTest.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ public void ProcessMessage_ThrowsWhenNoData()
5858
var messageBroker = new TestPluginMessageBroker();
5959
var assemblyLoadContext = new TestAssemblyLoadContext();
6060
var plugin = new RazorPlugin(messageBroker);
61-
var expectedMessage = "'Data' must be provided for a 'RazorPluginRequestMessage' message.";
61+
var expectedMessage = "'Data' must be provided for a '" +
62+
RazorPluginMessageTypes.ResolveTagHelperDescriptors + "' message.";
6263

6364
// Act & Assert
6465
var error = Assert.Throws<InvalidOperationException>(
@@ -130,6 +131,29 @@ public void ProcessMessage_ResolveTagHelperDescriptors_ThrowsWhenNoSourceLocatio
130131
Assert.Equal(expectedMessage, error.Message, StringComparer.Ordinal);
131132
}
132133

134+
[Fact]
135+
public void ProcessMessage_PluginProtocol_ResolvesCurrentProtocol()
136+
{
137+
// Arrange
138+
var message = new JObject
139+
{
140+
{ "MessageType", RazorPluginMessageTypes.PluginProtocol },
141+
};
142+
PluginProtocolMessage responseMessage = null;
143+
var messageBroker = new TestPluginMessageBroker(data => responseMessage = (PluginProtocolMessage)data);
144+
var assemblyLoadContext = new TestAssemblyLoadContext();
145+
var plugin = new RazorPlugin(messageBroker);
146+
147+
// Act
148+
plugin.ProcessMessage(message, assemblyLoadContext);
149+
150+
// Assert
151+
Assert.NotNull(responseMessage);
152+
Assert.Equal(RazorPluginMessageTypes.PluginProtocol, responseMessage.MessageType, StringComparer.Ordinal);
153+
var responseData = responseMessage.Data;
154+
Assert.Equal("1.0.0", responseData, StringComparer.Ordinal);
155+
}
156+
133157
[Fact]
134158
public void ProcessMessage_ResolveTagHelperDescriptors_ResolvesTagHelperDescriptors()
135159
{

0 commit comments

Comments
 (0)