示例#1
0
        protected bool doMatch(ResultSet actual)
        {
            actualResultSet = actual;

            //This is needed if we don't use //ism
            if (expectedResultSet == null)
            {
                expectedResultSet = GetResultSet(expect);
            }

            if (TransformationProvider != null)
            {
                TransformationProvider.Transform(expectedResultSet);
            }

            result = Engine.Compare(actualResultSet, expectedResultSet);

            //  Math.Min for result.Difference limits the value to 1 if we've two non matching resultsets
            if ((int)persistanceChoice + Math.Min(1, (int)result.Difference) > 1)
            {
                if ((persistanceItems & PersistanceItems.expected) == PersistanceItems.expected)
                {
                    doPersist(expectedResultSet, GetPersistancePath("Expect"));
                }
                if ((persistanceItems & PersistanceItems.actual) == PersistanceItems.actual)
                {
                    doPersist(actualResultSet, GetPersistancePath("Actual"));
                }
            }

            return(result.Difference == ResultSetDifferenceType.None);
        }
        /// <summary>
        /// Searchs the fol configuration files and nest them.
        ///From Radim: http://stackoverflow.com/questions/19427333/how-to-find-a-projectitem-by-the-file-name
        /// </summary>
        /// <param name="projectItems">The project items.</param>
        private static void SearchFolConfigFilesAndNestThem(ProjectItems projectItems)
        {
            foreach (ProjectItem projectItem in projectItems)
            {
                string transFileName;

                if (projectItem.TryGetPropertyValue(ProjectItemExt.FullPathProperty, out transFileName))
                {
                    transFileName = Path.GetFileName(transFileName);
                    string configFileName;
                    if (TransformationProvider.CheckTransformationFileAndGetSourceFileFromIt(transFileName,
                                                                                             Options.Options.TransfomationFileNameRegexp, Options.Options.SourceFileRegexpMatchIndex,
                                                                                             out configFileName))
                    {
                        var configItem     = DteHelper.FindItemByName(projectItems, configFileName, true);
                        var itemToBeNested = DteHelper.FindItemByName(projectItems, transFileName, true);

                        if (configItem == null || itemToBeNested == null)
                        {
                            continue;
                        }

                        // ReSharper disable once UnusedVariable
                        var    pitn = configItem.ProjectItems.AddFromFile(itemToBeNested.GetFullPath());
                        string itemType;
                        if (itemToBeNested.TryGetPropertyValue(ProjectItemExt.ItemTypeProperty, out itemType))
                        {
                            pitn.TrySetPropertyValue(ProjectItemExt.ItemTypeProperty, itemType);
                        }
                    }
                }
            }
        }
示例#3
0
 public FVirtualFile(string virtualpath, FVirtualPathProvider virtualpathpprovider)
     : base(virtualpath)
 {
     _provider = virtualpathpprovider;
     _layoutProvider = new LayoutProvider();
     _transformationProvider = new TransformationProvider();
     _articleProvider = new ArticleProvider();
 }
示例#4
0
        public void CanConvertObjectWithNullFieldToArrays()
        {
            var obj = new { x = 1254, y = (object)null, z = (string)null };

            var arrays = TransformationProvider.ConvertObjectToArrays(obj);

            Assert.AreEqual(new[] { "x", "y", "z" }, arrays.Item1);
            Assert.AreEqual(new[] { "1254", null, null }, arrays.Item2);
        }
        /// <summary>
        /// Projects the supports transforms.
        /// </summary>
        /// <param name="project">The project.</param>
        /// <returns>
        /// [True] if project suppors transformation, otherwise [False]
        /// </returns>
        public static bool ProjectSupportsTransforms(IVsProject project)
        {
            string projectFullPath;

            if (ErrorHandler.Failed(project.GetMkDocument(VSConstants.VSITEMID_ROOT, out projectFullPath)))
            {
                return(false);
            }

            return(TransformationProvider.IsProjectSupported(projectFullPath));
        }
        /// <summary>
        /// Commands the callback.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        public override void CommandCallback(object sender, EventArgs e)
        {
            string fileName;
            var    result = SolutionHelper.IsCorrectItemForTransformationOperationsSelected(out fileName);

            if (!result)
            {
                return;
            }

            TransformationProvider.Transform(fileName,
                                             Options.Options.TransfomationFileNameRegexp, Options.Options.SourceFileRegexpMatchIndex);
        }
