//
//
//
//
// $Revision$
//
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using NUnit.Framework;
namespace ICSharpCode.Core.Tests.AddInTreeTests.Tests
{
[TestFixture]
public class AddInTreeLoadingTests
{
#region AddIn node tests
[Test]
public void TestEmptyAddInTreeLoading()
{
string addInText = @"";
AddIn addIn = AddIn.Load(new StringReader(addInText));
}
[Test]
public void TestAddInProperties()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(addIn.Properties["name"], "SharpDevelop Core");
Assert.AreEqual(addIn.Properties["author"], "Mike Krueger");
Assert.AreEqual(addIn.Properties["copyright"], "GPL");
Assert.AreEqual(addIn.Properties["url"], "http://www.icsharpcode.net");
Assert.AreEqual(addIn.Properties["description"], "SharpDevelop core module");
Assert.AreEqual(addIn.Properties["version"], "1.0.0");
}
#endregion
#region Runtime section tests
[Test]
public void TestEmtpyRuntimeSection()
{
string addInText = @"";
AddIn addIn = AddIn.Load(new StringReader(addInText));
}
[Test]
public void TestEmtpyRuntimeSection2()
{
string addInText = @" ";
AddIn addIn = AddIn.Load(new StringReader(addInText));
}
[Test]
public void TestRuntimeSectionImport()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(1, addIn.Runtimes.Count);
Assert.AreEqual(addIn.Runtimes[0].Assembly, "Test.dll");
}
[Test]
public void TestRuntimeSectionComplexImport()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(1, addIn.Runtimes.Count);
Assert.AreEqual(addIn.Runtimes[0].Assembly, "../bin/SharpDevelop.Base.dll");
Assert.AreEqual(addIn.Runtimes[0].DefinedDoozers.Count, 2);
Assert.AreEqual(addIn.Runtimes[0].DefinedDoozers[0].Name, "MyDoozer");
Assert.AreEqual(addIn.Runtimes[0].DefinedDoozers[0].ClassName, "ICSharpCode.Core.ClassDoozer");
Assert.AreEqual(addIn.Runtimes[0].DefinedDoozers[1].Name, "Test");
Assert.AreEqual(addIn.Runtimes[0].DefinedDoozers[1].ClassName, "ICSharpCode.Core.ClassDoozer2");
Assert.AreEqual(addIn.Runtimes[0].DefinedConditionEvaluators.Count, 2);
Assert.AreEqual(addIn.Runtimes[0].DefinedConditionEvaluators[0].Name, "MyCompare");
Assert.AreEqual(addIn.Runtimes[0].DefinedConditionEvaluators[0].ClassName, "ICSharpCode.Core.CompareCondition");
Assert.AreEqual(addIn.Runtimes[0].DefinedConditionEvaluators[1].Name, "Condition2");
Assert.AreEqual(addIn.Runtimes[0].DefinedConditionEvaluators[1].ClassName, "Condition2Class");
}
#endregion
#region Path section tests
[Test]
public void TestEmptyPathSection()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(3, addIn.Paths.Count);
Assert.IsNotNull(addIn.Paths["/Path1"]);
Assert.IsNotNull(addIn.Paths["/Path2"]);
Assert.IsNotNull(addIn.Paths["/Path1/SubPath"]);
}
[Test]
public void TestSimpleCodon()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(1, addIn.Paths.Count);
Assert.IsNotNull(addIn.Paths["/Path1"]);
List codons = addIn.Paths["/Path1"].Codons.ToList();
Assert.AreEqual(1, codons.Count);
Assert.AreEqual("Simple", codons[0].Name);
Assert.AreEqual("Simple", codons[0].Id);
Assert.AreEqual("a", codons[0].Properties["attr"]);
Assert.AreEqual("b", codons[0].Properties["attr2"]);
}
[Test]
public void TestSubCodons()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(2, addIn.Paths.Count);
Assert.IsNotNull(addIn.Paths["/Path1"]);
List codons1 = addIn.Paths["/Path1"].Codons.ToList();
Assert.AreEqual(1, codons1.Count);
Assert.AreEqual("Sub", codons1[0].Name);
Assert.AreEqual("Path2", codons1[0].Id);
Assert.IsNotNull(addIn.Paths["/Path1/Path2"]);
List codons2 = addIn.Paths["/Path1/Path2"].Codons.ToList();
Assert.AreEqual(1, codons2.Count);
Assert.AreEqual("Codon2", codons2[0].Name);
Assert.AreEqual("Sub2", codons2[0].Id);
}
[Test]
public void TestSubCodonsWithCondition()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(2, addIn.Paths.Count);
Assert.IsNotNull(addIn.Paths["/Path1"]);
List codons1 = addIn.Paths["/Path1"].Codons.ToList();
Assert.AreEqual(1, codons1.Count);
Assert.AreEqual("Sub", codons1[0].Name);
Assert.AreEqual("Path2", codons1[0].Id);
Assert.AreEqual(1, codons1[0].Conditions.Length);
Assert.IsNotNull(addIn.Paths["/Path1/Path2"]);
List codons2 = addIn.Paths["/Path1/Path2"].Codons.ToList();
Assert.AreEqual(1, codons2.Count);
Assert.AreEqual("Codon2", codons2[0].Name);
Assert.AreEqual("Sub2", codons2[0].Id);
Assert.AreEqual(0, codons2[0].Conditions.Length);
}
[Test]
public void TestSimpleCondition()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(1, addIn.Paths.Count, "Paths != 1");
ExtensionPath path = addIn.Paths["/Path1"];
Assert.IsNotNull(path);
Codon codon = path.Codons.Single();
Assert.AreEqual("Simple", codon.Name);
Assert.AreEqual("Simple", codon.Id);
Assert.AreEqual("a", codon["attr"]);
Assert.AreEqual("b", codon["attr2"]);
// Test for condition.
Assert.AreEqual(1, codon.Conditions.Length);
Condition condition = codon.Conditions[0] as Condition;
Assert.IsNotNull(condition);
Assert.AreEqual("Equal", condition.Name);
Assert.AreEqual("a", condition["string"]);
Assert.AreEqual("b", condition["equal"]);
}
[Test]
public void TestStackedCondition()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(1, addIn.Paths.Count);
ExtensionPath path = addIn.Paths["/Path1"];
Assert.IsNotNull(path);
Assert.AreEqual(3, path.Codons.Count());
Codon codon = path.Codons.ElementAt(0);
Assert.AreEqual("Simple", codon.Name);
Assert.AreEqual("Simple", codon.Id);
Assert.AreEqual("a", codon["attr"]);
Assert.AreEqual("b", codon["attr2"]);
// Test for condition
Assert.AreEqual(2, codon.Conditions.Length);
Condition condition = codon.Conditions[1] as Condition;
Assert.IsNotNull(condition);
Assert.AreEqual("Equal", condition.Name);
Assert.AreEqual("a", condition["string"]);
Assert.AreEqual("b", condition["equal"]);
condition = codon.Conditions[0] as Condition;
Assert.IsNotNull(condition);
Assert.AreEqual("StackedCondition", condition.Name);
Assert.AreEqual("1", condition["string"]);
Assert.AreEqual("2", condition["equal"]);
codon = path.Codons.ElementAt(1);
Assert.AreEqual(1, codon.Conditions.Length);
condition = codon.Conditions[0] as Condition;
Assert.IsNotNull(condition);
Assert.AreEqual("Equal", condition.Name);
Assert.AreEqual("a", condition["string"]);
Assert.AreEqual("b", condition["equal"]);
codon = path.Codons.ElementAt(2);
Assert.AreEqual(0, codon.Conditions.Length);
}
[Test]
public void TestComplexCondition()
{
string addInText = @"
";
AddIn addIn = AddIn.Load(new StringReader(addInText));
Assert.AreEqual(1, addIn.Paths.Count);
ExtensionPath path = addIn.Paths["/Path1"];
Assert.IsNotNull(path);
Codon codon = path.Codons.Single();
Assert.AreEqual("Simple", codon.Name);
Assert.AreEqual("Simple", codon.Id);
Assert.AreEqual("a", codon["attr"]);
Assert.AreEqual("b", codon["attr2"]);
// Test for condition.
Assert.AreEqual(1, codon.Conditions.Length);
}
#endregion
}
}