public void BypassingTaskFunctionality_Failure() { var exception = new Exception("Raaaaaaaaaaa"); var obp = new ObjectBuilders.Providers.FunctionBasedObjectBuilderProvider <int>((address) => { return(new ObjectBuilders.FunctionBasedObjectBuilder <int>( (context, address) => { return new ObjectBuilders.DependencySet <int>(); }, (context, address, builtDependencies) => { return null; }, (context, address, dependencies) => throw new Exception("Don't call me") )); }); var taskRunner = new Tasks.FunctionBasedTaskRunner((task) => { var objectBuildingTask = task as Tasks.IObjectBuildingTask <int>; if (objectBuildingTask == null) { throw new InvalidOperationException("Er...."); } objectBuildingTask.SetException(exception); }); var objectContext = new ObjectContext <int>(null, obp, taskRunner); var obj = objectContext.BuildObject(5); Assert.IsTrue(obj.ObjectBuiltOrFailureWaitHandle.WaitOne()); Assert.AreEqual(ObjectBuildingStates.Failure, obj.ObjectBuildingState); Assert.AreSame(exception, obj.Exception); }
public void SimpleDependencyOverride() { var fixedObjects = new Dictionary <int, object>(); fixedObjects [0] = "0"; fixedObjects [1] = "1"; var builders = new Dictionary <int, ObjectBuilders.IObjectBuilder <int> >(); builders [2] = new ObjectBuilders.FunctionBasedObjectBuilder <int>( (builderContext, address) => { var dependencySet = new ObjectBuilders.DependencySet <int>(); dependencySet.AddDependency("0", 0); dependencySet.AddDependency("1", 1); return(dependencySet); }, (builderContext, address, dependencies) => null, (builderContext, address, dependencies) => { Assert.IsTrue(dependencies.TryGetDependency("0", out var dependencyNumber1)); Assert.IsTrue(dependencies.TryGetDependency("1", out var dependencyNumber2)); var builtObject = string.Format("{0}-{1}-{2}", address, dependencyNumber1.BuiltObject, dependencyNumber2.BuiltObject); return(builtObject); }); var obp = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(builders, fixedObjects); var context = new ObjectContext <int>(null, obp, _taskRunner); var info = context.BuildObject(2); Assert.IsNotNull(info); info.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, info.ObjectBuildingState); Assert.IsNotNull(info.BuiltObject); Assert.IsInstanceOfType(info.BuiltObject, typeof(string)); Assert.AreEqual("2-0-1", (string)info.BuiltObject); var overrides = new Dictionary <int, object>(); overrides [0] = "Update"; var overrideOBP = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(null, overrides); var overrideContext = new ObjectContext <int>(context, overrideOBP, _taskRunner); var overrideInfo = overrideContext.BuildObject(2); Assert.IsNotNull(overrideInfo); overrideInfo.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, overrideInfo.ObjectBuildingState); Assert.AreNotSame(info.BuiltObject, overrideInfo.BuiltObject); Assert.IsInstanceOfType(overrideInfo.BuiltObject, typeof(string)); Assert.AreEqual("2-Update-1", overrideInfo.BuiltObject); }
public void CheckObjectLocking() { var fixedObjects = new Dictionary <int, object>(); fixedObjects [0] = "0a"; var fixedObjects2 = new Dictionary <int, object>(); fixedObjects2 [0] = "0b"; var builders = new Dictionary <int, ObjectBuilders.IObjectBuilder <int> >(); var obp = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(builders, fixedObjects); var context = new ObjectContext <int>(null, obp, _taskRunner); obp.ObjectBuilders [1] = new ObjectBuilders.FunctionBasedObjectBuilder <int>( (builderContext, address) => { var dependencySet = new ObjectBuilders.DependencySet <int>(); dependencySet.AddDependency("live", 0, null); dependencySet.AddDependency("fixed", 0, context); return(dependencySet); }, (builderContext, address, dependencies) => null, (builderContext, address, dependencies) => { Assert.IsTrue(dependencies.TryGetDependency("live", out var liveDependency)); Assert.IsTrue(dependencies.TryGetDependency("fixed", out var fixedDependency)); var builtObject = string.Format("{0}-{1}-{2}", address, fixedDependency.BuiltObject, liveDependency.BuiltObject); return(builtObject); }); var info = context.BuildObject(1); Assert.IsNotNull(info); info.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, info.ObjectBuildingState); Assert.IsNotNull(info.BuiltObject); Assert.IsInstanceOfType(info.BuiltObject, typeof(string)); Assert.AreEqual("1-0a-0a", (string)info.BuiltObject); var obpOverrides = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(null, fixedObjects2); var overrideContext = new ObjectContext <int>(context, obpOverrides, _taskRunner); var info2 = overrideContext.BuildObject(1); Assert.IsNotNull(info2); info2.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, info2.ObjectBuildingState); Assert.IsNotNull(info2.BuiltObject); Assert.IsInstanceOfType(info2.BuiltObject, typeof(string)); Assert.AreEqual("1-0a-0b", (string)info2.BuiltObject); }
public void BuildSimpleHeirarchySameContext() { var fixedObjects = new Dictionary <int, object>(); fixedObjects [0] = "0"; fixedObjects [1] = "1"; var builders = new Dictionary <int, ObjectBuilders.IObjectBuilder <int> >(); builders [2] = new ObjectBuilders.FunctionBasedObjectBuilder <int>( (builderContext, address) => { var dependencySet = new ObjectBuilders.DependencySet <int>(); dependencySet.AddDependency("0", 0); dependencySet.AddDependency("1", 1); return(dependencySet); }, (builderContext, address, dependencies) => null, (builderContext, address, dependencies) => { Assert.IsTrue(dependencies.TryGetDependency("0", out var dependencyNumber1)); Assert.IsTrue(dependencies.TryGetDependency("1", out var dependencyNumber2)); return(address.ToString()); }); var obp = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(builders, fixedObjects); var context = new ObjectContext <int>(null, obp, _taskRunner); var info = context.BuildObject(2); Assert.IsNotNull(info); info.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, info.ObjectBuildingState); Assert.IsInstanceOfType(info.BuiltObject, typeof(string)); Assert.AreEqual("2", (string)info.BuiltObject); }
public void OverrideWithDependencyChanges() { var fixedObjects = new Dictionary <int, object>(); fixedObjects [0] = "0"; fixedObjects [1] = "1"; fixedObjects [2] = "2"; var builders = new Dictionary <int, ObjectBuilders.IObjectBuilder <int> >(); builders [3] = new ObjectBuilders.FunctionBasedObjectBuilder <int>( (builderContext, address) => { var dependencySet = new ObjectBuilders.DependencySet <int>(); dependencySet.AddDependency("0", 0); dependencySet.AddDependency("1", 1); return(dependencySet); }, (builderContext, address, dependencies) => null, (builderContext, address, dependencies) => { Assert.IsTrue(dependencies.TryGetDependency("0", out var dependencyNumber1)); Assert.IsTrue(dependencies.TryGetDependency("1", out var dependencyNumber2)); var builtObject = string.Format("{0}-{1}-{2}", address, dependencyNumber1.BuiltObject, dependencyNumber2.BuiltObject); return(builtObject); }); var obp = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(builders, fixedObjects); var context = new ObjectContext <int>(null, obp, _taskRunner); var buildingInfo3 = context.BuildObject(3); buildingInfo3.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, buildingInfo3.ObjectBuildingState); Assert.AreEqual("3-0-1", (string)buildingInfo3.BuiltObject); var buildersOverrides = new Dictionary <int, ObjectBuilders.IObjectBuilder <int> >(); buildersOverrides [3] = new ObjectBuilders.FunctionBasedObjectBuilder <int>( (builderContext, address) => { var dependencySet = new ObjectBuilders.DependencySet <int>(); dependencySet.AddDependency("1", 1); dependencySet.AddDependency("2", 2); return(dependencySet); }, (builderContext, address, dependencies) => null, (builderContext, address, dependencies) => { Assert.IsTrue(dependencies.TryGetDependency("1", out var dependencyNumber1)); Assert.IsTrue(dependencies.TryGetDependency("2", out var dependencyNumber2)); var builtObject = string.Format("{0}-{1}-{2}", address, dependencyNumber1.BuiltObject, dependencyNumber2.BuiltObject); return(builtObject); }); var obpOverrides = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(buildersOverrides, null); var overrideContext = new ObjectContext <int>(context, obpOverrides, _taskRunner); var overridenBuildingInfo3 = overrideContext.BuildObject(3); overridenBuildingInfo3.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, overridenBuildingInfo3.ObjectBuildingState); Assert.AreEqual("3-1-2", (string)overridenBuildingInfo3.BuiltObject); }