sup 0.17.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +17 -0
  3. data/.travis.yml +12 -0
  4. data/Gemfile +3 -0
  5. data/HACKING +42 -0
  6. data/History.txt +8 -0
  7. data/Rakefile +12 -0
  8. data/ReleaseNotes +4 -0
  9. data/bin/sup-sync +1 -1
  10. data/bin/sup-tweak-labels +6 -1
  11. data/contrib/colorpicker.rb +100 -0
  12. data/contrib/completion/_sup.zsh +114 -0
  13. data/devel/console.sh +3 -0
  14. data/devel/count-loc.sh +3 -0
  15. data/devel/load-index.rb +9 -0
  16. data/devel/profile.rb +12 -0
  17. data/devel/start-console.rb +5 -0
  18. data/doc/FAQ.txt +119 -0
  19. data/doc/Hooks.txt +79 -0
  20. data/doc/Philosophy.txt +69 -0
  21. data/lib/sup/colormap.rb +6 -0
  22. data/lib/sup/modes/thread_index_mode.rb +12 -1
  23. data/lib/sup/modes/thread_view_mode.rb +20 -0
  24. data/lib/sup/version.rb +1 -1
  25. data/sup.gemspec +55 -0
  26. data/test/dummy_source.rb +61 -0
  27. data/test/gnupg_test_home/gpg.conf +1 -0
  28. data/test/gnupg_test_home/pubring.gpg +0 -0
  29. data/test/gnupg_test_home/receiver_pubring.gpg +0 -0
  30. data/test/gnupg_test_home/receiver_secring.gpg +0 -0
  31. data/test/gnupg_test_home/receiver_trustdb.gpg +0 -0
  32. data/test/gnupg_test_home/secring.gpg +0 -0
  33. data/test/gnupg_test_home/sup-test-2@foo.bar.asc +20 -0
  34. data/test/gnupg_test_home/trustdb.gpg +0 -0
  35. data/test/integration/test_label_service.rb +18 -0
  36. data/test/messages/bad-content-transfer-encoding-1.eml +8 -0
  37. data/test/messages/binary-content-transfer-encoding-2.eml +21 -0
  38. data/test/messages/missing-line.eml +9 -0
  39. data/test/test_crypto.rb +109 -0
  40. data/test/test_header_parsing.rb +168 -0
  41. data/test/test_helper.rb +7 -0
  42. data/test/test_message.rb +532 -0
  43. data/test/test_messages_dir.rb +147 -0
  44. data/test/test_yaml_migration.rb +85 -0
  45. data/test/test_yaml_regressions.rb +17 -0
  46. data/test/unit/service/test_label_service.rb +19 -0
  47. data/test/unit/test_horizontal_selector.rb +40 -0
  48. data/test/unit/util/test_query.rb +46 -0
  49. data/test/unit/util/test_string.rb +57 -0
  50. data/test/unit/util/test_uri.rb +19 -0
  51. metadata +81 -36
  52. checksums.yaml.gz.sig +0 -1
  53. data.tar.gz.sig +0 -0
  54. metadata.gz.sig +0 -0
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'test_helper'
4
+ require 'sup'
5
+ require 'stringio'
6
+
7
+ require 'dummy_source'
8
+
9
+ # override File.exists? to make it work with StringIO for testing.
10
+ # FIXME: do aliasing to avoid breaking this when sup moves from
11
+ # File.exists? to File.exist?
12
+
13
+ class File
14
+
15
+ def File.exists? file
16
+ # puts "fake File::exists?"
17
+
18
+ if file.is_a?(StringIO)
19
+ return false
20
+ end
21
+ # use the different function
22
+ File.exist?(file)
23
+ end
24
+
25
+ end
26
+
27
+ module Redwood
28
+
29
+ class TestMessagesDir < ::Minitest::Unit::TestCase
30
+
31
+ def setup
32
+ @path = Dir.mktmpdir
33
+ Redwood::HookManager.init File.join(@path, 'hooks')
34
+ end
35
+
36
+ def teardown
37
+ Redwood::HookManager.deinstantiate!
38
+ FileUtils.rm_r @path
39
+ end
40
+
41
+ def test_binary_content_transfer_encoding
42
+ message = ''
43
+ File.open 'test/messages/binary-content-transfer-encoding-2.eml' do |f|
44
+ message = f.read
45
+ end
46
+
47
+ source = DummySource.new("sup-test://test_messages")
48
+ source.messages = [ message ]
49
+ source_info = 0
50
+
51
+ sup_message = Message.build_from_source(source, source_info)
52
+ sup_message.load_from_source!
53
+
54
+ from = sup_message.from
55
+ # "from" is just a simple person item
56
+
57
+ assert_equal("foo@example.org", from.email)
58
+ #assert_equal("Fake Sender", from.name)
59
+
60
+ subj = sup_message.subj
61
+ assert_equal("Important", subj)
62
+
63
+ chunks = sup_message.load_from_source!
64
+ indexable_chunks = sup_message.indexable_chunks
65
+
66
+ # there should be only one chunk
67
+ #assert_equal(1, chunks.length)
68
+
69
+ lines = chunks[0].lines
70
+
71
+ # lines should contain an error message
72
+ assert (lines.join.include? "An error occurred while loading this message."), "This message should not load successfully"
73
+ end
74
+
75
+ def test_bad_content_transfer_encoding
76
+ message = ''
77
+ File.open 'test/messages/bad-content-transfer-encoding-1.eml' do |f|
78
+ message = f.read
79
+ end
80
+
81
+ source = DummySource.new("sup-test://test_messages")
82
+ source.messages = [ message ]
83
+ source_info = 0
84
+
85
+ sup_message = Message.build_from_source(source, source_info)
86
+ sup_message.load_from_source!
87
+
88
+ from = sup_message.from
89
+ # "from" is just a simple person item
90
+
91
+ assert_equal("foo@example.org", from.email)
92
+ #assert_equal("Fake Sender", from.name)
93
+
94
+ subj = sup_message.subj
95
+ assert_equal("Content-Transfer-Encoding:-bug in sup", subj)
96
+
97
+ chunks = sup_message.load_from_source!
98
+ indexable_chunks = sup_message.indexable_chunks
99
+
100
+ # there should be only one chunk
101
+ #assert_equal(1, chunks.length)
102
+
103
+ lines = chunks[0].lines
104
+
105
+ # lines should contain an error message
106
+ assert (lines.join.include? "An error occurred while loading this message."), "This message should not load successfully"
107
+ end
108
+
109
+ def test_missing_line
110
+ message = ''
111
+ File.open 'test/messages/missing-line.eml' do |f|
112
+ message = f.read
113
+ end
114
+
115
+ source = DummySource.new("sup-test://test_messages")
116
+ source.messages = [ message ]
117
+ source_info = 0
118
+
119
+ sup_message = Message.build_from_source(source, source_info)
120
+ sup_message.load_from_source!
121
+
122
+ from = sup_message.from
123
+ # "from" is just a simple person item
124
+
125
+ assert_equal("foo@aol.com", from.email)
126
+ #assert_equal("Fake Sender", from.name)
127
+
128
+ subj = sup_message.subj
129
+ assert_equal("Encoding bug", subj)
130
+
131
+ chunks = sup_message.load_from_source!
132
+ indexable_chunks = sup_message.indexable_chunks
133
+
134
+ # there should be only one chunk
135
+ #assert_equal(1, chunks.length)
136
+
137
+ lines = chunks[0].lines
138
+
139
+ badline = lines[0]
140
+ assert (badline.display_length > 0), "The length of this line should greater than 0: #{badline}"
141
+
142
+ end
143
+ end
144
+
145
+ end
146
+
147
+ # vim:noai:ts=2:sw=2:
@@ -0,0 +1,85 @@
1
+ require "test_helper"
2
+
3
+ require "sup"
4
+ require "psych"
5
+
6
+ if RUBY_VERSION < "2.1"
7
+ describe "Sup's YAML util" do
8
+ describe "Module#yaml_properties" do
9
+ def build_class_with_name name, &b
10
+ Class.new do
11
+ meta_cls = class << self; self; end
12
+ meta_cls.send(:define_method, :name) { name }
13
+ class_exec(&b) unless b.nil?
14
+ end
15
+ end
16
+
17
+ after do
18
+ Psych.load_tags = {}
19
+ Psych.dump_tags = {}
20
+ end
21
+
22
+ it "defines YAML tag for class" do
23
+ cls = build_class_with_name 'Cls' do
24
+ yaml_properties
25
+ end
26
+
27
+ expected_yaml_tag = "!supmua.org,2006-10-01/Cls"
28
+
29
+ Psych.load_tags[expected_yaml_tag].must_equal cls
30
+ Psych.dump_tags[cls].must_equal expected_yaml_tag
31
+
32
+ end
33
+
34
+ it "Loads legacy YAML format as well" do
35
+ cls = build_class_with_name 'Cls' do
36
+ yaml_properties :id
37
+ attr_accessor :id
38
+ def initialize id
39
+ @id = id
40
+ end
41
+ end
42
+
43
+ Psych.load_tags["!masanjin.net,2006-10-01/Cls"].must_equal cls
44
+
45
+ yaml = <<EOF
46
+ --- !masanjin.net,2006-10-01/Cls
47
+ id: ID
48
+ EOF
49
+ loaded = YAML.load(yaml)
50
+
51
+ loaded.id.must_equal 'ID'
52
+ loaded.must_be_kind_of cls
53
+ end
54
+
55
+ it "Dumps & loads w/ state re-initialized" do
56
+ cls = build_class_with_name 'Cls' do
57
+ yaml_properties :id
58
+ attr_accessor :id
59
+ attr_reader :flag
60
+
61
+ def initialize id
62
+ @id = id
63
+ @flag = true
64
+ end
65
+ end
66
+
67
+ instance = cls.new 'ID'
68
+
69
+ dumped = YAML.dump(instance)
70
+ loaded = YAML.load(dumped)
71
+
72
+ dumped.must_equal <<-EOF
73
+ --- !supmua.org,2006-10-01/Cls
74
+ id: ID
75
+ EOF
76
+
77
+ loaded.id.must_equal 'ID'
78
+ assert loaded.flag
79
+ end
80
+ end
81
+ end
82
+
83
+ else
84
+ puts "Some YAML tests are skipped on Ruby 2.1.0 and newer."
85
+ end
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ # Requiring 'yaml' before 'sup' in 1.9.x would get Psych loaded first
4
+ # and becoming the default yamler.
5
+ require 'yaml'
6
+ require 'sup'
7
+
8
+ module Redwood
9
+ class TestYamlRegressions < ::Minitest::Unit::TestCase
10
+ def test_yamling_hash
11
+ hsh = {:foo => 42}
12
+ reloaded = YAML.load(hsh.to_yaml)
13
+
14
+ assert_equal reloaded, hsh
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ require "test_helper"
2
+
3
+ require "sup/service/label_service"
4
+
5
+ describe Redwood::LabelService do
6
+ describe "#add_labels" do
7
+ it "add labels to all messages matching the query" do
8
+ q = 'is:starred'
9
+ label = 'superstarred'
10
+ message = mock!.add_label(label).subject
11
+ index = mock!.find_messages(q){ [message] }.subject
12
+ mock(index).update_message_state(message)
13
+ mock(index).save_index
14
+
15
+ service = Redwood::LabelService.new(index)
16
+ service.add_labels q, label
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,40 @@
1
+ require "test_helper"
2
+
3
+ require "sup/horizontal_selector"
4
+
5
+ describe Redwood::HorizontalSelector do
6
+ let(:values) { %w[foo@example.com bar@example.com] }
7
+ let(:strange_value) { "strange@example.com" }
8
+
9
+ before do
10
+ @selector = Redwood::HorizontalSelector.new(
11
+ 'Acc:', values, [])
12
+ end
13
+
14
+ it "init w/ the first value selected" do
15
+ first_value = values.first
16
+ @selector.val.must_equal first_value
17
+ end
18
+
19
+ it "stores value for selection" do
20
+ second_value = values[1]
21
+ @selector.set_to second_value
22
+ @selector.val.must_equal second_value
23
+ end
24
+
25
+ describe "for unknown value" do
26
+ it "cannot select unknown value" do
27
+ @selector.wont_be :can_set_to?, strange_value
28
+ end
29
+
30
+ it "refuses selecting unknown value" do
31
+ old_value = @selector.val
32
+
33
+ assert_raises Redwood::HorizontalSelector::UnknownValue do
34
+ @selector.set_to strange_value
35
+ end
36
+
37
+ @selector.val.must_equal old_value
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ require "test_helper"
4
+
5
+ require "sup/util/query"
6
+ require "xapian"
7
+
8
+ describe Redwood::Util::Query do
9
+ describe ".describe" do
10
+ it "returns a UTF-8 description of query" do
11
+ query = Xapian::Query.new "テスト"
12
+ life = "生活: "
13
+
14
+ assert_raises Encoding::CompatibilityError do
15
+ _ = life + query.description
16
+ end
17
+
18
+ desc = Redwood::Util::Query.describe(query)
19
+ _ = (life + desc) # No exception thrown
20
+ end
21
+
22
+ it "returns a valid UTF-8 description of bad input" do
23
+ msg = "asdfa \xc3\x28 åasdf"
24
+ query = Xapian::Query.new msg
25
+ life = 'hæi'
26
+
27
+ # this is now possibly UTF-8 string with possibly invalid chars
28
+ assert_raises Redwood::Util::Query::QueryDescriptionError do
29
+ desc = Redwood::Util::Query.describe (query)
30
+ end
31
+
32
+ assert_raises Encoding::CompatibilityError do
33
+ _ = life + query.description
34
+ end
35
+ end
36
+
37
+ it "returns a valid UTF-8 fallback description of bad input" do
38
+ msg = "asdfa \xc3\x28 åasdf"
39
+ query = Xapian::Query.new msg
40
+
41
+ desc = Redwood::Util::Query.describe(query, "invalid query")
42
+
43
+ assert_equal("invalid query", desc)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+
3
+ require "test_helper"
4
+
5
+ require "sup/util"
6
+
7
+ describe "Sup's String extension" do
8
+ describe "#display_length" do
9
+ let :data do
10
+ [
11
+ ['some words', 10,],
12
+ ['中文', 4,],
13
+ ['ä', 1,],
14
+ ]
15
+ end
16
+
17
+ it "calculates display length of a string" do
18
+ data.each do |(str, length)|
19
+ str.display_length.must_equal length
20
+ end
21
+ end
22
+ end
23
+
24
+ describe "#slice_by_display_length(len)" do
25
+ let :data do
26
+ [
27
+ ['some words', 6, 'some w'],
28
+ ['中文', 2, '中'],
29
+ ['älpha', 3, 'älp'],
30
+ ]
31
+ end
32
+
33
+ it "slices string by display length" do
34
+ data.each do |(str, length, sliced)|
35
+ str.slice_by_display_length(length).must_equal sliced
36
+ end
37
+ end
38
+ end
39
+
40
+ describe "#wrap" do
41
+ let :data do
42
+ [
43
+ ['some words', 6, ['some', 'words']],
44
+ ['some words', 80, ['some words']],
45
+ ['中文', 2, ['中', '文']],
46
+ ['中文', 5, ['中文']],
47
+ ['älpha', 3, ['älp', 'ha']],
48
+ ]
49
+ end
50
+
51
+ it "wraps string by display length" do
52
+ data.each do |(str, length, wrapped)|
53
+ str.wrap(length).must_equal wrapped
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,19 @@
1
+ require "test_helper.rb"
2
+
3
+ require "sup/util/uri"
4
+
5
+ describe Redwood::Util::Uri do
6
+ describe ".build" do
7
+ it "builds uri from hash" do
8
+ components = {:path => "/var/mail/foo", :scheme => "mbox"}
9
+ uri = Redwood::Util::Uri.build(components)
10
+ uri.to_s.must_equal "mbox:/var/mail/foo"
11
+ end
12
+
13
+ it "expands ~ in path" do
14
+ components = {:path => "~/foo", :scheme => "maildir"}
15
+ uri = Redwood::Util::Uri.build(components)
16
+ uri.to_s.must_equal "maildir:#{ENV["HOME"]}/foo"
17
+ end
18
+ end
19
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Morgan
@@ -10,29 +10,8 @@ authors:
10
10
  - Matthieu Rakotojaona
