public void ConvertToSingleSpace_PassedMultipleSpaces_ReturnsEmptyString()
        {
            string input   = "         ";
            string correct = "";

            Assert.AreEqual(correct, SingleSpace.ConvertToSingleSpace(input));
        }
        public void ConvertToSingleSpace_PassedMultipleSpaceWords_ReturnsSingleSpaced()
        {
            string input   = " hello          world   ";
            string correct = "hello world";

            Assert.AreEqual(correct, SingleSpace.ConvertToSingleSpace(input));
        }
Exemple #3
0
        private CodeMethodReturnStatement ParseHotkey(List <CodeLine> lines, int index)
        {
            string code = lines[index].Code;

            bool   hotstring = code[0] == HotkeyBound;
            string mode      = string.Empty;

            if (hotstring)
            {
                int z = code.IndexOf(HotkeyBound, 1) + 1;
                mode = code.Substring(0, z);
                code = code.Substring(z);
            }

            string[] parts = code.Split(new[] { HotkeySignal }, 2, StringSplitOptions.None);

            if (parts.Length == 0 || parts[0].Length == 0)
            {
                throw new ParseException("Blank hotkey definition");
            }

            if (hotstring)
            {
                parts[0] = string.Concat(mode, parts[0]);
            }

            string name = Script.LabelMethodName(parts[0]);
            string cond = HotkeyConditionId();

            if (cond.Length != 0)
            {
                name += "_" + cond;
            }
            PushLabel(lines[index], name, parts[0], false);

            if (parts.Length > 0 && !IsEmptyStatement(parts[1]))
            {
                bool remap = IsRemap(parts[1]);

                if (hotstring)
                {
                    var send = (CodeMethodInvokeExpression)InternalMethods.Send;
                    send.Parameters.Add(new CodePrimitiveExpression(remap ? parts[1].TrimStart(Spaces).Substring(0, 1) : parts[1]));
                    blocks.Pop().Statements.Add(send);
                }
                else
                {
                    lines.Insert(index + 1, new CodeLine(lines[index].FileName, lines[index].LineNumber, parts[1]));
                    lines[index].Code = string.Concat(parts[0], HotkeySignal);
                    blocks.Peek().Type = CodeBlock.BlockType.Expect;
                }
            }

            CodeMethodInvokeExpression invoke;

            if (hotstring)
            {
                invoke = (CodeMethodInvokeExpression)InternalMethods.Hotstring;
                invoke.Parameters.Add(new CodePrimitiveExpression(parts[0].Substring(mode.Length)));
                invoke.Parameters.Add(new CodePrimitiveExpression(name));

                string options = mode.Substring(1, mode.Length - 2);
                if (!string.IsNullOrEmpty(HotstringNewOptions))
                {
                    options = string.Concat(HotstringNewOptions, SingleSpace.ToString(), options);
                }
                invoke.Parameters.Add(new CodePrimitiveExpression(options));
            }
            else
            {
                invoke = (CodeMethodInvokeExpression)InternalMethods.Hotkey;
                invoke.Parameters.Add(new CodePrimitiveExpression(parts[0]));
                invoke.Parameters.Add(new CodePrimitiveExpression(name));
                invoke.Parameters.Add(new CodePrimitiveExpression(string.Empty));
            }

            prepend.Add(invoke);
            persistent = true;

            return(new CodeMethodReturnStatement());
        }