示例#7
0
        public void CanConvertObjectWithIndexedFieldToArrays()
        {
            var obj = new Gwelkghlw {
                Id = 1254
            };

            obj[12] = "qewgfwgewrgh";
            obj[13] = "eljpowwdoihgvwoihio";

            var arrays = TransformationProvider.ConvertObjectToArrays(obj);

            Assert.AreEqual(new[] { "Id" }, arrays.Item1);
            Assert.AreEqual(new[] { "1254" }, arrays.Item2);
        }
示例#8
0
        public void Transform_NativeTranformationUnknown_Exception()
        {
            var resultSet = new NBi.Core.ResultSet.ResultSet();

            resultSet.Load("\t;10");

            var transformation = Mock.Of <ITransformationInfo>
                                 (
                t => t.Language == LanguageType.Native &&
                t.OriginalType == NBi.Core.ResultSet.ColumnType.Text &&
                t.Code == "unknown"
                                 );

            var provider = new TransformationProvider();

            Assert.Throws <NotImplementedTransformationException>(() => provider.Add(new ColumnOrdinalIdentifier(0), transformation));
        }
示例#9
0
        public void Transform_NativeTranformationBlankToNull_Correct()
        {
            var resultSet = new NBi.Core.ResultSet.ResultSet();

            resultSet.Load("\t;10");

            var transformation = Mock.Of <ITransformationInfo>
                                 (
                t => t.Language == LanguageType.Native &&
                t.OriginalType == NBi.Core.ResultSet.ColumnType.Text &&
                t.Code == "blank-to-null"
                                 );

            var provider = new TransformationProvider();

            provider.Add(new ColumnOrdinalIdentifier(0), transformation);
            provider.Transform(resultSet);

            Assert.That(resultSet.Rows[0][0], Is.EqualTo("(null)"));
        }
示例#10
0
        public void Transform_NativeTranformationTrim_Correct()
        {
            var resultSet = new NBi.Core.ResultSet.ResultSet();

            resultSet.Load(" aaaa  ;10");

            var transformation = Mock.Of <ITransformationInfo>
                                 (
                t => t.Language == LanguageType.Native &&
                t.OriginalType == NBi.Core.ResultSet.ColumnType.Text &&
                t.Code == "text-to-trim"
                                 );

            var provider = new TransformationProvider();

            provider.Add(0, transformation);
            provider.Transform(resultSet);

            Assert.That(resultSet.Rows[0][0], Is.EqualTo("aaaa"));
        }
示例#11
0
        public void Transform_SimpleTranformation_Correct()
        {
            var resultSet = new NBi.Core.ResultSet.ResultSet();

            resultSet.Load("aaaa;10");

            var transformation = Mock.Of <ITransformationInfo>
                                 (
                t => t.Language == LanguageType.CSharp &&
                t.OriginalType == NBi.Core.ResultSet.ColumnType.Text &&
                t.Code == "value.Substring(0,1)"
                                 );

            var provider = new TransformationProvider();

            provider.Add(new ColumnOrdinalIdentifier(0), transformation);
            provider.Transform(resultSet);

            Assert.That(resultSet.Rows[0][0], Is.EqualTo("a"));
        }
