Example #1
0
        /// <summary>
        /// Set the parameters in the properties storage from a specified xml representation of the data.
        /// </summary>
        /// <param name="xml">The xml representation of the data.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <param name="handler">The handler that holds the builder- to parameter-type relation.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="InvalidCastException"><c>InvalidCastException</c> Problem building from serialization data.</exception>
        public IMemberBuildParameters SetParameters(string xml, IBuildDataDictionary properties, IBuildHandler handler)
        {
            Guard.NotNull(() => properties, properties);
            if (handler == null)
            {
                // Todo: or throw?
                return(new EmptyBuildParameters());
            }

            // <NStub.CSharp.ObjectGeneration.Builders.PropertyBuilder>
            var doc = new XmlDocument();

            doc.LoadXml(xml);

            IMemberBuildParameters setupPara = null;

            foreach (XmlNode child in doc.ChildNodes)
            {
                //var child = doc.FirstChild;
                if (handler.IsMultiBuilder)
                {
                    // Hier HAPERTS !!!!!!!!!!!!!!!!!!! multi fetchen ... document node klappt nicht
                    // setupPara = SetSingleNode(properties, handler, child, "Multi." + handler.Type.FullName, string.Empty);
                    setupPara = SetSingleNode(properties, handler, child);
                }
                else
                {
                    setupPara = SetSingleNode(properties, handler, child);
                }
            }

            return(setupPara);
        }
Example #2
0
        /// <summary>
        /// Get the parameters for the specified multi builder type, possibly creating it, if there
        /// is not yet one in the build data collection.
        /// </summary>
        /// <param name="key">The unique identifier for the set of parameter data.</param>
        /// <param name="builderType">Type of the builder to request a set of sample data for.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception>
        public IMultiBuildParameters GetMultiParameter(Guid key, Type builderType, IBuildDataDictionary properties)
        {
            Guard.NotNull(() => properties, properties);
            var paraType = this.buildHandlers[builderType].ParameterDataType;

            return(((BuilderSerializer)this.serializer).GetMultiParameter(key, builderType, paraType, properties));
        }
Example #3
0
        /// <summary>
        /// Get the parameters for the specified builder type, possibly creating it, if there
        /// is not yet one in the build data collection.
        /// </summary>
        /// <param name="builderType">Type of the builder to request a set of sample data for.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception>
        public IMemberBuildParameters GetParameters(Type builderType, IBuildDataDictionary properties)
        {
            Guard.NotNull(() => builderType, builderType);
            Guard.NotNull(() => properties, properties);
            var paraType = this.buildHandlers[builderType].ParameterDataType;

            return(this.serializer.GetParameters(builderType, paraType, properties));
        }
Example #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LoadAssemblyWorker"/> class.
 /// </summary>
 /// <param name="buildSystem">The build system.</param>
 /// <param name="buildData">The build properties data storage.</param>
 /// <param name="mainform">The application main window.</param>
 public LoadAssemblyWorker(IBuildSystem buildSystem, IBuildDataDictionary buildData, MainForm mainform)
 {
     Guard.NotNull(() => buildSystem, buildSystem);
     this.buildSystem = buildSystem;
     Guard.NotNull(() => buildData, buildData);
     this.buildData = buildData;
     Guard.NotNull(() => mainform, mainform);
     this.mainform = mainform;
 }
Example #5
0
        /// <summary>
        /// Gets the xml data representation of all registered <see cref="IMemberBuilder"/>s parameters.
        /// </summary>
        /// <param name="properties">The properties storage which stores the <see cref="IMemberBuildParameters"/> data to serialize.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        public string SerializeAllSetupData(IBuildDataDictionary properties)
        {
            Guard.NotEmpty(() => properties, properties);
            var handlers = this.buildHandlers.Values.AsEnumerable();

            return(this.serializer.SerializeAllHandlers(properties, handlers));

            // return NewMethod(properties, buildHandlers);
        }
Example #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LoadAssemblyWorker"/> class.
 /// </summary>
 /// <param name="buildSystem">The build system.</param>
 /// <param name="buildData">The build properties data storage.</param>
 /// <param name="mainform">The application main window.</param>
 public LoadAssemblyWorker(IBuildSystem buildSystem, IBuildDataDictionary buildData, MainForm mainform)
 {
     Guard.NotNull(() => buildSystem, buildSystem);
     this.buildSystem = buildSystem;
     Guard.NotNull(() => buildData, buildData);
     this.buildData = buildData;
     Guard.NotNull(() => mainform, mainform);
     this.mainform = mainform;
 }
Example #7
0
        /// <summary>
        /// Set the parameters in the properties storage from a specified xml representation of the data.
        /// </summary>
        /// <param name="xml">The xml representation of the data.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="InvalidCastException"><c>InvalidCastException</c> Problem building from serialization data.</exception>
        public IMemberBuildParameters SetParameters(string xml, IBuildDataDictionary properties)
        {
            Guard.NotNull(() => properties, properties);

            var           handlers = this.buildHandlers.Values.AsEnumerable();
            IBuildHandler handler  = this.serializer.DetermineIMemberBuilderFromXmlFragment(xml, handlers);

            return(this.serializer.SetParameters(xml, properties, handler));
        }
