public void OtherFrameworkAssembly() { var source = @"class C { static void M(Windows.UI.Xaml.FrameworkElement f) { } }"; var compilation = CreateEmptyCompilation(source, WinRtRefs, TestOptions.DebugDll); WithRuntimeInstance(compilation, new[] { MscorlibRef }.Concat(ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Foundation", "Windows.UI", "Windows.UI.Xaml")), runtime => { var context = CreateMethodContext(runtime, "C.M"); string error; ResultProperties resultProperties; ImmutableArray <AssemblyIdentity> missingAssemblyIdentities; var testData = new CompilationTestData(); var result = context.CompileExpression( "f.RenderSize", DkmEvaluationFlags.TreatAsExpression, NoAliases, DebuggerDiagnosticFormatter.Instance, out resultProperties, out error, out missingAssemblyIdentities, EnsureEnglishUICulture.PreferredOrNull, testData); var expectedAssemblyIdentity = WinRtRefs.Single(r => r.Display == "System.Runtime.WindowsRuntime.dll").GetAssemblyIdentity(); Assert.Equal(expectedAssemblyIdentity, missingAssemblyIdentities.Single()); }); }
public void WinMdAssemblyQualifiedType() { var source = @"using System; [MyAttribute(typeof(C1))] public class C { public static void Main(string[] args) { } } public class MyAttribute : System.Attribute { public MyAttribute(System.Type type) { } } "; CompileAndVerify( source, WinRtRefs.Concat(new[] { AssemblyMetadata.CreateFromImage(TestResources.WinRt.W1).GetReference() }), symbolValidator: m => { var module = (PEModuleSymbol)m; var c = (PENamedTypeSymbol)module.GlobalNamespace.GetTypeMember("C"); var attributeHandle = module.Module.MetadataReader.GetCustomAttributes(c.Handle).Single(); string value; module.Module.TryExtractStringValueFromAttribute(attributeHandle, out value); Assert.Equal("C1, W, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime", value); }); }
public void Win8RuntimeAssemblies_ExternAlias() { var source = @"extern alias X; class C { static void M(X::Windows.Storage.StorageFolder f) { } }"; var compilation0 = CreateEmptyCompilation( source, options: TestOptions.DebugDll, assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(), references: WinRtRefs.Select( r => r.Display == "Windows" ? r.WithAliases(new[] { "X" }) : r ) ); var runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds( "Windows.Storage" ); Assert.True(runtimeAssemblies.Length >= 1); // no reference to Windows.winmd WithRuntimeInstance( compilation0, new[] { MscorlibRef }.Concat(runtimeAssemblies), runtime => { var context = CreateMethodContext(runtime, "C.M"); string error; var testData = new CompilationTestData(); context.CompileExpression( "X::Windows.Storage.FileProperties.PhotoOrientation.Unspecified", out error, testData ); Assert.Null(error); testData .GetMethodData("<>x.<>m0") .VerifyIL( @"{ // Code size 2 (0x2) .maxstack 1 IL_0000: ldc.i4.0 IL_0001: ret }" ); } ); }
public void Win8RuntimeAssemblies_ExternAlias() { var source = @"extern alias X; class C { static void M(X::Windows.Storage.StorageFolder f) { } }"; var compilation0 = CreateCompilationWithMscorlib( source, options: TestOptions.DebugDll, assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(), references: WinRtRefs.Select(r => r.Display == "Windows" ? r.WithAliases(new[] { "X" }) : r)); var runtimeAssemblies = ExpressionCompilerTestHelpers.GetRuntimeWinMds("Windows.Storage"); Assert.True(runtimeAssemblies.Length >= 1); byte[] exeBytes; byte[] pdbBytes; ImmutableArray <MetadataReference> references; compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references); var runtime = CreateRuntimeInstance( ExpressionCompilerUtilities.GenerateUniqueName(), ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), // no reference to Windows.winmd exeBytes, new SymReader(pdbBytes)); var context = CreateMethodContext(runtime, "C.M"); ResultProperties resultProperties; string error; var testData = new CompilationTestData(); context.CompileExpression("X::Windows.Storage.FileProperties.PhotoOrientation.Unspecified", out resultProperties, out error, testData); Assert.Null(error); testData.GetMethodData("<>x.<>m0").VerifyIL( @"{ // Code size 2 (0x2) .maxstack 1 IL_0000: ldc.i4.0 IL_0001: ret }"); }
internal CompilationVerifier CompileAndVerifyWinRt( string source, string expectedOutput = null, MetadataReference[] additionalRefs = null, CSharpCompilationOptions options = null, bool verify = true) { if (options == null) { options = expectedOutput != null ? TestOptions.ReleaseExe : TestOptions.ReleaseDll; } var compilation = CreateCompilation(source, WinRtRefs.Concat(additionalRefs ?? Enumerable.Empty <MetadataReference>()), options); return(CompileAndVerify( compilation: compilation, expectedOutput: expectedOutput, verify: verify)); }
public static CSharpCompilation CreateWinRtCompilation(string text, MetadataReference[] additionalRefs = null) { return(CSharpTestBase.CreateCompilation(text, WinRtRefs.Concat(additionalRefs ?? Enumerable.Empty <MetadataReference>()), TestOptions.ReleaseExe)); }
public void FieldLikeEventSerialization() { var source1 = @" namespace EventDeserialization { public delegate void Event(); public interface Interface { event Event E; } } "; var source2 = @" using System; using System.IO; using System.Runtime.Serialization; namespace EventDeserialization { class MainPage { public static void Main() { Model m1 = new Model(); m1.E += () => Console.Write(""A""); m1.Invoke(); var bytes = Serialize(m1); Model m2 = Deserialize(bytes); Console.WriteLine(m1 == m2); m2.Invoke(); m2.E += () => Console.Write(""B""); m2.Invoke(); } public static byte[] Serialize(Model model) { DataContractSerializer ser = new DataContractSerializer(typeof(Model)); using (var stream = new MemoryStream()) { ser.WriteObject(stream, model); return stream.ToArray(); } } public static Model Deserialize(byte[] bytes) { DataContractSerializer ser = new DataContractSerializer(typeof(Model)); using (var stream = new MemoryStream(bytes)) { return (Model)ser.ReadObject(stream); } } } [DataContract] public sealed class Model : Interface { public event Event E; public void Invoke() { if (E == null) { Console.WriteLine(""null""); } else { E(); Console.WriteLine(); } } } } "; var comp1 = CreateCompilation(source1, WinRtRefs, TestOptions.ReleaseWinMD, TestOptions.Regular, "Lib"); var serializationRef = TestReferences.NetFx.v4_0_30319.System_Runtime_Serialization; var comp2 = CreateCompilation(source2, WinRtRefs.Concat(new MetadataReference[] { new CSharpCompilationReference(comp1), serializationRef, SystemXmlRef }), TestOptions.ReleaseExe); CompileAndVerify(comp2, expectedOutput: @"A False null B"); }