Fixes for ticket #3052: some commands started triggering when extra text is supposed to suppress them
Regressions caused by bad refactoring in commit 21feac3bea
.
Test cases in tests/CommandInterpreterTest.php were made against the pre-refactoring code, and now check out with the fixed code.
Failures were caused by not changing logic structure when moving from multiple exit points (each if point would return directly with a null or an object) to setting a result variable and then falling through to a common exit point. Without the if statements being restructured, the result variable would just get overridden by the next case.
This commit is contained in:
parent
11e033f05c
commit
eb7e3ee528
@ -42,8 +42,9 @@ class CommandInterpreter
|
|||||||
case 'help':
|
case 'help':
|
||||||
if ($arg) {
|
if ($arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new HelpCommand($user);
|
||||||
}
|
}
|
||||||
$result = new HelpCommand($user);
|
|
||||||
break;
|
break;
|
||||||
case 'login':
|
case 'login':
|
||||||
if ($arg) {
|
if ($arg) {
|
||||||
@ -120,49 +121,51 @@ class CommandInterpreter
|
|||||||
case 'join':
|
case 'join':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
list($other, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else {
|
} else {
|
||||||
$result = new JoinCommand($user, $other);
|
list($other, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new JoinCommand($user, $other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'drop':
|
case 'drop':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
list($other, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else {
|
} else {
|
||||||
$result = new DropCommand($user, $other);
|
list($other, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new DropCommand($user, $other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'follow':
|
case 'follow':
|
||||||
case 'sub':
|
case 'sub':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
|
|
||||||
list($other, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else {
|
} else {
|
||||||
$result = new SubCommand($user, $other);
|
list($other, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new SubCommand($user, $other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'leave':
|
case 'leave':
|
||||||
case 'unsub':
|
case 'unsub':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
|
|
||||||
list($other, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else {
|
} else {
|
||||||
$result = new UnsubCommand($user, $other);
|
list($other, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new UnsubCommand($user, $other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'get':
|
case 'get':
|
||||||
@ -207,96 +210,105 @@ class CommandInterpreter
|
|||||||
case 'rd':
|
case 'rd':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
list($other, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else {
|
} else {
|
||||||
$result = new RepeatCommand($user, $other);
|
list($other, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new RepeatCommand($user, $other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'whois':
|
case 'whois':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
list($other, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else {
|
} else {
|
||||||
$result = new WhoisCommand($user, $other);
|
list($other, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new WhoisCommand($user, $other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'fav':
|
case 'fav':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
list($other, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else {
|
} else {
|
||||||
$result = new FavCommand($user, $other);
|
list($other, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new FavCommand($user, $other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'nudge':
|
case 'nudge':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
list($other, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else {
|
} else {
|
||||||
$result = new NudgeCommand($user, $other);
|
list($other, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new NudgeCommand($user, $other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'stats':
|
case 'stats':
|
||||||
if ($arg) {
|
if ($arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new StatsCommand($user);
|
||||||
}
|
}
|
||||||
$result = new StatsCommand($user);
|
|
||||||
break;
|
break;
|
||||||
case 'invite':
|
case 'invite':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
list($other, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else {
|
} else {
|
||||||
$result = new InviteCommand($user, $other);
|
list($other, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new InviteCommand($user, $other);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'track':
|
case 'track':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
list($word, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else if ($word == 'off') {
|
|
||||||
$result = new TrackOffCommand($user);
|
|
||||||
} else {
|
} else {
|
||||||
$result = new TrackCommand($user, $word);
|
list($word, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else if ($word == 'off') {
|
||||||
|
$result = new TrackOffCommand($user);
|
||||||
|
} else {
|
||||||
|
$result = new TrackCommand($user, $word);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'untrack':
|
case 'untrack':
|
||||||
if (!$arg) {
|
if (!$arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
}
|
|
||||||
list($word, $extra) = $this->split_arg($arg);
|
|
||||||
if ($extra) {
|
|
||||||
$result = null;
|
|
||||||
} else if ($word == 'all') {
|
|
||||||
$result = new TrackOffCommand($user);
|
|
||||||
} else {
|
} else {
|
||||||
$result = new UntrackCommand($user, $word);
|
list($word, $extra) = $this->split_arg($arg);
|
||||||
|
if ($extra) {
|
||||||
|
$result = null;
|
||||||
|
} else if ($word == 'all') {
|
||||||
|
$result = new TrackOffCommand($user);
|
||||||
|
} else {
|
||||||
|
$result = new UntrackCommand($user, $word);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'tracks':
|
case 'tracks':
|
||||||
case 'tracking':
|
case 'tracking':
|
||||||
if ($arg) {
|
if ($arg) {
|
||||||
$result = null;
|
$result = null;
|
||||||
|
} else {
|
||||||
|
$result = new TrackingCommand($user);
|
||||||
}
|
}
|
||||||
$result = new TrackingCommand($user);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$result = false;
|
$result = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user