tefil 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/tefil.gemspec ADDED
@@ -0,0 +1,95 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: tefil 0.1.0 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "tefil"
9
+ s.version = "0.1.0"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["ippei94da"]
14
+ s.date = "2015-07-07"
15
+ s.description = "This gem provides a framework of text filter.\n Tefil eneable to make text filter commands which have overwrite option easily.\n "
16
+ s.email = "ippei94da@gmail.com"
17
+ s.executables = ["columnform", "indentconv", "indentstat", "linesub", "percentpack", "zshescape"]
18
+ s.extra_rdoc_files = [
19
+ "LICENSE.txt",
20
+ "README.rdoc"
21
+ ]
22
+ s.files = [
23
+ ".document",
24
+ "CHANGES",
25
+ "Gemfile",
26
+ "LICENSE.txt",
27
+ "README.rdoc",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "bin/columnform",
31
+ "bin/indentconv",
32
+ "bin/indentstat",
33
+ "bin/linesub",
34
+ "bin/percentpack",
35
+ "bin/zshescape",
36
+ "lib/tefil.rb",
37
+ "lib/tefil/columnformer.rb",
38
+ "lib/tefil/indentconverter.rb",
39
+ "lib/tefil/indentstatistics.rb",
40
+ "lib/tefil/linesubstituter.rb",
41
+ "lib/tefil/percentpacker.rb",
42
+ "lib/tefil/textfilterbase.rb",
43
+ "lib/tefil/zshescaper.rb",
44
+ "tefil.gemspec",
45
+ "test/columnformer/sample.txt",
46
+ "test/formcolumn_space",
47
+ "test/helper.rb",
48
+ "test/indentconv/sample0.txt",
49
+ "test/indentconv/sample1.txt",
50
+ "test/indentstat/indent4.txt",
51
+ "test/indentstat/sample0.txt",
52
+ "test/indentstat/sample1.txt",
53
+ "test/percentpack/sample.txt",
54
+ "test/test_columnformer.rb",
55
+ "test/test_indentconverter.rb",
56
+ "test/test_indentstatistics.rb",
57
+ "test/test_linesubstituter.rb",
58
+ "test/test_percentpacker.rb",
59
+ "test/test_textfilterbase.rb",
60
+ "test/test_zshescaper.rb",
61
+ "test/zshescape/sample.txt"
62
+ ]
63
+ s.homepage = "http://github.com/ippei94da/tefil"
64
+ s.licenses = ["MIT"]
65
+ s.rubygems_version = "2.2.2"
66
+ s.summary = "Basic framework of text filter"
67
+
68
+ if s.respond_to? :specification_version then
69
+ s.specification_version = 4
70
+
71
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
72
+ s.add_development_dependency(%q<rdoc>, ["~> 4.0.1"])
73
+ s.add_development_dependency(%q<bundler>, ["~> 1.9.2"])
74
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
75
+ s.add_development_dependency(%q<capture_stdout>, ["~> 0.0.1"])
76
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
77
+ s.add_development_dependency(%q<builtinextension>, [">= 0.1.0"])
78
+ else
79
+ s.add_dependency(%q<rdoc>, ["~> 4.0.1"])
80
+ s.add_dependency(%q<bundler>, ["~> 1.9.2"])
81
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
82
+ s.add_dependency(%q<capture_stdout>, ["~> 0.0.1"])
83
+ s.add_dependency(%q<simplecov>, [">= 0"])
84
+ s.add_dependency(%q<builtinextension>, [">= 0.1.0"])
85
+ end
86
+ else
87
+ s.add_dependency(%q<rdoc>, ["~> 4.0.1"])
88
+ s.add_dependency(%q<bundler>, ["~> 1.9.2"])
89
+ s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
90
+ s.add_dependency(%q<capture_stdout>, ["~> 0.0.1"])
91
+ s.add_dependency(%q<simplecov>, [">= 0"])
92
+ s.add_dependency(%q<builtinextension>, [">= 0.1.0"])
93
+ end
94
+ end
95
+
@@ -0,0 +1,2 @@
1
+ a ab
2
+ abc a
data/test/helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'bundler'
3
+ require "capture_stdout"
3
4
  begin