Example #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CodeTypeSetup"/> class.
 /// </summary>
 /// <param name="namespaceDetector">The namespace detector.</param>
 /// <param name="buildData">The build data properties.</param>
 /// <param name="testClassDeclaration">The class declaration of the object under test.</param>
 public CodeTypeSetup(NamespaceDetector namespaceDetector, IBuildDataDictionary buildData, CodeTypeDeclaration testClassDeclaration)
 {
     Guard.NotNull(() => namespaceDetector, namespaceDetector);
     this.namespaceDetector = namespaceDetector;
     Guard.NotNull(() => buildData, buildData);
     this.buildData = buildData;
     Guard.NotNull(() => testClassDeclaration, testClassDeclaration);
     this.testClassDeclaration = testClassDeclaration;
     //result = SetUp();
 }
Example #9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CSharpTestProjectBuilder"/> class.
        /// </summary>
        /// <param name="sbs">The system wide build system.</param>
        /// <param name="buildData">The build data properties.</param>
        /// <param name="projectGenerator">The project generator.</param>
        /// <param name="createGeneratorCallback">The callback to create new code
        /// generators per test class <see cref="CodeNamespace"/>.</param>
        /// <param name="logger">The logging method.</param>
        public CSharpTestProjectBuilder(
            IBuildSystem sbs,
            IBuildDataDictionary buildData,
            IProjectGenerator projectGenerator,
            Func <IBuildSystem, IBuildDataDictionary, ICodeGeneratorParameters, CodeNamespace, ICodeGenerator> createGeneratorCallback,
            Action <string> logger)
            : base(sbs, projectGenerator, OldOnCreateCodeGenerator, logger)
        {
            Guard.NotNull(() => buildData, buildData);
            Guard.NotNull(() => createGeneratorCallback, createGeneratorCallback);
            this.createGeneratorCallback = createGeneratorCallback;

            // properties = SetUpBuildProperties();
            this.properties = SetUpBuildProperties(buildData);
        }
Example #10
0
        /// <summary>
        /// Get the parameters for the specified builder type, possibly creating it, if there
        /// is not yet one in the build data collection.
        /// </summary>
        /// <param name="builderType">Type of the builder to request a set of sample data for.</param>
        /// <param name="paraType">Type of the parameter class.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception>
        public IMemberBuildParameters GetParameters(Type builderType, Type paraType, IBuildDataDictionary properties)
        {
            Guard.NotNull(() => properties, properties);
            IBuilderData result;
            var          found = properties.TryGetValue(string.Empty + builderType.FullName, out result);

            if (found)
            {
                return(result as IMemberBuildParameters);
            }

            var paraInstance = Activator.CreateInstance(paraType);
            var setupPara    = (IMemberBuildParameters)paraInstance;

            properties.AddDataItem(string.Empty + builderType.FullName, setupPara);
            return(setupPara);
        }
Example #11
0
        /// <summary>
        /// Set the parameters in the properties storage from a specified xml representation of the data.
        /// </summary>
        /// <param name="xml">The xml representation of the data.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <param name="handlers">The list of existing handlers to investigate.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="InvalidCastException"><c>InvalidCastException</c> Problem building from serialization data.</exception>
        public IEnumerable<IMemberBuildParameters> DeserializeAllSetupData(
            string xml, IBuildDataDictionary properties, IEnumerable<IBuildHandler> handlers)
        {
            // <NStub.CSharp.ObjectGeneration.Builders.PropertyBuilder>
            var plist = new List<IMemberBuildParameters>();
            var doc = new XmlDocument();
            doc.LoadXml(xml);
            foreach(XmlElement item in doc[BuilderConstants.BuildParametersXmlId])
            {
                IBuildHandler handler = this.DetermineIMemberBuilderFromXmlFragment(item.OuterXml, handlers);
                var para = this.SetParameters(item.OuterXml, properties, handler);

                plist.Add(para);

                // yield return para;
            }

            return plist;
        }
Example #12
0
        /// <summary>
        /// Set the parameters in the properties storage from a specified xml representation of the data.
        /// </summary>
        /// <param name="xml">The xml representation of the data.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <param name="handlers">The list of existing handlers to investigate.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="InvalidCastException"><c>InvalidCastException</c> Problem building from serialization data.</exception>
        public IEnumerable <IMemberBuildParameters> DeserializeAllSetupData(
            string xml, IBuildDataDictionary properties, IEnumerable <IBuildHandler> handlers)
        {
            // <NStub.CSharp.ObjectGeneration.Builders.PropertyBuilder>
            var plist = new List <IMemberBuildParameters>();
            var doc   = new XmlDocument();

            doc.LoadXml(xml);
            foreach (XmlElement item in doc[BuilderConstants.BuildParametersXmlId])
            {
                IBuildHandler handler = this.DetermineIMemberBuilderFromXmlFragment(item.OuterXml, handlers);
                var           para    = this.SetParameters(item.OuterXml, properties, handler);

                plist.Add(para);

                // yield return para;
            }

            return(plist);
        }