11
11
  autorequire:
12
12
  bindir: bin
13
- cert_chain:
14
- - |
15
- -----BEGIN CERTIFICATE-----
16
- MIIDVDCCAjygAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQDDAJlZzEV
17
- MBMGCgmSJomT8ixkARkWBWdhdXRlMRUwEwYKCZImiZPyLGQBGRYFdmV0c2oxEzAR
18
- BgoJkiaJk/IsZAEZFgNjb20wHhcNMTMwNTA4MTAzODQ3WhcNMTQwNTA4MTAzODQ3
19
- WjBQMQswCQYDVQQDDAJlZzEVMBMGCgmSJomT8ixkARkWBWdhdXRlMRUwEwYKCZIm
20
- iZPyLGQBGRYFdmV0c2oxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3
21
- DQEBAQUAA4IBDwAwggEKAoIBAQC7sNc5zY4MrYB7eywE/aK2IoDqpM9lq4ZFlHzt
22
- Pmq1LG6ah2lu/HfjqxiPoqwY7QkdSOGDLSk7G8YBqDA/tODhkPPSTqxBDzYyCO46
23
- haWTtoN5tJkxIDJKp1nVXHi0Mlb4GJVKd9P0q95BeBYBfs8vyPN+y4b4Gebgx9U3
24
- KqMDbe5h9MAPZGmtiRFMb3ugmiujDm7v8fACa5EtSvK/lxMkRDglecT/knE99NYI
25
- l35SO/Bune1bxYmkwW64mQ4wRlGVeAnX+19msALfS9rdJL26dfW2LgqWi5QoVTBH
26
- KNKTl/i3fxK0mzgtnoRCWdMJQFNNonFTnPUUawi1c9Kh4AdPAgMBAAGjOTA3MAkG
27
- A1UdEwQCMAAwHQYDVR0OBBYEFJNCOxL0SWcbW2M+DIEUzAMz1bZsMAsGA1UdDwQE
28
- AwIEsDANBgkqhkiG9w0BAQUFAAOCAQEAr3QUayd0geBDExO+WwzaEPAuUZ3zWQYG
29
- G9vrplCkmJtjS/X/wVAef7Jn/V5MNkXKXsiOgXJXki+n7HulNZUf1rzr7Un96gVJ
30
- 1hq/ZTuapnPpstBqqdv60RB8HNGydHQeEz6us5z3nj+KchPqJ657Dz8oX/Nm6/24
31
- 7QSQpCh8xBYdSWEpoIE0zUSY77LtVTRVwIr9uDpWTTr9kCVBINBsOQNjWKruEWjV
32
- +JMuDs+iWefpF4R3BySoOc1Q4WoES3+oc0qo37MsAZyfnQIPTZkyLZCMxeL6Mha4
33
- hFc2yANBj8voaY5C74Cg2VqExtcnSaxUtW9wC4w5hOlg0AVfb1JWzg==
34
- -----END CERTIFICATE-----
35
- date: 2014-04-11 00:00:00.000000000 Z
13
+ cert_chain: []
14
+ date: 2014-05-19 00:00:00.000000000 Z
36
15
  dependencies:
