Ejemplo n.º 1
0
        public void TestDeviceDylib(Profile profile, string version, string mono_native_dylib)
        {
            using (var mtouch = new MTouchTool()) {
                mtouch.Profile = profile;
                if (profile == Profile.watchOS)
                {
                    mtouch.CreateTemporaryWatchKitExtension(code: MonoNativeWatchInitialize, extraCode: MonoNativeInitialize);
                }
                else
                {
                    mtouch.CreateTemporaryApp(code: MonoNativeInitialize);
                }
                mtouch.Linker = LinkerOption.LinkAll;
                mtouch.AssemblyBuildTargets.Add("@all=dynamiclibrary");
                mtouch.TargetVer = version;

                mtouch.AssertExecute(MTouchAction.BuildDev, "build");

                var files = Directory.EnumerateFiles(mtouch.AppPath, "libmono-native*", SearchOption.AllDirectories).Select(Path.GetFileName);
                Assert.That(files.Count, Is.EqualTo(1), "One single libmono-native* library");
                Assert.That(files.First(), Is.EqualTo(mono_native_dylib));

                var mono_native_path = Path.Combine(mtouch.AppPath, mono_native_dylib);

                var symbols     = MTouch.GetNativeSymbols(mono_native_path);
                var otool_dylib = ExecutionHelper.Execute("otool", new [] { "-L", mono_native_path }, hide_output: true);

                Assert.That(symbols, Does.Contain("_mono_native_initialize"));
                Assert.That(otool_dylib, Does.Contain($"@rpath/{mono_native_dylib}"));
                Assert.That(otool_dylib.Replace(mono_native_path, ""), Does.Not.Contain("/Users/"));

                if (profile == Profile.iOS)
                {
                    Assert.That(symbols, Does.Contain("_NetSecurityNative_ImportUserName"));
                    Assert.That(otool_dylib, Does.Contain("/System/Library/Frameworks/GSS.framework/GSS"));
                }
                else
                {
                    Assert.That(symbols, Does.Not.Contain("_NetSecurityNative_ImportUserName"));
                    Assert.That(otool_dylib, Does.Not.Contain("/System/Library/Frameworks/GSS.framework/GSS"));
                }

                var otool_exe = ExecutionHelper.Execute("otool", new [] { "-L", mtouch.NativeExecutablePath }, hide_output: true);
                Assert.That(otool_exe, Does.Not.Contain("GSS"));
                Assert.That(otool_exe, Does.Contain($"@rpath/{mono_native_dylib}"));
            }
        }