Example #13
0
        /// <summary>
        /// Gets the user defined data for <see cref="IMultiBuilder"/> builder types from the specified build data storage.
        /// </summary>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>A lookup collection with the defined parameters.</returns>
        public virtual IEnumerable <MultiLookup> MultiParameters(IBuildDataDictionary properties)
        {
            // public virtual IEnumerable<IReadOnlyDictionary<string, IBuilderData>> MultiParameters(IBuildDataDictionary properties)
            var multis = this.buildHandlers.Where(e => e.Value.IsMultiBuilder);

            var multiparamsxx = multis
                                .SelectMany(
                e =>
            {
                // var le = ((BuilderSerializer)serializer).GetMultiParameters(e.Value.Type, e.Value.ParameterDataType, properties)
                // .Keys.Select(x => x);
                var lox = ((BuilderSerializer)this.serializer)
                          .GetMultiParameters(e.Value.Type, e.Value.ParameterDataType, properties);
                IEnumerable <IBuilderData> lo = new List <IBuilderData>();
                if (lox != null)
                {
                    lo = lox.Values.Select(x => x);
                }

                return(lo);
            },
                (a, v) => new MultiLookup {
                BuilderType = a.Key, Parameters = (IMultiBuildParameters)v
            });

            /*var multiparams = multis
             *  .Select((e) =>
             *  {
             *      var lo = ((BuilderSerializer)serializer).GetMultiParameters(e.Value.Type, e.Value.ParameterDataType, properties)
             *          .Values.Select(x=>x);
             *      // var mlookup = new MultiLookup() { BuilderType = e.Key, Lookup = lo, Key = ((IMultiBuildParameters)e.Value).Id };
             *      var mlookup = new MultiLookup() { BuilderType = e.Key,
             *          Parameters = ((IMultiBuildParameters)lo),
             *          //Key = ((IMultiBuildParameters)e.Value).Id
             *      };
             *      return mlookup;
             *  });*/

            // var result = this.buildHandlers.Values.Select(e => e.Type);
            return(multiparamsxx);
        }
Example #14
0
        /// <summary>
        /// SetUp the default build properties.
        /// </summary>
        /// <param name="buildData">The incoming build data.</param>
        /// <returns>A new <see cref="BuildDataDictionary"/>, merged with the input <paramref name="buildData"/>.</returns>
        private static BuildDataDictionary SetUpBuildProperties(IBuildDataDictionary buildData)
        {
            var props = new BuildDataDictionary();

            // ReadOnlyCollection
            foreach (var category in buildData.Data())
            {
                foreach (var item in category.Value)
                {
                    props.AddDataItem(category.Key, item.Key, item.Value);
                }

                // props.AddDataItem(item.Key, item,);
            }

            props.AddDataItem("DasGuuuut", new EmptyBuildParameters());
            props.AddDataItem("EinTest", new StringConstantBuildParameter("Der Parameter!"));

            // Todo: !!!
            return(props);
        }
Example #15
0
        /// <summary>
        /// Gets the xml data representation of all registered <see cref="IBuildHandler"/>s.
        /// </summary>
        /// <param name="properties">The properties storage which stores the <see cref="IMemberBuildParameters"/> data to serialize.</param>
        /// <param name="handlers">The handlers with the links to the <see cref="IMemberBuilder"/> types.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        public string SerializeAllHandlers(IBuildDataDictionary properties, IEnumerable <IBuildHandler> handlers)
        {
            var xmlDoc = new XmlDocument();
            var root   = xmlDoc.CreateElement(BuilderConstants.BuildParametersXmlId);

            xmlDoc.AppendChild(root);
            foreach (var handler in handlers)
            {
                if (handler.Type == null || handler.Type.FullName == null)
                {
                    continue;
                }

                if (handler.IsMultiBuilder)
                {
                    var builderLookup = this.GetMultiParameters(handler.Type, handler.ParameterDataType, properties);
                    if (builderLookup != null)
                    {
                        foreach (var item in builderLookup)
                        {
                            var key            = item.Key;
                            var builderData    = item.Value;
                            var multisetupPara = builderData as IMemberBuildParameters;
                            if (multisetupPara == null)
                            {
                                continue;
                            }
                            SerializeParameterToXmlDocument(xmlDoc, root, multisetupPara, handler.Type.FullName);
                        }
                    }
                }
                else
                {
                    var setupPara = this.GetParameters(handler.Type, handler.ParameterDataType, properties);
                    SerializeParameterToXmlDocument(xmlDoc, root, setupPara, handler.Type.FullName);
                }
            }

            return(PrettyPrintXml(xmlDoc.OuterXml));
        }
Example #16
0
        private void GeneratorConfigLoad(IBuildDataDictionary properties)
        {
            Log("--------- Loading Property Data (Start) ------------");

/*            var sampleXmlData =
 * @"<NStub.CSharp.ObjectGeneration.Builders.PropertyBuilder>" + Environment.NewLine +
 * @"  <PropertyBuilderUserParameters>" + Environment.NewLine +
 * @"    <MethodSuffix>HeuteMalWasNeues</MethodSuffix>" + Environment.NewLine +
 * @"    <UseDings>true</UseDings>" + Environment.NewLine +
 * @"    <Moep>0</Moep>" + Environment.NewLine +
 * @"    <Enabled>false</Enabled>" + Environment.NewLine +
 * @"  </PropertyBuilderUserParameters>" + Environment.NewLine +
 * @"</NStub.CSharp.ObjectGeneration.Builders.PropertyBuilder>";
 */

            // IBuildSystem sys;
            // sys.
            var filename = Path.Combine(Application.StartupPath, this.BuildPropertyFilename);

            if (File.Exists(filename))
            {
                var xml = File.ReadAllText(filename);
                Memberfactory.DeserializeAllSetupData(xml, properties);
            }
            else
            {
                Log("Build parameter file '" + filename + "' does not exist. Skipped loading.");
                HasSkippedLoading = true;
            }

            // log the parsed data to the logger.
            var xmlparsed = Memberfactory.SerializeAllSetupData(BuildProperties);

            Log("Property data in property store:");
            Log(xmlparsed);
            Log("--------- Loading Property Data (End) ------------");
        }