37
16
  - !ruby/object:Gem::Dependency
38
17
  name: xapian-ruby
@@ -245,14 +224,14 @@ dependencies:
245
224
  - !ruby/object:Gem::Version
246
225
  version: 2.0.2
247
226
  description: |2
248
- Sup is a console-based email client for people with a lot of email.
227
+ Sup is a console-based email client for people with a lot of email.
249
228
 
250
- * GMail-like thread-centered archiving, tagging and muting
251
- * Handling mail from multiple mbox and Maildir sources
252
- * Blazing fast full-text search with a rich query language
253
- * Multiple accounts - pick the right one when sending mail
254
- * Ruby-programmable hooks
255
- * Automatically tracking recent contacts
229
+ * GMail-like thread-centered archiving, tagging and muting
230
+ * Handling mail from multiple mbox and Maildir sources
231
+ * Blazing fast full-text search with a rich query language
232
+ * Multiple accounts - pick the right one when sending mail
233
+ * Ruby-programmable hooks
234
+ * Automatically tracking recent contacts
256
235
  email: sup-talk@rubyforge.org
257
236
  executables:
258
237
  - sup
@@ -260,18 +239,23 @@ executables:
260
239
  - sup-config
261
240
  - sup-dump
262
241
  - sup-import-dump
242
+ - sup-psych-ify-config-files
263
243
  - sup-recover-sources