4
5
  Bundler.setup(:default, :development)
5
6
  rescue Bundler::BundlerError => e
@@ -0,0 +1,11 @@
1
+ a
2
+ b
3
+ c
4
+ d
5
+ e
6
+
7
+ c
8
+ d
9
+ e
10
+
11
+ e
@@ -0,0 +1,11 @@
1
+ a
2
+ b
3
+ c
4
+ d
5
+ e
6
+
7
+ c
8
+ d
9
+ e
10
+
11
+ e
@@ -0,0 +1,11 @@
1
+ a
2
+ b
3
+ c
4
+ d
5
+ e
6
+
7
+ c
8
+ d
9
+ e
10
+
11
+ e
@@ -0,0 +1,11 @@
1
+ a
2
+ b
3
+ c
4
+ d
5
+ e
6
+
7
+ c
8
+ d
9
+ e
10
+
11
+ e
@@ -0,0 +1,11 @@
1
+ a
2
+ b
3
+ c
4
+ d
5
+ e
6
+
7
+ c
8
+ d
9
+ e
10
+
11
+ e
@@ -0,0 +1 @@
1
+ %E3%83%86%E3%82%B9%E3%83%88
@@ -6,28 +6,51 @@ require "helper"
6
6
  #require "pkg/klass.rb"
7
7
  require "stringio"
8
8
 
9
+ class Tefil::ColumnFormer
10
+ public :form, :print_size
11
+ end
12
+
9
13
  class TC_ColumnFormer < Test::Unit::TestCase
14
+ def setup
15
+ @cf00 = Tefil::ColumnFormer.new
16
+ end
17
+
18
+ def test_print_size
19
+ assert_equal(2, @cf00.print_size('ab'))
20
+ assert_equal(4, @cf00.print_size('あい'))
21
+ assert_equal(6, @cf00.print_size('abあい'))
22
+ end
23
+
10
24
  def test_form
11
25
  io = StringIO.new
12
26
  matrix = [
13
27
  ["a", "ab"],
14
28
  ["abc", "a"],
15
29
  ]
16
- Tefil::ColumnFormer.form(matrix, io)
30
+ @cf00.form(matrix, io)
17
31
  io.rewind
18
32
  assert_equal(" a ab\nabc a\n", io.read)
19
33
 
20
34
  io = StringIO.new
21
- Tefil::ColumnFormer.form(matrix, io, ",")
35
+ @cf00.form(matrix, io, ",")
22
36
  io.rewind
23
37
  assert_equal(" a,ab\nabc, a\n", io.read)
24
38
 
25
39
  io = StringIO.new
26
- Tefil::ColumnFormer.form(matrix, io, " ", true )
40
+ @cf00.form(matrix, io, " ", true )
27
41
  io.rewind
28
42
  assert_equal("a ab\nabc a\n", io.read)
29
43
  io.rewind
30
44
 
45
+ #####
46
+ io = StringIO.new
47
+ matrix = [
48
+ ["abc", "def"],
49
+ ["あいう", "えおか"],
50
+ ]
51
+ @cf00.form(matrix, io)
52
+ io.rewind
53
+ assert_equal(" abc def\nあいう えおか\n", io.read)
31
54
  end
32
55
  end
33
56
 
