public void CheckAsynchronousDiscoveryWorks_AsyncModeIsFalse() { var fixedObjects = new Dictionary <int, object>(); fixedObjects [0] = "0"; var builders = new Dictionary <int, ObjectBuilders.IObjectBuilder <int> >(); var builder = new CheckAsynchronousDiscoveryWorksObjectBuilder(false); builders [1] = builder; var obp = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(builders, fixedObjects); var context = new ObjectContext <int>(null, obp, _taskRunner); var info = context.BuildObject(1); Assert.IsNotNull(info); Assert.AreEqual(ObjectBuildingStates.DependenciesKnown, info.ObjectBuildingState); info.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, info.ObjectBuildingState); Assert.IsInstanceOfType(info.BuiltObject, typeof(string)); Assert.AreEqual("Wrapped 0", (string)info.BuiltObject); Assert.IsTrue(builder.DiscoveryThreadID.HasValue); Assert.AreEqual(System.Threading.Thread.CurrentThread.ManagedThreadId, builder.DiscoveryThreadID.Value); }
public void RecursiveDependencies_Standard() { var fixedObjects = new Dictionary <int, object>(); fixedObjects [0] = 1; fixedObjects [1] = "Object 1"; fixedObjects [2] = "Object 2"; var builders = new Dictionary <int, ObjectBuilders.IObjectBuilder <int> >(); var builder = new RecursiveDependenciesObjectBuilder(); builders [3] = builder; var obp = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(builders, fixedObjects); var context = new ObjectContext <int>(null, obp, _taskRunner); var info = context.BuildObject(3); Assert.IsNotNull(info); info.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, info.ObjectBuildingState); Assert.IsInstanceOfType(info.BuiltObject, typeof(string)); Assert.AreEqual("Object 1", (string)info.BuiltObject); }
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 MissingBuilder() { var fixedObjects = new Dictionary <int, object>(); fixedObjects [0] = "0"; fixedObjects [1] = "1"; var obp = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(null, fixedObjects); var context = new ObjectContext <int>(null, obp, _taskRunner); var info = context.BuildObject(2); Assert.IsNotNull(info); info.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.NoBuilderAvailable, info.ObjectBuildingState); }
public void BuildSimpleObject() { var fixedObjects = new Dictionary <int, object>(); fixedObjects [0] = true; var objectBuilderProvider = new ObjectBuilders.Providers.FixedObjectBuilderProvider <int>(null, fixedObjects); var context = new ObjectContext <int>(null, objectBuilderProvider, _taskRunner); var info = context.BuildObject(0); Assert.IsNotNull(info); info.ObjectBuiltOrFailureWaitHandle.WaitOne(); Assert.AreEqual(ObjectBuildingStates.ObjectBuilt, info.ObjectBuildingState); Assert.IsInstanceOfType(info.BuiltObject, typeof(bool)); Assert.IsTrue((bool)info.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); }