xamarin-macios/tests/mtouch/MiscTests.cs

81 строка
2.2 KiB
C#
Исходник Обычный вид История

2016-05-26 16:06:52 +03:00
using System;
using System.Linq;
using System.Collections.Generic;
using System.IO;
using System.Diagnostics;
using System.Text;
using System.Text.RegularExpressions;
using Xamarin.Tests;
using NUnit.Framework;
namespace Xamarin.Tests
{
[TestFixture]
public class Misc
{
[Test]
public void InvalidStructOffset ()
{
MTouch.AssertDeviceAvailable ();
2016-05-26 16:06:52 +03:00
var str = "invalid struct offset";
var contents = ASCIIEncoding.ASCII.GetBytes (str);
foreach (var sdk in new string [] { "iphoneos", "iphonesimulator"}) {
foreach (var ext in new string [] { "dylib", "a" }) {
var fn = Path.Combine (Configuration.MonoTouchRootDirectory, "SDKs", "MonoTouch." + sdk + ".sdk", "usr", "lib", "libmonosgen-2.0." + ext);
Assert.IsFalse (Contains (fn, contents), "Found \"{0}\" in {1}", str, fn);
}
}
}
bool Contains (string file, byte[] contents)
{
var pagesize = 4096;
var buffer = new byte [pagesize * 1024];
int read;
using (var fs = new FileStream (file, FileMode.Open, FileAccess.Read)) {
while ((read = fs.Read (buffer, 0, buffer.Length)) > 0) {
for (int i = 0; i < read - contents.Length; i++) {
if (buffer [i] == contents [0]) {
var found = true;
for (int c = 1; c < contents.Length; c++) {
if (buffer [i + c] != contents [c]) {
found = false;
break;
}
}
if (found)
return true;
}
}
if (fs.Position == fs.Length)
break;
fs.Position -= pagesize; // return a bit so that we don't miss contents spanning multiple reads.
}
}
return false;
}
[Test]
public void VerifySymbols ()
{
MTouch.AssertDeviceAvailable ();
2016-05-26 16:06:52 +03:00
var prohibited_symbols = new string [] { "_NSGetEnviron", "PKService", "SPPluginDelegate" };
foreach (var symbol in prohibited_symbols) {
var contents = ASCIIEncoding.ASCII.GetBytes (symbol);
var sdk = "iphoneos"; // we don't care about private symbols for simulator builds
foreach (var static_lib in Directory.EnumerateFiles (Path.Combine (Configuration.MonoTouchRootDirectory, "SDKs", "MonoTouch." + sdk + ".sdk", "usr", "lib"), "*.a")) {
Assert.IsFalse (Contains (static_lib, contents), "Found \"{0}\" in {1}", symbol, static_lib);
}
}
}
}
}