ruco 0.2.18 → 0.2.19

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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE.txt +20 -0
  3. data/bin/ruco +24 -30
  4. data/lib/ruco.rb +1 -3
  5. data/lib/ruco/command_bar.rb +1 -1
  6. data/lib/ruco/core_ext/range.rb +1 -1
  7. data/lib/ruco/core_ext/string.rb +2 -15
  8. data/lib/ruco/editor/colors.rb +2 -2
  9. data/lib/ruco/status_bar.rb +1 -1
  10. data/lib/ruco/syntax_parser.rb +1 -1
  11. data/lib/ruco/version.rb +1 -1
  12. data/lib/ruco/window.rb +1 -1
  13. metadata +34 -64
  14. data/.gitignore +0 -2
  15. data/.travis.yml +0 -7
  16. data/Gemfile +0 -8
  17. data/Gemfile.lock +0 -39
  18. data/Rakefile +0 -32
  19. data/Readme.md +0 -164
  20. data/lib/ruco/keyboard.rb +0 -206
  21. data/lib/ruco/screen.rb +0 -148
  22. data/lib/ruco/style_map.rb +0 -108
  23. data/playground/benchmark_syntax_parser.rb +0 -23
  24. data/ruco.gemspec +0 -22
  25. data/spec/fixtures/slow.js +0 -4
  26. data/spec/fixtures/test.tmTheme +0 -186
  27. data/spec/ruco/application_spec.rb +0 -433
  28. data/spec/ruco/array_processor_spec.rb +0 -46
  29. data/spec/ruco/command_bar_spec.rb +0 -127
  30. data/spec/ruco/core_ext/array_spec.rb +0 -31
  31. data/spec/ruco/core_ext/range_spec.rb +0 -37
  32. data/spec/ruco/core_ext/string_spec.rb +0 -36
  33. data/spec/ruco/editor_spec.rb +0 -1261
  34. data/spec/ruco/file_store_spec.rb +0 -102
  35. data/spec/ruco/form_spec.rb +0 -83
  36. data/spec/ruco/history_spec.rb +0 -143
  37. data/spec/ruco/keyboard_spec.rb +0 -136
  38. data/spec/ruco/option_accessor_spec.rb +0 -26
  39. data/spec/ruco/screen_spec.rb +0 -52
  40. data/spec/ruco/status_bar_spec.rb +0 -49
  41. data/spec/ruco/style_map_spec.rb +0 -124
  42. data/spec/ruco/syntax_parser_spec.rb +0 -78
  43. data/spec/ruco/text_area_spec.rb +0 -183
  44. data/spec/ruco/tm_theme_spec.rb +0 -14
  45. data/spec/ruco/window_spec.rb +0 -170
  46. data/spec/ruco_spec.rb +0 -7
  47. data/spec/spec_helper.rb +0 -36
