Exemplo n.º 1
0
        public void Get_by_type_should_return_tags_with_inherits()
        {
            var errList = new TemplateErrors();
            var list    = new TagsList(errList)
            {
                new GroupTag {
                    Name = "val1"
                },
                new GroupTag {
                    Name = "val2"
                },
                new SortTag {
                    Name = "val3"
                },
                new ProtectedTag {
                    Name = "val4"
                },
                new DescTag {
                    Name = "val5"
                },
                new ColsFitTag {
                    Name = "val6"
                }
            };

            list.GetAll <SortTag>().Select(x => x.Name).Should().BeEquivalentTo("val1", "val2", "val3", "val5");
        }
Exemplo n.º 2
0
            public override object VisitTemplateDefinition([NotNull] LGFileParser.TemplateDefinitionContext context)
            {
                var startLine = context.Start.Line;
                var stopLine  = context.Stop.Line;

                var templateNameLine = context.templateNameLine().TEMPLATE_NAME_LINE().GetText();

                var(templateName, parameters) = ExtractTemplateNameLine(templateNameLine);

                if (this.templates.Any(u => u.Name == templateName))
                {
                    var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.DuplicatedTemplateInSameTemplate(templateName), context.templateNameLine());
                    this.templates.Diagnostics.Add(diagnostic);
                }
                else
                {
                    var templateBody = context.templateBody().GetText();

                    var sourceRange = new SourceRange(context, this.templates.Id);
                    var template    = new Template(templateName, parameters, templateBody, sourceRange);

                    CheckTemplateName(templateName, context.templateNameLine());
                    CheckTemplateParameters(parameters, context.templateNameLine());
                    template.TemplateBodyParseTree = CheckTemplateBody(templateName, templateBody, context.templateBody(), startLine);

                    this.templates.Add(template);
                }

                return(null);
            }
Exemplo n.º 3
0
        public void TestErrorTemplateName()
        {
            var diagnostics = GetDiagnostics("ErrorTemplateName.lg");

            Assert.Equal(7, diagnostics.Count);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[0].Severity);
            Assert.Contains(TemplateErrors.InvalidParameter("param1; param2"), diagnostics[0].Message);

            Assert.Equal(DiagnosticSeverity.Error, diagnostics[1].Severity);
            Assert.Contains(TemplateErrors.InvalidParameter("param1 param2"), diagnostics[1].Message);

            Assert.Equal(DiagnosticSeverity.Error, diagnostics[2].Severity);
            Assert.Contains(TemplateErrors.InvalidTemplateName("template3(errorparams"), diagnostics[2].Message);

            Assert.Equal(DiagnosticSeverity.Error, diagnostics[3].Severity);
            Assert.Contains(TemplateErrors.InvalidParameter("a)test(param1"), diagnostics[3].Message);

            Assert.Equal(DiagnosticSeverity.Error, diagnostics[4].Severity);
            Assert.Contains(TemplateErrors.InvalidParameter("$%^"), diagnostics[4].Message);

            Assert.Equal(DiagnosticSeverity.Error, diagnostics[5].Severity);
            Assert.Contains(TemplateErrors.InvalidTemplateName("the-name-of-template"), diagnostics[5].Message);

            Assert.Equal(DiagnosticSeverity.Error, diagnostics[6].Severity);
            Assert.Contains(TemplateErrors.InvalidTemplateName("t1.1"), diagnostics[6].Message);
        }
Exemplo n.º 4
0
        public void TestEmptyTemplate()
        {
            var diagnostics = GetDiagnostics("EmptyTemplate.lg");

            Assert.AreEqual(1, diagnostics.Count);
            Assert.AreEqual(DiagnosticSeverity.Warning, diagnostics[0].Severity);
            Assert.IsTrue(diagnostics[0].Message.Contains(TemplateErrors.NoTemplateBody("template")));
        }
Exemplo n.º 5
0
            public override object VisitErrorDefinition([NotNull] LGFileParser.ErrorDefinitionContext context)
            {
                var lineContent = context.INVALID_LINE().GetText();

                if (!string.IsNullOrWhiteSpace(lineContent))
                {
                    this.templates.Diagnostics.Add(BuildTemplatesDiagnostic(TemplateErrors.SyntaxError($"Unexpected content: '{lineContent}'"), context));
                }

                return(null);
            }
Exemplo n.º 6
0
 private void CheckTemplateParameters(List <string> parameters, LGFileParser.TemplateNameLineContext context)
 {
     foreach (var parameter in parameters)
     {
         if (!IdentifierRegex.IsMatch(parameter))
         {
             var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.InvalidParameter(parameter), context);
             this.templates.Diagnostics.Add(diagnostic);
         }
     }
 }