Example #17
0
        private void GeneratorConfigLoad(IBuildDataDictionary properties)
        {
            Log("--------- Loading Property Data (Start) ------------");

            /*            var sampleXmlData =
            @"<NStub.CSharp.ObjectGeneration.Builders.PropertyBuilder>" + Environment.NewLine +
            @"  <PropertyBuilderUserParameters>" + Environment.NewLine +
            @"    <MethodSuffix>HeuteMalWasNeues</MethodSuffix>" + Environment.NewLine +
            @"    <UseDings>true</UseDings>" + Environment.NewLine +
            @"    <Moep>0</Moep>" + Environment.NewLine +
            @"    <Enabled>false</Enabled>" + Environment.NewLine +
            @"  </PropertyBuilderUserParameters>" + Environment.NewLine +
            @"</NStub.CSharp.ObjectGeneration.Builders.PropertyBuilder>";
            */

            // IBuildSystem sys;
            // sys.
            var filename = Path.Combine(Application.StartupPath, this.BuildPropertyFilename);
            if (File.Exists(filename))
            {
                var xml = File.ReadAllText(filename);
                Memberfactory.DeserializeAllSetupData(xml, properties);
            }
            else
            {
                Log("Build parameter file '" + filename + "' does not exist. Skipped loading.");
                HasSkippedLoading = true;
            }

            // log the parsed data to the logger.
            var xmlparsed = Memberfactory.SerializeAllSetupData(BuildProperties);

            Log("Property data in property store:");
            Log(xmlparsed);
            Log("--------- Loading Property Data (End) ------------");
        }
Example #18
0
        /// <summary>
        /// Get the parameters for the specified builder type, possibly creating it, if there
        /// is not yet one in the build data collection.
        /// </summary>
        /// <param name="builderType">Type of the builder to request a set of sample data for.</param>
        /// <param name="paraType">Type of the parameter class.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception>
        public IReadOnlyDictionary<string, IBuilderData> GetMultiParameters(Type builderType, Type paraType, IBuildDataDictionary properties)
        {
            Guard.NotNull(() => properties, properties);
            Guard.CanBeAssigned(() => paraType, paraType, typeof(IMultiBuildParameters));
            //Guard.IsAssignableFrom<IMultiBuildParameters>(() => paraType, paraType);

                IReadOnlyDictionary<string, IBuilderData> category;
                var catfound = properties.Data().TryGetValue("Multi." + builderType.FullName, out category);
                if (catfound)
                {
                }

            return category;

            //var paraInstance = Activator.CreateInstance(paraType);
            //var setupPara = (IMemberBuildParameters)paraInstance;

            //properties.AddDataItem(string.Empty + builderType.FullName, setupPara);
            //return setupPara;
        }
Example #19
0
        /// <summary>
        /// Set the parameters in the properties storage from a specified xml representation of the data.
        /// </summary>
        /// <param name="xml">The xml representation of the data.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="InvalidCastException"><c>InvalidCastException</c> Problem building from serialization data.</exception>
        public IEnumerable <IMemberBuildParameters> DeserializeAllSetupData(string xml, IBuildDataDictionary properties)
        {
            var handlers = this.buildHandlers.Values.AsEnumerable();

            return(this.serializer.DeserializeAllSetupData(xml, properties, handlers));
        }
Example #20
0
        /// <summary>
        /// Get the parameters for the specified builder type, possibly creating it, if there
        /// is not yet one in the build data collection.
        /// </summary>
        /// <param name="builderType">Type of the builder to request a set of sample data for.</param>
        /// <param name="paraType">Type of the parameter class.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception>
        public IMemberBuildParameters GetParameters(Type builderType, Type paraType, IBuildDataDictionary properties)
        {
            Guard.NotNull(() => properties, properties);
            IBuilderData result;
            var found = properties.TryGetValue(string.Empty + builderType.FullName, out result);
            if (found)
            {
                return result as IMemberBuildParameters;
            }

            var paraInstance = Activator.CreateInstance(paraType);
            var setupPara = (IMemberBuildParameters)paraInstance;

            properties.AddDataItem(string.Empty + builderType.FullName, setupPara);
            return setupPara;
        }