示例#12
0
        public void Transform_NativeTranformationFirstCharWithContext_Correct()
        {
            var resultSet = new NBi.Core.ResultSet.ResultSet();

            resultSet.Load(new[] { new object[] { "123456789", 6 }, new object[] { "abcdefgh", 2 } });

            var transformation = Mock.Of <ITransformationInfo>
                                 (
                t => t.Language == LanguageType.Native &&
                t.OriginalType == ColumnType.Text &&
                t.Code == "text-to-first-chars(#1)"
                                 );

            var provider = new TransformationProvider(new ServiceLocator(), Context.None);

            provider.Add(new ColumnOrdinalIdentifier(0), transformation);
            provider.Transform(resultSet);

            Assert.That(resultSet.Rows[0][0], Is.EqualTo("123456"));
            Assert.That(resultSet.Rows[1][0], Is.EqualTo("ab"));
        }
示例#13
0
        public void Transform_TypeSwitch_Correct()
        {
            var resultSet = new NBi.Core.ResultSet.ResultSet();
            var obj       = new object[] { new DateTime(2016, 10, 1) };

            resultSet.Load(Enumerable.Repeat(obj, 1));

            var transformation = Mock.Of <ITransformationInfo>
                                 (
                t => t.Language == LanguageType.CSharp &&
                t.OriginalType == NBi.Core.ResultSet.ColumnType.DateTime &&
                t.Code == "value.Month + (value.Year-2000)*12"
                                 );

            var provider = new TransformationProvider();

            provider.Add(new ColumnOrdinalIdentifier(0), transformation);
            provider.Transform(resultSet);

            Assert.That(resultSet.Rows[0][0], Is.EqualTo(202));
        }
        /// <summary>
        /// Commands the callback.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
        /// <exception cref="System.NotImplementedException"></exception>
        public override void CommandCallback(object sender, EventArgs e)
        {
            string fileName;
            var    result = SolutionHelper.IsCorrectItemForTransformationOperationsSelected(out fileName);

            if (!result)
            {
                return;
            }


            var files = TransformationProvider.TransformToTemporaryFile(fileName,
                                                                        Options.Options.TransfomationFileNameRegexp, Options.Options.SourceFileRegexpMatchIndex);

            if (files == null)
            {
                return;
            }

            this.CompareFiles(files.Item1, files.Item2);
        }
示例#15
0
        public void Transform_SimpleTranformation_CorrectHandlingOfColumnNames()
        {
            var resultSet = new NBi.Core.ResultSet.ResultSet();

            resultSet.Load("aaaa;10");
            resultSet.Columns[0].ColumnName = "MyCol0";
            resultSet.Columns[1].ColumnName = "MyCol1";

            var transformation = Mock.Of <ITransformationInfo>
                                 (
                t => t.Language == LanguageType.CSharp &&
                t.OriginalType == ColumnType.Text &&
                t.Code == "value.Substring(0,1)"
                                 );

            var provider = new TransformationProvider(new ServiceLocator(), Context.None);

            provider.Add(new ColumnOrdinalIdentifier(0), transformation);
            provider.Transform(resultSet);

            Assert.That(resultSet.Columns[0].ColumnName, Is.EqualTo("MyCol0"));
            Assert.That(resultSet.Columns[1].ColumnName, Is.EqualTo("MyCol1"));
            Assert.That(resultSet.Columns.Count, Is.EqualTo(2));
        }
示例#16
0
        public void CanConvertNullObjectToArrays()
        {
            var arrays = TransformationProvider.ConvertObjectToArrays(null);

            Assert.IsNull(arrays);
        }
示例#17
0
        protected override BaseResultSetComparisonConstraint InstantiateConstraint(object obj, SettingsXml settings, TransformationProvider transformation)
        {
            var argsBuilder = new ResultSetResolverArgsBuilder(ServiceLocator);

            argsBuilder.Setup(obj);
            argsBuilder.Setup(settings);
            argsBuilder.Build();

            var factory  = ServiceLocator.GetResultSetResolverFactory();
            var resolver = factory.Instantiate(argsBuilder.GetArgs());

            var builder = new ResultSetServiceBuilder();

            builder.Setup(resolver);
            if (transformation != null)
            {
                builder.Setup(transformation.Transform);
            }
            var service = builder.GetService();

            return(new SubsetOfConstraint(service));
        }
