termgui 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/lib/termgui.rb +1 -1
  3. metadata +40 -107
  4. data/Gemfile +0 -14
  5. data/README.md +0 -321
  6. data/src/action.rb +0 -58
  7. data/src/box.rb +0 -90
  8. data/src/color.rb +0 -174
  9. data/src/cursor.rb +0 -69
  10. data/src/editor/editor_base.rb +0 -152
  11. data/src/editor/editor_base_handlers.rb +0 -116
  12. data/src/element.rb +0 -61
  13. data/src/element_bounds.rb +0 -111
  14. data/src/element_box.rb +0 -64
  15. data/src/element_render.rb +0 -102
  16. data/src/element_style.rb +0 -51
  17. data/src/emitter.rb +0 -102
  18. data/src/emitter_state.rb +0 -19
  19. data/src/enterable.rb +0 -93
  20. data/src/event.rb +0 -92
  21. data/src/focus.rb +0 -102
  22. data/src/geometry.rb +0 -53
  23. data/src/image.rb +0 -60
  24. data/src/input.rb +0 -85
  25. data/src/input_grab.rb +0 -17
  26. data/src/input_time.rb +0 -97
  27. data/src/key.rb +0 -114
  28. data/src/log.rb +0 -24
  29. data/src/node.rb +0 -117
  30. data/src/node_attributes.rb +0 -27
  31. data/src/node_visit.rb +0 -52
  32. data/src/renderer.rb +0 -119
  33. data/src/renderer_cursor.rb +0 -18
  34. data/src/renderer_draw.rb +0 -28
  35. data/src/renderer_image.rb +0 -31
  36. data/src/renderer_print.rb +0 -40
  37. data/src/screen.rb +0 -96
  38. data/src/screen_element.rb +0 -59
  39. data/src/screen_input.rb +0 -43
  40. data/src/screen_renderer.rb +0 -53
  41. data/src/style.rb +0 -149
  42. data/src/tco/colouring.rb +0 -248
  43. data/src/tco/config.rb +0 -57
  44. data/src/tco/palette.rb +0 -603
  45. data/src/tco/tco_termgui.rb +0 -30
  46. data/src/termgui.rb +0 -29
  47. data/src/util.rb +0 -110
  48. data/src/util/css.rb +0 -98
  49. data/src/util/css_query.rb +0 -23
  50. data/src/util/easing.rb +0 -364
  51. data/src/util/hash_object.rb +0 -131
  52. data/src/util/imagemagick.rb +0 -27
  53. data/src/util/justify.rb +0 -20
  54. data/src/util/unicode-categories.rb +0 -572
  55. data/src/util/wrap.rb +0 -102
  56. data/src/widget/button.rb +0 -33
  57. data/src/widget/checkbox.rb +0 -47
  58. data/src/widget/col.rb +0 -30
  59. data/src/widget/image.rb +0 -106
  60. data/src/widget/inline.rb +0 -40
  61. data/src/widget/input_number.rb +0 -73
  62. data/src/widget/inputbox.rb +0 -85
  63. data/src/widget/label.rb +0 -33
  64. data/src/widget/modal.rb +0 -69
  65. data/src/widget/row.rb +0 -26
  66. data/src/widget/selectbox.rb +0 -100
  67. data/src/widget/textarea.rb +0 -54
  68. data/src/xml/xml.rb +0 -80
  69. data/test/action_test.rb +0 -34
  70. data/test/box_test.rb +0 -15
  71. data/test/css_test.rb +0 -39
  72. data/test/editor/editor_base_test.rb +0 -201
  73. data/test/element_bounds_test.rb +0 -77
  74. data/test/element_box_test.rb +0 -8
  75. data/test/element_render_test.rb +0 -124
  76. data/test/element_style_test.rb +0 -85
  77. data/test/element_test.rb +0 -10
  78. data/test/emitter_test.rb +0 -108
  79. data/test/event_test.rb +0 -19
  80. data/test/focus_test.rb +0 -37
  81. data/test/geometry_test.rb +0 -12
  82. data/test/input_test.rb +0 -47
  83. data/test/key_test.rb +0 -14
  84. data/test/log_test.rb +0 -21
  85. data/test/node_test.rb +0 -105
  86. data/test/performance/performance1.rb +0 -48
  87. data/test/renderer_test.rb +0 -74
  88. data/test/renderer_test_rect.rb +0 -4
  89. data/test/screen_test.rb +0 -58
  90. data/test/style_test.rb +0 -18
  91. data/test/termgui_test.rb +0 -10
  92. data/test/test_all.rb +0 -30
  93. data/test/util_hash_object_test.rb +0 -93
  94. data/test/util_test.rb +0 -26
  95. data/test/widget/checkbox_test.rb +0 -99
  96. data/test/widget/col_test.rb +0 -87
  97. data/test/widget/inline_test.rb +0 -40
  98. data/test/widget/label_test.rb +0 -94
  99. data/test/widget/row_test.rb +0 -40
  100. data/test/wrap_test.rb +0 -11
  101. data/test/xml_test.rb +0 -77