@@ -0,0 +1,44 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "helper"
5
+ require "stringio"
6
+
7
+ class Tefil::IndentConverter
8
+ public :process_stream
9
+ end
10
+
11
+ class TC_IndentConverter < Test::Unit::TestCase
12
+ def setup
13
+ @ic00 = Tefil::IndentConverter.new(' ', 2, ' ', 4, {})
14
+ end
15
+
16
+ def test_process_stream
17
+ # stdin -> stdout
18
+ $stdin = StringIO.new
19
+ $stdin.puts "a"
20
+ $stdin.puts " b"
21
+ $stdin.puts " c"
22
+ $stdin.puts " d"
23
+ $stdin.puts " e"
24
+ $stdin.puts " f"
25
+ $stdin.rewind
26
+ str = capture_stdout{}
27
+ result = capture_stdout{ @ic00.filter([])}
28
+ correct =
29
+ "a\n" +
30
+ " b\n" +
31
+ " c\n" +
32
+ " d\n" +
33
+ " e\n" +
34
+ " f\n"
35
+ assert_equal(correct, result)
36
+ end
37
+ end
38
+
39
+
40
+
41
+
42
+
43
+
44
+
@@ -0,0 +1,38 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "helper"
5
+ require "stringio"
6
+
7
+ class Tefil::IndentConverter
8
+ public :process_stream
9
+ end
10
+
11
+ class TC_IndentStatistics < Test::Unit::TestCase
12
+ def setup
13
+ @is00 = Tefil::IndentStatistics.new()
14
+ end
15
+
16
+ def test_process_stream
17
+ # stdin -> stdout
18
+ $stdin = StringIO.new
19
+ $stdin.puts "a"
20
+ $stdin.puts " b"
21
+ $stdin.puts " c"
22
+ $stdin.puts " d"
23
+ $stdin.puts " e"
24
+ $stdin.puts " f"
25
+ $stdin.puts " g"
26
+ $stdin.puts " h"
27
+ $stdin.rewind
28
+ str = capture_stdout{}
29
+ result = capture_stdout{ @is00.filter([])}
30
+ correct =
31
+ " 0|*\n" +
32
+ " 2|***\n" +
33
+ " 4|****\n"
34
+ assert_equal(correct, result)
35
+ end
36
+ end
37
+
38
+
@@ -0,0 +1,45 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "helper"
5
+ require "stringio"
6
+
7
+ class Tefil::LineSubstituter
8
+ public :process_stream
9
+ end
10
+
11
+ class TC_LineSubstituter < Test::Unit::TestCase
12
+ def setup
13
+ @is00 = Tefil::LineSubstituter.new('abc', 'XYZ')
14
+ @is01 = Tefil::LineSubstituter.new('abc', 'XYZ', {:global => true})
15
+ end
16
+
17
+ def test_process_stream
18
+ setup
19
+ $stdin = StringIO.new
20
+ $stdin.puts "abcdabcd"
21
+ $stdin.puts "ABCDABCD"
22
+ $stdin.rewind
23
+ str = capture_stdout{}
24
+ result = capture_stdout{ @is00.filter([])}
25
+ correct =
26
+ "XYZdabcd\n" +
27
+ "ABCDABCD\n"
28
+ assert_equal(correct, result)
29
+
30
+
31
+ setup
32
+ $stdin = StringIO.new
33
+ $stdin.puts "abcdabcd"
34
+ $stdin.puts "ABCDABCD"
35
+ $stdin.rewind
36
+ str = capture_stdout{}
37
+ result = capture_stdout{ @is01.filter([])}
38
+ correct =
39
+ "XYZdXYZd\n" +
40
+ "ABCDABCD\n"
41
+ assert_equal(correct, result)
42
+
43
+ end
44
+ end
45
+
@@ -0,0 +1,29 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "helper"
5
+ require "stringio"
6
+
7
+ class Tefil::PercentPacker
8
+ public :process_stream
9
+ end
10
+
11
+ class TC_PercentPacker < Test::Unit::TestCase
12
+ def setup
13
+ @pp00 = Tefil::PercentPacker.new()
14
+ end
15
+
16
+ def test_process_stream
17
+ # stdin -> stdout
18
+ $stdin = StringIO.new
19
+ $stdin.puts '%E3%83%86%E3%82%B9%E3%83%88'
20
+ $stdin.rewind
21
+ str = capture_stdout{}
22
+ result = capture_stdout{ @pp00.filter([])}
23
+ correct = "テスト\n"
24
+ assert_equal(correct, result)
25
+ end
26
+ end
27
+
28
+
29
+
@@ -0,0 +1,182 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require 'helper'
5
+ require "test/unit"
6
+ require "tefil.rb"
7
+ require "stringio"
8
+ require "tempfile"
9
+ require "fileutils"
10
+
11
+ class SampleFilter < Tefil::TextFilterBase
12
+ def process_stream(in_file, out_file)
13
+ results = []
14
+ in_file.each do |line|
15
+ out_file.puts line.sub('a', 'A')
16
+ end
17
+ end
18
+ end
19
+
20
+ class TestTefil < Test::Unit::TestCase
21
+ TMP00 = "test/tmp00"
22
+ TMP01 = "test/tmp01"
23
+
24
+ def setup
25
+ @t00 = SampleFilter.new
26
+ $stdin = STDIN
27
+ $stdout = STDOUT
28
+ @t01 = SampleFilter.new({:overwrite => true})
29
+
30
+ @t02 = SampleFilter.new({:smart_filename => true})
31
+ @t03 = SampleFilter.new({:overwrite => true,
32
+ :smart_filename => true})
33
+
34
+ FileUtils.rm TMP00 if File.exist? TMP00
35
+ FileUtils.rm TMP01 if File.exist? TMP01
36
+ File.open(TMP00, "w") do |io|
37
+ io.puts "abc"
38
+ io.puts "def"
39
+ end
40
+ File.open(TMP01, "w") do |io|
41
+ io.puts "abc"
42
+ io.puts "def"
43
+ io.puts "cab"
44
+ end
45
+ end
46
+
47
+ def teardown
48
+ FileUtils.rm TMP00 if File.exist? TMP00
49
+ FileUtils.rm TMP01 if File.exist? TMP01
50
+ end
51
+
52
+ def test_filter
53
+ # stdin -> stdout
54
+ $stdin = StringIO.new
55
+ $stdin.puts "abc"
56
+ $stdin.puts "def"
57
+ $stdin.rewind
58
+ str = capture_stdout{}
59
+ result = capture_stdout{ @t00.filter([])}
60
+ correct = "Abc\n" + "def\n"
61
+ assert_equal(correct, result)
62
+
63
+ # 1 file-> stdout
64
+ setup
65
+ str = capture_stdout{}
66
+ result = capture_stdout{ @t00.filter([TMP00])}
67
+ correct =
68
+ "Abc\n" + "def\n"
69
+ assert_equal(correct, result)
70
+ tmp00 = File.open(TMP00, "r").readlines
71
+ assert_equal(["abc\n", "def\n"], tmp00)
72
+ tmp01 = File.open(TMP01, "r").readlines
73
+ assert_equal(["abc\n", "def\n", "cab\n"], tmp01)
74
+
75
+ # 2 files -> stdout
76
+ setup
77
+ str = capture_stdout{}
78
+ result = capture_stdout{ @t00.filter([TMP00, TMP01])}
79
+ correct = "Abc\n" + "def\n" + "Abc\n" + "def\n" + "cAb\n"
80
+ assert_equal(correct, result)
81
+ tmp00 = File.open(TMP00, "r").readlines
82
+ assert_equal(["abc\n", "def\n"], tmp00)
83
+ tmp01 = File.open(TMP01, "r").readlines
84
+ assert_equal(["abc\n", "def\n", "cab\n"], tmp01)
85
+
86
+ # smart_filename
87
+ setup
88
+ str = capture_stdout{}
89
+ result = capture_stdout{ @t02.filter([TMP00])}
90
+ correct = "Abc\n" + "def\n"
91
+ assert_equal(correct, result)
92
+ tmp00 = File.open(TMP00, "r").readlines
93
+ assert_equal(["abc\n", "def\n"], tmp00)
94
+ tmp01 = File.open(TMP01, "r").readlines
95
+ assert_equal(["abc\n", "def\n", "cab\n"], tmp01)
96
+
97
+ # smart_filename and overwrite # 2 files -> stdout
98
+ setup
99
+ str = capture_stdout{}
100
+ result = capture_stdout{ @t03.filter([TMP00, TMP01])}
101
+ correct = ""
102
+ assert_equal(correct, result)
103
+ tmp = File.open(TMP00, "r").readlines
104
+ assert_equal(["Abc\n", "def\n"], tmp)
105
+ tmp = File.open(TMP01, "r").readlines
106
+ assert_equal(["Abc\n", "def\n", "cAb\n"], tmp)
107
+
108
+ # Not found
109
+ assert_raise(Errno::ENOENT){ @t00.filter([""]) }
110
+ assert_raise(Errno::ENOENT){ @t01.filter([""]) }
111
+ end
112
+
113
+ def test_filter_overwrite
114
+ # 1 file-> stdout
115
+ setup
116
+ str = capture_stdout{}
117
+ result = capture_stdout{ @t01.filter([TMP00])}
118
+ correct = ""
119
+ assert_equal(correct, result)
120
+ tmp = File.open(TMP00, "r").readlines
121
+ assert_equal(["Abc\n", "def\n"], tmp)
122
+ tmp = File.open(TMP01, "r").readlines
123
+ assert_equal(["abc\n", "def\n", "cab\n"], tmp)
124
+
125
+ # 2 files -> stdout
126
+ setup
127
+ str = capture_stdout{}
128
+ result = capture_stdout{ @t01.filter([TMP00, TMP01])}
129
+ correct = ""
130
+ assert_equal(correct, result)
131
+ tmp = File.open(TMP00, "r").readlines
132
+ assert_equal(["Abc\n", "def\n"], tmp)
133
+ tmp = File.open(TMP01, "r").readlines
134
+ assert_equal(["Abc\n", "def\n", "cAb\n"], tmp)
135
+ end
136
+
137
+ # def test_self_filter
138
+ # $stdin = StringIO.new
139
+ # $stdin.puts "abc"
140
+ # $stdin.puts "def"
141
+ # $stdin.rewind
142
+ # str = capture_stdout{}
143
+ # result = capture_stdout{ SampleFilter.filter([], true) }
144
+ # correct = "Abc\n" + "def\n"
145
+ # assert_equal(correct, result)
146
+ # tmp = File.open(TMP00, "r").readlines
147
+ # assert_equal(["Abc\n", "def\n"], tmp)
148
+ # tmp = File.open(TMP01, "r").readlines
149
+ # assert_equal(["Abc\n", "def\n", "cAb\n"], tmp)
150
+ #
151
+ #
152
+ # # 単数のファイルを指定。
153
+ # # overwrite なし。
154
+ # setup
155
+ # $stdout = StringIO.new
156
+ # SampleFilter.filter([TMP00])
157
+ # $stdout.rewind
158
+ # tmp = $stdout.readlines
159
+ # assert_equal(["Abc\n", "def\n"], tmp)
160
+ # $stdout.close
161
+ # tmp = File.open(TMP00, "r").readlines
162
+ # assert_equal(["abc\n", "def\n"], tmp)
163
+ # tmp = File.open(TMP01, "r").readlines
164
+ # assert_equal(["abc\n", "def\n", "cab\n"], tmp)
165
+ #
166
+ # # 複数のファイルを指定。
167
+ # # overwrite なし。
168
+ # setup
169
+ # $stdout = StringIO.new
170
+ # SampleFilter.filter([TMP00, TMP01])
171
+ # $stdout.rewind
172
+ # tmp = $stdout.readlines
173
+ # assert_equal(["Abc\n", "def\n", "Abc\n", "def\n", "cAb\n"], tmp)
174
+ # $stdout.close
175
+ # tmp = File.open(TMP00, "r").readlines
176
+ # assert_equal(["abc\n", "def\n"], tmp)
177
+ # tmp = File.open(TMP01, "r").readlines
178
+ # assert_equal(["abc\n", "def\n", "cab\n"], tmp)
179
+ # end
180
+
181
+ end
182
+
@@ -0,0 +1,29 @@
1
+ #! /usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require "helper"
5
+ require "stringio"
6
+
7
+ class Tefil::ZshEscaper
8
+ public :process_stream
9
+ end
10
+
11
+ class TC_ZshEscaper < Test::Unit::TestCase
12
+ def setup
13
+ @is00 = Tefil::ZshEscaper.new()
14
+ end
15
+
16
+ def test_process_stream
17
+ # stdin -> stdout
18
+ $stdin = StringIO.new
19
+ $stdin.puts "abcdABCD * * *"
20
+ $stdin.rewind
21
+ str = capture_stdout{}
22
+ result = capture_stdout{ @is00.filter([])}
23
+ correct = 'abcdABCD\ \*\ \*\ \*' + "\n"
24
+ assert_equal(correct, result)
25
+ end
26
+ end
27
+
28
+
29
+
@@ -0,0 +1,2 @@
1
+ abcdABCD * * *
2
+