Results of testing Zutty with Vttest

Table of Contents

Version of test program:

VT100 test program, version 2.7 (20210210)

Section numbering reflects Vttest menu options.

Note that auto-verification against regressions in the test results is done by the automated test harness (shell scripts below test/). However, not everything listed here is verified automatically as part of those tests (e.g., no scripted tests exist for xterm mouse protocol support). Also, just because we do a regression test (validating the screen image against a predetermined hash) does not mean that the output is perfect – several instances are noted below with small differences mostly from (as of yet) unimplemented features. We still include these in the regression test suite, to notice breaking changes that alter the terminal output in unforeseen ways. In case Zutty is changed to produce output that is "more correct", the test tools have support to update the validation hash.

Legend:

Meta:

1. Test of cursor movements

  • [X] The screen should be cleared, and have an unbroken border… (80 column mode)
  • [X] The screen should be cleared, and have an unbroken border… (132 column mode)
    • We do not support terminal-initiated change of window size. Correctness can be confirmed by manually setting zutty to 132 columns and re-running the test.
  • [X] Test of autowrap, mixing control and print characters. (80 column mode)
  • [X] Test of autowrap, mixing control and print characters. (132 column mode)
    • The terminal does not change size, but the pattern is correct. Correctness can be further confirmed by manually setting zutty to 132 columns and re-running the test.
  • [X] Test of cursor-control characters inside ESC sequences.
  • [X] Test of leading zeros in ESC sequences.

2. Test of screen features

  • [X] There should be three identical lines of *'s completely filling…
  • [X] Test of TAB setting/resetting.
  • [ ] 132 column mode, light background
    • No inverse video mode, no window size change
  • [ ] 80 column mode, light background
    • No inverse video mode
  • [ ] 132 column mode, dark background
    • No window size change
  • [X] 80 column mode, dark background
  • [X] Soft scroll down region [12..13]
    • No soft scroll, but end state is correct
  • [X] Soft scroll down region [1..24]
    • No soft scroll, but end state is correct
  • [X] Jump scroll down region [12..13]
  • [X] Jump scroll down region [1..24]
  • [X] Origin mode test; two lines at the bottom of the screen.
  • [X] Origin mode test; one line at the top and one at the bottom of the screen.
  • [ ] Graphic rendition test patterns on dark background
    • Blinking is not supported
  • [ ] Graphic rendition test patterns on light background
    • Blinking is not supported; inverse video mode is not supported
  • [X] Test of SAVE/RESTORE CURSOR feature.

3. Test of character sets

Zutty is first and foremost a Unicode terminal, with native support for UTF-8 encoded input. Hoewever, it implements support for the following "hard" character sets that have been introduced at various points of the DEC terminal product history:

  • US ASCII
  • DEC Special Graphics (Character and Line Drawing) Set
  • DEC Supplemental Graphics Set
  • DEC Technical Character Set
  • ISO Latin-1 (ISO-8859-1)
  • United Kingdom (UK)

Adding support for more (e.g., NRCs other than the British one) is trivial, but should not be necessary in the age of Unicode.

Note: Because of simultaneous support for both UTF-8 and the above user-selectable charsets, some aspects of operation had to be changed when compared to specifications of the original DEC terminals. In particular, the default state (after initialization and reset) is UTF-8 for both GL and GR, and not ASCII for GL and DEC Supplemental / Latin-1 for G2.

Further, in case an application moves away from using UTF-8, it is necessary to re-activate a mapping of both GL and GR to UTF-8 in order to resume correct interpretation of multi-byte UTF-8 characters. There are two ways to do this: either map them to one of G0-G3 designated as ASCII (UTF-8 is an alias of this, and corresponds to the final character 'B' in the designator sequence), or by activating UTF-8 mode on the terminal (via ESC % G).

A possible example of the former designator plus mapper sequence (in accordance with the DEC VT420 Programmer Reference Manual):

  • ESC ( B (designate ASCII as G0) followed by SI [0x0f] (map G0 into GL).
  • ESC * B (designate ASCII as G2) followed by ESC } (map G2 into GR).

Of course, GL and GR can also be both mapped to e.g., G0.

A third option is to send the sequence for set/reset private mode 2 (setting the terminal either to VT52 or VT100 compatibility mode) via ESC [ ? 2 h or ESC [ ? 2 l, which also reset the charset state to its initial (in the case of Zutty, UTF-8 enabled) state.

Successful tests:

  • [X] 3.8 Test VT100 Character Sets
  • [X] 3.9 Test Shift In/Shift Out (SI/SO)
  • [X] 3.10 Test VT220 Locking Shifts
  • [X] 3.11 Test VT220 Single Shifts
  • [X] 3.13 Test Keyboard Layout with G0 Selection

4. Test of double-sized characters

Adding support for this is not planned at this time.

5. Test of keyboard

  • [-] 5.1 LED Lights
  • [-] 5.2 Auto Repeat
  • [X] 5.3 Keyboard Layout
  • [X] 5.4 Cursor Keys
  • [X] 5.5 Numeric Keypad
  • [X] 5.6 Editing Keypad
  • [X] 5.7 Function Keys
  • [-] 5.8 AnswerBack
  • [X] 5.9 Control Keys

6. Test of terminal reports

  • [X] 6.1 <ENQ> (AnswerBack Message)
  • [X] 6.2 Set/Reset Mode - LineFeed / Newline
  • [X] 6.3 Device Status Report 5 & 6
  • [X] 6.4 Primary Device Attributes
  • [X] 6.5 Secondary Device Attributes
  • [-] 6.6 Tertiary Device Attributes
  • [-] 6.7 Request Terminal Parameters
    • This seems not to be implemented by xterm either.

7. Test of VT52 mode

  • [X] The screen should be cleared …
  • [X] Character sets: normal and special graphics
  • [X] Response to IDENTIFY; Operating level awareness

8. Test of VT102 features (Insert/Delete Char/Line)

  • [X] Screen accordion test (Insert & Delete Line).
  • [X] Top line: A's, bottom line: X's, this line, nothing more.
  • [X] Test of 'Insert Mode'. The top line should be 'A*** … ***B'.
  • [X] Test of 'Delete Character'. The top line should be 'AB'.
  • [X] The right column should be staggered by one.
  • [?] The right column should be staggered by one. (double-width mode)
  • [X] If your terminal has the ANSI 'Insert Character' function …

The second half of tests match the above results, minus the fact that 132 column mode is not supported. (Can be confirmed by manually setting zutty to 132 columns wide and re-running the tests.)

9. Test of known bugs

Zutty produces mostly identical results to xterm, discounting the fact that double-width lines are not supported.

10. Test of reset and self-test

  • [X] 1. Reset to Initial State (RIS)
  • [-] 2. Invoke Terminal Test (DECTST)
  • [X] 3. Soft Terminal Reset (DECSTR)

11. Test non-VT100 (e.g., VT220, XTERM) terminals