Exemplo n.º 7
0
        public bool Check(IModel model)
        {
            ILogger log = XbimLogging.CreateLogger <IfcValidator>();

            // check for parser exceptions
            var v = new Validator
            {
                ValidateLevel         = ValidationFlags.All,
                CreateEntityHierarchy = true
            };

            SchemaErrors   = v.Validate(model.Instances).ToList();
            TemplateErrors = CheckPropertyTemplateTypesAndUnits(model).ToList();
            PropertyErrors = CheckPropertyUnits(model).ToList();

            foreach (var err in
                     SchemaErrors
                     .Concat(TemplateErrors)
                     .Concat(PropertyErrors))
            {
                var identity = err.Item.GetType().Name;
                if (err.Item is IPersistEntity entity)
                {
                    identity = $"#{entity.EntityLabel}={entity.ExpressType.ExpressName}";
                }
                var msg = new StringBuilder();
                msg.AppendLine($"{identity} is invalid.");
                var details = new Stack <ValidationResult>(err.Details);
                while (details.Any())
                {
                    var detail = details.Pop();
                    foreach (var d in detail.Details)
                    {
                        details.Push(d);
                    }

                    var report = detail.Message;
                    if (string.IsNullOrWhiteSpace(report))
                    {
                        report = detail.Report();
                    }
                    msg.AppendLine("    " + report);

                    if (detail.IssueType == ValidationFlags.EntityWhereClauses || detail.IssueType == ValidationFlags.TypeWhereClauses)
                    {
                        var source = detail.IssueSource.Split('.')[0].ToLower();
                        msg.AppendLine($"http://www.buildingsmart-tech.org/ifc/IFC4/Add2/html/link/{source}.htm");
                    }
                }
                log.LogError(msg.ToString());
            }

            return(!SchemaErrors.Any() && !TemplateErrors.Any() && !PropertyErrors.Any());
        }
Exemplo n.º 8
0
            private void CheckTemplateName(string templateName, ParserRuleContext context)
            {
                var functionNameSplitDot = templateName.Split('.');

                foreach (var id in functionNameSplitDot)
                {
                    if (!TemplateNamePartRegex.IsMatch(id))
                    {
                        var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.InvalidTemplateName(templateName), context);
                        this.templates.Diagnostics.Add(diagnostic);
                        break;
                    }
                }
            }
Exemplo n.º 9
0
        public void TestErrorLine()
        {
            var diagnostics = GetDiagnostics("ErrorLine.lg");

            Assert.Equal(4, diagnostics.Count);

            Assert.Equal(DiagnosticSeverity.Error, diagnostics[0].Severity);
            Assert.Contains(TemplateErrors.SyntaxError("mismatched input '-' expecting <EOF>"), diagnostics[0].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[1].Severity);
            Assert.Contains(TemplateErrors.InvalidStrucName("]"), diagnostics[1].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[2].Severity);
            Assert.Contains(TemplateErrors.MissingStrucEnd, diagnostics[2].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[3].Severity);
            Assert.Contains(TemplateErrors.InvalidStrucBody("- hi"), diagnostics[3].Message);
        }
Exemplo n.º 10
0
        public void Add_with_same_priority_should_increase_count()
        {
            var errList = new TemplateErrors();
            var list    = new TagsList(errList)
            {
                new GroupTag {
                    Name = "val1"
                },
                new GroupTag {
                    Name = "val2"
                }
            };

            list.Count.Should().Be(2);
        }
            private LGTemplateParser.BodyContext CheckTemplateBody(string templateName, string templateBody, LGFileParser.TemplateBodyContext context, int startLine)
            {
                if (string.IsNullOrWhiteSpace(templateBody))
                {
                    var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.NoTemplateBody(templateName), context, DiagnosticSeverity.Warning);
                    this.templates.Diagnostics.Add(diagnostic);
                }
                else
                {
                    try
                    {
                        return(AntlrParseTemplate(templateBody, startLine));
                    }
                    catch (TemplateException e)
                    {
                        e.Diagnostics.ToList().ForEach(u => this.templates.Diagnostics.Add(u));
                    }
                }

                return(null);
            }
Exemplo n.º 12
0
        public void TestErrorStructuredTemplate()
        {
            var diagnostics = GetDiagnostics("ErrorStructuredTemplate.lg");

            Assert.Equal(8, diagnostics.Count);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[0].Severity);
            Assert.Contains(TemplateErrors.InvalidStrucBody("abc"), diagnostics[0].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[1].Severity);
            Assert.Contains(TemplateErrors.EmptyStrucContent, diagnostics[1].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[2].Severity);
            Assert.Contains("Error occurred when parsing expression 'NOTemplate()'. NOTemplate does not have an evaluator", diagnostics[2].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[3].Severity);
            Assert.Contains("Error occurred when parsing expression 'NOTemplate()'. NOTemplate does not have an evaluator", diagnostics[3].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[4].Severity);
            Assert.Contains(TemplateErrors.InvalidStrucName("Activity%"), diagnostics[4].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[5].Severity);
            Assert.Contains(TemplateErrors.InvalidStrucName("Activity]"), diagnostics[5].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[6].Severity);
            Assert.Contains(TemplateErrors.MissingStrucEnd, diagnostics[6].Message);
            Assert.Equal(DiagnosticSeverity.Error, diagnostics[7].Severity);
            Assert.Contains(TemplateErrors.InvalidStrucBody("- hi"), diagnostics[7].Message);
        }
