Esempio n. 1
0
        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());
            });
        }
Esempio n. 2
0
        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);
            });
        }
Esempio n. 3
0
        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
}"
                    );
            }
                );
        }
Esempio n. 4
0
        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
}");
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
 public static CSharpCompilation CreateWinRtCompilation(string text, MetadataReference[] additionalRefs = null)
 {
     return(CSharpTestBase.CreateCompilation(text,
                                             WinRtRefs.Concat(additionalRefs ?? Enumerable.Empty <MetadataReference>()),
                                             TestOptions.ReleaseExe));
 }
Esempio n. 7
0
        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");
        }