public static void VerifyConstValue(LanguageType lang, NativeSymbolBag bag, string name, string val, string type) { Assert.True(bag.TryResolveSymbolsAndValues()); BasicConverter con = new BasicConverter(lang, StorageFactory.CreateStandard()); CodeTypeDeclarationCollection col = con.ConvertToCodeDom(bag, new ErrorProvider()); VerifyConstValue(col, lang, name, val, type); }
public static void VerifyEnumValue(LanguageType lang, NativeSymbolBag bag, NativeEnum e, string name, string val) { Assert.True(bag.TryResolveSymbolsAndValues()); BasicConverter con = new BasicConverter(lang, StorageFactory.CreateStandard()); CodeTypeDeclarationCollection col = con.ConvertToCodeDom(bag, new ErrorProvider()); // Look for the constants class CodeTypeDeclaration ctd = null; foreach (CodeTypeDeclaration cur in col) { if (0 == string.CompareOrdinal(e.Name, cur.Name)) { ctd = cur; break; } } Assert.NotNull(ctd); // Find the value CodeTypeMember cMem = null; foreach (CodeTypeMember mem in ctd.Members) { if (0 == string.CompareOrdinal(name, mem.Name)) { cMem = mem; break; } } Assert.NotNull(cMem); // Make sure it's a constant value CodeMemberField field = cMem as CodeMemberField; Assert.NotNull(field); // Get the provider var provider = default(CodeDomProvider); switch (lang) { case LanguageType.CSharp: provider = new Microsoft.CSharp.CSharpCodeProvider(); break; case LanguageType.VisualBasic: provider = new Microsoft.VisualBasic.VBCodeProvider(); break; default: provider = null; break; } using (var writer = new StringWriter()) { provider.GenerateCodeFromExpression(field.InitExpression, writer, new CodeGeneratorOptions()); Assert.Equal(val, writer.ToString()); } }