/// <summary>
        /// Builds and returns a <see cref="INameExpression" /> instance which can be used to generate name from the provided expression
        /// </summary>
        /// <param name="sportEvent">A <see cref="ISportEvent" /> instance representing associated sport @event</param>
        /// <param name="specifiers">A <see cref="IReadOnlyDictionary{String, String}" /> representing specifiers of the associated market</param>
        /// <param name="operator">A <see cref="string" /> specifying the operator for which to build the expression</param>
        /// <param name="operand">An operand for the built expression</param>
        /// <returns>The constructed <see cref="INameExpression" /> instance</returns>
        public INameExpression BuildExpression(ISportEvent sportEvent, IReadOnlyDictionary <string, string> specifiers, string @operator, string operand)
        {
            if (sportEvent == null)
            {
                throw new ArgumentNullException(nameof(sportEvent));
            }
            if (string.IsNullOrEmpty(operand))
            {
                throw new ArgumentNullException(nameof(operand));
            }

            if (@operator == null)
            {
                EnsureSpecifiersNotNullOrEmpty(specifiers);
                Contract.Assume(specifiers != null && specifiers.Any());
                return(new CardinalNameExpression(_operandFactory.BuildOperand(specifiers, operand)));
            }

            switch (Array.IndexOf(NameExpressionHelper.DefinedOperators, @operator))
            {
            case 0:     //+
            {
                EnsureSpecifiersNotNullOrEmpty(specifiers);
                Contract.Assume(specifiers != null && specifiers.Any());
                return(new PlusNameExpression(_operandFactory.BuildOperand(specifiers, operand)));
            }

            case 1:     //-
            {
                EnsureSpecifiersNotNullOrEmpty(specifiers);
                Contract.Assume(specifiers != null && specifiers.Any());
                return(new MinusNameExpression(_operandFactory.BuildOperand(specifiers, operand)));
            }

            case 2:     //$
            {
                return(BuildEntityNameExpression(operand, sportEvent));
            }

            case 3:     //!
            {
                EnsureSpecifiersNotNullOrEmpty(specifiers);
                Contract.Assume(specifiers != null && specifiers.Any());
                return(new OrdinalNameExpression(_operandFactory.BuildOperand(specifiers, operand)));
            }

            case 4:     //%
            {
                EnsureSpecifiersNotNullOrEmpty(specifiers);
                Contract.Assert(specifiers != null && specifiers.Any());
                return(new PlayerProfileExpression(_profileCache, _operandFactory.BuildOperand(specifiers, operand)));
            }

            default:
            {
                throw new ArgumentException($"Operator {@operator} is not supported. Supported operators are: {string.Join(",", NameExpressionHelper.DefinedOperators)}", nameof(@operator));
            }
            }
        }
        public void OrdinalNameExpressionTest()
        {
            var specifiers = new Dictionary <string, string> {
                { "reply_nr", "1" }
            };
            var expression = new OrdinalNameExpression(_operandFactory.BuildOperand(new ReadOnlyDictionary <string, string>(specifiers), "reply_nr"));

            var result = expression.BuildNameAsync(new CultureInfo("en")).Result;

            Assert.AreEqual("1st", result, "The result is not correct");
        }
        public void player_profile_expression_returns_correct_value()
        {
            var specifiers = new Dictionary <string, string> {
                { "player", "sr:player:1" }
            };
            var expression = new PlayerProfileExpression(_profileCache, _operandFactory.BuildOperand(new ReadOnlyDictionary <string, string>(specifiers), "player"));

            var result = expression.BuildNameAsync(TestData.Culture).Result;

            Assert.AreEqual(
                _profileCache.GetPlayerProfileAsync(URN.Parse("sr:player:1"), new [] { TestData.Culture }).Result.GetName(TestData.Culture),
                result, "The result is not correct");
        }
        public void ZeroIsHandledCorrectly()
        {
            var specifiers = new ReadOnlyDictionary <string, string>(new Dictionary <string, string> {
                { Specifier, "0" }
            });
            var expression = new PlusNameExpression(_operandFactory.BuildOperand(specifiers, Specifier));

            var name = expression.BuildNameAsync(CultureInfo.InvariantCulture).Result;

            Assert.AreEqual("0", name, "Value of name is not correct");
        }
Ejemplo n.º 5
0
 public void missing_left_parenthesis_throws()
 {
     _factory.BuildOperand(
         BuildSpecifiers(Specifier, "1"),
         "total+1)");
 }