diff --git a/exec/termtest.js b/exec/termtest.js index 99decdafa5e24a45f71e21f0e3ede05a47b684b8..914f3550c1237c4a89290f6051151c033a78e7cd 100644 --- a/exec/termtest.js +++ b/exec/termtest.js @@ -99,7 +99,7 @@ function test_ctrl(results,skip) console.crlf(); if(retstr != '') { console.writeln('FAILED! Returned "'+retstr+'"'); - return(false); + return("ENQ Response: '"+retstr+"'"); } console.writeln("Passed"); return(true); @@ -116,8 +116,19 @@ function test_ctrl(results,skip) desc:"Beeps", type:"control", test:function(results) { - console.write(this.char); - return(console.yesno("Did your terminal beep")); + do { + var ret; + + console.write(this.char); + ret=console.yesno("Did your terminal beep"); + if(!ret) { + if(!console.yesno("Do you want to try again")) + return(false); + } + else { + return(true); + } + } while(1); }, }, "BS":{ @@ -125,11 +136,43 @@ function test_ctrl(results,skip) desc:"Backspace", type:"control", test:function(results) { + var ret; + console.writeln("Backspace Test"); console.writeln("Back \b\b\b\b\bspace Test"); console.writeln("Back Test\b\b\b\b\b\b\b\b\b\bspace"); console.writeln("\b\b\bBackspace Test"); - return(console.yesno("Are the previous four lines identical")); + ret=console.yesno("Are the previous four lines identical"); + if(!ret) { + ret=''; + + console.writeln("Backspace Test"); + console.writeln("Back \b\b\b\b\bspace Test"); + ret=console.yesno("Are the previous two lines identical"); + if(!ret) { + // Completely non-functional + return(false); + } + console.writeln("Backspace Test"); + console.writeln("Back Test\b\b\b\b\b\b\b\b\b\bspace"); + if(!console.yesno("Are the previous two lines identical")) { + // Destructive + ret += "Destructive Backspace"; + } + console.writeln("Backspace Test"); + console.writeln("\b\b\bBackspace Test"); + if(!console.yesno("Are the previous two lines identical")) { + // Wraps + if(ret.length) + ret += "\r\n"; + ret += "Backspace Wraps"; + } + if(ret=='') { + console.writeln("I thought you said they didn't line up!"); + return(true); + } + } + return(ret); }, source:"ECMA-48", }, @@ -594,7 +637,8 @@ function test_ctrl_seqs(results) char:"@", test:function(results) { if(results.ctrl.BS) { - console.writeln("InsertCharTest\b\b\b\b\033[@\b\b\b\b\033[@"); + console.writeln("InsertCharTest\b\b\b\b\033[@\b\b\b\b\033[01@"); + console.write("\033[99@"); return(console.yesno('Are there spaces in "Insert Char Test"')); } return(null); @@ -608,7 +652,7 @@ function test_ctrl_seqs(results) console.writeln(" \033[ALine 2"); console.crlf(); console.crlf(); - console.writeln(" \033[2ALine 3"); + console.writeln(" \033[02ALine 3"); console.writeln(" Line 4"); return(console.yesno('Does "Line 1" to "Line 4" line up with no gaps')); }, @@ -616,7 +660,7 @@ function test_ctrl_seqs(results) "CUD":{ char:"B", test:function(results) { - if(results.ctrl_seqs.CUU) { + if(results.ctrl_seqs.CUU && results.ctrl.BS) { console.crlf(); console.crlf(); console.crlf(); @@ -625,9 +669,9 @@ function test_ctrl_seqs(results) console.write(" Line 1\b\b\b\b\b\b"); console.write("\033[BLine 2\b\b\b\b\b\b"); console.write("\033[1BLine 3\b\b\b\b\b\b"); - console.write("\033[A\033[2B"); + console.write("\033[A\033[02B"); console.write("Line 4"); - console.write("\033[33B"); + console.write("\033[99B"); console.writeln("\b\b\b\b\b\bLine 5"); return(console.yesno('Does "Line 1" to "Line 5" line up with no gaps')); } @@ -636,18 +680,71 @@ function test_ctrl_seqs(results) }, "CUF":{ char:"C", + test:function(results) { + if(results.ctrl.CR) { + console.writeln("C\r\033[Cu\r\033[2Cr\r\033[3Cs\r\033[4Co\r\033[5Cr\r\033[7CF\r\033[8Co\r\033[9Cr\r\033[10Cw\r\033[011Ca\r\033[012Cr\r\033[13Cd"); + console.writeln("Cursor Forward"); + return(console.yesno("Are the two previous lines identical")); + } + return(null); + }, }, "CUB":{ char:"D", + test:function(results) { + var ret; + + console.writeln("Cursor Backwards Test"); + console.writeln("Cursor \033[D\033[2D\033[03D\033[4DBackwards Test"); + console.writeln("Cursor Test\033[014DBackwards"); + console.writeln("\033[D\033[2DCursor Backwards Test"); + console.write("\033[99D"); + ret=console.yesno("Are the previous four lines identical"); + return(ret); + }, }, "CNL":{ + char:"\x0a", + desc:"Cursor Next Line", + test:function(results) { + if(results.ctrl_seqs.CUU) { + console.writeln("Cursor Next Line Test\033[ECursor Next Line Test\033[A\033[2ECursor Next Line Test"); + return(console.yesno("Are the previous three lines identical")); + } + return(null); + }, char:"E", }, "CPL":{ char:"F", + desc:"Cursor Preceding Line", + test:function(results) { + if(results.ctrl.LF) { + console.crlf(); + console.crlf(); + console.crlf(); + console.write("\033[3F"); + console.writeln(" Line 1\n\n"); + console.writeln("\033[2F Line 2"); + console.crlf(); + console.writeln("\033[F Line 3"); + return(console.yesno('Does "Line 1" to "Line 3" line up with no gaps')); + } + } }, "CHA":{ char:"G", + test:function(results) { + var ret; + + console.writeln("Cursor Character Absolute Test"); + console.writeln("Cursor \033[8GCharacter Absolute Test"); + console.write("Cursor Absolute Test\033[08GCharacter\n"); + console.writeln("\033[GCursor Character Absolute Test"); + console.write("\033[99G\033[0G"); + ret=console.yesno("Are the previous four lines identical"); + return(ret); + }, }, "CUP":{ char:"H",