public void ToCSharp_Terse()
 {
     Assert.AreEqual("C`4", C.GetCSharpRef(ToCSharpOptions.Terse));
     Assert.AreEqual("C`4", C.GetCSharpDecl(ToCSharpOptions.Terse));
     Assert.AreEqual("Func`2 C`4::_f1", C_f1.GetCSharpRef(ToCSharpOptions.Terse));
     Assert.AreEqual("static Func`2 _f1", C_f1.GetCSharpDecl(ToCSharpOptions.Terse));
     Assert.AreEqual("int C`4::_f2", C_f2.GetCSharpRef(ToCSharpOptions.Terse));
     Assert.AreEqual("int _f2", C_f2.GetCSharpDecl(ToCSharpOptions.Terse));
     Assert.AreEqual("C`4::.ctor(T2 a1, ref int f2)", C_C.GetCSharpRef(ToCSharpOptions.Terse));
     Assert.AreEqual(".ctor(T2 a1, ref int f2)", C_C.GetCSharpDecl(ToCSharpOptions.Terse));
     Assert.AreEqual("MR C`4::M1(T1 a1, MT2 a2, Func`2 a3)", C_M1.GetCSharpRef(ToCSharpOptions.Terse));
     Assert.AreEqual("MR M1(T1 a1, MT2 a2, Func`2 a3)", C_M1.GetCSharpDecl(ToCSharpOptions.Terse));
     Assert.AreEqual("int C`4::M2(out DateTime a1, T2 a2)", C_M2.GetCSharpRef(ToCSharpOptions.Terse));
     Assert.AreEqual("static int M2(out DateTime a1, T2 a2)", C_M2.GetCSharpDecl(ToCSharpOptions.Terse));
 }
 public void ToCSharp_InformativeWithNamespaces()
 {
     Assert.AreEqual("XenoGears.Playground.Strings.C<T1, T2, R, T4>", C.GetCSharpRef(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("XenoGears.Playground.Strings.C<T1, T2, R, T4>", C.GetCSharpDecl(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("System.Func<T1, System.Action<R, T2>> C`4::_f1", C_f1.GetCSharpRef(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("static System.Func<T1, System.Action<R, T2>> _f1", C_f1.GetCSharpDecl(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("int C`4::_f2", C_f2.GetCSharpRef(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("int _f2", C_f2.GetCSharpDecl(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("C`4::.ctor(T2 a1, ref int f2)", C_C.GetCSharpRef(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual(".ctor(T2 a1, ref int f2)", C_C.GetCSharpDecl(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("MR C`4::M1<MT1, MT2, MR>(T1 a1, MT2 a2, System.Func<R, MR> a3)" + Environment.NewLine +
                     "    where MT1 : MT2, T2, T1" + Environment.NewLine +
                     "    where MR : class, T1, System.IConvertible", C_M1.GetCSharpRef(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("MR M1<MT1, MT2, MR>(T1 a1, MT2 a2, System.Func<R, MR> a3)" + Environment.NewLine +
                     "    where MT1 : MT2, T2, T1" + Environment.NewLine +
                     "    where MR : class, T1, System.IConvertible", C_M1.GetCSharpDecl(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("int C`4::M2(out System.DateTime a1, T2 a2)", C_M2.GetCSharpRef(ToCSharpOptions.InformativeWithNamespaces));
     Assert.AreEqual("static int M2(out System.DateTime a1, T2 a2)", C_M2.GetCSharpDecl(ToCSharpOptions.InformativeWithNamespaces));
 }
 public void ToCSharp_Informative()
 {
     Assert.AreEqual("C<T1, T2, R, T4>", C.GetCSharpRef(ToCSharpOptions.Informative));
     Assert.AreEqual("C<T1, T2, R, T4>", C.GetCSharpDecl(ToCSharpOptions.Informative));
     Assert.AreEqual("Func<T1, Action<R, T2>> C`4::_f1", C_f1.GetCSharpRef(ToCSharpOptions.Informative));
     Assert.AreEqual("static Func<T1, Action<R, T2>> _f1", C_f1.GetCSharpDecl(ToCSharpOptions.Informative));
     Assert.AreEqual("int C`4::_f2", C_f2.GetCSharpRef(ToCSharpOptions.Informative));
     Assert.AreEqual("int _f2", C_f2.GetCSharpDecl(ToCSharpOptions.Informative));
     Assert.AreEqual("C`4::.ctor(T2 a1, ref int f2)", C_C.GetCSharpRef(ToCSharpOptions.Informative));
     Assert.AreEqual(".ctor(T2 a1, ref int f2)", C_C.GetCSharpDecl(ToCSharpOptions.Informative));
     Assert.AreEqual("MR C`4::M1<MT1, MT2, MR>(T1 a1, MT2 a2, Func<R, MR> a3)" + Environment.NewLine +
                     "    where MT1 : MT2, T2, T1" + Environment.NewLine +
                     "    where MR : class, T1, IConvertible", C_M1.GetCSharpRef(ToCSharpOptions.Informative));
     Assert.AreEqual("MR M1<MT1, MT2, MR>(T1 a1, MT2 a2, Func<R, MR> a3)" + Environment.NewLine +
                     "    where MT1 : MT2, T2, T1" + Environment.NewLine +
                     "    where MR : class, T1, IConvertible", C_M1.GetCSharpDecl(ToCSharpOptions.Informative));
     Assert.AreEqual("int C`4::M2(out DateTime a1, T2 a2)", C_M2.GetCSharpRef(ToCSharpOptions.Informative));
     Assert.AreEqual("static int M2(out DateTime a1, T2 a2)", C_M2.GetCSharpDecl(ToCSharpOptions.Informative));
 }
 public void ToCSharp_ForCodegen()
 {
     Assert.AreEqual("global::XenoGears.Playground.Strings.C<T1, T2, R, T4>", C.GetCSharpRef(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("global::XenoGears.Playground.Strings.C<" +
                     "[global::XenoGears.Playground.Strings.A1] T1, " +
                     "T2, " +
                     "[global::XenoGears.Playground.Strings.A1] R, " +
                     "T4>;", C.GetCSharpDecl(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("global::System.Func<T1, global::System.Action<R, T2>> C`4::_f1", C_f1.GetCSharpRef(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("protected static global::System.Func<T1, global::System.Action<R, T2>> _f1;", C_f1.GetCSharpDecl(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("int C`4::_f2", C_f2.GetCSharpRef(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("private int _f2;", C_f2.GetCSharpDecl(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("C`4::C(T2 a1, ref int f2)", C_C.GetCSharpRef(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("[global::XenoGears.Playground.Strings.A5] " +
                     "public C(" +
                     "[global::XenoGears.Playground.Strings.A4] T2 a1, " +
                     "[global::XenoGears.Playground.Strings.A3] ref int f2);", C_C.GetCSharpDecl(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("MR C`4::M1<MT1, MT2, MR>(T1 a1, MT2 a2, global::System.Func<R, MR> a3)" + Environment.NewLine +
                     "    where MT1 : MT2, T2, T1" + Environment.NewLine +
                     "    where MR : class, T1, global::System.IConvertible", C_M1.GetCSharpRef(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("[global::XenoGears.Playground.Strings.A5] " +
                     "[return: global::XenoGears.Playground.Strings.A2] " +
                     "public MR M1<" +
                     "[global::XenoGears.Playground.Strings.A1] MT1, " +
                     "MT2, " +
                     "MR" +
                     ">(" +
                     "[global::XenoGears.Playground.Strings.A3] T1 a1, " +
                     "MT2 a2, " +
                     "[global::XenoGears.Playground.Strings.A4] global::System.Func<R, MR> a3)" + Environment.NewLine +
                     "    where MT1 : MT2, T2, T1" + Environment.NewLine +
                     "    where MR : class, T1, global::System.IConvertible;", C_M1.GetCSharpDecl(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("int C`4::M2(out global::System.DateTime a1, T2 a2)", C_M2.GetCSharpRef(ToCSharpOptions.ForCodegen));
     Assert.AreEqual("internal static int M2(" +
                     "[global::System.Runtime.InteropServices.OutAttribute] " +
                     "out global::System.DateTime a1, T2 a2);", C_M2.GetCSharpDecl(ToCSharpOptions.ForCodegen));
 }
 public void ToCSharp_ForVerbose()
 {
     Assert.AreEqual("XenoGears.Playground.Strings.C`4<T1, T2, R, T4>", C.GetCSharpRef(ToCSharpOptions.Verbose));
     Assert.AreEqual("XenoGears.Playground.Strings.C`4<" +
                     "[XenoGears.Playground.Strings.A1] T1, " +
                     "T2, " +
                     "[XenoGears.Playground.Strings.A1] R, " +
                     "T4>", C.GetCSharpDecl(ToCSharpOptions.Verbose));
     Assert.AreEqual("System.Func`2<T1, System.Action`2<R, T2>> C`4::_f1", C_f1.GetCSharpRef(ToCSharpOptions.Verbose));
     Assert.AreEqual("protected static System.Func`2<T1, System.Action`2<R, T2>> C`4::_f1", C_f1.GetCSharpDecl(ToCSharpOptions.Verbose));
     Assert.AreEqual("int C`4::_f2", C_f2.GetCSharpRef(ToCSharpOptions.Verbose));
     Assert.AreEqual("private int C`4::_f2", C_f2.GetCSharpDecl(ToCSharpOptions.Verbose));
     Assert.AreEqual("C`4::.ctor(T2 a1, ref int f2)", C_C.GetCSharpRef(ToCSharpOptions.Verbose));
     Assert.AreEqual("[XenoGears.Playground.Strings.A5] " +
                     "public C`4::.ctor(" +
                     "[XenoGears.Playground.Strings.A4] T2 a1, " +
                     "[XenoGears.Playground.Strings.A3] ref int f2)", C_C.GetCSharpDecl(ToCSharpOptions.Verbose));
     Assert.AreEqual("MR C`4::M1<MT1, MT2, MR>(T1 a1, MT2 a2, System.Func`2<R, MR> a3)" + Environment.NewLine +
                     "    where MT1 : MT2, T2, T1" + Environment.NewLine +
                     "    where MR : class, T1, System.IConvertible", C_M1.GetCSharpRef(ToCSharpOptions.Verbose));
     Assert.AreEqual("[XenoGears.Playground.Strings.A5] " +
                     "[return: XenoGears.Playground.Strings.A2] " +
                     "public MR C`4::M1<" +
                     "[XenoGears.Playground.Strings.A1] MT1, " +
                     "MT2, " +
                     "MR" +
                     ">(" +
                     "[XenoGears.Playground.Strings.A3] T1 a1, " +
                     "MT2 a2, " +
                     "[XenoGears.Playground.Strings.A4] System.Func`2<R, MR> a3)" + Environment.NewLine +
                     "    where MT1 : MT2, T2, T1" + Environment.NewLine +
                     "    where MR : class, T1, System.IConvertible", C_M1.GetCSharpDecl(ToCSharpOptions.Verbose));
     Assert.AreEqual("int C`4::M2(out System.DateTime a1, T2 a2)", C_M2.GetCSharpRef(ToCSharpOptions.Verbose));
     Assert.AreEqual("internal static int C`4::M2(" +
                     "[System.Runtime.InteropServices.OutAttribute] " +
                     "out System.DateTime a1, T2 a2)", C_M2.GetCSharpDecl(ToCSharpOptions.Verbose));
 }