milkode 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/.document +5 -0
  2. data/Gemfile +12 -0
  3. data/Gemfile.lock +18 -0
  4. data/HISTORY.rdoc +5 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +19 -0
  7. data/Rakefile +78 -0
  8. data/VERSION +1 -0
  9. data/bin/cdv +6 -0
  10. data/bin/cdview +10 -0
  11. data/bin/milk +10 -0
  12. data/lib/milkode/cdstk/cdstk.rb +508 -0
  13. data/lib/milkode/cdstk/cdstk_yaml.rb +106 -0
  14. data/lib/milkode/cdstk/cli_cdstk.rb +103 -0
  15. data/lib/milkode/cdstk/cli_cdstksub.rb +102 -0
  16. data/lib/milkode/cdview/cli_cdview.rb +43 -0
  17. data/lib/milkode/cdweb/app.rb +136 -0
  18. data/lib/milkode/cdweb/cli_cdweb.rb +111 -0
  19. data/lib/milkode/cdweb/config.ru +3 -0
  20. data/lib/milkode/cdweb/lib/coderay_wrapper.rb +94 -0
  21. data/lib/milkode/cdweb/lib/command.rb +67 -0
  22. data/lib/milkode/cdweb/lib/database.rb +260 -0
  23. data/lib/milkode/cdweb/lib/grep.rb +68 -0
  24. data/lib/milkode/cdweb/lib/mkurl.rb +56 -0
  25. data/lib/milkode/cdweb/lib/query.rb +81 -0
  26. data/lib/milkode/cdweb/lib/search_contents.rb +117 -0
  27. data/lib/milkode/cdweb/lib/search_files.rb +88 -0
  28. data/lib/milkode/cdweb/public/css/coderay.css +131 -0
  29. data/lib/milkode/cdweb/public/css/gren.css +75 -0
  30. data/lib/milkode/cdweb/public/images/directory.png +0 -0
  31. data/lib/milkode/cdweb/public/images/file.png +0 -0
  32. data/lib/milkode/cdweb/public/images/gren-icon-mini.png +0 -0
  33. data/lib/milkode/cdweb/public/images/gren-icon.png +0 -0
  34. data/lib/milkode/cdweb/views/filelist.haml +14 -0
  35. data/lib/milkode/cdweb/views/help.haml +16 -0
  36. data/lib/milkode/cdweb/views/index.haml +17 -0
  37. data/lib/milkode/cdweb/views/layout.haml +33 -0
  38. data/lib/milkode/cdweb/views/search.haml +12 -0
  39. data/lib/milkode/cdweb/views/view.haml +16 -0
  40. data/lib/milkode/common/dbdir.rb +39 -0
  41. data/lib/milkode/common/display_util.rb +62 -0
  42. data/lib/milkode/common/grenfiletest.rb +19 -0
  43. data/lib/milkode/common/grensnip.rb +37 -0
  44. data/lib/milkode/common/platform.rb +17 -0
  45. data/lib/milkode/common/string_snip.rb +61 -0
  46. data/lib/milkode/common/util.rb +144 -0
  47. data/lib/milkode/findgrep/findgrep.rb +408 -0
  48. data/lib/milkode/findgrep/result.rb +43 -0
  49. data/milkode.gemspec +159 -0
  50. data/test/data/abc.zip +0 -0
  51. data/test/data/nodir_abc.zip +0 -0
  52. data/test/data/nodir_abc_xpi.xpi +0 -0
  53. data/test/file_assert.rb +41 -0
  54. data/test/file_test_utils.rb +59 -0
  55. data/test/rake_test_loader.rb +7 -0
  56. data/test/runner.rb +11 -0
  57. data/test/test_bin_exec.rb +30 -0
  58. data/test/test_cdstk.rb +90 -0
  59. data/test/test_cdstk_yaml.rb +157 -0
  60. data/test/test_coderay_wrapper.rb +22 -0
  61. data/test/test_coderay_wrapper_data.rb +91 -0
  62. data/test/test_database.rb +78 -0
  63. data/test/test_dbdir.rb +60 -0
  64. data/test/test_gren_util.rb +34 -0
  65. data/test/test_helper.rb +2 -0
  66. data/test/test_mkurl.rb +30 -0
  67. data/test/test_query.rb +54 -0
  68. data/test/test_string_snip.rb +31 -0
  69. data/test/test_util.rb +40 -0
  70. metadata +300 -0