Example #21
0
        public void GenerateWithAssemblyAndModuleAndClassesAndMethod()
        {
            //expected = false;
            var  outputFolder        = "Value ? of ou$tputFol*der";
            var  generatorType       = typeof(object);
            var  inputAssemblyPath   = "Value of inputAssemblyPath";
            char directorySeparator  = '\\';
            var  firstModuleName     = "TheTestNode";
            var  firstModuleTag      = "FirstModule";
            var  className1Namespace = "The.Namespace";
            var  className1          = "VeryPrettyFactory";
            var  className1FullName  = className1Namespace + "." + className1;
            var  classTag            = this.GetType();
            var  methodName          = "MyMethod";
            var  methodTag           = this.GetType().GetMethod("FakeMethod");

            var assemblyNode = new TestNode(firstModuleName + ".dll", TestNodeType.Assembly, null)
            {
                Checked = true
            };
            var moduleNode = new TestNode(firstModuleName + ".dll", TestNodeType.Module, firstModuleTag)
            {
                Checked = true
            };
            var classNode = new TestNode(className1FullName, TestNodeType.Class, classTag)
            {
                Checked = true
            };
            var methodNode = new TestNode(methodName, TestNodeType.Method, methodTag)
            {
                Checked = true
            };

            assemblyNode.Nodes.Add(moduleNode);
            moduleNode.Nodes.Add(classNode);
            classNode.Nodes.Add(methodNode);
            var mainNodes = new[] { assemblyNode };

            var referencedAssemblies = typeof(CSharpTestProjectBuilderTest).Assembly.GetReferencedAssemblies();
            var para       = new CodeGeneratorParameters(outputFolder);
            var runnerData = GeneratorRunnerData.Create(
                outputFolder, generatorType, inputAssemblyPath, mainNodes, referencedAssemblies);

            Expect.Call(sbs.DirectorySeparatorChar).Return(directorySeparator).Repeat.Any();
            Expect.Call(sbs.GetFileNameWithoutExtension(firstModuleName + ".dll")).Return(firstModuleName);
            var expectedDirectory = outputFolder + directorySeparator + firstModuleName + ".Tests";

            Expect.Call(sbs.CreateDirectory(expectedDirectory)).Return(null);
            Expect.Call(sbs.DirectoryExists(expectedDirectory)).Return(true);

            var prjReferencedAssemblies = new List <AssemblyName>();

            Expect.Call(projectGenerator.ReferencedAssemblies).Return(prjReferencedAssemblies).Repeat.Any();
            Expect.Call(projectGenerator.GenerateProjectFile).Repeat.Once();
            var classFilesList = new List <string>();

            Expect.Call(projectGenerator.ClassFiles).Return(classFilesList).Repeat.Once();

            var                  codeGenerator          = mocks.StrictMock <ICodeGenerator>();
            CodeNamespace        generatorCodeNamespace = null;
            IBuildDataDictionary generatorBuildData     = null;

            Expect.Call(createGeneratorCallback(sbs, null, null, null))
            //.Constraints(Is.Same(sbs), Is.TypeOf<CodeGeneratorParameters>(), Is.TypeOf<CodeNamespace>())
            .Constraints(
                Is.Same(sbs),
                Is.TypeOf <IBuildDataDictionary>() && Is.NotNull(),
                Is.TypeOf <CodeGeneratorParameters>() && Property.Value("OutputDirectory", expectedDirectory),
                Is.TypeOf <CodeNamespace>())
            //.Return(codeGenerator)
            .Do((Func <IBuildSystem, IBuildDataDictionary, ICodeGeneratorParameters, CodeNamespace, ICodeGenerator>)
                delegate(IBuildSystem buildSys, IBuildDataDictionary data, ICodeGeneratorParameters cgp, CodeNamespace cn)
            {
                Assert.AreEqual(expectedDirectory, cgp.OutputDirectory);
                Assert.IsFalse(cgp.UseSetupAndTearDown);

                generatorBuildData     = data;
                generatorCodeNamespace = cn;
                return(codeGenerator);
            });

            Expect.Call(codeGenerator.CodeNamespace   = null).PropertyBehavior();
            Expect.Call(codeGenerator.OutputDirectory = expectedDirectory);
            Expect.Call(codeGenerator.GenerateCode);

            // logging
            Expect.Call(delegate { this.logger(null); }).Constraints(Is.NotNull()).Repeat.AtLeastOnce();
            Expect.Call(projectGenerator.ProjectName).Return(firstModuleName).Repeat.Any();

            mocks.ReplayAll();

            testObject.GenerateTests(runnerData);
            //Assert.AreEqual(expected, actual);

            Assert.IsNotEmpty(generatorBuildData);
            Assert.Count(1, generatorBuildData);
            Assert.IsTrue(generatorBuildData.Contains(this.buildDataItem));

            Assert.IsNotEmpty(prjReferencedAssemblies);
            Assert.IsNotEmpty(classFilesList);

            Assert.IsEmpty(generatorCodeNamespace.Comments);
            Assert.IsEmpty(generatorCodeNamespace.Imports);
            Assert.AreEqual(className1Namespace, generatorCodeNamespace.Name);
            Assert.IsNotEmpty(generatorCodeNamespace.Types);
            Assert.IsEmpty(generatorCodeNamespace.UserData);

            var classDefinition1 = generatorCodeNamespace.Types[0];

            Assert.AreEqual(MemberAttributes.Private | MemberAttributes.Final, classDefinition1.Attributes);
            Assert.IsEmpty(classDefinition1.BaseTypes);
            Assert.IsEmpty(classDefinition1.Comments);
            Assert.IsEmpty(classDefinition1.CustomAttributes);

            Assert.AreEqual(className1FullName, classDefinition1.Name);
            Assert.IsTrue(classDefinition1.IsClass);
            Assert.IsEmpty(classDefinition1.StartDirectives);
            Assert.IsEmpty(classDefinition1.TypeParameters);

            Assert.IsNotEmpty(classDefinition1.UserData);
            Assert.Count(1, classDefinition1.UserData);
            Assert.AreEqual(classTag, classDefinition1.UserData[NStubConstants.UserDataClassTypeKey]);

            Assert.IsNotEmpty(classDefinition1.Members);
            var class1Members = classDefinition1.Members;

            // Todo: More checks on the generated types.
            mocks.VerifyAll();
        }
