cw 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.cw_config +18 -0
  3. data/.gitignore +10 -1
  4. data/LICENSE +2 -1
  5. data/README.md +212 -96
  6. data/Rakefile +15 -2
  7. data/VERSION +1 -1
  8. data/Vagrantfile +45 -0
  9. data/cw.gemspec +6 -1
  10. data/data/text/book_to_read.txt +4 -0
  11. data/data/text/english.txt +10000 -0
  12. data/example.rb +172 -106
  13. data/lib/cw.rb +10 -126
  14. data/lib/cw/alphabet.rb +53 -46
  15. data/lib/cw/audio_player.rb +83 -72
  16. data/lib/cw/book.rb +160 -185
  17. data/lib/cw/book_details.rb +38 -49
  18. data/lib/cw/cl.rb +101 -95
  19. data/lib/cw/common_words.rb +76 -0
  20. data/lib/cw/config.rb +50 -0
  21. data/lib/cw/current_word.rb +23 -24
  22. data/lib/cw/cw_dsl.rb +264 -131
  23. data/lib/cw/cw_encoding.rb +63 -69
  24. data/lib/cw/cw_stream.rb +86 -82
  25. data/lib/cw/cw_threads.rb +132 -22
  26. data/lib/cw/element.rb +60 -54
  27. data/lib/cw/file_details.rb +26 -11
  28. data/lib/cw/key_input.rb +53 -35
  29. data/lib/cw/numbers.rb +26 -19
  30. data/lib/cw/os.rb +13 -0
  31. data/lib/cw/play.rb +92 -0
  32. data/lib/cw/print.rb +102 -100
  33. data/lib/cw/process.rb +3 -0
  34. data/lib/cw/progress.rb +20 -17
  35. data/lib/cw/randomize.rb +56 -52
  36. data/lib/cw/repeat_word.rb +59 -66
  37. data/lib/cw/reveal.rb +32 -31
  38. data/lib/cw/rss.rb +52 -48
  39. data/lib/cw/sentence.rb +83 -76
  40. data/lib/cw/speak.rb +8 -4
  41. data/lib/cw/spoken.rb +8 -4
  42. data/lib/cw/str.rb +62 -30
  43. data/lib/cw/test_letters.rb +20 -28
  44. data/lib/cw/test_words.rb +25 -31
  45. data/lib/cw/tester.rb +219 -226
  46. data/lib/cw/text_helpers.rb +19 -15
  47. data/lib/cw/timing.rb +63 -67
  48. data/lib/cw/tone_generator.rb +176 -153
  49. data/lib/cw/tone_helpers.rb +15 -23
  50. data/lib/cw/voice.rb +12 -8
  51. data/lib/cw/words.rb +136 -106
  52. data/run_script_tests.rb +165 -0
  53. data/test/my_words.txt +1 -0
  54. data/test/test_common_words.rb +71 -0
  55. data/test/test_config.rb +98 -0
  56. data/test/test_current_word.rb +62 -0
  57. data/test/test_cw.rb +87 -120
  58. data/test/test_cw_threads.rb +123 -0
  59. data/test/test_filtering.rb +439 -0
  60. data/test/test_params.rb +28 -0
  61. data/test/test_play.rb +51 -0
  62. data/test/test_stream.rb +83 -83
  63. data/test/test_tester.rb +9 -27
  64. data/test/test_timing.rb +212 -0
  65. metadata +94 -12
  66. data/lib/cw/config_file.rb +0 -69
  67. data/lib/cw/monitor_keys.rb +0 -37
  68. data/lib/cw/params.rb +0 -104