@@ -0,0 +1,22 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/07/16
7
+
8
+ require 'test_helper'
9
+ require 'file_assert'
10
+ require 'test_coderay_wrapper_data'
11
+ require 'milkode/cdweb/lib/coderay_wrapper'
12
+
13
+ module Milkode
14
+ class TestCodeRayWrapper < Test::Unit::TestCase
15
+ def test_basic
16
+ assert_lines JS_SHORT_HTML, CodeRayWrapper.new(JS_SHORT_CODE, "console-dir.js").to_html
17
+ assert_lines JS_HTML , CodeRayWrapper.new(JS_CODE, "console-dir.js").to_html
18
+ end
19
+ end
20
+ end
21
+
22
+
@@ -0,0 +1,91 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/07/16
7
+
8
+ module Milkode
9
+ JS_SHORT_CODE = <<EOF
10
+ console.dir_s = function (object, msg) {
11
+ var disp_properties = function (properties, indent, out) {
12
+ EOF
13
+
14
+ JS_SHORT_HTML = <<EOF
15
+ <table class="CodeRay"><tr>
16
+ <td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre>1<tt>
17
+ </tt>2<tt>
18
+ </tt></pre></td>
19
+ <td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"><span id="1">console.<span class="fu">dir_s</span> = <span class="kw">function</span> (object, msg) {</span><tt>
20
+ </tt><span id="2"> <span class="kw">var</span> <span class="fu">disp_properties</span> = <span class="kw">function</span> (properties, indent, out) {</span><tt>
21
+ </tt></pre></td>
22
+ </tr></table>
23
+ EOF
24
+
25
+ JS_CODE = <<EOF
26
+ console.dir_s = function (object, msg) {
27
+ var disp_properties = function (properties, indent, out) {
28
+ for (var i = 0; i < properties.length; ++i) {
29
+ var name = properties[i][0], value = properties[i][1];
30
+
31
+ if (typeof value == "string")
32
+ value = '"' + value + '"';
33
+
34
+ out.push(indent + name + ": " + value);
35
+ }
36
+ };
37
+
38
+ var disp_funcs = function (funcs, indent, out) {
39
+ for (var i = 0; i < funcs.length; ++i) {
40
+ var name = funcs[i][0], value = funcs[i][1];
41
+ out.push(indent + name + "()");
42
+ }
43
+ };
44
+ EOF
45
+
46
+ JS_HTML = <<EOF
47
+ <table class="CodeRay"><tr>
48
+ <td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre>1<tt>
49
+ </tt>2<tt>
50
+ </tt>3<tt>
51
+ </tt>4<tt>
52
+ </tt>5<tt>
53
+ </tt>6<tt>
54
+ </tt>7<tt>
55
+ </tt>8<tt>
56
+ </tt>9<tt>
57
+ </tt>10<tt>
58
+ </tt>11<tt>
59
+ </tt>12<tt>
60
+ </tt>13<tt>
61
+ </tt>14<tt>
62
+ </tt>15<tt>
63
+ </tt>16<tt>
64
+ </tt>17<tt>
65
+ </tt>18<tt>
66
+ </tt></pre></td>
67
+ <td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"><span id="1">console.<span class="fu">dir_s</span> = <span class="kw">function</span> (object, msg) {</span><tt>
68
+ </tt><span id="2"> <span class="kw">var</span> <span class="fu">disp_properties</span> = <span class="kw">function</span> (properties, indent, out) {</span><tt>
69
+ </tt><span id="3"> <span class="kw">for</span> (<span class="kw">var</span> i = <span class="i">0</span>; i &lt; properties.length; ++i) {</span><tt>
70
+ </tt><span id="4"> <span class="kw">var</span> name = properties[i][<span class="i">0</span>], value = properties[i][<span class="i">1</span>];</span><tt>
71
+ </tt><span id="5"></span><tt>
72
+ </tt><span id="6"> <span class="kw">if</span> (<span class="kw">typeof</span> value == <span class="s"><span class="dl">&quot;</span><span class="k">string</span><span class="dl">&quot;</span></span>)</span><tt>
73
+ </tt><span id="7"> value = <span class="s"><span class="dl">'</span><span class="k">&quot;</span><span class="dl">'</span></span> + value + <span class="s"><span class="dl">'</span><span class="k">&quot;</span><span class="dl">'</span></span>;</span><tt>
74
+ </tt><span id="8"></span><tt>
75
+ </tt><span id="9"> out.push(indent + name + <span class="s"><span class="dl">&quot;</span><span class="k">: </span><span class="dl">&quot;</span></span> + value);</span><tt>
76
+ </tt><span id="10"> }</span><tt>
77
+ </tt><span id="11"> };</span><tt>
78
+ </tt><span id="12"> </span><tt>
79
+ </tt><span id="13"> <span class="kw">var</span> <span class="fu">disp_funcs</span> = <span class="kw">function</span> (funcs, indent, out) {</span><tt>
80
+ </tt><span id="14"> <span class="kw">for</span> (<span class="kw">var</span> i = <span class="i">0</span>; i &lt; funcs.length; ++i) {</span><tt>
81
+ </tt><span id="15"> <span class="kw">var</span> name = funcs[i][<span class="i">0</span>], value = funcs[i][<span class="i">1</span>];</span><tt>
82
+ </tt><span id="16"> out.push(indent + name + <span class="s"><span class="dl">&quot;</span><span class="k">()</span><span class="dl">&quot;</span></span>);</span><tt>
83
+ </tt><span id="17"> }</span><tt>
84
+ </tt><span id="18"> };</span><tt>
85
+ </tt></pre></td>
86
+ </tr></table>
87
+ EOF
88
+
89
+ end
90
+
91
+
@@ -0,0 +1,78 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/02/20
7
+
8
+ require 'rubygems'
9
+ require 'groonga'
10
+ require 'test_helper'
11
+ require 'file_test_utils'
12
+ require 'stringio'
13
+ require 'milkode/cdstk/cdstk'
14
+ require 'milkode/cdweb/lib/database'
15
+
16
+ module Milkode
17
+ class TestDatabase < Test::Unit::TestCase
18
+ include FileTestUtils
19
+
20
+ def setup_db
21
+ # データベース作成
22
+ io = StringIO.new
23
+ @obj = Cdstk.new(io)
24
+ @obj.init
25
+ @obj.add(['../../test'])
26
+ @obj.add(['../../lib'])
27
+
28
+ FileUtils.touch('notfound.file')
29
+ @obj.add(['notfound.file'])
30
+ FileUtils.rm('notfound.file')
31
+
32
+ # puts io.string
33
+
34
+ # データベースのセットアップ
35
+ Database.setup('.')
36
+ end
37
+
38
+ def test_database
39
+ setup_db
40
+ t_open
41
+ t_fileList
42
+ t_cleanup # 何故か 'rake test' で実行すると上手く動かないので、一旦テストから外す
43
+ t_remove
44
+ end
45
+
46
+ def t_open
47
+ Database.instance
48
+ end
49
+
50
+ def t_fileList
51
+ db = Database.instance
52
+ assert_equal [['test', false], ['lib', false], ["notfound.file", true]], db.fileList('')
53
+ assert db.fileList('test').include? ['test/test_database.rb', true]
54
+ assert_equal ['lib/milkode', false], db.fileList('lib')[0]
55
+ assert_equal ['lib/milkode/cdstk/cdstk.rb', true], db.fileList('lib/milkode/cdstk')[0]
56
+ assert_equal nil, db.fileList('lib/milkode/cdstk/cdstk.rb')[0]
57
+ end
58
+
59
+ def t_cleanup
60
+ db = Database.instance
61
+ db.cleanup
62
+ end
63
+
64
+ def t_remove
65
+ db = Database.instance
66
+ db.remove('test')
67
+ db.remove('lib')
68
+ assert_equal 0, db.totalRecords
69
+ end
70
+
71
+ def teardown
72
+ teardown_custom(true)
73
+ # teardown_custom(false)
74
+ end
75
+ end
76
+ end
77
+
78
+
@@ -0,0 +1,60 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/03/08
7
+
8
+ require 'rubygems'
9
+ require 'test_helper'
10
+ require 'milkode/common/dbdir'
11
+ require 'file_test_utils'
12
+
13
+ class TestDbDir< Test::Unit::TestCase
14
+ include Milkode
15
+ include FileTestUtils
16
+
17
+ def test_default_dir
18
+ ENV['MILKODE_DEFAULT_DIR'] = nil
19
+ assert_equal File.expand_path('~/.milkode'), Dbdir.default_dir
20
+
21
+ ENV['MILKODE_DEFAULT_DIR'] = "~/DummyDir"
22
+ assert_equal File.expand_path("~/DummyDir"), Dbdir.default_dir
23
+
24
+ ENV['MILKODE_DEFAULT_DIR'] = nil
25
+ ENV['CODESTOCK_DEFAULT_DIRR'] = "~/DummyDir"
26
+ assert_equal File.expand_path('~/.milkode'), Dbdir.default_dir
27
+ end
28
+
29
+ def test_is_dbdir
30
+ assert_equal false, Dbdir.dbdir?
31
+
32
+ FileUtils.touch "milkode.yaml"
33
+ assert_equal true, Dbdir.dbdir?
34
+
35
+ FileUtils.mkdir_p 'damadame'
36
+ FileUtils.touch "damadame/milkode.yaml"
37
+ assert_equal true, Dbdir.dbdir?('damadame')
38
+ assert_equal false, Dbdir.dbdir?('damadameyo')
39
+ end
40
+
41
+ def test_groonga_path
42
+ assert_equal 'db/milkode.db', Dbdir.groonga_path
43
+ assert_equal '../db/milkode.db', Dbdir.groonga_path('..')
44
+ assert_equal '/Users/MrRuby/db/milkode.db', Dbdir.groonga_path('/Users/MrRuby')
45
+ end
46
+
47
+ def test_expand_groonga_path
48
+ assert_equal File.expand_path('./db/milkode.db'), Dbdir.expand_groonga_path
49
+ end
50
+
51
+ def test_yaml_path
52
+ assert_equal 'milkode.yaml', Dbdir.yaml_path
53
+ assert_equal '../milkode.yaml', Dbdir.yaml_path('..')
54
+ assert_equal '/Users/MrRuby/milkode.yaml', Dbdir.yaml_path('/Users/MrRuby')
55
+ end
56
+ end
57
+
58
+
59
+
60
+
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+ require 'milkode/common/util'
3
+ require 'milkode/common/grensnip'
4
+
5
+ class TestGrenSnip < Test::Unit::TestCase
6
+ def setup
7
+ end
8
+
9
+ def test_snip
10
+ str = "abcdefghijkmlnopqrstuvwxyz"
11
+ assert_equal(str, GrenSnip::snip(str, nil))
12
+
13
+ str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|12345678901234567890123456789012345678901234567890123456"
14
+ assert_equal(str, GrenSnip::snip(str, nil))
15
+
16
+ str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234561"
17
+ match_datas = []
18
+ match_datas << str.match(/123456789\|/)
19
+ assert_equal("12345678901234567890123456789012<<snip>>90123456789012345678901234567890123456789|123456789012345678901234567890123<<snip>>67890123456789012345678901234561", GrenSnip::snip(str, match_datas))
20
+
21
+ str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234561"
22
+ match_datas = []
23
+ match_datas << str.match(/123456789\|/)
24
+ match_datas << str.match(/34567/)
25
+ assert_equal("12345678901234567890123456789012<<snip>>90123456789012345678901234567890123456789|123456789012345678901234567890123<<snip>>67890123456789012345678901234561", GrenSnip::snip(str, match_datas))
26
+
27
+ str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234561"
28
+ match_datas = []
29
+ match_datas << str.match(/123456789\|/)
30
+ match_datas << str.match(/01234561/)
31
+ assert_equal("12345678901234567890123456789012<<snip>>90123456789012345678901234567890123456789|123456789012345678901234567890123<<snip>>8901234567890123456789012345678901234561", GrenSnip::snip(str, match_datas))
32
+
33
+ end
34
+ end
@@ -0,0 +1,2 @@
1
+ require 'stringio'
2
+ require 'test/unit'
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2010/10/21
7
+
8
+ require 'test_helper'
9
+ require 'milkode/cdweb/lib/mkurl'
10
+
11
+ module Milkode
12
+ class TestMkurl < Test::Unit::TestCase
13
+ def test_basic
14
+ p1 = {:query => 'test', :shead => 'package', :page => '2'}
15
+ p2 = {:query => 'test', :page => '2'}
16
+ p3 = {:page => '2'}
17
+
18
+ assert_equal '/home/foo/bar.hpp?query=test&shead=package', Mkurl.new('/home/foo/bar.hpp', p1).inherit_query_shead
19
+ assert_equal '.?query=test&shead=package', Mkurl.new('.', p1).inherit_query_shead
20
+ assert_equal '/home/foo/bar.hpp?query=test', Mkurl.new('/home/foo/bar.hpp', p2).inherit_query_shead
21
+ assert_equal '/home/foo/bar.hpp', Mkurl.new('/home/foo/bar.hpp', p3).inherit_query_shead
22
+
23
+ assert_equal '/home/foo/bar.hpp?shead=package', Mkurl.new('/home/foo/bar.hpp', p1).inherit_shead
24
+ assert_equal '.?shead=package', Mkurl.new('.', p1).inherit_shead
25
+ assert_equal '/home/foo/bar.hpp', Mkurl.new('/home/foo/bar.hpp', p2).inherit_shead
26
+ assert_equal '/home/foo/bar.hpp', Mkurl.new('/home/foo/bar.hpp', p3).inherit_shead
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,54 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2010/10/21
7
+
8
+ require 'test_helper'
9
+ require 'milkode/cdweb/lib/query'
10
+
11
+ module Milkode
12
+ class TestQuery < Test::Unit::TestCase
13
+ def test_query
14
+ q = create_query("test fire beam")
15
+ assert_equal q.keywords, ['test', 'fire', 'beam']
16
+ assert_equal q.packages, []
17
+ assert_equal q.fpaths, []
18
+ assert_equal q.suffixs, []
19
+ assert_equal q.escape_html, 'test fire beam'
20
+
21
+ q = create_query("test fire beam f:testfile1")
22
+ assert_equal q.keywords, ['test', 'fire', 'beam']
23
+ assert_equal q.packages, []
24
+ assert_equal q.fpaths, ['testfile1']
25
+ assert_equal q.suffixs, []
26
+
27
+ q = create_query("test fire beam f:testfile1 filepath:dir32")
28
+ assert_equal q.keywords, ['test', 'fire', 'beam']
29
+ assert_equal q.packages, []
30
+ assert_equal q.fpaths, ['dir32', 'testfile1']
31
+ assert_equal q.suffixs, []
32
+
33
+ q = create_query("package:gren test fire beam f:testfile1 filepath:dir32 s:rb p:test suffix:pl")
34
+ assert_equal q.keywords, ['test', 'fire', 'beam']
35
+ assert_equal q.packages, ['gren', 'test']
36
+ assert_equal q.fpaths, ['dir32', 'testfile1']
37
+ assert_equal q.suffixs, ['pl', 'rb']
38
+
39
+ q = create_query("&p")
40
+ assert_equal "&p", q.query_string
41
+ assert_equal q.escape_html, '&amp;p'
42
+
43
+ q = create_query("int &p")
44
+ assert_equal q.escape_html, 'int &amp;p'
45
+
46
+ q = create_query('"def update"')
47
+ assert_equal q.keywords, ['def update']
48
+ end
49
+
50
+ def create_query(query)
51
+ Query.new(query)
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,31 @@
1
+ require 'test_helper'
2
+ require 'milkode/common/util.rb'
3
+ require 'milkode/common/grensnip.rb'
4
+
5
+ class TestStringSnip < Test::Unit::TestCase
6
+ def setup
7
+ end
8
+
9
+ def test_ranges_compound
10
+ ranges = [0..7, 8..232, 121..150, 248..255]
11
+ assert_equal(StringSnip.ranges_compound(ranges), [0..232, 248..255])
12
+
13
+ ranges = [10..20, 22..30, 33..40]
14
+ assert_equal(StringSnip.ranges_compound(ranges), [10..20, 22..30, 33..40])
15
+
16
+ ranges = [10..30, 20..30, 30..40]
17
+ assert_equal(StringSnip.ranges_compound(ranges), [10..40])
18
+ end
19
+
20
+ def test_string_snip
21
+ str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|12345678901234567890123456789012345678901234567890123456"
22
+
23
+ snipper = StringSnip.new
24
+ snip_str = snipper.snip(str, [0..7, -8..-1])
25
+ assert_equal(snip_str, str)
26
+
27
+ snipper = StringSnip.new(64)
28
+ snip_str = snipper.snip(str, [-8..-1, 10..20, 0..7])
29
+ assert_equal(snip_str, "12345678<<snip>>12345678901<<snip>>90123456")
30
+ end
31
+ end
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/02/20
7
+
8
+ require 'milkode/common/util'
9
+ require 'test/unit'
10
+ require 'file_test_utils'
11
+
12
+ class TestUtil < Test::Unit::TestCase
13
+ include FileTestUtils
14
+
15
+ def test_zip_extract
16
+ Milkode::Util::zip_extract('../data/abc.zip', '.')
17
+ assert File.exist?('abc')
18
+ assert File.exist?('abc/a.txt')
19
+ assert File.exist?('abc/b.txt')
20
+ assert File.exist?('abc/c.txt')
21
+
22
+ Milkode::Util::zip_extract('../data/nodir_abc.zip', '.')
23
+ assert File.exist?('nodir_abc')
24
+ assert File.exist?('nodir_abc/a.txt')
25
+ assert File.exist?('nodir_abc/b.txt')
26
+ assert File.exist?('nodir_abc/c.txt')
27
+ end
28
+
29
+ def test_root_entrylist
30
+ assert_equal ['abc/'], Milkode::Util::root_entrylist('../data/abc.zip')
31
+ assert_equal ['a.txt', 'b.txt', 'c.txt'], Milkode::Util::root_entrylist('../data/nodir_abc.zip')
32
+ end
33
+
34
+ def teardown
35
+ teardown_custom(true)
36
+ # teardown_custom(false)
37
+ end
38
+ end
39
+
40
+