Exemplo n.º 13
0
        public void Items_should_be_sorted_by_priority()
        {
            var errList = new TemplateErrors();
            var list    = new TagsList(errList)
            {
                new GroupTag {
                    Name = "val1"
                },
                new GroupTag {
                    Name = "val2"
                },
                new OnlyValuesTag {
                    Name = "val3"
                },
                new ProtectedTag {
                    Name = "val4"
                }
            };

            list.Count.Should().Be(4);
            list.Select(x => x.Name).Should().BeEquivalentTo("val3", "val1", "val2", "val4");
        }
Exemplo n.º 14
0
        public void TestDuplicatedTemplates()
        {
            var diagnostics = GetDiagnostics("DuplicatedTemplates.lg");

            Assert.AreEqual(2, diagnostics.Count);
            Assert.AreEqual(DiagnosticSeverity.Error, diagnostics[0].Severity);
            Assert.IsTrue(diagnostics[0].Message.Contains(TemplateErrors.DuplicatedTemplateInSameTemplate("template1")));
            Assert.AreEqual(DiagnosticSeverity.Error, diagnostics[1].Severity);
            Assert.IsTrue(diagnostics[1].Message.Contains(TemplateErrors.DuplicatedTemplateInSameTemplate("template1")));

            var lgFile         = GetTemplates("DuplicatedTemplates.lg");
            var allDiagnostics = lgFile.AllDiagnostics;

            Assert.AreEqual(4, allDiagnostics.Count);
            Assert.AreEqual(DiagnosticSeverity.Error, allDiagnostics[0].Severity);
            Assert.IsTrue(allDiagnostics[0].Message.Contains(TemplateErrors.DuplicatedTemplateInSameTemplate("template1")));
            Assert.AreEqual(DiagnosticSeverity.Error, allDiagnostics[1].Severity);
            Assert.IsTrue(allDiagnostics[1].Message.Contains(TemplateErrors.DuplicatedTemplateInSameTemplate("template1")));
            Assert.AreEqual(DiagnosticSeverity.Error, allDiagnostics[2].Severity);
            Assert.IsTrue(allDiagnostics[2].Message.Contains("Duplicated definitions found for template: 'basicTemplate'"));
            Assert.AreEqual(DiagnosticSeverity.Error, allDiagnostics[3].Severity);
            Assert.IsTrue(allDiagnostics[3].Message.Contains("Duplicated definitions found for template: 'basicTemplate2'"));
        }
            public override object VisitTemplateDefinition([NotNull] LGFileParser.TemplateDefinitionContext context)
            {
                var startLine = context.Start.Line;
                var stopLine  = context.Stop.Line;

                var templateNameLine = context.templateNameLine().TEMPLATE_NAME_LINE().GetText();

                var(templateName, parameters) = ExtractTemplateNameLine(templateNameLine);

                if (this.templates.Any(u => u.Name == templateName))
                {
                    var diagnostic = BuildTemplatesDiagnostic(TemplateErrors.DuplicatedTemplateInSameTemplate(templateName), context.templateNameLine());
                    this.templates.Diagnostics.Add(diagnostic);
                }
                else
                {
                    var templateBody   = context.templateBody().GetText();
                    var file           = context.Parent.Parent as LGFileParser.FileContext;
                    var isLastTemplate = file.paragraph().Select(u => u.templateDefinition()).Where(u => u != null).Last() == context;
                    if (!isLastTemplate)
                    {
                        templateBody = RemoveTrailingNewline(templateBody);
                    }

                    var sourceRange = new SourceRange(context, this.templates.Id);
                    var template    = new Template(templateName, parameters, templateBody, sourceRange);

                    CheckTemplateName(templateName, context.templateNameLine());
                    CheckTemplateParameters(parameters, context.templateNameLine());
                    template.TemplateBodyParseTree = CheckTemplateBody(templateName, templateBody, context.templateBody(), startLine);

                    this.templates.Add(template);
                }

                return(null);
            }
Exemplo n.º 16
0
 public void LogErrors(CompilerErrorCollection errors)
 {
     TemplateErrors.AddRange(errors);
 }
Exemplo n.º 17
0
 public TagsList(TemplateErrors errors) : base(new OptionTagComparer())
 {
     _errors = errors;
 }