sc-ansi 1.0.0
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.
- data/.document +5 -0
- data/.gitignore +22 -0
- data/LICENSE +20 -0
- data/README.rdoc +54 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/lib/ansi.rb +177 -0
- data/lib/ansi/code.rb +91 -0
- data/lib/ansi/color.rb +127 -0
- data/lib/ansi/cursor.rb +26 -0
- data/lib/ansi/display.rb +54 -0
- data/lib/ansi/match.rb +35 -0
- data/lib/ansi/vt100.rb +177 -0
- data/lib/core_ext/object.rb +15 -0
- data/lib/core_ext/string.rb +34 -0
- data/lib/sc-ansi.rb +9 -0
- data/sc-ansi.gemspec +79 -0
- data/spec/lib/ansi/color_spec.rb +102 -0
- data/spec/lib/ansi/cursor_spec.rb +37 -0
- data/spec/lib/ansi/display_spec.rb +21 -0
- data/spec/lib/ansi/match_spec.rb +53 -0
- data/spec/lib/ansi_spec.rb +44 -0
- data/spec/lib/core_ext/object_spec.rb +19 -0
- data/spec/lib/core_ext/string_spec.rb +68 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +10 -0
- metadata +122 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ANSI::Cursor do
|
4
|
+
include ANSI
|
5
|
+
|
6
|
+
it "should save cursor position" do
|
7
|
+
save_cursor_position.should == "\e[s"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should restore cursor position" do
|
11
|
+
restore_cursor_position.should == "\e[u"
|
12
|
+
end
|
13
|
+
|
14
|
+
context "#move_up" do
|
15
|
+
it "should move up (2)" do
|
16
|
+
move_up(2).should == "\e[2A"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should move up ()" do
|
20
|
+
move_up().should == "\e[1A"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "#move_to" do
|
25
|
+
it "should change cursor position (1, 2)" do
|
26
|
+
move_to(1, 2).should == "\e[2;1H"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should change cursor position (1)" do
|
30
|
+
move_to(1).should == "\e[0;1H"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should change cursor position ()" do
|
34
|
+
move_to.should == "\e[0;0H"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ANSI::Display do
|
4
|
+
include ANSI
|
5
|
+
|
6
|
+
it "should set 40x25m mode" do
|
7
|
+
set_40x25m.should == "\e[=0h"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should unset 40x25m mode" do
|
11
|
+
unset_40x25m.should == "\e[=0l"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should erase display" do
|
15
|
+
erase_display.should == "\e[2J"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should erase line" do
|
19
|
+
erase_line.should == "\e[K"
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ANSI::Match do
|
4
|
+
include ANSI
|
5
|
+
# [ #<ANSI::Match:0x102162cd8 @args=["31"], @codes=[SET_COLOR, RED]>,
|
6
|
+
# #<ANSI::Match:0x101598c68 @args=["0"], @codes=[SET_COLOR, RESET_COLOR, REGULAR, VT100_CHAR_ATTRS_OFF]>
|
7
|
+
# ]
|
8
|
+
|
9
|
+
subject { s = ANSI::Match.new("31"); s.codes << ANSI::SET_COLOR << ANSI::RED; s }
|
10
|
+
|
11
|
+
it "should inspect more legibly" do
|
12
|
+
subject.inspect.should == '#<ANSI::Match(SET_COLOR|RED) args=["31"]>'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should equal any code it contains" do
|
16
|
+
subject.should == ANSI::SET_COLOR
|
17
|
+
subject.should == ANSI::RED
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should not equal codes it does not contain" do
|
21
|
+
subject.should_not == ANSI::GREEN
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should equal identical copies of itself" do
|
25
|
+
subject.should == subject.dup
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should equal constants that are the same code with a different name" do
|
29
|
+
subject.should == ANSI::COLOR
|
30
|
+
end
|
31
|
+
|
32
|
+
context "with a copy of itself with different args" do
|
33
|
+
before(:each) { @copy = ANSI::Match.new("32"); @copy.codes << ANSI::SET_COLOR << ANSI::RED }
|
34
|
+
|
35
|
+
it "should not equal the copy" do
|
36
|
+
subject.should_not == @copy
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "with a copy of itself with different codes" do
|
41
|
+
before(:each) { @copy = ANSI::Match.new("31"); @copy.codes << ANSI::GREEN }
|
42
|
+
|
43
|
+
it "should not equal the copy" do
|
44
|
+
subject.should_not == @copy
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "with any other object" do
|
49
|
+
it "should not equal the object" do
|
50
|
+
subject.should_not == 1
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ANSI do
|
4
|
+
include ANSI
|
5
|
+
|
6
|
+
context "#generate_sequence" do
|
7
|
+
it "should work for 'blink'" do
|
8
|
+
ANSI.generate_sequence('blink').should == "\e[5m"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should work for 'color'" do
|
12
|
+
ANSI.generate_sequence('color').should == "\e[m"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should work for 'move'" do
|
16
|
+
ANSI.generate_sequence('move').should == "\e[{?}{?}"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should work for 'move_up'" do
|
20
|
+
ANSI.generate_sequence('move_up').should == "\e[{?}A"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should define a new ANSI code with no arguments" do
|
25
|
+
ANSI.define(:bizarro) { "\e[asdf" }
|
26
|
+
bizarro.should == "\e[asdf"
|
27
|
+
end
|
28
|
+
|
29
|
+
context "for an ANSI code with 1 argument " do
|
30
|
+
before(:each) { ANSI.define(:bizarro) { |a| "\e[#{a}a" } }
|
31
|
+
|
32
|
+
it "should accept 0 arguments" do
|
33
|
+
bizarro.should == "\e[a"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should accept 1 argument" do
|
37
|
+
bizarro(1).should == "\e[1a"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should raise argument error with 2 arguments" do
|
41
|
+
proc { bizarro(1, 2) }.should raise_error(ArgumentError)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
describe Object do
|
2
|
+
context "#instance_exec" do
|
3
|
+
class Dummy
|
4
|
+
def value
|
5
|
+
:dummy_value
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
subject { Dummy.new }
|
10
|
+
|
11
|
+
it "should work with args" do
|
12
|
+
# Block returns the value passed to it and the value of #value from the Dummy, in whose context
|
13
|
+
# it will be eval'd.
|
14
|
+
block = lambda { |a| [a, value] }
|
15
|
+
|
16
|
+
subject.instance_exec(:arg_value, &block).should == [:arg_value, :dummy_value]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
describe String do
|
2
|
+
include ANSI
|
3
|
+
|
4
|
+
context "red { 'hello' }" do
|
5
|
+
subject { ANSI.red { "hello" } }
|
6
|
+
|
7
|
+
# this example is used in String core ext docs, so it better work!
|
8
|
+
it "another replace_ansi case test" do
|
9
|
+
subject.replace_ansi do |match|
|
10
|
+
case match
|
11
|
+
when ANSI::RED then "(red)"
|
12
|
+
when ANSI::RESET_COLOR then "(normal)"
|
13
|
+
else raise "not expected: #{match}"
|
14
|
+
end
|
15
|
+
end.should == "(red)hello(normal)"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "move_up + hello + move_down" do
|
20
|
+
subject { move_up + " hello " + move_down }
|
21
|
+
|
22
|
+
it "should return an array of ANSI escape sequences" do
|
23
|
+
subject.ansi_sequences.should == [ ANSI::CURSOR_UP, ANSI::CURSOR_DOWN ]
|
24
|
+
end
|
25
|
+
|
26
|
+
# This example is used in README, so it better work!
|
27
|
+
it "should replace ansi with custom content" do
|
28
|
+
subject.replace_ansi do |match|
|
29
|
+
case match
|
30
|
+
when ANSI::CURSOR_UP
|
31
|
+
"(up)"
|
32
|
+
when ANSI::CURSOR_DOWN
|
33
|
+
"(down)"
|
34
|
+
else
|
35
|
+
raise "not expected: #{match}"
|
36
|
+
end
|
37
|
+
end.should == "(up) hello (down)"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "red + hello + reset_color" do
|
42
|
+
subject { red { "hello there" } }
|
43
|
+
|
44
|
+
it "should return an array of ANSI escape sequences" do
|
45
|
+
subject.ansi_sequences.should == [ ANSI::RED, ANSI::RESET_COLOR ]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "the regular expression" do
|
50
|
+
subject { String::ANSI_ESCAPE_SEQUENCE_RX }
|
51
|
+
|
52
|
+
it "should be able to find args in 'blink_red_on_white'" do
|
53
|
+
subject =~ blink_red_on_white
|
54
|
+
$~[2].should == "5;31;47"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should match all defined escape sequences" do
|
58
|
+
ANSI.dynamically_defined_methods.each do |method_name|
|
59
|
+
sequence = ANSI.generate_sequence(method_name)
|
60
|
+
begin
|
61
|
+
subject.should match(sequence)
|
62
|
+
rescue
|
63
|
+
raise "Regexp #{String::ANSI_ESCAPE_SEQUENCE_RX} did not match sequence #{sequence.inspect} (for #{method_name})"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
$DEBUG ||= ENV['DEBUG']
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
4
|
+
require 'sc-ansi'
|
5
|
+
require 'spec'
|
6
|
+
require 'spec/autorun'
|
7
|
+
|
8
|
+
Spec::Runner.configure do |config|
|
9
|
+
config.before(:each) { ANSI.reset! if $DEBUG }
|
10
|
+
end
|
metadata
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sc-ansi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 1.0.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Colin MacKenzie IV
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-08-05 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: sc-core-ext
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 2
|
30
|
+
- 1
|
31
|
+
version: 1.2.1
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rspec
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 1
|
43
|
+
- 2
|
44
|
+
- 9
|
45
|
+
version: 1.2.9
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
description: Handles every aspect (that I could think of) of dealing with ANSI escape sequences.
|
49
|
+
email: sinisterchipmunk@gmail.com
|
50
|
+
executables: []
|
51
|
+
|
52
|
+
extensions: []
|
53
|
+
|
54
|
+
extra_rdoc_files:
|
55
|
+
- LICENSE
|
56
|
+
- README.rdoc
|
57
|
+
files:
|
58
|
+
- .document
|
59
|
+
- .gitignore
|
60
|
+
- LICENSE
|
61
|
+
- README.rdoc
|
62
|
+
- Rakefile
|
63
|
+
- VERSION
|
64
|
+
- lib/ansi.rb
|
65
|
+
- lib/ansi/code.rb
|
66
|
+
- lib/ansi/color.rb
|
67
|
+
- lib/ansi/cursor.rb
|
68
|
+
- lib/ansi/display.rb
|
69
|
+
- lib/ansi/match.rb
|
70
|
+
- lib/ansi/vt100.rb
|
71
|
+
- lib/core_ext/object.rb
|
72
|
+
- lib/core_ext/string.rb
|
73
|
+
- lib/sc-ansi.rb
|
74
|
+
- sc-ansi.gemspec
|
75
|
+
- spec/lib/ansi/color_spec.rb
|
76
|
+
- spec/lib/ansi/cursor_spec.rb
|
77
|
+
- spec/lib/ansi/display_spec.rb
|
78
|
+
- spec/lib/ansi/match_spec.rb
|
79
|
+
- spec/lib/ansi_spec.rb
|
80
|
+
- spec/lib/core_ext/object_spec.rb
|
81
|
+
- spec/lib/core_ext/string_spec.rb
|
82
|
+
- spec/spec.opts
|
83
|
+
- spec/spec_helper.rb
|
84
|
+
has_rdoc: true
|
85
|
+
homepage: http://github.com/sinisterchipmunk/sc-ansi
|
86
|
+
licenses: []
|
87
|
+
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options:
|
90
|
+
- --charset=UTF-8
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
segments:
|
98
|
+
- 0
|
99
|
+
version: "0"
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
segments:
|
105
|
+
- 0
|
106
|
+
version: "0"
|
107
|
+
requirements: []
|
108
|
+
|
109
|
+
rubyforge_project:
|
110
|
+
rubygems_version: 1.3.6
|
111
|
+
signing_key:
|
112
|
+
specification_version: 3
|
113
|
+
summary: Handles every aspect (that I could think of) of dealing with ANSI escape sequences.
|
114
|
+
test_files:
|
115
|
+
- spec/lib/ansi/color_spec.rb
|
116
|
+
- spec/lib/ansi/cursor_spec.rb
|
117
|
+
- spec/lib/ansi/display_spec.rb
|
118
|
+
- spec/lib/ansi/match_spec.rb
|
119
|
+
- spec/lib/ansi_spec.rb
|
120
|
+
- spec/lib/core_ext/object_spec.rb
|
121
|
+
- spec/lib/core_ext/string_spec.rb
|
122
|
+
- spec/spec_helper.rb
|