示例#18
0
 protected override void Init()
 {
     base.Init();
     if (_contentTypeProvider == null)
         _contentTypeProvider = new ContentTypeProvider();
     if (_transformationProvider == null)
         _transformationProvider = new TransformationProvider();
 }
示例#19
0
 public EqualToConstraint Using(TransformationProvider transformationProvider)
 {
     this.TransformationProvider = transformationProvider;
     return(this);
 }
示例#20
0
        public IEnumerable <Alter> InstantiateAlterations(ResultSetSystemXml resultSetXml)
        {
            if (resultSetXml.Alteration == null)
            {
                yield break;
            }

            if (resultSetXml.Alteration.Filters != null)
            {
                foreach (var filterXml in resultSetXml.Alteration.Filters)
                {
                    var expressions = new List <IColumnExpression>();
                    if (filterXml.Expression != null)
                    {
                        expressions.Add(filterXml.Expression);
                    }

                    var factory = new PredicateFilterFactory();
                    if (filterXml.Predication != null)
                    {
                        yield return(factory.Instantiate
                                     (
                                         filterXml.Aliases
                                         , expressions
                                         , filterXml.Predication
                                     ).Apply);
                    }
                    if (filterXml.Combination != null)
                    {
                        yield return(factory.Instantiate
                                     (
                                         filterXml.Aliases
                                         , expressions
                                         , filterXml.Combination.Operator
                                         , filterXml.Combination.Predicates
                                     ).Apply);
                    }
                }
            }

            if (resultSetXml.Alteration.Conversions != null)
            {
                foreach (var conversionXml in resultSetXml.Alteration.Conversions)
                {
                    var factory   = new ConverterFactory();
                    var converter = factory.Instantiate(conversionXml.Converter.From, conversionXml.Converter.To, conversionXml.Converter.DefaultValue, conversionXml.Converter.Culture);
                    var engine    = new ConverterEngine(conversionXml.Column, converter);
                    yield return(engine.Execute);
                }
            }

            if (resultSetXml.Alteration.Transformations != null)
            {
                var provider = new TransformationProvider();
                foreach (var transformationXml in resultSetXml.Alteration.Transformations)
                {
                    provider.Add(transformationXml.ColumnIndex, transformationXml);
                }
                yield return(provider.Transform);
            }
        }
示例#21
0
        protected virtual BaseResultSetComparisonConstraint InstantiateConstraint(object obj, SettingsXml settings, TransformationProvider transformation)
        {
            var argsBuilder = new ResultSetResolverArgsBuilder();

            argsBuilder.Setup(obj);
            argsBuilder.Setup(settings);
            argsBuilder.Build();

            var factory  = new ResultSetResolverFactory();
            var resolver = factory.Instantiate(argsBuilder.GetArgs());

            var serviceBuilder = new ResultSetServiceBuilder();

            serviceBuilder.Setup(resolver);
            if (transformation != null)
            {
                serviceBuilder.Setup(transformation.Transform);
            }

            var service = serviceBuilder.GetService();

            return(new EqualToConstraint(service));
        }
示例#22
0
 /// <summary>
 /// Determines whether [is transformation file] [the specified file name].
 /// </summary>
 /// <param name="fileName">Name of the file.</param>
 /// <returns>[True] if file is transformation file, otherwise [False]</returns>
 private bool IsTransformationFile(string fileName)
 {
     return(TransformationProvider.IsTransformationFile(fileName,
                                                        Options.Options.TransfomationFileNameRegexp,
                                                        Options.Options.SourceFileRegexpMatchIndex));
 }
 public BaseResultSetComparisonConstraint Using(TransformationProvider transformationProvider)
 {
     this.TransformationProvider = transformationProvider;
     return(this);
 }