@@ -1,10 +0,0 @@
1
- require 'test/unit'
2
- include Test::Unit::Assertions
3
- require_relative '../src/element'
4
- require_relative '../src/util'
5
- require_relative '../src/style'
6
- require_relative '../src/screen'
7
- require_relative '../src/log'
8
-
9
- class ElementTest < Test::Unit::TestCase
10
- end
@@ -1,108 +0,0 @@
1
- require 'test/unit'
2
- include Test::Unit::Assertions
3
- require_relative '../src/emitter'
4
- require_relative '../src/util'
5
-
6
- class EmitterTest < Test::Unit::TestCase
7
- def test_event_emitter
8
- event_emitter = Emitter.new
9
- s = ''
10
- ring_bell = lambda do |_object|
11
- s = 'ring ring ring'
12
- end
13
- # create an event 'doorOpen'
14
- event_emitter.install(:doorOpen)
15
- # and subscribe code to event
16
- event_emitter.subscribe(:doorOpen, ring_bell)
17
- # to trigger event
18
- event_emitter.emit(:doorOpen)
19
- next_tick
20
- assert_equal 'ring ring ring', s
21
-
22
- s = ''
23
- event_emitter.subscribe(:doorOpen, proc { |e| s = e[:msg] })
24
- event_emitter.emit(:doorOpen, msg: 'hello')
25
- next_tick
26
- assert_equal 'hello', s
27
- end
28
-
29
- def test_state
30
- e = Emitter.new
31
- e.install(:play)
32
- a = 0
33
- b = 0
34
- e.subscribe(:play, proc {
35
- a += 1
36
- })
37
- e.emit(:play)
38
- assert_equal 1, a
39
- assert_equal 0, b
40
- e.emitter_save('a')
41
- e.emitter_reset
42
- e.install(:play)
43
- e.on(:play, proc { b += 1 })
44
- e.emit(:play)
45
- assert_equal 1, a
46
- assert_equal 1, b
47
- e.emitter_save('b')
48
-
49
- e.emitter_load('a')
50
- e.emit(:play)
51
- assert_equal 2, a
52
- assert_equal 1, b
53
-
54
- e.emitter_load('b')
55
- e.emit(:play)
56
- assert_equal 2, a
57
- assert_equal 2, b
58
- end
59
-
60
- def test_block
61
- e = Emitter.new
62
- e.install(:play)
63
- a = 0
64
- b = 0
65
- e.subscribe(:play) { a += 1 }
66
- e.on(:play) { b += 1 }
67
- assert_equal 0, a
68
- assert_equal 0, b
69
- e.emit(:play)
70
- assert_equal 1, a
71
- assert_equal 1, b
72
- end
73
-
74
- def test_unsubscribe
75
- e = Emitter.new
76
- e.install(:play)
77
- a = 0
78
- b = 0
79
- s1 = e.subscribe(:play) { a += 1 }
80
- s2 = e.subscribe(:play) { b += 1 }
81
- assert_equal 0, a
82
- assert_equal 0, b
83
- e.emit(:play)
84
- assert_equal 1, a
85
- assert_equal 1, b
86
- e.unsubscribe(:play, s2)
87
- e.emit(:play)
88
- assert_equal 2, a
89
- assert_equal 1, b
90
- end
91
-
92
- def test_once
93
- e = Emitter.new
94
- e.install(:play)
95
- a = 0
96
- b = 0
97
- e.subscribe(:play) { a += 1 }
98
- e.once(:play) { b += 1 }
99
- assert_equal 0, a
100
- assert_equal 0, b
101
- e.emit(:play)
102
- assert_equal 1, a
103
- assert_equal 1, b
104
- e.emit(:play)
105
- assert_equal 2, a
106
- assert_equal 1, b
107
- end
108
- end
@@ -1,19 +0,0 @@
1
- require 'test/unit'
2
- include Test::Unit::Assertions
3
- require_relative '../src/event'
4
-
5
- class EventManagerTest < Test::Unit::TestCase
6
- def test_add_key_listener
7
- e = EventManager.new
8
- s = 'n'
9
- e.add_key_listener('q', proc do |ev|
10
- s = ev.key
11
- end)
12
-
13
- e.handle_key(KeyEvent.new('q', 'q'))
14
- assert_equal s, 'q', 'should notify'
15
-
16
- e.handle_key(KeyEvent.new('x', 'x'))
17
- assert_equal s, 'q', 'should not notify'
18
- end
19
- end
@@ -1,37 +0,0 @@
1
- require 'test/unit'
2
- include Test::Unit::Assertions
3
- require_relative '../src/focus'
4
- require_relative '../src/node'
5
- require_relative '../src/event'
6
-
7
- class FocusTest < Test::Unit::TestCase
8
- def test_next
9
- c1 = Node.new(
10
- name: 'child1',
11
- attributes: { focusable: true }
12
- )
13
- c2 = Node.new(
14
- name: 'child2',
15
- attributes: { focusable: true }
16
- )
17
- root = Node.new(
18
- text: 'parent',
19
- children: [c1, c2]
20
- )
21
- assert_equal nil, c1.get_attribute(:focused)
22
- focus = FocusManager.new(root: root, event: EventManager.new)
23
- times = 0
24
- focus.add_listener(:focus, proc { |e|
25
- if times.zero?
26
- assert_equal e[:focused], c2
27
- assert_equal e[:previous], c1
28
- end
29
- times += 1
30
- })
31
- assert_equal true, c1.get_attribute(:focused)
32
- focus.focus_next
33
- assert_equal false, c1.get_attribute(:focused)
34
- assert_equal true, c2.get_attribute(:focused)
35
- assert_equal times, 1
36
- end
37
- end
@@ -1,12 +0,0 @@
1
- require 'test/unit'
2
- include Test::Unit::Assertions
3
- require_relative '../src/geometry'
4
-
5
- class GeometryTest < Test::Unit::TestCase
6
- def test_bounds
7
- o = Bounds.new(top: 2, left: 1, right: 3, bottom: 4)
8
- assert_equal 2, o.top
9
- o.top = 6
10
- assert_equal 6, o.top
11
- end
12
- end
@@ -1,47 +0,0 @@
1
- require 'test/unit'
2
- include Test::Unit::Assertions
3
- require_relative '../src/input'
4
-
5
- class InputTest < Test::Unit::TestCase
6
- def test_set_timeout
7
- i = Input.new
8
- t = nil
9
- i.set_timeout(0.1, proc {
10
- t = 'timeout'
11
- i.stop
12
- })
13
- i.start
14
- assert_equal t, 'timeout'
15
- end
16
-
17
- def test_set_timeout_block
18
- i = Input.new
19
- t = nil
20
- i.set_timeout(0.1) do
21
- t = 'timeout'
22
- i.stop
23
- end
24
- i.start
25
- assert_equal t, 'timeout'
26
- end
27
-
28
- def test_wait_for
29
- i = Input.new
30
- t = nil
31
- y = nil
32
- i.wait_for(proc { t == 1 }) do |timeout|
33
- assert_equal false, timeout
34
- assert_equal 1, t
35
- y = 'works'
36
- i.stop
37
- end
38
- i.set_timeout(0.2) do
39
- t = 1
40
- end
41
- assert_equal nil, t
42
- assert_equal nil, y
43
- i.start
44
- assert_equal y, 'works'
45
- assert_equal 1, t
46
- end
47
- end
@@ -1,14 +0,0 @@
1
- require 'test/unit'
2
- include Test::Unit::Assertions
3
- require_relative '../src/key'
4
-
5
- class KeyTest < Test::Unit::TestCase
6
- def test_char_to_name
7
- assert_equal 'C-z', char_to_name('\x1A')
8
- end
9
-
10
- def test_name_to_char
11
- assert_equal '\x1A', name_to_char('C-z')
12
- assert_equal 'q', name_to_char('q')
13
- end
14
- end
@@ -1,21 +0,0 @@
1
- require 'test/unit'
2
- include Test::Unit::Assertions
3
- require_relative '../src/log'
4
-
5
- class Logger1
6
- include Log
7
- def initialize(file = 'log.txt')
8
- @file = file
9
- end
10
- end
11
-
12
- class LogTest < Test::Unit::TestCase
13
- def test_log
14
- `rm -rf tmp_test_log.txt`
15
- l = Logger1.new 'tmp_test_log.txt'
16
- l.log(a: [1, 2, { b: false, c: 'hello' }])
17
- s = File.open('tmp_test_log.txt', 'r').read
18
- assert_equal "------\n" + "[{:a=>[1, 2, {:b=>false, :c=>\"hello\"}]}]\n", s
19
- `rm -rf tmp_test_log.txt`
20
- end
21
- end
@@ -1,105 +0,0 @@
1
- require 'test/unit'
2
- include Test::Unit::Assertions
3
- require_relative '../src/node'
4
-
5
- class NodeTest < Test::Unit::TestCase
6
- def test_children
7
- n = Node.new
8
- assert_equal n.children, []
9
- c = Node.new
10
- n.append_child c
11
- assert_equal n.children, [c]
12
- assert_equal c.children, []
13
- end
14
-
15
- def test_visit_node
16
- n = Node.new(
17
- text: 'parent',
18
- children: [
19
- Node.new(name: 'child1'),
20
- Node.new(name: 'child2', children: [
21
- Node.new(name: 'child2.1')
22
- ])
23
- ]
24
- )
25
- assert_equal 'Node(name: node, children: [Node(name: child1, children: []), ' \
26
- 'Node(name: child2, children: [Node(name: child2.1, children: [])])])',
27
- n.to_s
28
- a = []
29
- visit_node(n, proc { |child|
30
- a.push child.name
31
- false
32
- })
33
- assert_equal ['child1', 'child2.1', 'child2', 'node'], a
34
- end
35
-
36
- def test_query_by_attribute
37
- n = Node.new(
38
- text: 'parent',
39
- attributes: {
40
- foo: 'bar'
41
- },
42
- children: [
43
- Node.new(
44
- name: 'child1',
45
- attributes: { a: 1.2 }
46
- ),
47
- Node.new(
48
- name: 'child2',
49
- attributes: { a: 1.2 },
50
- children: [
51
- Node.new(
52
- name: 'child2.1',
53
- attributes: { a: 1.2 }
54
- )
55
- ]
56
- )
57
- ]
58
- )
59
- result = n.query_by_attribute(:foo, 'bar')
60
- assert_equal [n], result
61
- assert_equal ['child1', 'child2.1', 'child2'], n.query_by_attribute(:a, 1.2).map(&:name)
62
- end
63
-
64
- def test_query_one_by_attribute
65
- n = Node.new(
66
- text: 'parent',
67
- attributes: {
68
- },
69
- children: [
70
- Node.new(
71
- name: 'child1',
72
- attributes: { a: 1.2 }
73
- ),
74
- Node.new(
75
- name: 'child2',
76
- attributes: { a: 1.2 },
77
- children: [
78
- Node.new(
79
- name: 'child2.1',
80
- attributes: { a: 1.2 }
81
- )
82
- ]
83
- )
84
- ]
85
- )
86
- result = n.query_one_by_attribute(:a, 1.2)
87
- assert_equal 'child1', result.name
88
- end
89
-
90
- # def test_append_to
91
- # pend
92
- # end
93
-
94
- # def test_insert_children
95
- # pend
96
- # end
97
-
98
- # def test_remove
99
- # pend
100
- # end
101
-
102
- # def test_parent_prop
103
- # pend
104
- # end
105
- end
@@ -1,48 +0,0 @@
1
- # warning: execute this in a real terminal (not in vscode's) because of performance
2
-
3
- require_relative '../../src/widget/button'
4
- require_relative '../../src/screen'
5
- require_relative '../../src/util'
6
-
7
- def test(timeout: 3, box_count: 80, interval: 0.01, render_count: 1, screen_width: 120, screen_height: 32, text_length: 5, no_buffer: false)
8
- t0 = Time.now
9
- i = 0
10
- s = Screen.new(width: screen_width, height: screen_height)
11
- s.renderer.no_buffer = no_buffer
12
- s.set_timeout(timeout) do
13
- config = {
14
- timeout: timeout, box_count: box_count, interval: interval, render_count: render_count, screen_width:
15
- screen_width, screen_height: screen_height, text_length: text_length, no_buffer: no_buffer
16
- }
17
- s.clear
18
- s.destroy
19
- print_string "\r
20
- Iteration ##{i} \r
21
- Time: #{Time.now - t0} \r
22
- Config: #{config} \r"
23
- end
24
-
25
- draw = proc {
26
- box_count.times do |j|
27
- s.append_child Button.new(x: random_int(2, s.width - 20),
28
- y: random_int(1, s.height - 4), text: "button#{j}",
29
- style: { bg: random_color, fg: random_color, border: { style: 'single', fg: random_color } })
30
- end
31
- }
32
- step = proc {
33
- i += 1
34
- s.empty
35
- s.clear
36
- draw.call
37
- l = s.append_child Label.new(text: "iteration ##{i} **")
38
- render_count.times { s.render }
39
- s.set_timeout(interval) do
40
- step.call
41
- end
42
- }
43
- step.call
44
- s.start
45
- end
46
-
47
- test(render_count: 10, no_buffer: true)
48
- # test(screen_width: nil, screen_height: nil)
@@ -1,74 +0,0 @@
1
- require_relative '../src/renderer'
2
- require_relative '../src/util'
3
- require 'test/unit'
4
- include Test::Unit::Assertions
5
-
6
- class RendererTest < Test::Unit::TestCase
7
- def test_rect_stub
8
- assert_include "\e[2;2Hllllllll" \
9
- "\e[3;2Hllllllll" \
10
- "\e[4;2Hllllllll" \
11
- "\e[5;2Hllllllll" \
12
- "\e[6;2Hllllllll", `ruby test/renderer_test_rect.rb`
13
- end
14
-
15
- def test_rect
16
- r = Renderer.new
17
- s = r.rect x: 2, y: 1, width: 3, height: 2, ch: 'x'
18
- assert_equal "\e[2;2Hxxx\e[3;2Hxxx", s
19
- end
20
-
21
- def test_print
22
- r2 = Renderer.new 10, 7
23
- r2.rect x: 2, y: 1, width: 3, height: 2, ch: 'x'
24
- assert_equal ' \\n' \
25
- ' xxx \\n' \
26
- ' xxx \\n' \
27
- ' \\n' \
28
- ' \\n' \
29
- ' \\n' \
30
- ' \\n', r2.print
31
-
32
- r2.rect x: 4, y: 2, width: 2, height: 3, ch: 'y'
33
- assert_equal ' \\n' \
34
- ' xxx \\n' \
35
- ' xxyy \\n' \
36
- ' yy \\n' \
37
- ' yy \\n' \
38
- ' \\n' \
39
- ' \\n', r2.print
40
- r2.clear
41
- assert_equal ' \\n' \
42
- ' \\n' \
43
- ' \\n' \
44
- ' \\n' \
45
- ' \\n' \
46
- ' \\n' \
47
- ' \\n', r2.print
48
- end
49
-
50
- def test_circle
51
- s = Screen.new_for_testing(width: 30, height: 20)
52
- s.circle(x: 10, y: 10, radius: 6, stroke: Style.new(bg: 'green', fg: 'red'), stroke_ch: 'x', fill: Style.new(bg: 'blue'), fill_ch: 'o')
53
- assert_equal' \n' \
54
- ' \n' \
55
- ' \n' \
56
- ' \n' \
57
- ' xxxxx \n' \
58
- ' xooooox \n' \
59
- ' xooooooox \n' \
60
- ' xooooooooox \n' \
61
- ' xooooooooooox \n' \
62
- ' xooooooooooox \n' \
63
- ' xooooooooooox \n' \
64
- ' xooooooooooox \n' \
65
- ' xooooooooooox \n' \
66
- ' xooooooooox \n' \
67
- ' xooooooox \n' \
68
- ' xooooox \n' \
69
- ' xxxxx \n' \
70
- ' \n' \
71
- ' \n' \
72
- ' \n', s.print
73
- end
74
- end