Example #22
0
        /// <summary>
        /// Get the parameters for the specified builder type, possibly creating it, if there
        /// is not yet one in the build data collection.
        /// </summary>
        /// <param name="key">The unique identifier of the parameter data set.</param>
        /// <param name="builderType">Type of the builder to request a set of sample data for.</param>
        /// <param name="paraType">Type of the parameter class.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception>
        public IMultiBuildParameters GetMultiParameter(Guid key, Type builderType, Type paraType, IBuildDataDictionary properties)
        {
            Guard.NotNull(() => properties, properties);
            Guard.CanBeAssigned(()=> paraType, paraType, typeof(IMultiBuildParameters));

            IBuilderData result;

            if (key == null || key == Guid.Empty)
            {
                key = Guid.NewGuid();
            }
            else
            {
                IReadOnlyDictionary<string, IBuilderData> category;
                var catfound = properties.Data().TryGetValue("Multi." + builderType.FullName, out category);
                if (catfound)
                {
                    var found = category.TryGetValue(key.ToString(), out result);
                    if (found)
                    {
                        return result as IMultiBuildParameters;
                    }
                }
            }

            var paraInstance = Activator.CreateInstance(paraType);
            var setupPara = (IMultiBuildParameters)paraInstance;

            properties.AddDataItem("Multi." + builderType.FullName, key.ToString(), setupPara);
            setupPara.Id = key;
            return setupPara;

            //var paraInstance = Activator.CreateInstance(paraType);
            //var setupPara = (IMemberBuildParameters)paraInstance;

            //properties.AddDataItem(string.Empty + builderType.FullName, setupPara);
            //return setupPara;
        }
Example #23
0
        private IMemberBuildParameters SetSingleNode(IBuildDataDictionary properties, IBuildHandler handler, 
            XmlNode firstChild)
        {
            Guard.NotNull(() => properties, properties);
            Guard.NotNull(() => handler, handler);
            var paraType = handler.ParameterDataType;
            if (!typeof(IBuilderData).IsAssignableFrom(paraType))
            {
                throw new ArgumentOutOfRangeException("handler",
                    "The handler for MemberBuilder '" + handler.Type.FullName +
                    "' is mapping to a invalid parameter of '" + handler.ParameterDataType.FullName + "' type. " +
                "Parameter types have to implement the '" + typeof(IBuilderData).FullName + "' interface.");
            }
            object paraInstance = null;
            if (handler.IsMultiBuilder)
            {
                if (!typeof(IMultiBuildParameters).IsAssignableFrom(paraType))
                {
                    throw new ArgumentOutOfRangeException("handler",
                        "Requesting a parameter type of '" + firstChild.Name +
                        "' (via Xml) for the '" + handler.ParameterDataType.FullName + "' handler assigned type. " +
                    "Parameter types have to implement the '" + typeof(IMultiBuildParameters).FullName + "' interface.");
                }

                // null check paraType
                var xxx = paraType.BaseType.GetGenericTypeDefinition();
                var xxxx = xxx.BaseType.GetGenericTypeDefinition();

                // null check xxxx
                var serializer2 = xxxx.BaseType.GetGenericTypeDefinition();

                // Todo: This strange thingy ... very good checking and logging! :)
                // null check serializer2
                paraInstance = serializer2
                    .MakeGenericType(paraType)
                    .GetMethod("Deserialize", new[] { typeof(string) })
                    .Invoke(null, new object[] { firstChild.InnerXml });
            }
            else
            {

                if (!typeof(IMemberBuildParameters).IsAssignableFrom(paraType))
                {
                    throw new ArgumentOutOfRangeException("handler",
                        "Requesting a parameter type for '" + firstChild.Name +
                        "' (via Xml) for the '" + paraType.FullName + "' handler assigned type. " +
                    "Parameter types have to implement the '" + typeof(IMemberBuildParameters).FullName + "' interface.");
                }

                // Todo: really need this stuff here? should this be done in the handler construction?
                // for example: checking if a multibuilder has IMultiBuildParameters and a
                // normal builder has IMemberBuildParameters.
                var xmlParaType = firstChild.FirstChild.Name;
                if (xmlParaType != paraType.Name)
                {
                    throw new ArgumentOutOfRangeException("firstChild",
                        "Requesting a parameter type of '" + xmlParaType + "' (via Xml). " +
                    "Parameter types for the '" + handler.Type.FullName + "' builder have to be of the '" + paraType.FullName + "' kind.");
                }

                // null check paraType
                var xxxx = paraType.BaseType.GetGenericTypeDefinition();

                // null check xxxx
                var serializer2 = xxxx.BaseType.GetGenericTypeDefinition();

                // Todo: This strange thingy ... very good checking and logging! :)
                // null check serializer2
                paraInstance = serializer2
                    .MakeGenericType(paraType)
                    .GetMethod("Deserialize", new[] { typeof(string) })
                    .Invoke(null, new object[] { firstChild.InnerXml });
            }

            var setupPara = (IMemberBuildParameters)paraInstance;
            try
            {
                var propertyKey = handler.Type.FullName;

                // IBuilderData property;
                // var found = properties.TryGetValue(propertyKey, out property);
                // if (found)
                // {
                if (handler.IsMultiBuilder)
                {
                    var multiPara = setupPara as IMultiBuildParameters;
                    properties.AddDataItem("Multi." + handler.Type.FullName, multiPara.Id.ToString(), setupPara, true);
                 }
                 else
                 {
                    properties.AddDataItem(propertyKey, setupPara, true);
                 }

                // return setupPara;
                // }
                // properties.AddDataItem(propertyKey, setupPara);
            }
            catch (Exception ex)
            {
                var message = string.Format(
                    "Problem building {0} from serialization data.{1}{2}{3}",
                    handler.Type.FullName,
                    Environment.NewLine,
                    firstChild.InnerXml,
                    Environment.NewLine);
                throw new InvalidCastException(message, ex);
            }
            return setupPara;
        }
