Ejemplo n.º 1
0
        public void Check_Samples()
        {
            var rules = Cldr.Instance
                        .GetDocuments("common/supplemental/plurals.xml")
                        .Elements($"supplementalData/plurals[@type='cardinal']/pluralRules/pluralRule")
                        .Select(e => Rule.Parse(e))
                        .Where(r => r.Category != "other")
                        .OrderBy(r => r.Text)
                        .ToList();

            foreach (var rule in rules)
            {
                foreach (var sample in rule.Samples.Split(' ', ',', '~'))
                {
                    if (sample.StartsWith("@"))
                    {
                        continue;
                    }
                    if (decimal.TryParse(sample, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal value))
                    {
                        var context = RuleContext.Create(value);
                        Assert.IsTrue(rule.Matches(context), $"{sample} for {rule.Text}");
                    }
                }
            }
        }
Ejemplo n.º 2
0
        void LoadRules()
        {
            var lang = Locale.Id.Language.ToLowerInvariant();

            Rules = Cldr.Instance
                    .GetDocuments("common/supplemental/plurals.xml")
                    .Elements($"supplementalData/plurals[@type='cardinal']/pluralRules[contains(@locales, '{lang}')]/pluralRule")
                    .Select(e => Rule.Parse(e))
                    .ToList();
        }
Ejemplo n.º 3
0
        public void Parsing()
        {
            var rule = Rule.Parse("one", "n = 1");

            Assert.AreEqual("one", rule.Category);
            Assert.AreEqual("", rule.Samples);
            Assert.AreEqual("n = 1", rule.Text);

            rule = Rule.Parse("one", "n = 1 @integer 1");
            Assert.AreEqual("one", rule.Category);
            Assert.AreEqual("@integer 1", rule.Samples);
            Assert.AreEqual("n = 1", rule.Text);
        }
Ejemplo n.º 4
0
        public void All_Supplemental_Plural_Rules()
        {
            var rules = Cldr.Instance
                        .GetDocuments("common/supplemental/plurals.xml")
                        .Elements($"supplementalData/plurals[@type='cardinal']/pluralRules/pluralRule")
                        .Select(e => Rule.Parse(e))
                        .Where(r => r.Category != "other")
                        .OrderBy(r => r.Text)
                        .ToList();

            var context = RuleContext.Create(1m);

            foreach (var rule in rules)
            {
                try
                {
                    rule.Matches(context);
                }
                catch (Exception e)
                {
                    throw new Exception($"{rule.Text} => {Rule.ConvertExpression(rule.Text)}", e);
                }
            }
        }