264
244
  - sup-sync
265
245
  - sup-sync-back-maildir
266
246
  - sup-tweak-labels
267
- - sup-psych-ify-config-files
268
247
  extensions: []
269
248
  extra_rdoc_files: []
270
249
  files:
250
+ - ".gitignore"
251
+ - ".travis.yml"
271
252
  - CONTRIBUTORS
253
+ - Gemfile
254
+ - HACKING
272
255
  - History.txt
273
256
  - LICENSE
274
257
  - README.md
258
+ - Rakefile
275
259
  - ReleaseNotes
276
260
  - bin/sup
277
261
  - bin/sup-add
@@ -283,6 +267,16 @@ files:
283
267
  - bin/sup-sync
284
268
  - bin/sup-sync-back-maildir
285
269
  - bin/sup-tweak-labels
270
+ - contrib/colorpicker.rb
271
+ - contrib/completion/_sup.zsh
272
+ - devel/console.sh
273
+ - devel/count-loc.sh
274
+ - devel/load-index.rb
275
+ - devel/profile.rb
276
+ - devel/start-console.rb
277
+ - doc/FAQ.txt
278
+ - doc/Hooks.txt
279
+ - doc/Philosophy.txt
286
280
  - lib/sup.rb
287
281
  - lib/sup/account.rb
