ruco 0.2.18 → 0.2.19

Sign up to get free protection for your applications and to get access to all the features.
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