// Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; using Newtonsoft.Json.Linq; using Xunit; namespace Microsoft.DotNet.ProjectModel.Server.Tests { public static class DthMessageExtension { public static JObject RetrieveDependency(this DthMessage message, string dependencyName) { Assert.NotNull(message); Assert.Equal(MessageTypes.Dependencies, message.MessageType); var payload = message.Payload as JObject; Assert.NotNull(payload); var dependency = payload[MessageTypes.Dependencies][dependencyName] as JObject; Assert.NotNull(dependency); Assert.Equal(dependencyName, dependency["Name"].Value()); return dependency; } public static DthMessage EnsureNotContainDependency(this DthMessage message, string dependencyName) { Assert.NotNull(message); Assert.Equal(MessageTypes.Dependencies, message.MessageType); var payload = message.Payload as JObject; Assert.NotNull(payload); Assert.True(payload[MessageTypes.Dependencies][dependencyName] == null, $"Unexpected dependency {dependencyName} exists."); return message; } public static JObject RetrieveDependencyDiagnosticsCollection(this DthMessage message) { Assert.NotNull(message); Assert.Equal(MessageTypes.DependencyDiagnostics, message.MessageType); var payload = message.Payload as JObject; Assert.NotNull(payload); return payload; } public static T RetrievePayloadAs(this DthMessage message) where T : JToken { Assert.NotNull(message); AssertType(message.Payload, "Payload"); return (T)message.Payload; } /// /// Throws if the message is not generated in communication between given server and client /// public static DthMessage EnsureSource(this DthMessage message, DthTestServer server, DthTestClient client) { if (message.HostId != server.HostId) { throw new Exception($"{nameof(message.HostId)} doesn't match the one of server. Expected {server.HostId} but actually {message.HostId}."); } return message; } public static void AssertType(object obj, string name) { Assert.True(obj is T, $"{name} is not of type {typeof(T).Name}."); } } }