diff --git a/PlatformTests/PlatformTests.sln b/PlatformTests/PlatformTests.sln
new file mode 100644
index 0000000..aa1b823
--- /dev/null
+++ b/PlatformTests/PlatformTests.sln
@@ -0,0 +1,29 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iOSTests", "iOSTests\iOSTests.csproj", "{1379E3B3-99A7-4B46-BED6-1338A94EBBD4}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ Debug|iPhoneSimulator = Debug|iPhoneSimulator
+ Release|iPhone = Release|iPhone
+ Release|iPhoneSimulator = Release|iPhoneSimulator
+ Debug|iPhone = Debug|iPhone
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Release|Any CPU.ActiveCfg = Release|iPhone
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Release|Any CPU.Build.0 = Release|iPhone
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Release|iPhone.ActiveCfg = Release|iPhone
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Release|iPhone.Build.0 = Release|iPhone
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Debug|iPhone.ActiveCfg = Debug|iPhone
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}.Debug|iPhone.Build.0 = Debug|iPhone
+ EndGlobalSection
+EndGlobal
diff --git a/PlatformTests/iOSTests/Entitlements.plist b/PlatformTests/iOSTests/Entitlements.plist
new file mode 100644
index 0000000..9ae5993
--- /dev/null
+++ b/PlatformTests/iOSTests/Entitlements.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/PlatformTests/iOSTests/Info.plist b/PlatformTests/iOSTests/Info.plist
new file mode 100644
index 0000000..d8a3f6b
--- /dev/null
+++ b/PlatformTests/iOSTests/Info.plist
@@ -0,0 +1,36 @@
+
+
+
+
+ CFBundleName
+ Ooui Test
+ CFBundleIdentifier
+ com.kruegersystems.ooui-test
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ MinimumOSVersion
+ 10.3
+ UIDeviceFamily
+
+ 1
+ 2
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UILaunchStoryboardName
+ LaunchScreen
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+
+
diff --git a/PlatformTests/iOSTests/LaunchScreen.storyboard b/PlatformTests/iOSTests/LaunchScreen.storyboard
new file mode 100644
index 0000000..7981a14
--- /dev/null
+++ b/PlatformTests/iOSTests/LaunchScreen.storyboard
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PlatformTests/iOSTests/Main.cs b/PlatformTests/iOSTests/Main.cs
new file mode 100644
index 0000000..41487e3
--- /dev/null
+++ b/PlatformTests/iOSTests/Main.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+using Foundation;
+using UIKit;
+
+namespace iOSTests
+{
+ public class Application
+ {
+ // This is the main entry point of the application.
+ static void Main (string[] args)
+ {
+ // if you want to use a different Application Delegate class from "UnitTestAppDelegate"
+ // you can specify it here.
+ UIApplication.Main (args, null, "UnitTestAppDelegate");
+ }
+ }
+}
diff --git a/PlatformTests/iOSTests/PresentTests.cs b/PlatformTests/iOSTests/PresentTests.cs
new file mode 100644
index 0000000..91c7143
--- /dev/null
+++ b/PlatformTests/iOSTests/PresentTests.cs
@@ -0,0 +1,18 @@
+using System;
+using NUnit.Framework;
+using Ooui;
+
+namespace iOSTests
+{
+ [TestFixture]
+ public class PresentTests
+ {
+ [TestCase]
+ public void Present ()
+ {
+ var b = new Button ();
+ UI.Publish ("/b", b);
+ UI.Present ("/b");
+ }
+ }
+}
diff --git a/PlatformTests/iOSTests/UnitTestAppDelegate.cs b/PlatformTests/iOSTests/UnitTestAppDelegate.cs
new file mode 100644
index 0000000..d6299f1
--- /dev/null
+++ b/PlatformTests/iOSTests/UnitTestAppDelegate.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+using Foundation;
+using UIKit;
+using MonoTouch.NUnit.UI;
+
+namespace iOSTests
+{
+ // The UIApplicationDelegate for the application. This class is responsible for launching the
+ // User Interface of the application, as well as listening (and optionally responding) to
+ // application events from iOS.
+ [Register ("UnitTestAppDelegate")]
+ public partial class UnitTestAppDelegate : UIApplicationDelegate
+ {
+ // class-level declarations
+ UIWindow window;
+ TouchRunner runner;
+
+ //
+ // This method is invoked when the application has loaded and is ready to run. In this
+ // method you should instantiate the window, load the UI into it and then make the window
+ // visible.
+ //
+ // You have 17 seconds to return from this method, or iOS will terminate your application.
+ //
+ public override bool FinishedLaunching (UIApplication app, NSDictionary options)
+ {
+ // create a new window instance based on the screen size
+ window = new UIWindow (UIScreen.MainScreen.Bounds);
+ runner = new TouchRunner (window);
+
+ // register every tests included in the main application/assembly
+ runner.Add (System.Reflection.Assembly.GetExecutingAssembly ());
+
+ window.RootViewController = new UINavigationController (runner.GetViewController ());
+
+ // make the window visible
+ window.MakeKeyAndVisible ();
+
+ return true;
+ }
+ }
+}
diff --git a/PlatformTests/iOSTests/iOSTests.csproj b/PlatformTests/iOSTests/iOSTests.csproj
new file mode 100644
index 0000000..bb2e06b
--- /dev/null
+++ b/PlatformTests/iOSTests/iOSTests.csproj
@@ -0,0 +1,206 @@
+
+
+
+ Debug
+ iPhoneSimulator
+ {1379E3B3-99A7-4B46-BED6-1338A94EBBD4}
+ {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Exe
+ iOSTests
+ iOSTests
+ Resources
+
+
+ true
+ full
+ false
+ bin\iPhoneSimulator\Debug
+ DEBUG;NUNIT
+ prompt
+ 4
+ iPhone Developer
+ true
+ true
+ true
+ true
+ true
+ 32958
+ None
+ i386, x86_64
+ HttpClientHandler
+
+
+
+ true
+ bin\iPhone\Release
+ NUNIT
+ prompt
+ 4
+ iPhone Developer
+ true
+ Entitlements.plist
+ SdkOnly
+ ARMv7, ARM64
+ HttpClientHandler
+
+
+
+ true
+ bin\iPhoneSimulator\Release
+ NUNIT
+ prompt
+ 4
+ iPhone Developer
+ true
+ true
+ None
+ i386, x86_64
+ HttpClientHandler
+
+
+ true
+ full
+ false
+ bin\iPhone\Debug
+ DEBUG;NUNIT
+ prompt
+ 4
+ iPhone Developer
+ true
+ true
+ true
+ true
+ true
+ true
+ Entitlements.plist
+ 58236
+ SdkOnly
+ ARMv7, ARM64
+ HttpClientHandler
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\packages\Newtonsoft.Json.10.0.2\lib\netstandard1.3\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+
+
+ Ooui\Client.js
+
+
+
+
+
+
+
+ Ooui\Button.cs
+
+
+ Ooui\Canvas.cs
+
+
+ Ooui\CanvasRenderingContext2D.cs
+
+
+ Ooui\Color.cs
+
+
+ Ooui\Div.cs
+
+
+ Ooui\Element.cs
+
+
+ Ooui\EventTarget.cs
+
+
+ Ooui\Form.cs
+
+
+ Ooui\FormControl.cs
+
+
+ Ooui\Heading.cs
+
+
+ Ooui\Image.cs
+
+
+ Ooui\Input.cs
+
+
+ Ooui\Label.cs
+
+
+ Ooui\List.cs
+
+
+ Ooui\ListItem.cs
+
+
+ Ooui\Message.cs
+
+
+ Ooui\Node.cs
+
+
+ Ooui\Paragraph.cs
+
+
+ Ooui\Select.cs
+
+
+ Ooui\Span.cs
+
+
+ Ooui\Style.cs
+
+
+ Ooui\TextArea.cs
+
+
+ Ooui\TextNode.cs
+
+
+ Ooui\UI.cs
+
+
+
+ Tests\ButtonTests.cs
+
+
+ Tests\CanvasTests.cs
+
+
+ Tests\EventTargetTests.cs
+
+
+ Tests\MessageSendTests.cs
+
+
+ Tests\NodeTests.cs
+
+
+ Tests\StyleTests.cs
+
+
+ Tests\UITests.cs
+
+
+
+
\ No newline at end of file
diff --git a/PlatformTests/iOSTests/packages.config b/PlatformTests/iOSTests/packages.config
new file mode 100644
index 0000000..887aff6
--- /dev/null
+++ b/PlatformTests/iOSTests/packages.config
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tests/ButtonTests.cs b/Tests/ButtonTests.cs
index 09ba075..e0e3eed 100644
--- a/Tests/ButtonTests.cs
+++ b/Tests/ButtonTests.cs
@@ -1,5 +1,12 @@
using System;
+
+#if NUNIT
+using NUnit.Framework;
+using TestClassAttribute = NUnit.Framework.TestFixtureAttribute;
+using TestMethodAttribute = NUnit.Framework.TestCaseAttribute;
+#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
+#endif
using Ooui;
diff --git a/Tests/CanvasTests.cs b/Tests/CanvasTests.cs
index d34cfa6..7d43c81 100644
--- a/Tests/CanvasTests.cs
+++ b/Tests/CanvasTests.cs
@@ -1,5 +1,12 @@
using System;
+
+#if NUNIT
+using NUnit.Framework;
+using TestClassAttribute = NUnit.Framework.TestFixtureAttribute;
+using TestMethodAttribute = NUnit.Framework.TestCaseAttribute;
+#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
+#endif
using Ooui;
diff --git a/Tests/EventTargetTests.cs b/Tests/EventTargetTests.cs
index 9f19419..07ff97a 100644
--- a/Tests/EventTargetTests.cs
+++ b/Tests/EventTargetTests.cs
@@ -1,5 +1,12 @@
using System;
+
+#if NUNIT
+using NUnit.Framework;
+using TestClassAttribute = NUnit.Framework.TestFixtureAttribute;
+using TestMethodAttribute = NUnit.Framework.TestCaseAttribute;
+#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
+#endif
using Ooui;
diff --git a/Tests/MessageSendTests.cs b/Tests/MessageSendTests.cs
index 8c239db..0e6e0d8 100644
--- a/Tests/MessageSendTests.cs
+++ b/Tests/MessageSendTests.cs
@@ -1,5 +1,12 @@
using System;
+
+#if NUNIT
+using NUnit.Framework;
+using TestClassAttribute = NUnit.Framework.TestFixtureAttribute;
+using TestMethodAttribute = NUnit.Framework.TestCaseAttribute;
+#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
+#endif
using Ooui;
diff --git a/Tests/NodeTests.cs b/Tests/NodeTests.cs
index a4f4aa7..24eb223 100644
--- a/Tests/NodeTests.cs
+++ b/Tests/NodeTests.cs
@@ -1,5 +1,12 @@
using System;
+
+#if NUNIT
+using NUnit.Framework;
+using TestClassAttribute = NUnit.Framework.TestFixtureAttribute;
+using TestMethodAttribute = NUnit.Framework.TestCaseAttribute;
+#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
+#endif
using Ooui;
diff --git a/Tests/StyleTests.cs b/Tests/StyleTests.cs
index 4511026..35772ff 100644
--- a/Tests/StyleTests.cs
+++ b/Tests/StyleTests.cs
@@ -1,5 +1,12 @@
using System;
+
+#if NUNIT
+using NUnit.Framework;
+using TestClassAttribute = NUnit.Framework.TestFixtureAttribute;
+using TestMethodAttribute = NUnit.Framework.TestCaseAttribute;
+#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
+#endif
using Ooui;
diff --git a/Tests/UITests.cs b/Tests/UITests.cs
index 1e480ab..b99965d 100644
--- a/Tests/UITests.cs
+++ b/Tests/UITests.cs
@@ -1,5 +1,12 @@
using System;
+
+#if NUNIT
+using NUnit.Framework;
+using TestClassAttribute = NUnit.Framework.TestFixtureAttribute;
+using TestMethodAttribute = NUnit.Framework.TestCaseAttribute;
+#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
+#endif
using Ooui;