Example #24
0
        /// <summary>
        /// Gets the xml data representation of all registered <see cref="IBuildHandler"/>s.
        /// </summary>
        /// <param name="properties">The properties storage which stores the <see cref="IMemberBuildParameters"/> data to serialize.</param>
        /// <param name="handlers">The handlers with the links to the <see cref="IMemberBuilder"/> types.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        public string SerializeAllHandlers(IBuildDataDictionary properties, IEnumerable<IBuildHandler> handlers)
        {
            var xmlDoc = new XmlDocument();
            var root = xmlDoc.CreateElement(BuilderConstants.BuildParametersXmlId);
            xmlDoc.AppendChild(root);
            foreach(var handler in handlers)
            {
                if (handler.Type == null || handler.Type.FullName == null)
                {
                    continue;
                }

                if (handler.IsMultiBuilder)
                {
                    var builderLookup = this.GetMultiParameters(handler.Type, handler.ParameterDataType, properties);
                    if (builderLookup != null)
                    {
                        foreach (var item in builderLookup)
                        {
                            var key = item.Key;
                            var builderData = item.Value;
                            var multisetupPara = builderData as IMemberBuildParameters;
                            if (multisetupPara == null)
                            {
                                continue;
                            }
                            SerializeParameterToXmlDocument(xmlDoc, root, multisetupPara, handler.Type.FullName);
                        }
                    }
                }
                else
                {
                    var setupPara = this.GetParameters(handler.Type, handler.ParameterDataType, properties);
                    SerializeParameterToXmlDocument(xmlDoc, root, setupPara, handler.Type.FullName);
                }
            }

            return PrettyPrintXml(xmlDoc.OuterXml);
        }
Example #25
0
        /// <summary>
        /// Get the parameters for the specified builder type, possibly creating it, if there
        /// is not yet one in the build data collection.
        /// </summary>
        /// <param name="builderType">Type of the builder to request a set of sample data for.</param>
        /// <param name="paraType">Type of the parameter class.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception>
        public IReadOnlyDictionary <string, IBuilderData> GetMultiParameters(Type builderType, Type paraType, IBuildDataDictionary properties)
        {
            Guard.NotNull(() => properties, properties);
            Guard.CanBeAssigned(() => paraType, paraType, typeof(IMultiBuildParameters));
            //Guard.IsAssignableFrom<IMultiBuildParameters>(() => paraType, paraType);


            IReadOnlyDictionary <string, IBuilderData> category;
            var catfound = properties.Data().TryGetValue("Multi." + builderType.FullName, out category);

            if (catfound)
            {
            }

            return(category);

            //var paraInstance = Activator.CreateInstance(paraType);
            //var setupPara = (IMemberBuildParameters)paraInstance;

            //properties.AddDataItem(string.Empty + builderType.FullName, setupPara);
            //return setupPara;
        }
Example #26
0
        /// <summary>
        /// Set the parameters in the properties storage from a specified xml representation of the data.
        /// </summary>
        /// <param name="xml">The xml representation of the data.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <param name="handler">The handler that holds the builder- to parameter-type relation.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="InvalidCastException"><c>InvalidCastException</c> Problem building from serialization data.</exception>
        public IMemberBuildParameters SetParameters(string xml, IBuildDataDictionary properties, IBuildHandler handler)
        {
            Guard.NotNull(() => properties, properties);
            if (handler == null)
            {
                // Todo: or throw?
                return new EmptyBuildParameters();
            }

            // <NStub.CSharp.ObjectGeneration.Builders.PropertyBuilder>
            var doc = new XmlDocument();
            doc.LoadXml(xml);

            IMemberBuildParameters setupPara = null;
            foreach (XmlNode child in doc.ChildNodes)
            {
                //var child = doc.FirstChild;
                if (handler.IsMultiBuilder)
                {
                    // Hier HAPERTS !!!!!!!!!!!!!!!!!!! multi fetchen ... document node klappt nicht
                    // setupPara = SetSingleNode(properties, handler, child, "Multi." + handler.Type.FullName, string.Empty);
                    setupPara = SetSingleNode(properties, handler, child);
                }
                else
                {
                    setupPara = SetSingleNode(properties, handler, child);
                }
            }

            return setupPara;
        }
