Add two tests for project model server
This commit is contained in:
parent
60b23d5115
commit
9cec3e3152
4 changed files with 153 additions and 8 deletions
|
@ -0,0 +1,13 @@
|
|||
using System;
|
||||
|
||||
namespace Misc.DthTestProjects.SimpleConsoleApp
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public int Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Hello, world.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"dependencies": {},
|
||||
"frameworks": {
|
||||
"netcoreapp1.0": {
|
||||
"imports": "dnxcore50",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"type": "platform",
|
||||
"version": "1.0.0-rc2-23931"
|
||||
},
|
||||
"Newtonsoft.Json": "8.0.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -467,9 +467,111 @@ namespace Microsoft.DotNet.ProjectModel.Server.Tests
|
|||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RemovePackageDependencyFromProjectJson()
|
||||
{
|
||||
// Remove a package dependency from project.json and then request refreshing dependency before
|
||||
// restore.
|
||||
|
||||
var appName = "EmptyNetCoreApp";
|
||||
var projectPath = _testAssetsManager.CreateTestInstance(appName)
|
||||
.WithLockFiles()
|
||||
.TestRoot;
|
||||
|
||||
using (var server = new DthTestServer(_loggerFactory))
|
||||
using (var client = new DthTestClient(server, _loggerFactory))
|
||||
{
|
||||
client.Initialize(projectPath);
|
||||
|
||||
client.DrainAllMessages()
|
||||
.AssertDoesNotContain(MessageTypes.Error)
|
||||
.RetrieveSingleMessage(MessageTypes.Dependencies)
|
||||
.RetrieveDependency(appName)
|
||||
.RetrievePropertyAs<JArray>("Dependencies")
|
||||
.AssertJArrayCount(2);
|
||||
|
||||
var projectFilePath = Path.Combine(projectPath, Project.FileName);
|
||||
var projectJson = JsonConvert.DeserializeObject<JObject>(File.ReadAllText(projectFilePath));
|
||||
|
||||
// Remove newtonsoft.json dependency
|
||||
var dependencies = projectJson["frameworks"]["netcoreapp1.0"]["dependencies"] as JObject;
|
||||
dependencies.Remove("Newtonsoft.Json");
|
||||
|
||||
File.WriteAllText(projectFilePath, JsonConvert.SerializeObject(projectJson));
|
||||
|
||||
client.SendPayLoad(projectPath, MessageTypes.RefreshDependencies);
|
||||
|
||||
var afterDependencies = client.DrainTillFirst(MessageTypes.Dependencies);
|
||||
afterDependencies.RetrieveDependency(appName)
|
||||
.RetrievePropertyAs<JArray>("Dependencies")
|
||||
.AssertJArrayCount(1)
|
||||
.RetrieveArraryElementAs<JObject>(0)
|
||||
.AssertProperty("Name", "Microsoft.NETCore.App");
|
||||
afterDependencies.RetrieveDependency("Newtonsoft.Json");
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RemoveMSBuildDependencyFromProjectJson()
|
||||
{
|
||||
// Remove a msbuild project dependency from project.json and then request refreshing dependency before
|
||||
// restore.
|
||||
|
||||
var tam = new TestAssetsManager(
|
||||
Path.Combine(RepoRoot, "TestAssets", "ProjectModelServer", "MSBuildReferencesProjects"));
|
||||
|
||||
// var appName = "EmptyNetCoreApp";
|
||||
var projectPath = tam.CreateTestInstance("ValidCase01").WithLockFiles().TestRoot;
|
||||
projectPath = Path.Combine(projectPath, "src", "MainApp");
|
||||
|
||||
using (var server = new DthTestServer(_loggerFactory))
|
||||
using (var client = new DthTestClient(server, _loggerFactory))
|
||||
{
|
||||
client.Initialize(projectPath);
|
||||
|
||||
client.DrainAllMessages()
|
||||
.AssertDoesNotContain(MessageTypes.Error)
|
||||
.RetrieveSingleMessage(MessageTypes.Dependencies)
|
||||
.RetrieveDependency("MainApp")
|
||||
.RetrievePropertyAs<JArray>("Dependencies")
|
||||
.AssertJArrayContains<JObject>(dep => dep["Name"].Value<string>() == "ClassLibrary1")
|
||||
.AssertJArrayContains<JObject>(dep => dep["Name"].Value<string>() == "ClassLibrary2")
|
||||
.AssertJArrayContains<JObject>(dep => dep["Name"].Value<string>() == "ClassLibrary3");
|
||||
|
||||
var projectFilePath = Path.Combine(projectPath, Project.FileName);
|
||||
var projectJson = JsonConvert.DeserializeObject<JObject>(File.ReadAllText(projectFilePath));
|
||||
|
||||
// Remove ClassLibrary2 and ClassLibrary3 dependency
|
||||
var dependencies = projectJson["frameworks"]["net46"]["dependencies"] as JObject;
|
||||
dependencies.Remove("ClassLibrary2");
|
||||
dependencies.Remove("ClassLibrary3");
|
||||
|
||||
File.WriteAllText(projectFilePath, JsonConvert.SerializeObject(projectJson));
|
||||
|
||||
client.SendPayLoad(projectPath, MessageTypes.RefreshDependencies);
|
||||
|
||||
var afterDependencies = client.DrainTillFirst(MessageTypes.Dependencies);
|
||||
afterDependencies.RetrieveDependency("MainApp")
|
||||
.RetrievePropertyAs<JArray>("Dependencies")
|
||||
.AssertJArrayNotContains<JObject>(dep => dep["Name"].Value<string>() == "ClassLibrary2")
|
||||
.AssertJArrayNotContains<JObject>(dep => dep["Name"].Value<string>() == "ClassLibrary3");
|
||||
|
||||
afterDependencies.RetrieveDependency("ClassLibrary2");
|
||||
afterDependencies.RetrieveDependency("ClassLibrary3");
|
||||
}
|
||||
}
|
||||
|
||||
private static string NormalizePathString(string original)
|
||||
{
|
||||
return original.Replace('/', Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar);
|
||||
}
|
||||
|
||||
private static void PrintAllMessages(IEnumerable<DthMessage> messages)
|
||||
{
|
||||
foreach (var message in messages)
|
||||
{
|
||||
Console.WriteLine($"{message.MessageType} => {message.Payload.ToString()}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,6 +70,21 @@ namespace Microsoft.DotNet.ProjectModel.Server.Tests
|
|||
return array;
|
||||
}
|
||||
|
||||
public static JArray AssertJArrayNotContains<T>(this JArray array, Func<T, bool> critiera)
|
||||
{
|
||||
foreach (var element in array)
|
||||
{
|
||||
var value = element.Value<T>();
|
||||
|
||||
if (critiera(value))
|
||||
{
|
||||
Assert.True(false, "JArray contains unexpected element.");
|
||||
}
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
public static T RetrieveArraryElementAs<T>(this JArray json, int index)
|
||||
where T : JToken
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue