public void TestDefinition()
        {
            var def = new RichPresenceMacroFunction();

            Assert.That(def.Name.Name, Is.EqualTo("rich_presence_macro"));
            Assert.That(def.Parameters.Count, Is.EqualTo(2));
            Assert.That(def.Parameters.ElementAt(0).Name, Is.EqualTo("macro"));
            Assert.That(def.Parameters.ElementAt(1).Name, Is.EqualTo("expression"));
        }
        public override string ToString()
        {
            if (String.IsNullOrEmpty(DisplayString))
            {
                return("[No display string]");
            }

            var builder = new StringBuilder();

            foreach (var lookup in _lookupFields)
            {
                builder.Append("Lookup:");
                builder.AppendLine(lookup.Key);

                var fallback = (lookup.Value.Fallback != null && lookup.Value.Fallback.Value.Length > 0) ? lookup.Value.Fallback.Value : null;
                AppendRichPresenceLookupEntries(builder, lookup.Value.Entries, fallback);

                if (fallback != null)
                {
                    builder.Append("*=");
                    builder.AppendLine(fallback);
                }

                builder.AppendLine();
            }

            foreach (var value in _valueFields)
            {
                if (!DisableBuiltInMacros)
                {
                    if (RichPresenceMacroFunction.GetValueFormat(value.Key) == value.Value.Format)
                    {
                        continue;
                    }
                }

                builder.Append("Format:");
                builder.AppendLine(value.Key);

                builder.Append("FormatType=");
                builder.AppendLine(Leaderboard.GetFormatString(value.Value.Format));

                builder.AppendLine();
            }

            builder.AppendLine("Display:");
            foreach (var conditionalString in _conditionalDisplayStrings)
            {
                builder.AppendLine(conditionalString);
            }
            builder.AppendLine(DisplayString);

            return(builder.ToString());
        }
        private RichPresenceBuilder Evaluate(string input, string expectedError = null)
        {
            var funcDef = new RichPresenceMacroFunction();

            var expression = ExpressionBase.Parse(new PositionalTokenizer(Tokenizer.CreateTokenizer(input)));

            Assert.That(expression, Is.InstanceOf <FunctionCallExpression>());
            var funcCall = (FunctionCallExpression)expression;

            ExpressionBase error;
            var            scope   = funcCall.GetParameters(funcDef, AchievementScriptInterpreter.GetGlobalScope(), out error);
            var            context = new RichPresenceDisplayFunction.RichPresenceDisplayContext {
                RichPresence = new RichPresenceBuilder()
            };

            scope.Context = context;

            ExpressionBase evaluated;

            if (expectedError != null)
            {
                Assert.That(funcDef.ReplaceVariables(scope, out evaluated), Is.False);
                var parseError = evaluated as ParseErrorExpression;
                Assert.That(parseError, Is.Not.Null);
                Assert.That(parseError.Message, Is.EqualTo(expectedError));
                return(context.RichPresence);
            }

            ExpressionBase result;

            Assert.That(funcDef.ReplaceVariables(scope, out evaluated), Is.True);
            Assert.That(funcDef.BuildMacro(context, scope, out result), Is.True);
            context.RichPresence.DisplayString = ((StringConstantExpression)result).Value;

            return(context.RichPresence);
        }