|
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.IO;
using System.Text;
using NUnit.Framework;
using Microsoft.CSharp;
using CodeDomExpParser;
namespace CodeDomExpParser.TestHarness
{
/// <summary>
/// Eating my own dog food.
/// </summary>
[TestFixture]
public class DogFood
{
private void WriteExpression(CodeExpression ce)
{
CSharpCodeProvider prov = new CSharpCodeProvider();
StringBuilder sb = new StringBuilder();
ICodeGenerator gen = prov.CreateGenerator();
gen.GenerateCodeFromExpression(ce, new StringWriter(sb), new CodeGeneratorOptions());
Console.WriteLine(sb.ToString());
}
[Test]
public void Test01()
{
CodeExpression ce1 = new CodeMethodInvokeExpression(
new CodeMethodReferenceExpression(new CodeVariableReferenceExpression("parseObj"), "Parse"),
new CodeExpression[] { new CodeVariableReferenceExpression("xr"),
new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "_XmiObjects") });
Console.WriteLine("Expected:");
WriteExpression(ce1);
Parser p = new Parser();
CodeExpression ce2 = p.ParseExpression("parseObj.Parse(xr, this._XmiObjects)");
Console.WriteLine("Parsed:");
WriteExpression(ce2);
}
[Test]
public void Test02()
{
CodeExpression ce1 = new CodeMethodInvokeExpression(
new CodeMethodReferenceExpression(new CodeCastExpression(typeof(string),
new CodeVariableReferenceExpression("parseObj")), "Parse"),
new CodeExpression[] { new CodeVariableReferenceExpression("xr"),
new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "_XmiObjects") });
Console.WriteLine("Expected:");
WriteExpression(ce1);
Parser p = new Parser();
p.Fields.Add("_XmiObjects");
CodeExpression ce2 = p.ParseExpression("((string)parseObj).Parse(xr, this._XmiObjects)");
Console.WriteLine("Parsed:");
WriteExpression(ce2);
}
[Test]
public void Test03()
{
CodeExpression ce1 = new CodeBinaryOperatorExpression(
new CodePropertyReferenceExpression(new CodeVariableReferenceExpression("xr"), "HasAttributes"),
CodeBinaryOperatorType.BooleanAnd, new CodeMethodInvokeExpression(
new CodeMethodReferenceExpression(new CodeVariableReferenceExpression("xr"), "MoveToAttribute"),
new CodeExpression[] { new CodePrimitiveExpression("xmi.value") }));
Console.WriteLine("Expected:");
WriteExpression(ce1);
Parser p = new Parser();
CodeExpression ce2 = p.ParseExpression("xr.HasAttributes && xr.MoveToAttribute(\"xmi.value\")");
Console.WriteLine("Parsed:");
WriteExpression(ce2);
}
[Test]
public void Test04()
{
CodeExpression ce1 = new CodeCastExpression(
new CodeTypeReference(typeof(string)),
new CodeMethodInvokeExpression(new CodeMethodReferenceExpression(
new CodeTypeReferenceExpression(typeof(Convert)), "ChangeType"),
new CodeExpression[] { new CodePropertyReferenceExpression(
new CodeVariableReferenceExpression("xr"), "Value"),
new CodeTypeOfExpression(new CodeTypeReference(typeof(string))) }));
Console.WriteLine("Expected:");
WriteExpression(ce1);
Parser p = new Parser();
CodeExpression ce2 = p.ParseExpression("(string)Convert.ChangeType(xr.Value, typeof(string))");
Console.WriteLine("Parsed:");
WriteExpression(ce2);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.