ToolCommandOptionTest.java revision 3849:b2e915d476be
1/* 2 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 8157395 8157393 8157517 8158738 8167128 8163840 8167637 8170368 8172102 27 * @summary Tests of jshell comand options, and undoing operations 28 * @modules jdk.jshell/jdk.internal.jshell.tool 29 * jdk.compiler/com.sun.tools.javac.api 30 * jdk.compiler/com.sun.tools.javac.main 31 * @library /tools/lib 32 * @build ToolCommandOptionTest ReplToolTesting 33 * @run testng ToolCommandOptionTest 34 */ 35import java.nio.file.Path; 36import org.testng.annotations.Test; 37import static org.testng.Assert.assertFalse; 38 39@Test 40public class ToolCommandOptionTest extends ReplToolTesting { 41 42 public void listTest() { 43 test( 44 (a) -> assertCommand(a, "int x;", 45 "x ==> 0"), 46 (a) -> assertCommand(a, "/li", 47 "1 : int x;"), 48 (a) -> assertCommandOutputStartsWith(a, "/lis -st", 49 "s1 : import"), 50 (a) -> assertCommandOutputStartsWith(a, "/list -all", 51 "s1 : import"), 52 (a) -> assertCommandOutputContains(a, "/list -all", 53 "1 : int x;"), 54 (a) -> assertCommandOutputContains(a, "/list -history", 55 "int x;"), 56 (a) -> assertCommandOutputContains(a, "/li -h", 57 "/lis -st"), 58 (a) -> assertCommand(a, "/list -furball", 59 "| Unknown option: -furball -- /list -furball"), 60 (a) -> assertCommand(a, "/list x", 61 "1 : int x;"), 62 (a) -> assertCommand(a, "/li x -start", 63 "| Options and snippets must not both be used: /list x -start"), 64 (a) -> assertCommand(a, "/l -st -al", 65 "| Conflicting options -- /list -st -al") 66 ); 67 } 68 69 public void typesTest() { 70 test( 71 (a) -> assertCommand(a, "int x", 72 "x ==> 0"), 73 (a) -> assertCommand(a, "/types x", 74 "| This command does not accept the snippet 'x' : int x;"), 75 (a) -> assertCommand(a, "class C {}", 76 "| created class C"), 77 (a) -> assertCommand(a, "/ty", 78 "| class C"), 79 (a) -> assertCommand(a, "/ty -st", 80 ""), 81 (a) -> assertCommand(a, "/types -all", 82 "| class C"), 83 (a) -> assertCommand(a, "/types -furball", 84 "| Unknown option: -furball -- /types -furball"), 85 (a) -> assertCommand(a, "/types C", 86 "| class C"), 87 (a) -> assertCommand(a, "/types C -start", 88 "| Options and snippets must not both be used: /types C -start"), 89 (a) -> assertCommand(a, "/ty -st -al", 90 "| Conflicting options -- /types -st -al") 91 ); 92 } 93 94 public void dropTest() { 95 test(false, new String[]{"--no-startup"}, 96 (a) -> assertCommand(a, "int x = 5;", 97 "x ==> 5"), 98 (a) -> assertCommand(a, "x", 99 "x ==> 5"), 100 (a) -> assertCommand(a, "long y;", 101 "y ==> 0"), 102 (a) -> assertCommand(a, "/drop -furball", 103 "| Unknown option: -furball -- /drop -furball"), 104 (a) -> assertCommand(a, "/drop -all", 105 "| Unknown option: -all -- /drop -all"), 106 (a) -> assertCommandOutputStartsWith(a, "/drop z", 107 "| No such snippet: z"), 108 (a) -> assertCommand(a, "/drop 2", 109 ""), 110 (a) -> assertCommandOutputStartsWith(a, "23qwl", 111 "| Error:"), 112 (a) -> assertCommandOutputStartsWith(a, "/drop e1", 113 "| This command does not accept the snippet 'e1' : 23qwl"), 114 (a) -> assertCommand(a, "/dr x y", 115 "| dropped variable x\n" + 116 "| dropped variable y"), 117 (a) -> assertCommand(a, "/list", 118 "") 119 ); 120 } 121 122 public void setEditorTest() { 123 test( 124 (a) -> assertCommand(a, "/set editor -furball", 125 "| Unknown option: -furball -- /set editor -furball"), 126 (a) -> assertCommand(a, "/set editor -furball prog", 127 "| Unknown option: -furball -- /set editor -furball prog"), 128 (a) -> assertCommand(a, "/set editor -furball -mattress", 129 "| Unknown option: -furball -mattress -- /set editor -furball -mattress"), 130 (a) -> assertCommand(a, "/set editor -default prog", 131 "| Specify -default option, -delete option, or program -- /set editor -default prog"), 132 (a) -> assertCommand(a, "/set editor prog", 133 "| Editor set to: prog"), 134 (a) -> assertCommand(a, "/set editor prog -default", 135 "| Editor set to: prog -default"), 136 (a) -> assertCommand(a, "/set editor", 137 "| /set editor prog -default"), 138 (a) -> assertCommand(a, "/se ed prog -furball", 139 "| Editor set to: prog -furball"), 140 (a) -> assertCommand(a, "/set editor", 141 "| /set editor prog -furball"), 142 (a) -> assertCommand(a, "/se ed -delete", 143 "| Editor set to: -default"), 144 (a) -> assertCommand(a, "/set editor", 145 "| /set editor -default"), 146 (a) -> assertCommand(a, "/set editor prog arg1 -furball arg3 -default arg4", 147 "| Editor set to: prog arg1 -furball arg3 -default arg4"), 148 (a) -> assertCommand(a, "/set editor", 149 "| /set editor prog arg1 -furball arg3 -default arg4"), 150 (a) -> assertCommand(a, "/set editor -default", 151 "| Editor set to: -default"), 152 (a) -> assertCommand(a, "/se edi -def", 153 "| Editor set to: -default"), 154 (a) -> assertCommand(a, "/set editor", 155 "| /set editor -default") 156 ); 157 } 158 159 public void retainEditorTest() { 160 test( 161 (a) -> assertCommand(a, "/set editor -retain -furball", 162 "| Unknown option: -furball -- /set editor -retain -furball"), 163 (a) -> assertCommand(a, "/set editor -retain -furball prog", 164 "| Unknown option: -furball -- /set editor -retain -furball prog"), 165 (a) -> assertCommand(a, "/set editor -retain -furball -mattress", 166 "| Unknown option: -furball -mattress -- /set editor -retain -furball -mattress"), 167 (a) -> assertCommand(a, "/set editor -retain -default prog", 168 "| Specify -default option, -delete option, or program -- /set editor -retain -default prog"), 169 (a) -> assertCommand(a, "/set editor -retain -wait", 170 "| -wait applies to external editors"), 171 (a) -> assertCommand(a, "/set editor -retain -default -wait", 172 "| -wait applies to external editors"), 173 (a) -> assertCommand(a, "/set editor -retain prog", 174 "| Editor set to: prog\n" + 175 "| Editor setting retained: prog"), 176 (a) -> assertCommand(a, "/set editor", 177 "| /set editor -retain prog"), 178 (a) -> assertCommand(a, "/se ed other", 179 "| Editor set to: other"), 180 (a) -> assertCommand(a, "/set editor", 181 "| /set editor -retain prog\n" + 182 "| /set editor other"), 183 (a) -> assertCommand(a, "/se ed -delete", 184 "| Editor set to: prog"), 185 (a) -> assertCommand(a, "/set editor", 186 "| /set editor -retain prog"), 187 (a) -> assertCommand(a, "/set editor -retain prog -default", 188 "| Editor set to: prog -default\n" + 189 "| Editor setting retained: prog -default"), 190 (a) -> assertCommand(a, "/set editor", 191 "| /set editor -retain prog -default"), 192 (a) -> assertCommand(a, "/se ed -retain prog -furball", 193 "| Editor set to: prog -furball\n" + 194 "| Editor setting retained: prog -furball"), 195 (a) -> assertCommand(a, "/set editor -retain prog arg1 -furball arg3 -default arg4", 196 "| Editor set to: prog arg1 -furball arg3 -default arg4\n" + 197 "| Editor setting retained: prog arg1 -furball arg3 -default arg4"), 198 (a) -> assertCommand(a, "/set editor", 199 "| /set editor -retain prog arg1 -furball arg3 -default arg4"), 200 (a) -> assertCommand(a, "/set editor -retain -default", 201 "| Editor set to: -default\n" + 202 "| Editor setting retained: -default"), 203 (a) -> assertCommand(a, "/set editor", 204 "| /set editor -retain -default"), 205 (a) -> assertCommand(a, "/se e -ret -def", 206 "| Editor set to: -default\n" + 207 "| Editor setting retained: -default"), 208 (a) -> assertCommand(a, "/set editor -retain", 209 "| Editor setting retained: -default") 210 ); 211 } 212 213 public void setEditorEnvTest() { 214 setEnvVar("EDITOR", "best one"); 215 setEditorEnvSubtest(); 216 setEnvVar("EDITOR", "not this"); 217 setEnvVar("VISUAL", "best one"); 218 setEditorEnvSubtest(); 219 setEnvVar("VISUAL", "not this"); 220 setEnvVar("JSHELLEDITOR", "best one"); 221 setEditorEnvSubtest(); 222 } 223 224 private void setEditorEnvSubtest() { 225 test( 226 (a) -> assertCommand(a, "/set editor", 227 "| /set editor best one"), 228 (a) -> assertCommand(a, "/set editor prog", 229 "| Editor set to: prog"), 230 (a) -> assertCommand(a, "/set editor", 231 "| /set editor prog"), 232 (a) -> assertCommand(a, "/set editor -delete", 233 "| Editor set to: best one"), 234 (a) -> assertCommand(a, "/set editor -retain stored editor", 235 "| Editor set to: stored editor\n" + 236 "| Editor setting retained: stored editor") 237 ); 238 test( 239 (a) -> assertCommand(a, "/set editor", 240 "| /set editor -retain stored editor"), 241 (a) -> assertCommand(a, "/set editor -delete -retain", 242 "| Editor set to: best one") 243 ); 244 } 245 246 public void setStartTest() { 247 Compiler compiler = new Compiler(); 248 Path startup = compiler.getPath("StartTest/startup.txt"); 249 compiler.writeToFile(startup, "int iAmHere = 1234;"); 250 test( 251 (a) -> assertCommand(a, "/set start -furball", 252 "| Unknown option: -furball -- /set start -furball"), 253 (a) -> assertCommand(a, "/set start -furball pyle", 254 "| Unknown option: -furball -- /set start -furball pyle"), 255 (a) -> assertCommand(a, "/se st pyle -furball", 256 "| Unknown option: -furball -- /set st pyle -furball"), 257 (a) -> assertCommand(a, "/set start -furball -mattress", 258 "| Unknown option: -furball -mattress -- /set start -furball -mattress"), 259 (a) -> assertCommand(a, "/set start foo -default", 260 "| Specify no more than one of -default, -none, or a startup file name -- /set start foo -default"), 261 (a) -> assertCommand(a, "/set start frfg", 262 "| File 'frfg' for '/set start' is not found."), 263 (a) -> assertCommand(a, "/set start DEFAULT frfg", 264 "| File 'frfg' for '/set start' is not found."), 265 (a) -> assertCommand(a, "/set start -default", 266 ""), 267 (a) -> assertCommand(a, "/set start", 268 "| /set start -default"), 269 (a) -> assertCommand(a, "/set start DEFAULT", 270 ""), 271 (a) -> assertCommand(a, "/set start", 272 "| /set start -default"), 273 (a) -> assertCommand(a, "/set start DEFAULT PRINTING", 274 ""), 275 (a) -> assertCommandOutputContains(a, "/set start", 276 "void println", "import java.util.*"), 277 (a) -> assertCommand(a, "/set start " + startup.toString(), 278 ""), 279 (a) -> assertCommand(a, "/set start", 280 "| startup.jsh:\n" + 281 "| int iAmHere = 1234;\n" + 282 "| \n" + 283 "| /set start startup.jsh"), 284 (a) -> assertCommand(a, "/se sta -no", 285 ""), 286 (a) -> assertCommand(a, "/set start", 287 "| /set start -none") 288 ); 289 } 290 291 public void retainStartTest() { 292 Compiler compiler = new Compiler(); 293 Path startup = compiler.getPath("StartTest/startup.txt"); 294 compiler.writeToFile(startup, "int iAmHere = 1234;"); 295 test( 296 (a) -> assertCommand(a, "/set start -retain -furball", 297 "| Unknown option: -furball -- /set start -retain -furball"), 298 (a) -> assertCommand(a, "/set start -retain -furball pyle", 299 "| Unknown option: -furball -- /set start -retain -furball pyle"), 300 (a) -> assertCommand(a, "/se st -re pyle -furball", 301 "| Unknown option: -furball -- /set st -re pyle -furball"), 302 (a) -> assertCommand(a, "/set start -retain -furball -mattress", 303 "| Unknown option: -furball -mattress -- /set start -retain -furball -mattress"), 304 (a) -> assertCommand(a, "/set start -retain foo -default", 305 "| Specify no more than one of -default, -none, or a startup file name -- /set start -retain foo -default"), 306 (a) -> assertCommand(a, "/set start -retain -default foo", 307 "| Specify no more than one of -default, -none, or a startup file name -- /set start -retain -default foo"), 308 (a) -> assertCommand(a, "/set start -retain frfg", 309 "| File 'frfg' for '/set start' is not found."), 310 (a) -> assertCommand(a, "/set start -retain -default", 311 ""), 312 (a) -> assertCommand(a, "/set start", 313 "| /set start -retain -default"), 314 (a) -> assertCommand(a, "/set sta -no", 315 ""), 316 (a) -> assertCommand(a, "/set start", 317 "| /set start -retain -default\n" + 318 "| /set start -none"), 319 (a) -> assertCommand(a, "/se st -ret", 320 ""), 321 (a) -> assertCommand(a, "/se sta", 322 "| /set start -retain -none"), 323 (a) -> assertCommand(a, "/set start -retain " + startup.toString(), 324 ""), 325 (a) -> assertCommand(a, "/set start", 326 "| startup.jsh:\n" + 327 "| int iAmHere = 1234;\n" + 328 "| \n" + 329 "| /set start -retain startup.jsh") 330 ); 331 } 332 333 public void setModeTest() { 334 test( 335 (a) -> assertCommandOutputContains(a, "/set mode", 336 "| /set format verbose unresolved"), 337 (a) -> assertCommandOutputStartsWith(a, "/set mode *", 338 "| Expected a feedback mode name: *"), 339 (a) -> assertCommandOutputStartsWith(a, "/set mode -quiet", 340 "| Missing the feedback mode"), 341 (a) -> assertCommandOutputStartsWith(a, "/set mode -quiet *", 342 "| Expected a feedback mode name: *"), 343 (a) -> assertCommandOutputStartsWith(a, "/set mode amode normal thing", 344 "| Unexpected arguments at end of command: thing"), 345 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode", 346 "| To create a new mode either the -command or the -quiet option must be used"), 347 (a) -> assertCommand(a, "/set mode mymode -command", 348 "| Created new feedback mode: mymode"), 349 (a) -> assertCommand(a, "/set mode mymode -delete", 350 ""), 351 (a) -> assertCommand(a, "/set mode mymode normal -command", 352 "| Created new feedback mode: mymode"), 353 (a) -> assertCommand(a, "/set mode -del mymode", 354 ""), 355 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode -command -quiet", 356 "| Conflicting options"), 357 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode -delete -quiet", 358 "| Conflicting options"), 359 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode -command -delete", 360 "| Conflicting options"), 361 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode -d", 362 "| No feedback mode named: mymode"), 363 (a) -> assertCommandOutputStartsWith(a, "/set mode normal -c", 364 "| Mode to be created already exists: normal"), 365 (a) -> assertCommand(a, "/se mo -c mymode", 366 "| Created new feedback mode: mymode"), 367 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode", 368 "| /set mode mymode -command"), 369 (a) -> assertCommand(a, "/set feedback mymode", 370 "| Feedback mode: mymode"), 371 (a) -> assertCommand(a, "/se fe", 372 "| /set feedback mymode\n" + 373 "| \n" + 374 "| Available feedback modes:\n" + 375 "| concise\n" + 376 "| mymode\n" + 377 "| normal\n" + 378 "| silent\n" + 379 "| verbose"), 380 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode -delete", 381 "| The current feedback mode 'mymode' cannot be deleted"), 382 (a) -> assertCommand(a, "/set feedback no", 383 "| Feedback mode: normal"), 384 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode -delete", 385 ""), 386 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode", 387 "| To create a new mode either the -command or the -quiet option must be used -- \n" + 388 "| Does not match any current feedback mode: mymode -- /set mode mymode\n" + 389 "| Available feedback modes:"), 390 (a) -> assertCommandCheckOutput(a, "/set feedback", 391 (s) -> assertFalse(s.contains("mymode"), "Didn't delete: " + s)) 392 ); 393 } 394 395 public void setModeSmashTest() { 396 test( 397 (a) -> assertCommand(a, "/set mode mymode -command", 398 "| Created new feedback mode: mymode"), 399 (a) -> assertCommand(a, "/set feedback mymode", 400 "| Feedback mode: mymode"), 401 (a) -> assertCommand(a, "/set format mymode display 'blurb'", 402 ""), 403 (a) -> assertCommand(a, "45", 404 "blurb"), 405 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode normal", 406 "| To create a new mode either the -command or the -quiet option must be used"), 407 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode -command normal", 408 "| Mode to be created already exists: mymode"), 409 (a) -> assertCommandOutputStartsWith(a, "/set mode mymode -delete", 410 "| The current feedback mode 'mymode' cannot be deleted, use '/set feedback' first"), 411 (a) -> assertCommand(a, "/set feedback normal", 412 "| Feedback mode: normal"), 413 (a) -> assertCommand(a, "/set mode mymode -delete", 414 ""), 415 (a) -> assertCommand(a, "/set mode mymode -command normal", 416 "| Created new feedback mode: mymode"), 417 (a) -> assertCommand(a, "/set feedback mymode", 418 "| Feedback mode: mymode"), 419 (a) -> assertCommandOutputContains(a, "45", 420 " ==> 45") 421 ); 422 } 423 424 public void retainModeTest() { 425 test( 426 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain", 427 "| Missing the feedback mode"), 428 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain *", 429 "| Expected a feedback mode name: *"), 430 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain amode normal", 431 "| Unexpected arguments at end of command: normal"), 432 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain mymode", 433 "| No feedback mode named: mymode"), 434 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain mymode -delete", 435 "| No feedback mode named: mymode"), 436 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain -d mymode", 437 "| No feedback mode named: mymode"), 438 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain normal", 439 "| Not valid with a predefined mode: normal"), 440 (a) -> assertCommand(a, "/set mode mymode verbose -command", 441 "| Created new feedback mode: mymode"), 442 (a) -> assertCommand(a, "/set mode -retain mymode", 443 ""), 444 (a) -> assertCommand(a, "/set mode mymode -delete", 445 ""), 446 (a) -> assertCommand(a, "/set mode -retain mymode -delete", 447 ""), 448 (a) -> assertCommand(a, "/set mode kmode normal -command", 449 "| Created new feedback mode: kmode"), 450 (a) -> assertCommand(a, "/set mode -retain kmode", 451 ""), 452 (a) -> assertCommand(a, "/set mode kmode -delete", 453 ""), 454 (a) -> assertCommand(a, "/set mode tmode normal -command", 455 "| Created new feedback mode: tmode"), 456 (a) -> assertCommandOutputStartsWith(a, "/set feedback -retain tmode", 457 "| '/set feedback -retain <mode>' requires that <mode> is predefined or has been retained with '/set mode -retain'"), 458 (a) -> assertCommand(a, "/set format tmode display 'YES'", 459 ""), 460 (a) -> assertCommand(a, "/set feedback tmode", 461 "| Feedback mode: tmode"), 462 (a) -> assertCommand(a, "45", 463 "YES"), 464 (a) -> assertCommand(a, "/set mode -retain tmode", 465 ""), 466 (a) -> assertCommand(a, "/set feedback -retain tmode", 467 "| Feedback mode: tmode"), 468 (a) -> assertCommand(a, "/set format tmode display 'blurb'", 469 ""), 470 (a) -> assertCommand(a, "/set format tmode display", 471 "| /set format tmode display \"blurb\""), 472 (a) -> assertCommandOutputContains(a, "/set mode tmode", 473 "| /set format tmode display \"YES\""), 474 (a) -> assertCommand(a, "45", 475 "blurb") 476 ); 477 test( 478 (a) -> assertCommand(a, "/set format tmode display", 479 "| /set format tmode display \"YES\""), 480 (a) -> assertCommandOutputContains(a, "/set mode tmode", 481 "| /set format tmode display \"YES\""), 482 (a) -> assertCommand(a, "45", 483 "YES"), 484 (a) -> assertCommand(a, "/set feedback kmode", 485 "| Feedback mode: kmode"), 486 (a) -> assertCommand(a, "/set feedback", 487 "| /set feedback -retain tmode\n" + 488 "| /set feedback kmode\n" + 489 "| \n" + 490 "| Retained feedback modes:\n" + 491 "| kmode\n" + 492 "| tmode\n" + 493 "| Available feedback modes:\n" + 494 "| concise\n" + 495 "| kmode\n" + 496 "| normal\n" + 497 "| silent\n" + 498 "| tmode\n" + 499 "| verbose"), 500 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain kmode -delete", 501 "| The current feedback mode 'kmode' cannot be deleted"), 502 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain tmode -delete", 503 "| The retained feedback mode 'tmode' cannot be deleted"), 504 (a) -> assertCommand(a, "/set feedback -retain normal", 505 "| Feedback mode: normal"), 506 (a) -> assertCommand(a, "/set mode -retain tmode -delete", 507 ""), 508 (a) -> assertCommandOutputStartsWith(a, "/set mode -retain kmode -delete", 509 "") 510 ); 511 test( 512 (a) -> assertCommandOutputStartsWith(a, "/set feedback tmode", 513 "| Does not match any current feedback mode: tmode"), 514 (a) -> assertCommandOutputStartsWith(a, "/set feedback kmode", 515 "| Does not match any current feedback mode: kmode"), 516 (a) -> assertCommandOutputStartsWith(a, "/set feedback mymode", 517 "| Does not match any current feedback mode: mymode"), 518 (a) -> assertCommandCheckOutput(a, "/set feedback", 519 (s) -> assertFalse(s.contains("mymode"), "Didn't delete mymode: " + s)), 520 (a) -> assertCommandCheckOutput(a, "/set feedback", 521 (s) -> assertFalse(s.contains("kmode"), "Didn't delete kmode: " + s)), 522 (a) -> assertCommandCheckOutput(a, "/set feedback", 523 (s) -> assertFalse(s.contains("tmode"), "Didn't delete tmode: " + s)) 524 ); 525 } 526 527} 528