 			context.initialize();
 		}
 
+		[Test]
+		public function injector_should_be_childInjector_if_parent_provided_and_no_injector_given():void
+		{
+			const parent:IContext = new Context();
+			parent.initialize();
+			context.parent = parent;
+			context.initialize();
+			assertThat(context.injector.parentInjector, strictlyEqualTo(parent.injector));
+		}
 
-		[Before]
+		[Test]
+		public function provided_dispatcher_should_be_used():void
+		{
+			const providedDispatcher:EventDispatcher = new EventDispatcher();
+			context.dispatcher = providedDispatcher;
+			context.initialize();
+			assertThat(context.dispatcher, strictlyEqualTo(providedDispatcher));
+		}
+
+		[Test]
+		public function provided_injector_should_be_used():void
+		{
+			const providedInjector:Injector = new Injector();
+			context.injector = providedInjector;
+			context.initialize();
+			assertThat(context.injector, strictlyEqualTo(providedInjector));
+		}
+
+		[Before(ui)]
 		public function setUp():void
 		{
 			context = new Context();
+			contextView = new UIComponent();
+			UIImpersonator.addChild(contextView);
+		}
+
+		[Test(expects='Error')]
+		public function setting_contextView_should_throw_if_context_already_initialized():void
+		{
+			context.initialize();
+			context.contextView = contextView;
+		}
+
+		[Test(expects='Error')]
+		public function setting_dispatcher_should_throw_if_context_already_initialized():void
+		{
+			context.initialize();
+			context.dispatcher = new EventDispatcher();
+		}
+
+		[Test(expects='Error')]
+		public function setting_injector_should_throw_if_context_already_initialized():void
+		{
+			context.initialize();
+			context.injector = new Injector();
+		}
+
+		[Test(expects='Error')]
+		public function setting_parent_should_throw_if_context_already_initialized():void
+		{
+			context.initialize();
+			context.parent = new Context();
 		}
 
 		[After]


		private var context:IContext;


		/*============================================================================*/
		/* Public Functions                                                           */
		/*============================================================================*/

		[Test(expects='Error')]
		public function destroy_should_throw_if_called_twice():void


package org.robotlegs.v2.context.impl
{
	import flash.display.DisplayObjectContainer;
	import flash.events.EventDispatcher;
	import mx.core.UIComponent;
	import org.flexunit.assertThat;
	import org.flexunit.asserts.assertEquals;
	import org.fluint.uiImpersonation.UIImpersonator;
	import org.hamcrest.object.notNullValue;
	import org.hamcrest.object.strictlyEqualTo;
	import org.robotlegs.v2.core.api.IContext;
	import org.robotlegs.v2.core.impl.Context;
	import org.swiftsuspenders.Injector;

	public class ContextTests
	{