示例#24
0
        protected NBiConstraint InstantiateConstraint()
        {
            EqualToConstraint ctr = null;

            if (ConstraintXml.GetCommand() != null)
            {
                var commandText      = ConstraintXml.GetCommand().CommandText;
                var connectionString = ConstraintXml.GetCommand().Connection.ConnectionString;
                var timeout          = ((QueryXml)(ConstraintXml.BaseItem)).Timeout;
                IEnumerable <IQueryParameter>        parameters = null;
                IEnumerable <IQueryTemplateVariable> variables  = null;
                if (ConstraintXml.Query != null)
                {
                    parameters = ConstraintXml.Query.GetParameters();
                    variables  = ConstraintXml.Query.GetVariables();
                }

                var commandBuilder = new CommandBuilder();
                var cmd            = commandBuilder.Build(connectionString, commandText, parameters, variables, timeout);
                ctr = new EqualToConstraint(cmd);
            }
            else if (ConstraintXml.ResultSet != null)
            {
                if (!string.IsNullOrEmpty(ConstraintXml.ResultSet.File))
                {
                    Trace.WriteLineIf(NBiTraceSwitch.TraceVerbose, "ResultSet defined in external file!");
                    ctr = new EqualToConstraint(ConstraintXml.ResultSet.GetFile());
                    if (ConstraintXml.Settings.CsvProfile != null)
                    {
                        ctr = ctr.CsvProfile(ConstraintXml.Settings.CsvProfile);
                    }
                }
                else if (ConstraintXml.ResultSet.Rows != null)
                {
                    Trace.WriteLineIf(NBiTraceSwitch.TraceVerbose, "ResultSet defined in embedded resultSet!");
                    ctr = new EqualToConstraint(ConstraintXml.ResultSet.Rows);
                }
            }
            else if (ConstraintXml.XmlSource != null)
            {
                var selects = new List <AbstractSelect>();
                var factory = new SelectFactory();
                foreach (var select in ConstraintXml.XmlSource.XPath.Selects)
                {
                    selects.Add(factory.Instantiate(select.Value, select.Attribute, select.Evaluate));
                }

                XPathEngine engine = null;
                if (ConstraintXml.XmlSource.File != null)
                {
                    Trace.WriteLineIf(NBiTraceSwitch.TraceVerbose, string.Format("Xml file at '{0}'", ConstraintXml.XmlSource.GetFile()));
                    engine = new XPathFileEngine(ConstraintXml.XmlSource.GetFile(), ConstraintXml.XmlSource.XPath.From.Value, selects);
                }
                else if (ConstraintXml.XmlSource.Url != null)
                {
                    Trace.WriteLineIf(NBiTraceSwitch.TraceVerbose, string.Format("Xml file at '{0}'", ConstraintXml.XmlSource.Url.Value));
                    engine = new XPathUrlEngine(ConstraintXml.XmlSource.Url.Value, ConstraintXml.XmlSource.XPath.From.Value, selects);
                }
                else
                {
                    throw new ArgumentException("File or Url can't be both empty when declaring an xml-source.");
                }

                ctr = new EqualToConstraint(engine);
            }

            if (ctr == null)
            {
                throw new ArgumentException();
            }

            //Manage settings for comparaison
            ResultSetComparisonSettings settings = null;

            if (ConstraintXml.Behavior == EqualToXml.ComparisonBehavior.SingleRow)
            {
                ctr      = ctr.Using(new SingleRowComparer());
                settings = new SingleRowComparisonSettings(
                    ConstraintXml.ValuesDefaultType,
                    new NumericToleranceFactory().Instantiate(ConstraintXml.Tolerance),
                    ConstraintXml.ColumnsDef
                    );
            }
            else
            {
                settings = new ResultSetComparisonSettings(
                    ConstraintXml.KeysDef,
                    ConstraintXml.ValuesDef,
                    ConstraintXml.ValuesDefaultType,
                    new NumericToleranceFactory().Instantiate(ConstraintXml.Tolerance),
                    ConstraintXml.ColumnsDef
                    );
            }

            ctr.Using(settings);

            //Manage transformations
            var transformationProvider = new TransformationProvider();

            foreach (var columnDef in ConstraintXml.ColumnsDef)
            {
                if (columnDef.Transformation != null)
                {
                    transformationProvider.Add(columnDef.Index, columnDef.Transformation);
                }
            }

            ctr = ctr.Using(transformationProvider);

            //Manage parallelism
            if (ConstraintXml.ParallelizeQueries)
            {
                ctr = ctr.Parallel();
            }
            else
            {
                ctr = ctr.Sequential();
            }

            //Manage persistance
            //EqualToConstraint.PersistanceItems persi = 0;
            //if (ConstraintXml.GetCommand() != null)
            //    persi += (int)EqualToConstraint.PersistanceItems.actual;
            //if (SystemUnderTestXml is QueryXml)
            //    persi += (int)EqualToConstraint.PersistanceItems.expected;
            //if (!(persi==0 || ConstraintXml.Query==null || string.IsNullOrEmpty(ConstraintXml.Test.Name)))
            //    ctr.Persist(ConstraintXml.Persistance, persi, ConstraintXml.Test.Name);

            return(ctr);
        }