@@ -0,0 +1,123 @@
1
+ require 'simplecov'
2
+ $VERBOSE = nil #FIXME
3
+ #SimpleCov.start
4
+
5
+ require 'minitest/autorun'
6
+ require 'minitest/pride'
7
+ require_relative '../lib/cw/cw_threads.rb'
8
+
9
+ class TestCWStream < MiniTest::Test
10
+
11
+ ROOT = File.expand_path File.dirname(__FILE__) + '/../../'
12
+
13
+ def a_thread
14
+ @test_var = 2 + 3
15
+ end
16
+
17
+ def sleep_thread
18
+ sleep 100
19
+ end
20
+
21
+ def setup
22
+ @test_var = 0
23
+ @threads = CWG::CWThreads.new(self, [:a_thread])
24
+ end
25
+
26
+ def teardown
27
+ @cw = nil
28
+ end
29
+
30
+ def test_cw_threads
31
+ assert true
32
+ end
33
+
34
+ def test_threads_exposes_name
35
+ @threads.start_threads
36
+ assert_equal :a_thread, (@threads.threads)[0][:name]
37
+ end
38
+
39
+ def test_threads_exposes_thread
40
+ @threads.start_threads
41
+ assert @threads.threads[0][:thread].is_a? Thread
42
+ end
43
+
44
+ def test_start_threads_runs_thread
45
+ @threads.start_threads
46
+ sleep 0.1
47
+ assert_equal 5, @test_var
48
+ end
49
+
50
+ # failed on one build
51
+ # def test_kill_thread_kills_thread
52
+ # threads = CWG::CWThreads.new(self, [:sleep_thread])
53
+ # threads.start_threads
54
+ # thread = threads.threads[0]
55
+ # assert_equal "run", thread[:thread].status
56
+ # threads.kill_thread thread
57
+ # count = 0
58
+ # status = ''
59
+ # loop do
60
+ # status = thread[:thread].status
61
+ # break unless status
62
+ # sleep 0.01
63
+ # count += 1
64
+ # break if(count >= 10)
65
+ # end
66
+ #
67
+ # assert(count < 10)
68
+ # end
69
+ #
70
+ def test_handles_multiple_threads
71
+ threads = CWG::CWThreads.new(self, [:a_thread, :sleep_thread])
72
+ threads.start_threads
73
+ assert threads.threads[0][:thread].is_a? Thread
74
+ assert threads.threads[1][:thread].is_a? Thread
75
+ assert_nil threads.threads[2]
76
+ end
77
+
78
+ # failed on one build
79
+ # def test_thread_false_or_nil_returns_true_and_false
80
+ # @threads.start_threads
81
+ # thread = @threads.threads[0]
82
+ # refute @threads.thread_false_or_nil?(@threads.threads[0])
83
+ # @threads.kill_thread thread
84
+ # count = 0
85
+ # status = ''
86
+ # loop do
87
+ # status = thread[:thread].status
88
+ # break unless status
89
+ # sleep 0.01
90
+ # count += 1
91
+ # break if(count >= 10)
92
+ # end
93
+ # assert count < 10
94
+ # assert @threads.thread_false_or_nil?(@threads.threads[0])
95
+ # end
96
+
97
+ #todo Too fragile!
98
+ # def test_kill_open_threads_kills_threads
99
+ # threads = CWThreads.new(self, [:sleep_thread, :a_thread])
100
+ # threads.start_threads
101
+ # thread0 = threads.threads[0]
102
+ # assert_equal "run", thread0[:thread].status
103
+ # thread1 = threads.threads[1]
104
+ # assert_equal "run", thread1[:thread].status
105
+ # threads.kill_open_threads
106
+ # count = 0
107
+ # found = 0
108
+ # loop do
109
+ # found = 0
110
+ # [thread0, thread1].each do |thr|
111
+ # found += 1 if thr[:thread].status == false
112
+ # end
113
+ # break if(found == 2)
114
+ # count += 1
115
+ # puts count
116
+ # break if count > 10
117
+ # sleep 0.01
118
+ # end
119
+ # assert(count < 10)
120
+ # assert_equal 2, found
121
+ # end
122
+
123
+ end
@@ -0,0 +1,439 @@
1
+ require 'simplecov'
2
+ $VERBOSE = nil #FIXME
3
+ SimpleCov.start
4
+
5
+ require 'minitest/autorun'
6
+ require 'minitest/pride'
7
+ require_relative '../lib/cw'
8
+
9
+ class TestCW < MiniTest::Test
10
+
11
+ ROOT = File.expand_path File.dirname(__FILE__) + '/../'
12
+
13
+ def setup
14
+ @cw = CW.new
15
+ @cw.no_run
16
+ end
17
+
18
+ def teardown
19
+ @cw = nil
20
+ end
21
+
22
+ def test_something
23
+ assert true
24
+ end
25
+
26
+ def test_beginning_with_a
27
+ @cw.words = ['able', 'zero']
28
+ @cw.beginning_with('a')
29
+ assert_equal ['able'], @cw.words
30
+ end
31
+
32
+ def test_beginning_with_z
33
+ @cw.words = ['able', 'zero']
34
+ @cw.beginning_with('z')
35
+ assert_equal ['zero'], @cw.words
36
+ end
37
+
38
+ def test_beginning_with_ab
39
+ @cw.words = ['ardvark', 'able', 'zero']
40
+ @cw.beginning_with('ab')
41
+ assert_equal ['able'], @cw.words
42
+ end
43
+
44
+ def test_beginning_with_range
45
+ @cw.words = ['able', 'delta', 'zero']
46
+ @cw.beginning_with('a'..'d')
47
+ assert_equal ['able', 'delta'], @cw.words
48
+ end
49
+
50
+ def test_beginning_with_with_no_match
51
+ @cw.words = ['able', 'zero']
52
+ @cw.beginning_with('b')
53
+ assert_equal [], @cw.words
54
+ end
55
+
56
+ def test_beginning_with_with_empty_string_returns_all
57
+ @cw.words = ['able', 'zero']
58
+ @cw.beginning_with('')
59
+ assert_equal ['able', 'zero'], @cw.words
60
+ end
61
+
62
+ def test_words_beginning_with_a
63
+ @cw.words = ['able', 'zero']
64
+ @cw.words_beginning_with('a')
65
+ assert_equal ['able'], @cw.words
66
+ end
67
+
68
+ def test_words_beginning_with_z
69
+ @cw.words = ['able', 'zero']
70
+ @cw.words_beginning_with('z')
71
+ assert_equal ['zero'], @cw.words
72
+ end
73
+
74
+ def test_words_beginning_with_ab
75
+ @cw.words = ['ardvark', 'able', 'zero']
76
+ @cw.words_beginning_with('ab')
77
+ assert_equal ['able'], @cw.words
78
+ end
79
+
80
+ def test_words_beginning_with_range
81
+ @cw.words = ['able', 'delta', 'zero']
82
+ @cw.words_beginning_with('a'..'d')
83
+ assert_equal ['able', 'delta'], @cw.words
84
+ end
85
+
86
+ def test_words_beginning_with_with_no_match
87
+ @cw.words = ['able', 'zero']
88
+ @cw.words_beginning_with('b')
89
+ assert_equal [], @cw.words
90
+ end
91
+
92
+ def test_words_beginning_with_with_empty_string_returns_all
93
+ @cw.words = ['able', 'zero']
94
+ @cw.words_beginning_with('')
95
+ assert_equal ['able', 'zero'], @cw.words
96
+ end
97
+
98
+ def test_ending_with_a
99
+ @cw.words = ['else', 'antenna', 'alba', 'zero']
100
+ @cw.ending_with('a')
101
+ assert_equal ['antenna', 'alba'], @cw.words
102
+ end
103
+
104
+ def test_ending_with_z
105
+ @cw.words = ['joy', 'pazazz']
106
+ @cw.ending_with('z')
107
+ assert_equal ['pazazz'], @cw.words
108
+ end
109
+
110
+ def test_ending_with_tion
111
+ @cw.words = ['tiona', 'lion', 'station', 'creation']
112
+ @cw.ending_with('tion')
113
+ assert_equal ['station', 'creation'], @cw.words
114
+ end
115
+
116
+ def test_ending_with_range
117
+ @cw.words = ['may', 'kay', 'yam', 'eye', 'pizazz']
118
+ @cw.ending_with('y'..'z')
119
+ assert_equal ['may', 'kay', 'pizazz'], @cw.words
120
+ end
121
+
122
+ def test_ending_with_with_no_match
123
+ @cw.words = ['able', 'zero']
124
+ @cw.ending_with('b')
125
+ assert_equal [], @cw.words
126
+ end
127
+
128
+ def test_ending_with_with_empty_string_returns_all
129
+ @cw.words = ['able', 'zero']
130
+ @cw.ending_with('')
131
+ assert_equal ['able', 'zero'], @cw.words
132
+ end
133
+
134
+ def test_words_ending_with_a
135
+ @cw.words = ['else', 'antenna', 'alba', 'zero']
136
+ @cw.words_ending_with('a')
137
+ assert_equal ['antenna', 'alba'], @cw.words
138
+ end
139
+
140
+ def test_words_ending_with_z
141
+ @cw.words = ['joy', 'pazazz']
142
+ @cw.words_ending_with('z')
143
+ assert_equal ['pazazz'], @cw.words
144
+ end
145
+
146
+ def test_words_ending_with_tion
147
+ @cw.words = ['tiona', 'lion', 'station', 'creation']
148
+ @cw.words_ending_with('tion')
149
+ assert_equal ['station', 'creation'], @cw.words
150
+ end
151
+
152
+ def test_words_ending_with_range
153
+ @cw.words = ['may', 'kay', 'yam', 'eye', 'pizazz']
154
+ @cw.words_ending_with('y'..'z')
155
+ assert_equal ['may', 'kay', 'pizazz'], @cw.words
156
+ end
157
+
158
+ def test_words_ending_with_with_no_match
159
+ @cw.words = ['able', 'zero']
160
+ @cw.words_ending_with('b')
161
+ assert_equal [], @cw.words
162
+ end
163
+
164
+ def test_words_ending_with_with_empty_string_returns_all
165
+ @cw.words = ['able', 'zero']
166
+ @cw.words_ending_with('')
167
+ assert_equal ['able', 'zero'], @cw.words
168
+ end
169
+
170
+ def test_including_a
171
+ @cw.words = ['else', 'banter', 'alt', 'zero']
172
+ @cw.including('a')
173
+ assert_equal ['banter', 'alt'], @cw.words
174
+ end
175
+
176
+ def test_including_z
177
+ @cw.words = ['joy', 'amaze', '123']
178
+ @cw.including('z')
179
+ assert_equal ['amaze'], @cw.words
180
+ end
181
+
182
+ def test_including_tion
183
+ @cw.words = ['tiona', 'lion', 'station', 'creation']
184
+ @cw.including('tion')
185
+ assert_equal ['tiona', 'station', 'creation'], @cw.words
186
+ end
187
+
188
+ def test_including_range
189
+ @cw.words = ['may', 'kay', 'yam', 'eye', 'pizazz']
190
+ @cw.including('g'..'k')
191
+ assert_equal ['pizazz', 'kay'], @cw.words
192
+ end
193
+
194
+ def test_including_with_no_match
195
+ @cw.words = ['able', 'zero']
196
+ @cw.including('c')
197
+ assert_equal [], @cw.words
198
+ end
199
+
200
+ def test_including_with_empty_string_returns_all
201
+ @cw.words = ['able', 'zero']
202
+ @cw.including('')
203
+ assert_equal ['able', 'zero'], @cw.words
204
+ end
205
+
206
+ def test_words_including_a
207
+ @cw.words = ['else', 'banter', 'alt', 'zero']
208
+ @cw.words_including('a')
209
+ assert_equal ['banter', 'alt'], @cw.words
210
+ end
211
+
212
+ def test_words_including_z
213
+ @cw.words = ['joy', 'amaze', '123']
214
+ @cw.words_including('z')
215
+ assert_equal ['amaze'], @cw.words
216
+ end
217
+
218
+ def test_words_including_tion
219
+ @cw.words = ['tiona', 'lion', 'station', 'creation']
220
+ @cw.words_including('tion')
221
+ assert_equal ['tiona', 'station', 'creation'], @cw.words
222
+ end
223
+
224
+ def test_words_including_range
225
+ @cw.words = ['may', 'kay', 'yam', 'eye', 'pizazz']
226
+ @cw.words_including('g'..'k')
227
+ assert_equal ['pizazz', 'kay'], @cw.words
228
+ end
229
+
230
+ def test_words_including_with_no_match
231
+ @cw.words = ['able', 'zero']
232
+ @cw.words_including('c')
233
+ assert_equal [], @cw.words
234
+ end
235
+
236
+ def test_words_including_with_empty_string_returns_all
237
+ @cw.words = ['able', 'zero']
238
+ @cw.words_including('')
239
+ assert_equal ['able', 'zero'], @cw.words
240
+ end
241
+
242
+ def test_no_longer_than_1
243
+ @cw.words = ['1', '12', '123']
244
+ @cw.no_longer_than(1)
245
+ assert_equal ['1'], @cw.words
246
+ end
247
+
248
+ def test_no_longer_than_2
249
+ @cw.words = ['1', '12', '123']
250
+ @cw.no_longer_than(2)
251
+ assert_equal ['1', '12'], @cw.words
252
+ end
253
+
254
+ def test_no_longer_than_with_no_match
255
+ @cw.words = ['123', '1234', '12345']
256
+ @cw.no_longer_than(2)
257
+ assert_equal [], @cw.words
258
+ end
259
+
260
+ def test_words_no_longer_than_0
261
+ @cw.words = ['1', '12', '123']
262
+ @cw.words_no_longer_than(0)
263
+ assert_equal [], @cw.words
264
+ end
265
+
266
+ def test_words_no_longer_than_1
267
+ @cw.words = ['1', '12', '123']
268
+ @cw.words_no_longer_than(1)
269
+ assert_equal ['1'], @cw.words
270
+ end
271
+
272
+ def test_words_no_longer_than_2
273
+ @cw.words = ['1', '12', '123']
274
+ @cw.words_no_longer_than(2)
275
+ assert_equal ['1', '12'], @cw.words
276
+ end
277
+
278
+ def test_words_no_longer_than_with_words_no_match
279
+ @cw.words = ['123', '1234', '12345']
280
+ @cw.words_no_longer_than(2)
281
+ assert_equal [], @cw.words
282
+ end
283
+
284
+ def test_words_no_longer_than_0
285
+ @cw.words = ['1', '12', '123']
286
+ @cw.words_no_longer_than(0)
287
+ assert_equal [], @cw.words
288
+ end
289
+
290
+ def test_no_shorter_than_1
291
+ @cw.words = ['1', '12', '123']
292
+ @cw.no_shorter_than(1)
293
+ assert_equal ['1', '12', '123'], @cw.words
294
+ end
295
+
296
+ def test_no_shorter_than_2
297
+ @cw.words = ['1', '12', '123']
298
+ @cw.no_shorter_than(2)
299
+ assert_equal ['12', '123'], @cw.words
300
+ end
301
+
302
+ def test_no_shorter_than_3
303
+ @cw.words = ['1', '12', '123']
304
+ @cw.no_shorter_than(3)
305
+ assert_equal ['123'], @cw.words
306
+ end
307
+
308
+ def test_no_shorter_than_with_no_match
309
+ @cw.words = ['123', '1234', '12345']
310
+ @cw.no_shorter_than(4)
311
+ assert_equal ['1234', '12345'], @cw.words
312
+ end
313
+
314
+ def test_words_no_shorter_than_0
315
+ @cw.words = ['1', '12', '123']
316
+ @cw.words_no_shorter_than(0)
317
+ assert_equal ['1', '12', '123'], @cw.words
318
+ end
319
+
320
+ def test_words_no_shorter_than_1
321
+ @cw.words = ['1', '12', '123']
322
+ @cw.words_no_shorter_than(1)
323
+ assert_equal ['1', '12', '123'], @cw.words
324
+ end
325
+
326
+ def test_words_no_shorter_than_2
327
+ @cw.words = ['1', '12', '123']
328
+ @cw.words_no_shorter_than(2)
329
+ assert_equal ['12', '123'], @cw.words
330
+ end
331
+
332
+ def test_words_no_shorter_than_3
333
+ @cw.words = ['1', '12', '123']
334
+ @cw.words_no_shorter_than(3)
335
+ assert_equal ['123'], @cw.words
336
+ end
337
+
338
+ def test_words_no_shorter_than_with_words_no_match
339
+ @cw.words = ['123', '1234', '12345']
340
+ @cw.words_no_shorter_than(4)
341
+ assert_equal ['1234', '12345'], @cw.words
342
+ end
343
+
344
+ def test_words_no_shorter_than_0
345
+ @cw.words = ['1', '12', '123']
346
+ @cw.words_no_shorter_than(0)
347
+ assert_equal ['1', '12', '123'], @cw.words
348
+ end
349
+
350
+ def test_double_words
351
+ @cw.words = ['1', '12', '123']
352
+ @cw.double_words
353
+ assert_equal ['1', '1', '12', '12', '123', '123'], @cw.words
354
+ end
355
+
356
+ def test_repeat_once
357
+ @cw.words = ['1', '12', '123']
358
+ @cw.repeat 1
359
+ assert_equal ['1', '12', '123', '1', '12', '123'], @cw.words
360
+ end
361
+
362
+ def test_repeat_twice
363
+ @cw.words = ['1', '12', '123']
364
+ @cw.repeat 2
365
+ assert_equal ['1', '12', '123', '1', '12', '123', '1', '12', '123'], @cw.words
366
+ end
367
+ def test_repeat_none
368
+ @cw.words = ['1', '12', '123']
369
+ @cw.repeat 0
370
+ assert_equal ['1', '12', '123'], @cw.words
371
+ end
372
+
373
+ def test_word_size_1
374
+ @cw.words = ['1', '12', '123']
375
+ @cw.word_size 1
376
+ assert_equal ['1'], @cw.words
377
+ end
378
+
379
+ def test_word_size_2
380
+ @cw.words = ['1', '12', '23', '123']
381
+ @cw.word_size 2
382
+ assert_equal ['12','23'], @cw.words
383
+ end
384
+
385
+ def test_word_size_3
386
+ @cw.words = ['1', '12', '23', '123']
387
+ @cw.word_size 3
388
+ assert_equal ['123'], @cw.words
389
+ end
390
+
391
+ def test_having_size_of_1
392
+ @cw.words = ['1', '12', '123']
393
+ @cw.having_size_of 1
394
+ assert_equal ['1'], @cw.words
395
+ end
396
+
397
+ def test_having_size_of_2
398
+ @cw.words = ['1', '12', '23', '123']
399
+ @cw.having_size_of 2
400
+ assert_equal ['12','23'], @cw.words
401
+ end
402
+
403
+ def test_having_size_of_3
404
+ @cw.words = ['1', '12', '23', '123']
405
+ @cw.having_size_of 3
406
+ assert_equal ['123'], @cw.words
407
+ end
408
+
409
+ def test_word_length_1
410
+ @cw.words = ['1', '12', '123']
411
+ @cw.word_length 1
412
+ assert_equal ['1'], @cw.words
413
+ end
414
+
415
+ def test_word_length_2
416
+ @cw.words = ['1', '12', '23', '123']
417
+ @cw.word_length 2
418
+ assert_equal ['12','23'], @cw.words
419
+ end
420
+
421
+ def test_word_length_3
422
+ @cw.words = ['1', '12', '23', '123']
423
+ @cw.word_length 3
424
+ assert_equal ['123'], @cw.words
425
+ end
426
+
427
+ def test_containing_abc
428
+ @cw.words = ['abd', 'abc', 'acb', 'cba', '123', 'ab', 'ad', 'cb']
429
+ @cw.containing ['a','b','c']
430
+ assert_equal ['abc', 'acb', 'cba', 'ab', 'cb'], @cw.words
431
+ end
432
+
433
+ def test_containing_with_range
434
+ @cw.words = ['abd', 'abc', 'acb', 'cba', '123', 'ab', 'ad', 'cb']
435
+ @cw.containing ['a'..'c']
436
+ assert_equal ['abc', 'acb', 'cba', 'ab', 'cb'], @cw.words
437
+ end
438
+ end
439
+