159 строки
4.3 KiB
C#
159 строки
4.3 KiB
C#
//
|
|
// Unit tests for CIFilter
|
|
//
|
|
// Authors:
|
|
// Sebastien Pouliot <sebastien@xamarin.com>
|
|
//
|
|
// Copyright 2013-2015 Xamarin Inc. All rights reserved.
|
|
//
|
|
|
|
#if !__WATCHOS__
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
|
|
using CoreGraphics;
|
|
using CoreImage;
|
|
using CoreText;
|
|
using Foundation;
|
|
using ObjCRuntime;
|
|
using NUnit.Framework;
|
|
using Xamarin.Utils;
|
|
|
|
namespace MonoTouchFixtures.CoreImage {
|
|
|
|
[TestFixture]
|
|
[Preserve (AllMembers = true)]
|
|
public class FilterTest {
|
|
|
|
[Test]
|
|
public void HighlightShadowAdjust ()
|
|
{
|
|
string file = Path.Combine (NSBundle.MainBundle.ResourcePath, "basn3p08.png");
|
|
using (var url = NSUrl.FromFilename (file))
|
|
using (var input = CIImage.FromUrl (url))
|
|
using (var filter = new CIHighlightShadowAdjust ()) {
|
|
#if NET
|
|
filter.InputImage = input;
|
|
#else
|
|
filter.Image = input;
|
|
#endif
|
|
filter.HighlightAmount = 0.75f;
|
|
filter.ShadowAmount = 1.5f;
|
|
// https://bugzilla.xamarin.com/show_bug.cgi?id=15465
|
|
Assert.NotNull (filter.OutputImage, "OutputImage");
|
|
}
|
|
}
|
|
|
|
class MyFilter : CIFilter {
|
|
public int Input { get; set; }
|
|
}
|
|
|
|
[Test]
|
|
public void CustomFilterTest ()
|
|
{
|
|
TestRuntime.AssertSystemVersion (ApplePlatform.iOS, 8, 0, throwIfOtherPlatform: false);
|
|
TestRuntime.AssertSystemVersion (ApplePlatform.MacOSX, 10, 11, throwIfOtherPlatform: false);
|
|
|
|
MyFilter filter = new MyFilter ();
|
|
Assert.NotNull (filter);
|
|
filter.Input = 10;
|
|
Assert.AreEqual (10, filter.Input);
|
|
}
|
|
|
|
#if !NET
|
|
[Test]
|
|
public void UnsupportedInputImage ()
|
|
{
|
|
// some filters do not support inputImage (which we bound to the Image property)
|
|
using (var filter = new CICheckerboardGenerator ()) {
|
|
// but if we call ObjC then we get a native exception and crash on devices
|
|
Assert.False (filter.RespondsToSelector (new Selector ("inputImage")), "inputImage");
|
|
// so we return null in those cases
|
|
Assert.Null (filter.Image, "Image");
|
|
}
|
|
}
|
|
#endif // !NET
|
|
|
|
[DllImport (Constants.CoreFoundationLibrary)]
|
|
extern static nint CFGetRetainCount (IntPtr handle);
|
|
|
|
[Test]
|
|
public void ColorSpace ()
|
|
{
|
|
TestRuntime.AssertSystemVersion (ApplePlatform.MacOSX, 10, 9, throwIfOtherPlatform: false);
|
|
TestRuntime.AssertSystemVersion (ApplePlatform.iOS, 7, 0, throwIfOtherPlatform: false);
|
|
|
|
using (var f = new CIColorCubeWithColorSpace ()) {
|
|
Assert.Null (f.ColorSpace, "ColorSpace/default");
|
|
using (var cs = CGColorSpace.CreateDeviceGray ()) {
|
|
f.ColorSpace = cs;
|
|
var rc = CFGetRetainCount (cs.Handle);
|
|
for (int i = 0; i < 5; i++) {
|
|
using (var fcs = f.ColorSpace)
|
|
Assert.NotNull (fcs, i.ToString ());
|
|
}
|
|
Assert.That (CFGetRetainCount (cs.Handle), Is.EqualTo (rc), "RetainCount");
|
|
f.ColorSpace = null;
|
|
}
|
|
Assert.Null (f.ColorSpace, "ColorSpace/reset-null");
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void CIBarcodeDescriptorTest ()
|
|
{
|
|
TestRuntime.AssertXcodeVersion (9, 0);
|
|
|
|
using (var f = new CIBarcodeGenerator ()) {
|
|
Assert.Null (f.BarcodeDescriptor, "CIBarcodeDescriptor/default");
|
|
using (var d = new NSData ())
|
|
using (var b = new CIQRCodeDescriptor (d, 1, 0, CIQRCodeErrorCorrectionLevel.Q)) {
|
|
f.BarcodeDescriptor = b;
|
|
var rc = CFGetRetainCount (b.Handle);
|
|
for (int i = 0; i < 5; i++)
|
|
Assert.NotNull (f.BarcodeDescriptor, i.ToString ());
|
|
Assert.That (CFGetRetainCount (b.Handle), Is.EqualTo (rc), "RetainCount");
|
|
f.BarcodeDescriptor = null;
|
|
}
|
|
Assert.Null (f.BarcodeDescriptor, "CIBarcodeDescriptor/reset-null");
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void CIAttributedTextImageGenerator ()
|
|
{
|
|
TestRuntime.AssertXcodeVersion (9, 0);
|
|
|
|
using (var f = new CIAttributedTextImageGenerator ()) {
|
|
Assert.Null (f.Text, "NSAttributedString/default");
|
|
var attr = new CTStringAttributes () {
|
|
ForegroundColorFromContext = true,
|
|
Font = new CTFont ("Arial", 24)
|
|
};
|
|
using (var s = new NSAttributedString ("testString", attr)) {
|
|
f.Text = s;
|
|
Assert.NotNull (f.Text, "NSAttributedString/not-null");
|
|
}
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void CIVectorArray ()
|
|
{
|
|
TestRuntime.AssertXcodeVersion (10, 0);
|
|
|
|
using (var f = new CIMeshGenerator ()) {
|
|
Assert.Null (f.Mesh, "Mesh/Null");
|
|
f.Mesh = new CIVector [1] { new CIVector (1) };
|
|
Assert.That (f.Mesh.Length, Is.EqualTo (1), "Mesh/Non-null");
|
|
f.Mesh = null;
|
|
Assert.Null (f.Mesh, "Mesh/Null/again");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif // !__WATCHOS__
|