示例#25
0
        protected NBiConstraint InstantiateConstraint()
        {
            BaseResultSetComparisonConstraint ctr = null;

            //Manage transformations
            var transformationProvider = new TransformationProvider();

            foreach (var columnDef in ConstraintXml.ColumnsDef)
            {
                if (columnDef.Transformation != null)
                {
                    transformationProvider.Add(columnDef.Index, columnDef.Transformation);
                }
            }

            if (ConstraintXml.GetCommand() != null)
            {
                ctr = InstantiateConstraint(((QueryXml)(ConstraintXml.BaseItem)), ConstraintXml.Settings, transformationProvider);
            }
            else if (ConstraintXml.ResultSet != null)
            {
                ctr = InstantiateConstraint(ConstraintXml.ResultSet, ConstraintXml.Settings, transformationProvider);
            }
            else if (ConstraintXml.XmlSource != null)
            {
                ctr = InstantiateConstraint(ConstraintXml.XmlSource, ConstraintXml.Settings, transformationProvider);
            }

            if (ctr == null)
            {
                throw new ArgumentException();
            }

            //Manage settings for comparaison
            var builder = new SettingsEquivalerBuilder();

            if (ConstraintXml.Behavior == EqualToXml.ComparisonBehavior.SingleRow)
            {
                builder.Setup(false);
                builder.Setup(ConstraintXml.ValuesDefaultType, ConstraintXml.Tolerance);
                builder.Setup(ConstraintXml.ColumnsDef);
            }
            else
            {
                builder.Setup(ConstraintXml.KeysDef, ConstraintXml.ValuesDef);
                builder.Setup(
                    ConstraintXml.KeyName?.Replace(" ", "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Distinct(),
                    ConstraintXml.ValueName?.Replace(" ", "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Distinct());
                builder.Setup(ConstraintXml.ValuesDefaultType, ConstraintXml.Tolerance);
                builder.Setup(ConstraintXml.ColumnsDef);
            }

            builder.Build();
            var settings = builder.GetSettings();

            var factory  = new EquivalerFactory();
            var comparer = factory.Instantiate(settings, EquivalenceKind);

            ctr = ctr.Using(comparer);
            ctr = ctr.Using(settings);

            //Manage parallelism
            if (ConstraintXml.ParallelizeQueries)
            {
                ctr = ctr.Parallel();
            }
            else
            {
                ctr = ctr.Sequential();
            }

            return(ctr);
        }