mirror of
				https://git.proxmox.com/git/mirror_xterm.js
				synced 2025-10-31 14:54:05 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from glob import glob
 | |
| import os
 | |
| import sys
 | |
| import termios
 | |
| import atexit
 | |
| 
 | |
| BASE_DIR = os.path.dirname(os.path.abspath(__file__))
 | |
| 
 | |
| 
 | |
| def enable_echo(fd, enabled):
 | |
|     (iflag, oflag, cflag, lflag, ispeed, ospeed, cc) = termios.tcgetattr(fd)
 | |
|     if enabled:
 | |
|         lflag |= termios.ECHO
 | |
|     else:
 | |
|         lflag &= ~termios.ECHO
 | |
|     new_attr = [iflag, oflag, cflag, lflag, ispeed, ospeed, cc]
 | |
|     termios.tcsetattr(fd, termios.TCSANOW, new_attr)
 | |
| 
 | |
| atexit.register(enable_echo, sys.stdin.fileno(), True)
 | |
| 
 | |
| output = []
 | |
| 
 | |
| 
 | |
| def log(append=False, *s):
 | |
|     if append:
 | |
|         output[-1] += ' ' + ' '.join(str(part) for part in s)
 | |
|     else:
 | |
|         output.append(' '.join(str(part) for part in s))
 | |
| 
 | |
| 
 | |
| def reset_terminal():
 | |
|     sys.stdout.write('\x1bc\x1b[H')
 | |
|     sys.stdout.flush()
 | |
| 
 | |
| 
 | |
| def test():
 | |
|     count = 0
 | |
|     passed = 0
 | |
|     for i, testfile in enumerate(sorted(glob(os.path.join(BASE_DIR, '*.in')))):
 | |
|         count += 1
 | |
|         log(False, os.path.basename(testfile))
 | |
|         reset_terminal()
 | |
|         with open(testfile) as test:
 | |
|             sys.stdout.write('\x1b]0;%s\x07' % os.path.basename(testfile))
 | |
|             sys.stdout.write(test.read()+'\x1bt')
 | |
|             sys.stdout.flush()
 | |
|         with open(os.path.join(os.path.dirname(testfile),
 | |
|                                os.path.basename(testfile).split('.')[0]+'.text')) as expected:
 | |
|             terminal_output = sys.stdin.read()
 | |
|             if not terminal_output:
 | |
|                 # we are in xterm
 | |
|                 continue
 | |
|             if terminal_output != expected.read():
 | |
|                 log(True, '\x1b[31merror\x1b[0m')
 | |
|                 with open(os.path.join(os.path.dirname(testfile), 'output',
 | |
|                                        os.path.basename(testfile)), 'w') as t_out:
 | |
|                     t_out.write(terminal_output)
 | |
|             else:
 | |
|                 passed += 1
 | |
|                 log(True, '\x1b[32mpass\x1b[0m')
 | |
|     return count, passed
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     enable_echo(sys.stdin.fileno(), False)
 | |
|     count, passed = test()
 | |
|     enable_echo(sys.stdin.fileno(), True)
 | |
|     reset_terminal()
 | |
|     for i in range(len(output)/2+1):
 | |
|         if not (i+1) % 25:
 | |
|             sys.stdin.read()
 | |
|         print ''.join(i.ljust(40) for i in output[i*2:i*2+2])
 | |
|     print '\x1b[33mcoverage: %s/%s (%d%%) tests passed.\x1b[0m' % (passed, count, passed*100/count)
 | 