288
282
  - lib/sup/buffer.rb
@@ -348,16 +342,42 @@ files:
348
342
  - lib/sup/util/query.rb
349
343
  - lib/sup/util/uri.rb
350
344
  - lib/sup/version.rb
345
+ - sup.gemspec
346
+ - test/dummy_source.rb
347
+ - test/gnupg_test_home/gpg.conf
348
+ - test/gnupg_test_home/pubring.gpg
349
+ - test/gnupg_test_home/receiver_pubring.gpg
350
+ - test/gnupg_test_home/receiver_secring.gpg
351
+ - test/gnupg_test_home/receiver_trustdb.gpg
352
+ - test/gnupg_test_home/secring.gpg
353
+ - test/gnupg_test_home/sup-test-2@foo.bar.asc
354
+ - test/gnupg_test_home/trustdb.gpg
355
+ - test/integration/test_label_service.rb
356
+ - test/messages/bad-content-transfer-encoding-1.eml
357
+ - test/messages/binary-content-transfer-encoding-2.eml
358
+ - test/messages/missing-line.eml
359
+ - test/test_crypto.rb
360
+ - test/test_header_parsing.rb
361
+ - test/test_helper.rb
362
+ - test/test_message.rb
363
+ - test/test_messages_dir.rb
364
+ - test/test_yaml_migration.rb
365
+ - test/test_yaml_regressions.rb
366
+ - test/unit/service/test_label_service.rb
367
+ - test/unit/test_horizontal_selector.rb
368
+ - test/unit/util/test_query.rb
369
+ - test/unit/util/test_string.rb
370
+ - test/unit/util/test_uri.rb
351
371
  homepage: http://supmua.org
