mirror of
https://github.com/lihop/godot-xterm.git
synced 2024-11-10 04:40:25 +01:00
8d76d3500c
With the exception of text_decoder.gd the code in these files follows the original so closely that it doesn't qualify as an original work and so there is nothing new to copyright. Instead, the original license text is kept with a note mentioning the port to GDScript.
202 lines
5.8 KiB
GDScript
202 lines
5.8 KiB
GDScript
# Copyright (c) 2019 The xterm.js authors. All rights reserved.
|
|
# Ported to GDScript by the GodotXterm authors.
|
|
# License MIT
|
|
extends 'res://addons/gut/test.gd'
|
|
|
|
const Params = preload("res://addons/godot_xterm/parser/params.gd")
|
|
|
|
class TestParams:
|
|
extends 'res://addons/gut/test.gd'
|
|
|
|
var params
|
|
|
|
func before_each():
|
|
params = Params.new()
|
|
|
|
func test_respects_ctor_args():
|
|
params = Params.new(12, 23)
|
|
assert_eq(params.params.size(), 12)
|
|
assert_eq(params.sub_params.size(), 23)
|
|
assert_eq(params.to_array(), [])
|
|
|
|
func test_add_param():
|
|
params.add_param(1)
|
|
assert_eq(params.length, 1)
|
|
assert_eq(params.params.slice(0, params.length - 1), [1])
|
|
assert_eq(params.to_array(), [1])
|
|
params.add_param(23)
|
|
assert_eq(params.length, 2)
|
|
assert_eq(params.params.slice(0, params.length - 1), [1, 23])
|
|
assert_eq(params.to_array(), [1, 23])
|
|
assert_eq(params.sub_params_length, 0)
|
|
|
|
func test_add_sub_param():
|
|
params.add_param(1)
|
|
params.add_sub_param(2)
|
|
params.add_sub_param(3)
|
|
assert_eq(params.length, 1)
|
|
assert_eq(params.sub_params_length, 2)
|
|
assert_eq(params.to_array(), [1, [2, 3]])
|
|
params.add_param(12345)
|
|
params.add_sub_param(-1)
|
|
assert_eq(params.length, 2)
|
|
assert_eq(params.sub_params_length, 3)
|
|
assert_eq(params.to_array(), [1, [2,3], 12345, [-1]])
|
|
|
|
func test_should_not_add_sub_params_without_previous_param():
|
|
params.add_sub_param(2)
|
|
params.add_sub_param(3)
|
|
assert_eq(params.length, 0)
|
|
assert_eq(params.sub_params_length, 0)
|
|
assert_eq(params.to_array(), [])
|
|
params.add_param(1)
|
|
params.add_sub_param(2)
|
|
params.add_sub_param(3)
|
|
assert_eq(params.length, 1)
|
|
assert_eq(params.sub_params_length, 2)
|
|
assert_eq(params.to_array(), [1, [2, 3]])
|
|
|
|
func test_reset():
|
|
params.add_param(1)
|
|
params.add_sub_param(2)
|
|
params.add_sub_param(3)
|
|
params.add_param(12345)
|
|
params.reset()
|
|
assert_eq(params.length, 0)
|
|
assert_eq(params.sub_params_length, 0)
|
|
assert_eq(params.to_array(), [])
|
|
params.add_param(1)
|
|
params.add_sub_param(2)
|
|
params.add_sub_param(3)
|
|
params.add_param(12345)
|
|
params.add_sub_param(-1)
|
|
assert_eq(params.length, 2)
|
|
assert_eq(params.sub_params_length, 3)
|
|
assert_eq(params.to_array(), [1, [2, 3], 12345, [-1]])
|
|
|
|
|
|
func test_from_array_to_array():
|
|
var data = []
|
|
assert_eq(params.from_array(data).to_array(), data)
|
|
data = [1, [2, 3], 12345, [-1]]
|
|
assert_eq(params.from_array(data).to_array(), data)
|
|
data = [38, 2, 50, 100, 150]
|
|
assert_eq(params.from_array(data).to_array(), data)
|
|
data = [38, 2, 50, 100, [150]]
|
|
assert_eq(params.from_array(data).to_array(), data)
|
|
data = [38, [2, 50, 100, 150]]
|
|
assert_eq(params.from_array(data).to_array(), data)
|
|
# strip empty sub params
|
|
data = [38, [2, 50, 100, 150], 5, [], 6]
|
|
assert_eq(Params.from_array(data).to_array(), [38, [2, 50, 100, 150], 5, 6])
|
|
# ignore leading sub params
|
|
data = [[1,2], 12345, [-1]]
|
|
assert_eq(Params.from_array(data).to_array(), [12345, [-1]])
|
|
|
|
|
|
class TestParse:
|
|
extends 'res://addons/gut/test.gd'
|
|
|
|
var params
|
|
|
|
func parse(params, s):
|
|
params.reset()
|
|
params.add_param(0)
|
|
if typeof(s) == TYPE_STRING:
|
|
s = [s]
|
|
for chunk in s:
|
|
var i = 0
|
|
while i < chunk.length():
|
|
# Start for
|
|
var code = chunk.to_ascii()[i]
|
|
var do = true
|
|
while do:
|
|
match code:
|
|
0x3b:
|
|
params.add_param(0)
|
|
0x3a:
|
|
params.add_sub_param(-1)
|
|
_:
|
|
params.add_digit(code - 48)
|
|
code = chunk.to_ascii()[i] if i < chunk.length() else 0
|
|
i+=1
|
|
do = i < s.size() and code > 0x2f and code < 0x3c
|
|
i-=1
|
|
# End for
|
|
i+=1
|
|
|
|
func before_each():
|
|
params = Params.new()
|
|
|
|
func test_param_defaults_to_0(): # ZDM (Zero Default Mode)
|
|
parse(params, '')
|
|
assert_eq(params.to_array(), [0])
|
|
|
|
func test_sub_param_defaults_to_neg_1():
|
|
parse(params, ':')
|
|
assert_eq(params.to_array(), [0, [-1]])
|
|
|
|
func test_reset_on_new_sequence():
|
|
parse(params, '1;2;3')
|
|
assert_eq(params.to_array(), [1, 2, 3])
|
|
parse(params, '4')
|
|
assert_eq(params.to_array(), [4])
|
|
parse(params, '4::123:5;6;7')
|
|
assert_eq(params.to_array(), [4, [-1, 123, 5], 6, 7])
|
|
parse(params, '')
|
|
assert_eq(params.to_array(), [0])
|
|
|
|
func test_should_handle_length_restrictions_correctly():
|
|
params = Params.new(3, 3)
|
|
parse(params, '1;2;3')
|
|
assert_eq(params.to_array(), [1, 2, 3])
|
|
parse(params, '4')
|
|
assert_eq(params.to_array(), [4])
|
|
parse(params, '4::123:5;6;7')
|
|
assert_eq(params.to_array(), [4, [-1, 123, 5], 6, 7])
|
|
parse(params, '')
|
|
assert_eq(params.to_array(), [0])
|
|
# overlong params
|
|
parse(params, '4;38:2::50:100:150;48:5:22')
|
|
assert_eq(params.to_array(), [4, 38, [2, -1, 50], 48])
|
|
# overlong sub params
|
|
parse(params, '4;38:2::50:100:150;48:5:22')
|
|
assert_eq(params.to_array(), [4, 38, [2, -1, 50], 48])
|
|
|
|
func test_typical_sequences():
|
|
# SGR with semicolon syntax
|
|
parse(params, '0;4;38;2;50;100;150;48;5;22')
|
|
assert_eq(params.to_array(), [0, 4, 38, 2, 50, 100, 150, 48, 5, 22])
|
|
# SGR mixed style (partly wrong)
|
|
parse(params, '0;4;38;2;50:100:150;48;5:22')
|
|
assert_eq(params.to_array(), [0, 4, 38, 2, 50, [100, 150], 48, 5, [22]])
|
|
# SGR colon style
|
|
parse(params, '0;4;38:2::50:100:150;48:5:22')
|
|
assert_eq(params.to_array(), [0, 4, 38, [2, -1, 50, 100, 150], 48, [5, 22]])
|
|
|
|
func test_clamp_parsed_params():
|
|
parse(params, '2147483648')
|
|
assert_eq(params.to_array(), [0x7FFFFFFF])
|
|
|
|
func test_clamp_parsed_sub_params():
|
|
parse(params, ':2147483648')
|
|
assert_eq(params.to_array(), [0, [0x7FFFFFFF]])
|
|
|
|
func test_should_cancel_subdigits_if_beyond_params_limit():
|
|
parse(params, ';;;;;;;;;10;;;;;;;;;;20;;;;;;;;;;30;31;32;33;34;35::::::::')
|
|
assert_eq(params.to_array(), [
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 10,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32
|
|
])
|
|
|
|
# func test_should_carry_forward_is_sub_state():
|
|
# parse(params, ['1:22:33', '44'])
|
|
# assert_eq(params.to_array(), [1, [22, 3344]])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|