summary refs log tree commit diff stats
path: root/raku/bob/bob.rakutest
blob: a540719166bba3faf6c0f5d9da12ac76236a849b (plain) (blame) pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
*~
*.pyc
*.pyo
stuff/*
doc/ranger.1.html
build
pytestdebug.log
f='#n178'>178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
#!/usr/bin/env raku
use Test;
use JSON::Fast;
use lib $?FILE.IO.dirname; #`[Look for the module inside the same directory as this test file.]
use Bob;
plan 26; #`[This is how many tests we expect to run.]

#`[Check that the class 'Bob' can use all of the methods
needed in the tests (only 'hey' for this one).]
subtest 'Class methods', {
  for <hey> -> $method {
    can-ok Bob, $method;
  }
} or bail-out 'Cannot run expected method(s).';

my @test-cases = from-json($=pod.pop.contents).List;
# Go through the cases and check that Bob gives us the correct responses.
for @test-cases -> %case {
  is Bob.hey(%case<input><heyBob>), |%case<expected description>;
}

=head2 Test Cases
=begin code
[
  {
    "description": "stating something",
    "expected": "Whatever.",
    "input": {
      "heyBob": "Tom-ay-to, tom-aaaah-to."
    },
    "property": "response"
  },
  {
    "description": "shouting",
    "expected": "Whoa, chill out!",
    "input": {
      "heyBob": "WATCH OUT!"
    },
    "property": "response"
  },
  {
    "description": "shouting gibberish",
    "expected": "Whoa, chill out!",
    "input": {
      "heyBob": "FCECDFCAAB"
    },
    "property": "response"
  },
  {
    "description": "asking a question",
    "expected": "Sure.",
    "input": {
      "heyBob": "Does this cryogenic chamber make me look fat?"
    },
    "property": "response"
  },
  {
    "description": "asking a numeric question",
    "expected": "Sure.",
    "input": {
      "heyBob": "You are, what, like 15?"
    },
    "property": "response"
  },
  {
    "description": "asking gibberish",
    "expected": "Sure.",
    "input": {
      "heyBob": "fffbbcbeab?"
    },
    "property": "response"
  },
  {
    "description": "talking forcefully",
    "expected": "Whatever.",
    "input": {
      "heyBob": "Hi there!"
    },
    "property": "response"
  },
  {
    "description": "using acronyms in regular speech",
    "expected": "Whatever.",
    "input": {
      "heyBob": "It's OK if you don't want to go work for NASA."
    },
    "property": "response"
  },
  {
    "description": "forceful question",
    "expected": "Calm down, I know what I'm doing!",
    "input": {
      "heyBob": "WHAT'S GOING ON?"
    },
    "property": "response"
  },
  {
    "description": "shouting numbers",
    "expected": "Whoa, chill out!",
    "input": {
      "heyBob": "1, 2, 3 GO!"
    },
    "property": "response"
  },
  {
    "description": "no letters",
    "expected": "Whatever.",
    "input": {
      "heyBob": "1, 2, 3"
    },
    "property": "response"
  },
  {
    "description": "question with no letters",
    "expected": "Sure.",
    "input": {
      "heyBob": "4?"
    },
    "property": "response"
  },
  {
    "description": "shouting with special characters",
    "expected": "Whoa, chill out!",
    "input": {
      "heyBob": "ZOMG THE %^*@#$(*^ ZOMBIES ARE COMING!!11!!1!"
    },
    "property": "response"
  },
  {
    "description": "shouting with no exclamation mark",
    "expected": "Whoa, chill out!",
    "input": {
      "heyBob": "I HATE THE DENTIST"
    },
    "property": "response"
  },
  {
    "description": "statement containing question mark",
    "expected": "Whatever.",
    "input": {
      "heyBob": "Ending with ? means a question."
    },
    "property": "response"
  },
  {
    "description": "non-letters with question",
    "expected": "Sure.",
    "input": {
      "heyBob": ":) ?"
    },
    "property": "response"
  },
  {
    "description": "prattling on",
    "expected": "Sure.",
    "input": {
      "heyBob": "Wait! Hang on. Are you going to be OK?"
    },
    "property": "response"
  },
  {
    "description": "silence",
    "expected": "Fine. Be that way!",
    "input": {
      "heyBob": ""
    },
    "property": "response"
  },
  {
    "description": "prolonged silence",
    "expected": "Fine. Be that way!",
    "input": {
      "heyBob": "          "
    },
    "property": "response"
  },
  {
    "description": "alternate silence",
    "expected": "Fine. Be that way!",
    "input": {
      "heyBob": "\t\t\t\t\t\t\t\t\t\t"
    },
    "property": "response"
  },
  {
    "description": "multiple line question",
    "expected": "Whatever.",
    "input": {
      "heyBob": "\nDoes this cryogenic chamber make me look fat?\nNo."
    },
    "property": "response"
  },
  {
    "description": "starting with whitespace",
    "expected": "Whatever.",
    "input": {
      "heyBob": "         hmmmmmmm..."
    },
    "property": "response"
  },
  {
    "description": "ending with whitespace",
    "expected": "Sure.",
    "input": {
      "heyBob": "Okay if like my  spacebar  quite a bit?   "
    },
    "property": "response"
  },
  {
    "description": "other whitespace",
    "expected": "Fine. Be that way!",
    "input": {
      "heyBob": "\n\r \t"
    },
    "property": "response"
  },
  {
    "description": "non-question ending with whitespace",
    "expected": "Whatever.",
    "input": {
      "heyBob": "This is a statement ending with whitespace      "
    },
    "property": "response"
  }
]
=end code