Example #27
0
        /// <summary>
        /// Get the parameters for the specified builder type, possibly creating it, if there
        /// is not yet one in the build data collection.
        /// </summary>
        /// <param name="key">The unique identifier of the parameter data set.</param>
        /// <param name="builderType">Type of the builder to request a set of sample data for.</param>
        /// <param name="paraType">Type of the parameter class.</param>
        /// <param name="properties">The global properties storage.</param>
        /// <returns>
        /// A new instance of a matching parameter data set for the specified builder.
        /// </returns>
        /// <exception cref="KeyNotFoundException">The given <paramref name="builderType"/> was not present in the lookup.</exception>
        public IMultiBuildParameters GetMultiParameter(Guid key, Type builderType, Type paraType, IBuildDataDictionary properties)
        {
            Guard.NotNull(() => properties, properties);
            Guard.CanBeAssigned(() => paraType, paraType, typeof(IMultiBuildParameters));

            IBuilderData result;

            if (key == null || key == Guid.Empty)
            {
                key = Guid.NewGuid();
            }
            else
            {
                IReadOnlyDictionary <string, IBuilderData> category;
                var catfound = properties.Data().TryGetValue("Multi." + builderType.FullName, out category);
                if (catfound)
                {
                    var found = category.TryGetValue(key.ToString(), out result);
                    if (found)
                    {
                        return(result as IMultiBuildParameters);
                    }
                }
            }

            var paraInstance = Activator.CreateInstance(paraType);
            var setupPara    = (IMultiBuildParameters)paraInstance;

            properties.AddDataItem("Multi." + builderType.FullName, key.ToString(), setupPara);
            setupPara.Id = key;
            return(setupPara);

            //var paraInstance = Activator.CreateInstance(paraType);
            //var setupPara = (IMemberBuildParameters)paraInstance;

            //properties.AddDataItem(string.Empty + builderType.FullName, setupPara);
            //return setupPara;
        }
Example #28
0
        private IMemberBuildParameters SetSingleNode(IBuildDataDictionary properties, IBuildHandler handler,
                                                     XmlNode firstChild)
        {
            Guard.NotNull(() => properties, properties);
            Guard.NotNull(() => handler, handler);
            var paraType = handler.ParameterDataType;

            if (!typeof(IBuilderData).IsAssignableFrom(paraType))
            {
                throw new ArgumentOutOfRangeException("handler",
                                                      "The handler for MemberBuilder '" + handler.Type.FullName +
                                                      "' is mapping to a invalid parameter of '" + handler.ParameterDataType.FullName + "' type. " +
                                                      "Parameter types have to implement the '" + typeof(IBuilderData).FullName + "' interface.");
            }
            object paraInstance = null;

            if (handler.IsMultiBuilder)
            {
                if (!typeof(IMultiBuildParameters).IsAssignableFrom(paraType))
                {
                    throw new ArgumentOutOfRangeException("handler",
                                                          "Requesting a parameter type of '" + firstChild.Name +
                                                          "' (via Xml) for the '" + handler.ParameterDataType.FullName + "' handler assigned type. " +
                                                          "Parameter types have to implement the '" + typeof(IMultiBuildParameters).FullName + "' interface.");
                }

                // null check paraType
                var xxx  = paraType.BaseType.GetGenericTypeDefinition();
                var xxxx = xxx.BaseType.GetGenericTypeDefinition();

                // null check xxxx
                var serializer2 = xxxx.BaseType.GetGenericTypeDefinition();

                // Todo: This strange thingy ... very good checking and logging! :)
                // null check serializer2
                paraInstance = serializer2
                               .MakeGenericType(paraType)
                               .GetMethod("Deserialize", new[] { typeof(string) })
                               .Invoke(null, new object[] { firstChild.InnerXml });
            }
            else
            {
                if (!typeof(IMemberBuildParameters).IsAssignableFrom(paraType))
                {
                    throw new ArgumentOutOfRangeException("handler",
                                                          "Requesting a parameter type for '" + firstChild.Name +
                                                          "' (via Xml) for the '" + paraType.FullName + "' handler assigned type. " +
                                                          "Parameter types have to implement the '" + typeof(IMemberBuildParameters).FullName + "' interface.");
                }

                // Todo: really need this stuff here? should this be done in the handler construction?
                // for example: checking if a multibuilder has IMultiBuildParameters and a
                // normal builder has IMemberBuildParameters.
                var xmlParaType = firstChild.FirstChild.Name;
                if (xmlParaType != paraType.Name)
                {
                    throw new ArgumentOutOfRangeException("firstChild",
                                                          "Requesting a parameter type of '" + xmlParaType + "' (via Xml). " +
                                                          "Parameter types for the '" + handler.Type.FullName + "' builder have to be of the '" + paraType.FullName + "' kind.");
                }

                // null check paraType
                var xxxx = paraType.BaseType.GetGenericTypeDefinition();

                // null check xxxx
                var serializer2 = xxxx.BaseType.GetGenericTypeDefinition();

                // Todo: This strange thingy ... very good checking and logging! :)
                // null check serializer2
                paraInstance = serializer2
                               .MakeGenericType(paraType)
                               .GetMethod("Deserialize", new[] { typeof(string) })
                               .Invoke(null, new object[] { firstChild.InnerXml });
            }

            var setupPara = (IMemberBuildParameters)paraInstance;

            try
            {
                var propertyKey = handler.Type.FullName;

                // IBuilderData property;
                // var found = properties.TryGetValue(propertyKey, out property);
                // if (found)
                // {
                if (handler.IsMultiBuilder)
                {
                    var multiPara = setupPara as IMultiBuildParameters;
                    properties.AddDataItem("Multi." + handler.Type.FullName, multiPara.Id.ToString(), setupPara, true);
                }
                else
                {
                    properties.AddDataItem(propertyKey, setupPara, true);
                }

                // return setupPara;
                // }
                // properties.AddDataItem(propertyKey, setupPara);
            }
            catch (Exception ex)
            {
                var message = string.Format(
                    "Problem building {0} from serialization data.{1}{2}{3}",
                    handler.Type.FullName,
                    Environment.NewLine,
                    firstChild.InnerXml,
                    Environment.NewLine);
                throw new InvalidCastException(message, ex);
            }
            return(setupPara);
        }