@@ -1,26 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Ruco::OptionAccessor do
4
- let(:options){ Ruco::OptionAccessor.new }
5
-
6
- it "can be accessed like a hash" do
7
- options[:xx].should == nil
8
- options[:xx] = 1
9
- options[:xx].should == 1
10
- end
11
-
12
- it "can be written" do
13
- options.foo = true
14
- options[:foo].should == true
15
- end
16
-
17
- it "can access nested keys" do
18
- options.foo_bar = 1
19
- options.history_size = 1
20
- options.nested(:history).should == {:size => 1}
21
- end
22
-
23
- it "has empty hash for nested key" do
24
- options.nested(:history).should == {}
25
- end
26
- end
@@ -1,52 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Ruco::Screen do
4
- describe :curses_style do
5
- it "is 'normal' for nothing" do
6
- Ruco::Screen.curses_style(:normal, true).should == 256
7
- end
8
-
9
- it "is red for red" do
10
- pending
11
- Ruco::Screen.curses_style(:red, true).should == Curses::color_pair( Curses::COLOR_RED )
12
- end
13
-
14
- it "is reverse for reverse" do
15
- Ruco::Screen.curses_style(:reverse, true).should == 512
16
- end
17
-
18
- it "raises on unknown style" do
19
- lambda{
20
- Ruco::Screen.curses_style(:foo, true)
21
- }.should raise_error
22
- end
23
-
24
- describe 'without colors' do
25
- it "is 'normal' for normal" do
26
- Ruco::Screen.curses_style(:normal, false).should == Curses::A_NORMAL
27
- end
28
-
29
- it "is reverse for reverse" do
30
- Ruco::Screen.curses_style(:reverse, false).should == Curses::A_REVERSE
31
- end
32
-
33
- it "is normal for unknown style" do
34
- Ruco::Screen.curses_style(:foo, false).should == Curses::A_NORMAL
35
- end
36
- end
37
- end
38
-
39
- describe :html_to_terminal_color do
40
- # http://www.mudpedia.org/wiki/Xterm_256_colors
41
- [
42
- ['#ff0000', 196],
43
- ['#00ff00', 46],
44
- ['#0000ff', 21],
45
- ['#ffffff', 231]
46
- ].each do |html,term|
47
- it "converts #{html} to #{term}" do
48
- Ruco::Screen.html_to_terminal_color(html).should == term
49
- end
50
- end
51
- end
52
- end
@@ -1,49 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Ruco::StatusBar do
4
- let(:file){ 'spec/temp.txt' }
5
- let(:editor){ Ruco::Editor.new(file, :lines => 5, :columns => 35) }
6
- let(:bar){ Ruco::StatusBar.new(editor, :columns => 35) }
7
-
8
- it "shows name and version" do
9
- bar.view.should include("Ruco #{Ruco::VERSION}")
10
- end
11
-
12
- it "shows the file" do
13
- bar.view.should include(file)
14
- end
15
-
16
- it "can show to long files" do
17
- editor = Ruco::Editor.new('123456789abcdefghijklmnop', :lines => 5, :columns => 20)
18
- bar = Ruco::StatusBar.new(editor, :columns => 30)
19
- bar.view.should == "Ruco #{Ruco::VERSION} -- 1234...nop 1:1"
20
- bar.view.size.should == 30
21
- end
22
-
23
- it "indicates modified" do
24
- bar.view.should_not include('*')
25
- editor.insert('x')
26
- bar.view.should include('*')
27
- end
28
-
29
- it "indicates writable" do
30
- bar.view.should_not include('!')
31
- end
32
-
33
- it "indicates writable if file is missing" do
34
- editor.stub!(:file).and_return '/gradasadadsds'
35
- bar.view.should_not include('!')
36
- end
37
-
38
- it "indicates not writable" do
39
- # this test will always fail on Windows with cygwin because of how cygwin sets up permissions
40
- unless RUBY_PLATFORM =~ /mingw/
41
- editor.stub!(:file).and_return '/etc/sudoers'
42
- bar.view.should include('!')
43
- end
44
- end
45
-
46
- it "shows line and column and right side" do
47
- bar.view.should =~ /1:1$/
48
- end
49
- end
@@ -1,124 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Ruco::StyleMap do
4
- let(:map){ Ruco::StyleMap.new(3) }
5
-
6
- describe :flat do
7
- it "is empty by default" do
8
- map.flatten.should == [nil, nil, nil]
9
- end
10
-
11
- it "reproduces simple styles" do
12
- map.add(:red, 1, 3..5)
13
- # red from 3 to 5
14
- map.flatten.should == [
15
- nil,
16
- [nil, nil, nil, :red, nil, nil, :normal],
17
- nil
18
- ]
19
- end
20
-
21
- it "reproduces merged styles" do
22
- map.add(:reverse, 1, 2..4)
23
- map.add(:red, 1, 3..5)
24
- # reverse at 2 -- reverse and red at 3,4 -- red at 5
25
- map.flatten.should == [
26
- nil,
27
- [nil, nil, :reverse, :red, nil, :red, :normal],
28
- nil
29
- ]
30
- end
31
-
32
- it "reproduces styles with same style repeated" do
33
- map.add(:red, 1, 2..4)
34
- map.add(:red, 1, 6..7)
35
- # red 2,3,4 normal on 5 red on 6,7
36
- map.flatten.should == [
37
- nil,
38
- [nil, nil, :red, nil, nil, :normal, :red, nil, :normal],
39
- nil
40
- ]
41
- end
42
-
43
- it "overwrites styles" do
44
- map.add(:reverse, 0, 0..1)
45
- map.add(:normal, 0, 0..1)
46
- map.flatten.should == [
47
- [:normal, nil, :normal],
48
- nil,
49
- nil
50
- ]
51
- end
52
- end
53
-
54
- describe 'array style operations' do
55
- it "adds two maps" do
56
- s1 = Ruco::StyleMap.new(1)
57
- s1.add(:reverse, 0, 0..1)
58
- s2 = Ruco::StyleMap.new(2)
59
- s2.add(:reverse, 0, 2..3)
60
- (s1 + s2).flatten.should == [
61
- [:reverse, nil, :normal],
62
- [nil, nil, :reverse, nil, :normal],
63
- nil
64
- ]
65
- end
66
-
67
- it "can shift" do
68
- s = Ruco::StyleMap.new(2)
69
- s.add(:reverse, 0, 0..1)
70
- s.add(:reverse, 1, 1..2)
71
- s.shift.flatten.should == [[:reverse, nil, :normal]]
72
- s.flatten.should == [[nil, :reverse, nil, :normal]]
73
- end
74
-
75
- it "can pop" do
76
- s = Ruco::StyleMap.new(2)
77
- s.add(:reverse, 0, 0..1)
78
- s.add(:reverse, 1, 1..2)
79
- s.pop.flatten.should == [[nil, :reverse, nil, :normal]]
80
- s.flatten.should == [[:reverse, nil, :normal]]
81
- end
82
- end
83
-
84
- describe :left_pad! do
85
- it "adds whitespace to left side" do
86
- s = Ruco::StyleMap.new(2)
87
- s.add(:reverse, 0, 0..1)
88
- s.add(:reverse, 1, 1..2)
89
- s.left_pad!(3)
90
- s.flatten.should == [
91
- [nil, nil, nil, :reverse, nil, :normal],
92
- [nil, nil, nil, nil, :reverse, nil, :normal]
93
- ]
94
- end
95
- end
96
-
97
- describe :invert! do
98
- it "inverts styles" do
99
- s = Ruco::StyleMap.new(2)
100
- s.add(:reverse, 0, 0..1)
101
- s.add(:normal, 1, 1..2)
102
- s.add(:red, 1, 4..5)
103
- s.invert!
104
- s.flatten.should == [
105
- [:normal, nil, :normal],
106
- [nil, :reverse, nil, :normal, :red, nil, :normal]
107
- ]
108
- end
109
- end
110
-
111
- describe :styled do
112
- it "can style an unstyled line" do
113
- Ruco::StyleMap.styled("a", nil).should == [[:normal, "a"]]
114
- end
115
-
116
- it "can style a styled line" do
117
- Ruco::StyleMap.styled("a", [:reverse ,nil]).should == [[:normal, ""], [:reverse, "a"]]
118
- end
119
-
120
- it "keeps unstyled parts" do
121
- Ruco::StyleMap.styled("abc", [:reverse, :normal]).should == [[:normal, ""], [:reverse, "a"],[:normal,'bc']]
122
- end
123
- end
124
- end
@@ -1,78 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Ruco::SyntaxParser do
4
- def parse(text, languages=['ruby'])
5
- Ruco::SyntaxParser.syntax_for_lines(text, languages)
6
- end
7
-
8
- describe :parse_lines do
9
- it "shows positions for simple lines" do
10
- parse(["class Foo","end"]).should == [[
11
- ["keyword.control.class.ruby", 0...5],
12
- ["entity.name.type.class.ruby", 6...9],
13
- ["meta.class.ruby", 0...9]],
14
- [["keyword.control.ruby", 0...3]
15
- ]]
16
- end
17
-
18
- it "shows positions for complicated lines" do
19
- parse(["class foo end blob else Foo"]).should == [[
20
- ["keyword.control.class.ruby", 0...5],
21
- ["entity.name.type.class.ruby", 6...9],
22
- ["meta.class.ruby", 0...9],
23
- ["keyword.control.ruby", 10...13],
24
- ["keyword.control.ruby", 19...23],
25
- ["variable.other.constant.ruby", 24...27]
26
- ]]
27
- end
28
-
29
- it "does not show keywords in strings" do
30
- parse(["Bar 'Bar' foo"]).should == [[
31
- ["variable.other.constant.ruby", 0...3],
32
- ["punctuation.definition.string.begin.ruby", 4...5],
33
- ["punctuation.definition.string.end.ruby", 8...9],
34
- ["string.quoted.single.ruby", 4...9]
35
- ]]
36
- end
37
-
38
- it "does not show strings in comments" do
39
- parse(["'Bar' # 'Bar'"]).should == [[
40
- ["punctuation.definition.string.begin.ruby", 0...1],
41
- ["punctuation.definition.string.end.ruby", 4...5],
42
- ["string.quoted.single.ruby", 0...5],
43
- ["punctuation.definition.comment.ruby", 6...7],
44
- ["comment.line.number-sign.ruby", 6...13]
45
- ]]
46
- end
47
-
48
- it "shows multiline comments" do
49
- parse(["=begin","1 : 2","=end"]).should == [
50
- [["punctuation.definition.comment.ruby", 0...6], ["comment.block.documentation.ruby", 0...7]],
51
- [["comment.block.documentation.ruby", 0...6]],
52
- [["punctuation.definition.comment.ruby", 0...4], ["comment.block.documentation.ruby", 0...4]]
53
- ]
54
- end
55
-
56
- it "continues multiline on last line before closing it" do
57
- parse(["%Q{\n\na }"]).should == [
58
- [["punctuation.definition.string.begin.ruby", 0...3], ["string.quoted.double.ruby.mod", 0...4]],
59
- [["string.quoted.double.ruby.mod", 0...1]],
60
- [["punctuation.definition.string.end.ruby", 3...4], ["string.quoted.double.ruby.mod", 0...4]]
61
- ]
62
- end
63
-
64
- it "can handle unfound syntaxes" do
65
- parse('aaaa', ['fooo']).should == []
66
- end
67
-
68
- it "can handle RegexpErrors" do
69
- parse(["(?# 2: NIL )(NIL)(?=[\\x80-\\xff(){ \\x00-\\x1f\\x7f%*\#{'\"'}\\\\\\[\\]+])|\\"])
70
- end
71
- end
72
-
73
- describe :syntax_nodes do
74
- it "detects languages not present in ultraviolet" do
75
- Ruco::SyntaxParser.syntax_node(['html+erb']).should_not == nil
76
- end
77
- end
78
- end
@@ -1,183 +0,0 @@
1
- # encoding: utf-8
2
- require "spec_helper"
3
-
4
- describe Ruco::TextArea do
5
- describe :move do
6
- describe 'pages' do
7
- it "can move down a page" do
8
- text = Ruco::TextArea.new("1\n2\n3\n4\n5\n6\n7\n8\n9\n", :lines => 3, :columns => 3)
9
- text.move(:page_down)
10
- text.view.should == "3\n4\n5"
11
- text.cursor.should == [1,0]
12
- end
13
-
14
- it "keeps cursor position when moving down" do
15
- text = Ruco::TextArea.new("1\n2abc\n3\n4\n5ab\n6\n7\n8\n9\n", :lines => 3, :columns => 5)
16
- text.move(:to, 1,4)
17
- text.move(:page_down)
18
- text.view.should == "4\n5ab\n6"
19
- text.cursor.should == [1,3]
20
- end
21
-
22
- it "can move up a page" do
23
- text = Ruco::TextArea.new("0\n1\n2\n3\n4\n5\n6\n7\n8\n", :lines => 3, :columns => 3)
24
- text.move(:to, 4, 0)
25
- text.view.should == "3\n4\n5"
26
- text.cursor.should == [1,0]
27
- text.move(:page_up)
28
- text.view.should == "0\n1\n2"
29
- text.cursor.should == [1,0]
30
- end
31
-
32
- it "keeps column position when moving up" do
33
- text = Ruco::TextArea.new("0\n1\n2ab\n3\n4\n5abc\n6\n7\n8\n9\n10\n11\n", :lines => 3, :columns => 5)
34
- text.move(:to, 5, 3)
35
- text.view.should == "4\n5abc\n6"
36
- text.cursor.should == [1,3]
37
- text.move(:page_up)
38
- text.view.should == "1\n2ab\n3"
39
- text.cursor.should == [1,3]
40
- end
41
-
42
- it "moves pages symetric" do
43
- text = Ruco::TextArea.new("0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n", :lines => 3, :columns => 3)
44
- text.move(:to, 4, 1)
45
- text.view.should == "3\n4\n5"
46
- text.cursor.should == [1,1]
47
-
48
- text.move(:page_down)
49
- text.move(:page_down)
50
- text.move(:page_up)
51
- text.move(:page_up)
52
-
53
- text.cursor.should == [1,1]
54
- text.view.should == "3\n4\n5"
55
- end
56
- end
57
- end
58
-
59
- describe :insert do
60
- let(:text){Ruco::TextArea.new("", :lines => 3, :columns => 10)}
61
-
62
- describe "inserting surrounding characters" do
63
- xit "does nothing special when pasting" do
64
- text.insert("'bar'")
65
- text.view.should == "'bar'\n\n"
66
- text.cursor.should == [0,5]
67
- end
68
-
69
- xit "inserts a pair when just typing" do
70
- text.insert("'")
71
- text.view.should == "''\n\n"
72
- text.cursor.should == [0,1]
73
- end
74
-
75
- xit "closes the surround if only char in surround" do
76
- text.insert("'")
77
- text.insert("'")
78
- text.view.should == "''\n\n"
79
- text.cursor.should == [0,2]
80
- end
81
-
82
- xit "overwrites next if its the same" do
83
- text.insert("'bar'")
84
- text.move(:relative, 0,-1)
85
- text.insert("'")
86
- text.view.should == "'bar'\n\n"
87
- text.cursor.should == [0,5]
88
- end
89
-
90
- it "surrounds text when selecting" do
91
- text.insert('bar')
92
- text.move(:to, 0,0)
93
- text.selecting{ move(:to, 0,2) }
94
- text.insert("{")
95
- text.view.should == "{ba}r\n\n"
96
- text.cursor.should == [0,4]
97
- end
98
-
99
- it "does not surround text with closing char when selecting" do
100
- text.insert('bar')
101
- text.move(:to, 0,0)
102
- text.selecting{ move(:to, 0,2) }
103
- text.insert("}")
104
- text.view.should == "}r\n\n"
105
- text.cursor.should == [0,1]
106
- end
107
-
108
- it "replaces surrounding quotes" do
109
- text.insert('"bar"')
110
- text.move(:to, 0,0)
111
- text.selecting{ move(:to, 0,5) }
112
- text.insert("'")
113
- text.view.should == "'bar'\n\n"
114
- text.cursor.should == [0,5]
115
- end
116
-
117
- it "replace surrounding braces" do
118
- text.insert('(bar)')
119
- text.move(:to, 0,0)
120
- text.selecting{ move(:to, 0,5) }
121
- text.insert("'")
122
- text.view.should == "'bar'\n\n"
123
- text.cursor.should == [0,5]
124
- end
125
-
126
- it "does not replace when only one side has surrounding char" do
127
- text.insert("\"bar\"")
128
- text.move(:to, 0,0)
129
- text.selecting{ move(:to, 0,3) }
130
- text.insert("'")
131
- text.view.should == "'\"ba'r\"\n\n"
132
- text.cursor.should == [0,5]
133
- end
134
-
135
- it "expands selection when surrounding" do
136
- text.insert('bar')
137
- text.move(:to, 0,0)
138
- text.selecting{ move(:to, 0,2) }
139
- text.insert("{")
140
- text.view.should == "{ba}r\n\n"
141
- text.selection.should == ([0,0]..[0,4])
142
- end
143
-
144
- it "keeps selection when replacing surround" do
145
- text.insert('"bar"')
146
- text.move(:to, 0,0)
147
- text.selecting{ move(:to, 0,5) }
148
- text.insert("'")
149
- text.view.should == "'bar'\n\n"
150
- text.selection.should == ([0,0]..[0,5])
151
- end
152
-
153
- it "surrounds across lines" do
154
- text.insert("ab\ncd\nef")
155
- text.move(:to, 0,0)
156
- text.selecting{ move(:to, 1,0) }
157
- text.insert("'")
158
- text.view.should == "'ab\n'cd\nef"
159
- text.selection.should == ([0,0]..[1,1])
160
- end
161
- end
162
- end
163
-
164
- if ''.respond_to?(:encoding)
165
- describe "encoding" do
166
- def build(encoding)
167
- Ruco::TextArea.new("asd".force_encoding(encoding), :lines => 3, :columns => 10)
168
- end
169
-
170
- it "upgrades ascii-8 to utf8" do
171
- build('ASCII-8BIT').lines.first.encoding.to_s.should == 'UTF-8'
172
- end
173
-
174
- it "upgrades ascii-7 to utf8" do
175
- build('US-ASCII').lines.first.encoding.to_s.should == 'UTF-8'
176
- end
177
-
178
- it "does not convert weird encodings to utf-8" do
179
- build('eucJP').lines.first.encoding.to_s.should == 'EUC-JP'
180
- end
181
- end
182
- end
183
- end