352
372
  licenses:
353
373
  - GPL-2
354
374
  metadata: {}
355
375
  post_install_message: |
356
376
  SUP: If you are upgrading Sup from before version 0.14.0: Please
357
- run `sup-psych-ify-config-files` to migrate from 0.13.
377
+ run `sup-psych-ify-config-files` to migrate from 0.13.
358
378
 
359
- Check https://github.com/sup-heliotrope/sup/wiki/Migration-0.13-to-0.14
360
- for more detailed and up-to-date instructions.
379
+ Check https://github.com/sup-heliotrope/sup/wiki/Migration-0.13-to-0.14
380
+ for more detailed and up-to-date instructions.
361
381
  rdoc_options: []
362
382
  require_paths:
363
383
  - lib
@@ -377,4 +397,29 @@ rubygems_version: 2.2.2
377
397
  signing_key:
378
398
  specification_version: 4
379
399
  summary: A console-based email client with the best features of GMail, mutt and Emacs
380
- test_files: []
400
+ test_files:
401
+ - test/dummy_source.rb
402
+ - test/gnupg_test_home/gpg.conf
403
+ - test/gnupg_test_home/pubring.gpg
404
+ - test/gnupg_test_home/receiver_pubring.gpg
405
+ - test/gnupg_test_home/receiver_secring.gpg
406
+ - test/gnupg_test_home/receiver_trustdb.gpg
407
+ - test/gnupg_test_home/secring.gpg
408
+ - test/gnupg_test_home/sup-test-2@foo.bar.asc
409
+ - test/gnupg_test_home/trustdb.gpg
410
+ - test/integration/test_label_service.rb
411
+ - test/messages/bad-content-transfer-encoding-1.eml
412
+ - test/messages/binary-content-transfer-encoding-2.eml
413
+ - test/messages/missing-line.eml
414
+ - test/test_crypto.rb
415
+ - test/test_header_parsing.rb
416
+ - test/test_helper.rb
417
+ - test/test_message.rb
418
+ - test/test_messages_dir.rb
419
+ - test/test_yaml_migration.rb
420
+ - test/test_yaml_regressions.rb
421
+ - test/unit/service/test_label_service.rb
422
+ - test/unit/test_horizontal_selector.rb
423
+ - test/unit/util/test_query.rb
424
+ - test/unit/util/test_string.rb
425
+ - test/unit/util/test_uri.rb