command_kit 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog.md +6 -0
  3. data/README.md +3 -0
  4. data/command_kit.gemspec +7 -2
  5. data/lib/command_kit/completion/install.rb +276 -0
  6. data/lib/command_kit/env/prefix.rb +41 -0
  7. data/lib/command_kit/env/shell.rb +58 -0
  8. data/lib/command_kit/version.rb +1 -1
  9. metadata +4 -64
  10. data/spec/arguments/argument_spec.rb +0 -133
  11. data/spec/arguments/argument_value_spec.rb +0 -66
  12. data/spec/arguments_spec.rb +0 -279
  13. data/spec/bug_report_spec.rb +0 -266
  14. data/spec/colors_spec.rb +0 -771
  15. data/spec/command_kit_spec.rb +0 -8
  16. data/spec/command_name_spec.rb +0 -130
  17. data/spec/command_spec.rb +0 -123
  18. data/spec/commands/auto_load/subcommand_spec.rb +0 -82
  19. data/spec/commands/auto_load_spec.rb +0 -159
  20. data/spec/commands/auto_require_spec.rb +0 -142
  21. data/spec/commands/fixtures/test_auto_load/cli/commands/test1.rb +0 -10
  22. data/spec/commands/fixtures/test_auto_load/cli/commands/test2.rb +0 -10
  23. data/spec/commands/fixtures/test_auto_require/lib/test_auto_require/cli/commands/test1.rb +0 -10
  24. data/spec/commands/help_spec.rb +0 -66
  25. data/spec/commands/parent_command_spec.rb +0 -40
  26. data/spec/commands/subcommand_spec.rb +0 -99
  27. data/spec/commands_spec.rb +0 -865
  28. data/spec/description_spec.rb +0 -179
  29. data/spec/edit_spec.rb +0 -72
  30. data/spec/env/home_spec.rb +0 -46
  31. data/spec/env/path_spec.rb +0 -84
  32. data/spec/env_spec.rb +0 -123
  33. data/spec/examples_spec.rb +0 -211
  34. data/spec/exception_handler_spec.rb +0 -103
  35. data/spec/file_utils_spec.rb +0 -59
  36. data/spec/fixtures/template.erb +0 -5
  37. data/spec/help/man_spec.rb +0 -345
  38. data/spec/help_spec.rb +0 -94
  39. data/spec/inflector_spec.rb +0 -166
  40. data/spec/interactive_spec.rb +0 -415
  41. data/spec/main_spec.rb +0 -179
  42. data/spec/man_spec.rb +0 -46
  43. data/spec/open_app_spec.rb +0 -85
  44. data/spec/options/option_spec.rb +0 -343
  45. data/spec/options/option_value_spec.rb +0 -171
  46. data/spec/options/parser_spec.rb +0 -274
  47. data/spec/options/quiet_spec.rb +0 -51
  48. data/spec/options/verbose_spec.rb +0 -51
  49. data/spec/options/version_spec.rb +0 -146
  50. data/spec/options_spec.rb +0 -465
  51. data/spec/os/linux_spec.rb +0 -164
  52. data/spec/os_spec.rb +0 -233
  53. data/spec/package_manager_spec.rb +0 -806
  54. data/spec/pager_spec.rb +0 -217
  55. data/spec/printing/fields_spec.rb +0 -167
  56. data/spec/printing/indent_spec.rb +0 -132
  57. data/spec/printing/lists_spec.rb +0 -99
  58. data/spec/printing/tables/border_style.rb +0 -43
  59. data/spec/printing/tables/cell_builer_spec.rb +0 -135
  60. data/spec/printing/tables/row_builder_spec.rb +0 -165
  61. data/spec/printing/tables/style_spec.rb +0 -377
  62. data/spec/printing/tables/table_builder_spec.rb +0 -252
  63. data/spec/printing/tables/table_formatter_spec.rb +0 -1190
  64. data/spec/printing/tables_spec.rb +0 -1069
  65. data/spec/printing_spec.rb +0 -106
  66. data/spec/program_name_spec.rb +0 -70
  67. data/spec/spec_helper.rb +0 -3
  68. data/spec/stdio_spec.rb +0 -264
  69. data/spec/sudo_spec.rb +0 -51
  70. data/spec/terminal_spec.rb +0 -231
  71. data/spec/usage_spec.rb +0 -237
  72. data/spec/xdg_spec.rb +0 -191
@@ -1,1190 +0,0 @@
1
- require 'spec_helper'
2
- require 'command_kit/printing/tables/table_formatter'
3
- require 'command_kit/printing/tables/table_builder'
4
- require 'command_kit/printing/tables/style'
5
-
6
- describe CommandKit::Printing::Tables::TableFormatter do
7
- let(:header) { ['A', 'B', 'C'] }
8
- let(:rows) do
9
- [
10
- ['AAAA', 'BBBB', 'CCCC'],
11
- ['DDDD', 'EEEE', 'FFFF'],
12
- ['GGGG', 'HHHH', 'IIII']
13
- ]
14
- end
15
- let(:multiline_rows) do
16
- [
17
- ["AAAA\nAA", "BBBB", "CCCC"],
18
- ["DDDD", "EEEE\nEE", "FFFF"],
19
- ["GGGG", "HHHH", "IIII\nII"]
20
- ]
21
- end
22
- let(:rows_with_empty_cells) do
23
- [
24
- [nil, 'BBBB', 'CCCC'],
25
- ['DDDD', nil, 'FFFF'],
26
- ['GGGG', 'HHHH', nil ]
27
- ]
28
- end
29
- let(:rows_with_diff_row_lengths) do
30
- [
31
- ['AAAA'],
32
- ['DDDD', 'EEEE'],
33
- ['GGGG', 'HHHH', 'IIII']
34
- ]
35
- end
36
- let(:unjustified_rows) do
37
- [
38
- ['AAAA', 'BBBB', 'CCCC'],
39
- ['DD', 'EE', 'FF' ],
40
- ['G', 'H', 'I' ]
41
- ]
42
- end
43
-
44
- let(:table) { CommandKit::Printing::Tables::TableBuilder.new(rows) }
45
- let(:style) { CommandKit::Printing::Tables::Style.new }
46
-
47
- subject { described_class.new(table,style) }
48
-
49
- describe "#format" do
50
- it "must yield each line of the table with 1 space padding and no borders" do
51
- expect { |b|
52
- subject.format(&b)
53
- }.to yield_successive_args(
54
- " AAAA BBBB CCCC ",
55
- " DDDD EEEE FFFF ",
56
- " GGGG HHHH IIII "
57
- )
58
- end
59
-
60
- it "must encode the Strings as UTF-8" do
61
- yielded_lines = []
62
-
63
- subject.format do |line|
64
- yielded_lines << line
65
- end
66
-
67
- expect(yielded_lines.map(&:encoding)).to all(be(Encoding::UTF_8))
68
- end
69
-
70
- context "but when the table contains multi-line cells" do
71
- let(:rows) { multiline_rows }
72
-
73
- it "must yield each line of each row" do
74
- expect { |b|
75
- subject.format(&b)
76
- }.to yield_successive_args(
77
- " AAAA BBBB CCCC ",
78
- " AA ",
79
- " DDDD EEEE FFFF ",
80
- " EE ",
81
- " GGGG HHHH IIII ",
82
- " II "
83
- )
84
- end
85
- end
86
-
87
- context "but when the table contains empty cells" do
88
- let(:rows) { rows_with_empty_cells }
89
-
90
- it "must replace the empty cells with spaces" do
91
- expect { |b|
92
- subject.format(&b)
93
- }.to yield_successive_args(
94
- " BBBB CCCC ",
95
- " DDDD FFFF ",
96
- " GGGG HHHH "
97
- )
98
- end
99
- end
100
-
101
- context "but when the table contains empty cells" do
102
- let(:rows) { rows_with_diff_row_lengths }
103
-
104
- it "must pad the columns with empty cells" do
105
- expect { |b|
106
- subject.format(&b)
107
- }.to yield_successive_args(
108
- " AAAA ",
109
- " DDDD EEEE ",
110
- " GGGG HHHH IIII "
111
- )
112
- end
113
- end
114
-
115
- context "when the #style.separate_rows? is true" do
116
- let(:style) do
117
- CommandKit::Printing::Tables::Style.new(separate_rows: true)
118
- end
119
-
120
- it "must yield the rows with blank lines between each row" do
121
- expect { |b|
122
- subject.format(&b)
123
- }.to yield_successive_args(
124
- " AAAA BBBB CCCC ",
125
- "",
126
- " DDDD EEEE FFFF ",
127
- "",
128
- " GGGG HHHH IIII "
129
- )
130
- end
131
- end
132
-
133
- context "and when #style.justify is :left" do
134
- let(:rows) { unjustified_rows }
135
- let(:style) do
136
- CommandKit::Printing::Tables::Style.new(justify: :left)
137
- end
138
-
139
- it "must left justify each cell" do
140
- expect { |b|
141
- subject.format(&b)
142
- }.to yield_successive_args(
143
- " AAAA BBBB CCCC ",
144
- " DD EE FF ",
145
- " G H I "
146
- )
147
- end
148
- end
149
-
150
- context "and when #style.justify is :right" do
151
- let(:rows) { unjustified_rows }
152
- let(:style) do
153
- CommandKit::Printing::Tables::Style.new(justify: :right)
154
- end
155
-
156
- it "must right justify each cell" do
157
- expect { |b|
158
- subject.format(&b)
159
- }.to yield_successive_args(
160
- " AAAA BBBB CCCC ",
161
- " DD EE FF ",
162
- " G H I "
163
- )
164
- end
165
- end
166
-
167
- context "and when #style.justify is :center" do
168
- let(:rows) { unjustified_rows }
169
- let(:style) do
170
- CommandKit::Printing::Tables::Style.new(justify: :center)
171
- end
172
-
173
- it "must center justify each cell" do
174
- expect { |b|
175
- subject.format(&b)
176
- }.to yield_successive_args(
177
- " AAAA BBBB CCCC ",
178
- " DD EE FF ",
179
- " G H I "
180
- )
181
- end
182
- end
183
-
184
- context "and when #table.header? is true" do
185
- let(:table) do
186
- CommandKit::Printing::Tables::TableBuilder.new(rows, header: header)
187
- end
188
-
189
- it "must yield the center justified header row, then a blank line, then the rest of the rows" do
190
- expect { |b|
191
- subject.format(&b)
192
- }.to yield_successive_args(
193
- " A B C ",
194
- "",
195
- " AAAA BBBB CCCC ",
196
- " DDDD EEEE FFFF ",
197
- " GGGG HHHH IIII "
198
- )
199
- end
200
-
201
- context "and #style.separate_rows? is true" do
202
- let(:style) do
203
- CommandKit::Printing::Tables::Style.new(separate_rows: true)
204
- end
205
-
206
- it "must yield the header, a blank line, then the rows with blaink lines between each row" do
207
- expect { |b|
208
- subject.format(&b)
209
- }.to yield_successive_args(
210
- " A B C ",
211
- "",
212
- " AAAA BBBB CCCC ",
213
- "",
214
- " DDDD EEEE FFFF ",
215
- "",
216
- " GGGG HHHH IIII "
217
- )
218
- end
219
- end
220
-
221
- context "and when #style.justify_header is :left" do
222
- let(:style) do
223
- CommandKit::Printing::Tables::Style.new(justify_header: :left)
224
- end
225
-
226
- it "must left justify the header cells" do
227
- expect { |b|
228
- subject.format(&b)
229
- }.to yield_successive_args(
230
- " A B C ",
231
- "",
232
- " AAAA BBBB CCCC ",
233
- " DDDD EEEE FFFF ",
234
- " GGGG HHHH IIII "
235
- )
236
- end
237
- end
238
-
239
- context "and when #style.justify_header is :right" do
240
- let(:style) do
241
- CommandKit::Printing::Tables::Style.new(justify_header: :right)
242
- end
243
-
244
- it "must right justify the header cells" do
245
- expect { |b|
246
- subject.format(&b)
247
- }.to yield_successive_args(
248
- " A B C ",
249
- "",
250
- " AAAA BBBB CCCC ",
251
- " DDDD EEEE FFFF ",
252
- " GGGG HHHH IIII "
253
- )
254
- end
255
- end
256
-
257
- context "and when #style.justify_header is :center" do
258
- let(:style) do
259
- CommandKit::Printing::Tables::Style.new(justify_header: :center)
260
- end
261
-
262
- it "must center justify the header cells" do
263
- expect { |b|
264
- subject.format(&b)
265
- }.to yield_successive_args(
266
- " A B C ",
267
- "",
268
- " AAAA BBBB CCCC ",
269
- " DDDD EEEE FFFF ",
270
- " GGGG HHHH IIII "
271
- )
272
- end
273
- end
274
-
275
- context "and when #style.justify is :left" do
276
- let(:rows) { unjustified_rows }
277
- let(:style) do
278
- CommandKit::Printing::Tables::Style.new(justify: :left)
279
- end
280
-
281
- it "must left justify each cell" do
282
- expect { |b|
283
- subject.format(&b)
284
- }.to yield_successive_args(
285
- " A B C ",
286
- "",
287
- " AAAA BBBB CCCC ",
288
- " DD EE FF ",
289
- " G H I "
290
- )
291
- end
292
- end
293
-
294
- context "and when #style.justify is :right" do
295
- let(:rows) { unjustified_rows }
296
- let(:style) do
297
- CommandKit::Printing::Tables::Style.new(justify: :right)
298
- end
299
-
300
- it "must right justify each cell" do
301
- expect { |b|
302
- subject.format(&b)
303
- }.to yield_successive_args(
304
- " A B C ",
305
- "",
306
- " AAAA BBBB CCCC ",
307
- " DD EE FF ",
308
- " G H I "
309
- )
310
- end
311
- end
312
-
313
- context "and when #style.justify is :center" do
314
- let(:rows) { unjustified_rows }
315
- let(:style) do
316
- CommandKit::Printing::Tables::Style.new(justify: :center)
317
- end
318
-
319
- it "must center justify each cell" do
320
- expect { |b|
321
- subject.format(&b)
322
- }.to yield_successive_args(
323
- " A B C ",
324
- "",
325
- " AAAA BBBB CCCC ",
326
- " DD EE FF ",
327
- " G H I "
328
- )
329
- end
330
- end
331
- end
332
-
333
- context "when #style.border is :ascii" do
334
- let(:style) do
335
- CommandKit::Printing::Tables::Style.new(border: :ascii)
336
- end
337
-
338
- it "must yield each row with an ASCII border" do
339
- expect { |b|
340
- subject.format(&b)
341
- }.to yield_successive_args(
342
- "+------+------+------+",
343
- "| AAAA | BBBB | CCCC |",
344
- "| DDDD | EEEE | FFFF |",
345
- "| GGGG | HHHH | IIII |",
346
- "+------+------+------+"
347
- )
348
- end
349
-
350
- context "but when the table contains multi-line cells" do
351
- let(:rows) { multiline_rows }
352
-
353
- it "must yield each line of each row" do
354
- expect { |b|
355
- subject.format(&b)
356
- }.to yield_successive_args(
357
- "+------+------+------+",
358
- "| AAAA | BBBB | CCCC |",
359
- "| AA | | |",
360
- "| DDDD | EEEE | FFFF |",
361
- "| | EE | |",
362
- "| GGGG | HHHH | IIII |",
363
- "| | | II |",
364
- "+------+------+------+"
365
- )
366
- end
367
- end
368
-
369
- context "but when the table contains empty cells" do
370
- let(:rows) { rows_with_empty_cells }
371
-
372
- it "must replace the empty cells with spaces" do
373
- expect { |b|
374
- subject.format(&b)
375
- }.to yield_successive_args(
376
- "+------+------+------+",
377
- "| | BBBB | CCCC |",
378
- "| DDDD | | FFFF |",
379
- "| GGGG | HHHH | |",
380
- "+------+------+------+"
381
- )
382
- end
383
- end
384
-
385
- context "but when the table contains empty cells" do
386
- let(:rows) { rows_with_diff_row_lengths }
387
-
388
- it "must pad the columns with empty cells" do
389
- expect { |b|
390
- subject.format(&b)
391
- }.to yield_successive_args(
392
- "+------+------+------+",
393
- "| AAAA | | |",
394
- "| DDDD | EEEE | |",
395
- "| GGGG | HHHH | IIII |",
396
- "+------+------+------+"
397
- )
398
- end
399
- end
400
-
401
- context "and when #style.separate_rows is true" do
402
- let(:style) do
403
- CommandKit::Printing::Tables::Style.new(
404
- border: :ascii,
405
- separate_rows: true
406
- )
407
- end
408
-
409
- it "must yield each row with a separator line between each row" do
410
- expect { |b|
411
- subject.format(&b)
412
- }.to yield_successive_args(
413
- "+------+------+------+",
414
- "| AAAA | BBBB | CCCC |",
415
- "+------+------+------+",
416
- "| DDDD | EEEE | FFFF |",
417
- "+------+------+------+",
418
- "| GGGG | HHHH | IIII |",
419
- "+------+------+------+"
420
- )
421
- end
422
- end
423
-
424
- context "and when #style.justify is :left" do
425
- let(:rows) { unjustified_rows }
426
-
427
- let(:style) do
428
- CommandKit::Printing::Tables::Style.new(
429
- border: :ascii,
430
- justify: :left
431
- )
432
- end
433
-
434
- it "must left justify each cell" do
435
- expect { |b|
436
- subject.format(&b)
437
- }.to yield_successive_args(
438
- "+------+------+------+",
439
- "| AAAA | BBBB | CCCC |",
440
- "| DD | EE | FF |",
441
- "| G | H | I |",
442
- "+------+------+------+"
443
- )
444
- end
445
- end
446
-
447
- context "and when #style.justify is :right" do
448
- let(:rows) { unjustified_rows }
449
-
450
- let(:style) do
451
- CommandKit::Printing::Tables::Style.new(
452
- border: :ascii,
453
- justify: :right
454
- )
455
- end
456
-
457
- it "must right justify each cell" do
458
- expect { |b|
459
- subject.format(&b)
460
- }.to yield_successive_args(
461
- "+------+------+------+",
462
- "| AAAA | BBBB | CCCC |",
463
- "| DD | EE | FF |",
464
- "| G | H | I |",
465
- "+------+------+------+"
466
- )
467
- end
468
- end
469
-
470
- context "and when #style.justify is :center" do
471
- let(:rows) { unjustified_rows }
472
-
473
- let(:style) do
474
- CommandKit::Printing::Tables::Style.new(
475
- border: :ascii,
476
- justify: :center
477
- )
478
- end
479
-
480
- it "must center justify each cell" do
481
- expect { |b|
482
- subject.format(&b)
483
- }.to yield_successive_args(
484
- "+------+------+------+",
485
- "| AAAA | BBBB | CCCC |",
486
- "| DD | EE | FF |",
487
- "| G | H | I |",
488
- "+------+------+------+"
489
- )
490
- end
491
- end
492
-
493
- context "and when #table.header? is true" do
494
- let(:table) do
495
- CommandKit::Printing::Tables::TableBuilder.new(rows, header: header)
496
- end
497
-
498
- it "must yield the center justified header row, then a separator line, then the table" do
499
- expect { |b|
500
- subject.format(&b)
501
- }.to yield_successive_args(
502
- "+------+------+------+",
503
- "| A | B | C |",
504
- "+------+------+------+",
505
- "| AAAA | BBBB | CCCC |",
506
- "| DDDD | EEEE | FFFF |",
507
- "| GGGG | HHHH | IIII |",
508
- "+------+------+------+"
509
- )
510
- end
511
-
512
- context "and when #style.separate_rows? is true" do
513
- let(:style) do
514
- CommandKit::Printing::Tables::Style.new(
515
- border: :ascii,
516
- separate_rows: true
517
- )
518
- end
519
-
520
- it "must yield the header and rows with separator lines between each row" do
521
- expect { |b|
522
- subject.format(&b)
523
- }.to yield_successive_args(
524
- "+------+------+------+",
525
- "| A | B | C |",
526
- "+------+------+------+",
527
- "| AAAA | BBBB | CCCC |",
528
- "+------+------+------+",
529
- "| DDDD | EEEE | FFFF |",
530
- "+------+------+------+",
531
- "| GGGG | HHHH | IIII |",
532
- "+------+------+------+"
533
- )
534
- end
535
- end
536
-
537
- context "and when #style.justify_header is :left" do
538
- let(:style) do
539
- CommandKit::Printing::Tables::Style.new(
540
- border: :ascii,
541
- justify_header: :left
542
- )
543
- end
544
-
545
- it "must left justify the header cells" do
546
- expect { |b|
547
- subject.format(&b)
548
- }.to yield_successive_args(
549
- "+------+------+------+",
550
- "| A | B | C |",
551
- "+------+------+------+",
552
- "| AAAA | BBBB | CCCC |",
553
- "| DDDD | EEEE | FFFF |",
554
- "| GGGG | HHHH | IIII |",
555
- "+------+------+------+"
556
- )
557
- end
558
- end
559
-
560
- context "and when #style.justify_header is :right" do
561
- let(:style) do
562
- CommandKit::Printing::Tables::Style.new(
563
- border: :ascii,
564
- justify_header: :right
565
- )
566
- end
567
-
568
- it "must right justify the header cells" do
569
- expect { |b|
570
- subject.format(&b)
571
- }.to yield_successive_args(
572
- "+------+------+------+",
573
- "| A | B | C |",
574
- "+------+------+------+",
575
- "| AAAA | BBBB | CCCC |",
576
- "| DDDD | EEEE | FFFF |",
577
- "| GGGG | HHHH | IIII |",
578
- "+------+------+------+"
579
- )
580
- end
581
- end
582
-
583
- context "and when #style.justify_header is :center" do
584
- let(:style) do
585
- CommandKit::Printing::Tables::Style.new(
586
- border: :ascii,
587
- justify_header: :center
588
- )
589
- end
590
-
591
- it "must center justify the header cells" do
592
- expect { |b|
593
- subject.format(&b)
594
- }.to yield_successive_args(
595
- "+------+------+------+",
596
- "| A | B | C |",
597
- "+------+------+------+",
598
- "| AAAA | BBBB | CCCC |",
599
- "| DDDD | EEEE | FFFF |",
600
- "| GGGG | HHHH | IIII |",
601
- "+------+------+------+"
602
- )
603
- end
604
- end
605
- end
606
- end
607
-
608
- context "when #style.border is :line" do
609
- let(:style) do
610
- CommandKit::Printing::Tables::Style.new(border: :line)
611
- end
612
-
613
- it "must yield the table with an ANSI line border" do
614
- expect { |b|
615
- subject.format(&b)
616
- }.to yield_successive_args(
617
- "┌──────┬──────┬──────┐",
618
- "│ AAAA │ BBBB │ CCCC │",
619
- "│ DDDD │ EEEE │ FFFF │",
620
- "│ GGGG │ HHHH │ IIII │",
621
- "└──────┴──────┴──────┘"
622
- )
623
- end
624
-
625
- context "but when the table contains multi-line cells" do
626
- let(:rows) { multiline_rows }
627
-
628
- it "must yield each line of each row" do
629
- expect { |b|
630
- subject.format(&b)
631
- }.to yield_successive_args(
632
- "┌──────┬──────┬──────┐",
633
- "│ AAAA │ BBBB │ CCCC │",
634
- "│ AA │ │ │",
635
- "│ DDDD │ EEEE │ FFFF │",
636
- "│ │ EE │ │",
637
- "│ GGGG │ HHHH │ IIII │",
638
- "│ │ │ II │",
639
- "└──────┴──────┴──────┘"
640
- )
641
- end
642
- end
643
-
644
- context "but when the table contains empty cells" do
645
- let(:rows) { rows_with_empty_cells }
646
-
647
- it "must replace the empty cells with spaces" do
648
- expect { |b|
649
- subject.format(&b)
650
- }.to yield_successive_args(
651
- "┌──────┬──────┬──────┐",
652
- "│ │ BBBB │ CCCC │",
653
- "│ DDDD │ │ FFFF │",
654
- "│ GGGG │ HHHH │ │",
655
- "└──────┴──────┴──────┘"
656
- )
657
- end
658
- end
659
-
660
- context "but when the table contains empty cells" do
661
- let(:rows) { rows_with_diff_row_lengths }
662
-
663
- it "must pad the columns with empty cells" do
664
- expect { |b|
665
- subject.format(&b)
666
- }.to yield_successive_args(
667
- "┌──────┬──────┬──────┐",
668
- "│ AAAA │ │ │",
669
- "│ DDDD │ EEEE │ │",
670
- "│ GGGG │ HHHH │ IIII │",
671
- "└──────┴──────┴──────┘"
672
- )
673
- end
674
- end
675
-
676
- context "and when #style.separate_rows is true" do
677
- let(:style) do
678
- CommandKit::Printing::Tables::Style.new(
679
- border: :line,
680
- separate_rows: true
681
- )
682
- end
683
-
684
- it "must yield each row with separator lines between each row" do
685
- expect { |b|
686
- subject.format(&b)
687
- }.to yield_successive_args(
688
- "┌──────┬──────┬──────┐",
689
- "│ AAAA │ BBBB │ CCCC │",
690
- "├──────┼──────┼──────┤",
691
- "│ DDDD │ EEEE │ FFFF │",
692
- "├──────┼──────┼──────┤",
693
- "│ GGGG │ HHHH │ IIII │",
694
- "└──────┴──────┴──────┘"
695
- )
696
- end
697
- end
698
-
699
- context "and when #style.justify is :left" do
700
- let(:rows) { unjustified_rows }
701
-
702
- let(:style) do
703
- CommandKit::Printing::Tables::Style.new(
704
- border: :line,
705
- justify: :left
706
- )
707
- end
708
-
709
- it "must left justify each cell" do
710
- expect { |b|
711
- subject.format(&b)
712
- }.to yield_successive_args(
713
- "┌──────┬──────┬──────┐",
714
- "│ AAAA │ BBBB │ CCCC │",
715
- "│ DD │ EE │ FF │",
716
- "│ G │ H │ I │",
717
- "└──────┴──────┴──────┘"
718
- )
719
- end
720
- end
721
-
722
- context "and when #style.justify is :right" do
723
- let(:rows) { unjustified_rows }
724
-
725
- let(:style) do
726
- CommandKit::Printing::Tables::Style.new(
727
- border: :line,
728
- justify: :right
729
- )
730
- end
731
-
732
- it "must right justify each cell" do
733
- expect { |b|
734
- subject.format(&b)
735
- }.to yield_successive_args(
736
- "┌──────┬──────┬──────┐",
737
- "│ AAAA │ BBBB │ CCCC │",
738
- "│ DD │ EE │ FF │",
739
- "│ G │ H │ I │",
740
- "└──────┴──────┴──────┘"
741
- )
742
- end
743
- end
744
-
745
- context "and when #style.justify is :center" do
746
- let(:rows) { unjustified_rows }
747
-
748
- let(:style) do
749
- CommandKit::Printing::Tables::Style.new(
750
- border: :line,
751
- justify: :center
752
- )
753
- end
754
-
755
- it "must center justify each cell" do
756
- expect { |b|
757
- subject.format(&b)
758
- }.to yield_successive_args(
759
- "┌──────┬──────┬──────┐",
760
- "│ AAAA │ BBBB │ CCCC │",
761
- "│ DD │ EE │ FF │",
762
- "│ G │ H │ I │",
763
- "└──────┴──────┴──────┘"
764
- )
765
- end
766
- end
767
-
768
- context "and when #style.header is true" do
769
- let(:table) do
770
- CommandKit::Printing::Tables::TableBuilder.new(rows, header: header)
771
- end
772
-
773
- it "must yield the center justified header row, then a separator line, then the rows" do
774
- expect { |b|
775
- subject.format(&b)
776
- }.to yield_successive_args(
777
- "┌──────┬──────┬──────┐",
778
- "│ A │ B │ C │",
779
- "├──────┼──────┼──────┤",
780
- "│ AAAA │ BBBB │ CCCC │",
781
- "│ DDDD │ EEEE │ FFFF │",
782
- "│ GGGG │ HHHH │ IIII │",
783
- "└──────┴──────┴──────┘"
784
- )
785
- end
786
-
787
- context "and when #style.separate_rows is true" do
788
- let(:style) do
789
- CommandKit::Printing::Tables::Style.new(
790
- border: :line,
791
- separate_rows: true
792
- )
793
- end
794
-
795
- it "must yield the header and each row with a separator line between each row" do
796
- expect { |b|
797
- subject.format(&b)
798
- }.to yield_successive_args(
799
- "┌──────┬──────┬──────┐",
800
- "│ A │ B │ C │",
801
- "├──────┼──────┼──────┤",
802
- "│ AAAA │ BBBB │ CCCC │",
803
- "├──────┼──────┼──────┤",
804
- "│ DDDD │ EEEE │ FFFF │",
805
- "├──────┼──────┼──────┤",
806
- "│ GGGG │ HHHH │ IIII │",
807
- "└──────┴──────┴──────┘"
808
- )
809
- end
810
- end
811
-
812
- context "and when #style.justify_header is :left" do
813
- let(:style) do
814
- CommandKit::Printing::Tables::Style.new(
815
- border: :line,
816
- justify_header: :left
817
- )
818
- end
819
-
820
- it "must left justify the header cells" do
821
- expect { |b|
822
- subject.format(&b)
823
- }.to yield_successive_args(
824
- "┌──────┬──────┬──────┐",
825
- "│ A │ B │ C │",
826
- "├──────┼──────┼──────┤",
827
- "│ AAAA │ BBBB │ CCCC │",
828
- "│ DDDD │ EEEE │ FFFF │",
829
- "│ GGGG │ HHHH │ IIII │",
830
- "└──────┴──────┴──────┘"
831
- )
832
- end
833
- end
834
-
835
- context "and when #style.justify_header is :right" do
836
- let(:style) do
837
- CommandKit::Printing::Tables::Style.new(
838
- border: :line,
839
- justify_header: :right
840
- )
841
- end
842
-
843
- it "must right justify the header cells" do
844
- expect { |b|
845
- subject.format(&b)
846
- }.to yield_successive_args(
847
- "┌──────┬──────┬──────┐",
848
- "│ A │ B │ C │",
849
- "├──────┼──────┼──────┤",
850
- "│ AAAA │ BBBB │ CCCC │",
851
- "│ DDDD │ EEEE │ FFFF │",
852
- "│ GGGG │ HHHH │ IIII │",
853
- "└──────┴──────┴──────┘"
854
- )
855
- end
856
- end
857
-
858
- context "and when #style.justify_header is :center" do
859
- let(:style) do
860
- CommandKit::Printing::Tables::Style.new(
861
- border: :line,
862
- justify_header: :center
863
- )
864
- end
865
-
866
- it "must center justify the header cells" do
867
- expect { |b|
868
- subject.format(&b)
869
- }.to yield_successive_args(
870
- "┌──────┬──────┬──────┐",
871
- "│ A │ B │ C │",
872
- "├──────┼──────┼──────┤",
873
- "│ AAAA │ BBBB │ CCCC │",
874
- "│ DDDD │ EEEE │ FFFF │",
875
- "│ GGGG │ HHHH │ IIII │",
876
- "└──────┴──────┴──────┘"
877
- )
878
- end
879
- end
880
- end
881
- end
882
-
883
- context "when #style.border is :double_line" do
884
- let(:style) do
885
- CommandKit::Printing::Tables::Style.new(border: :double_line)
886
- end
887
-
888
- it "must yield the table with an ANSI double-line border" do
889
- expect { |b|
890
- subject.format(&b)
891
- }.to yield_successive_args(
892
- "╔══════╦══════╦══════╗",
893
- "║ AAAA ║ BBBB ║ CCCC ║",
894
- "║ DDDD ║ EEEE ║ FFFF ║",
895
- "║ GGGG ║ HHHH ║ IIII ║",
896
- "╚══════╩══════╩══════╝"
897
- )
898
- end
899
-
900
- context "but when the table contains multi-line cells" do
901
- let(:rows) { multiline_rows }
902
-
903
- it "must yield each line of each row" do
904
- expect { |b|
905
- subject.format(&b)
906
- }.to yield_successive_args(
907
- "╔══════╦══════╦══════╗",
908
- "║ AAAA ║ BBBB ║ CCCC ║",
909
- "║ AA ║ ║ ║",
910
- "║ DDDD ║ EEEE ║ FFFF ║",
911
- "║ ║ EE ║ ║",
912
- "║ GGGG ║ HHHH ║ IIII ║",
913
- "║ ║ ║ II ║",
914
- "╚══════╩══════╩══════╝"
915
- )
916
- end
917
- end
918
-
919
- context "but when the table contains empty cells" do
920
- let(:rows) { rows_with_empty_cells }
921
-
922
- it "must replace the empty cells with spaces" do
923
- expect { |b|
924
- subject.format(&b)
925
- }.to yield_successive_args(
926
- "╔══════╦══════╦══════╗",
927
- "║ ║ BBBB ║ CCCC ║",
928
- "║ DDDD ║ ║ FFFF ║",
929
- "║ GGGG ║ HHHH ║ ║",
930
- "╚══════╩══════╩══════╝"
931
- )
932
- end
933
- end
934
-
935
- context "but when the table contains empty cells" do
936
- let(:rows) { rows_with_diff_row_lengths }
937
-
938
- it "must pad the columns with empty cells" do
939
- expect { |b|
940
- subject.format(&b)
941
- }.to yield_successive_args(
942
- "╔══════╦══════╦══════╗",
943
- "║ AAAA ║ ║ ║",
944
- "║ DDDD ║ EEEE ║ ║",
945
- "║ GGGG ║ HHHH ║ IIII ║",
946
- "╚══════╩══════╩══════╝"
947
- )
948
- end
949
- end
950
-
951
- context "and when #style.separate_rows is true" do
952
- let(:style) do
953
- CommandKit::Printing::Tables::Style.new(
954
- border: :double_line,
955
- separate_rows: true
956
- )
957
- end
958
-
959
- it "must yield each row with separator lines between each row" do
960
- expect { |b|
961
- subject.format(&b)
962
- }.to yield_successive_args(
963
- "╔══════╦══════╦══════╗",
964
- "║ AAAA ║ BBBB ║ CCCC ║",
965
- "╠══════╬══════╬══════╣",
966
- "║ DDDD ║ EEEE ║ FFFF ║",
967
- "╠══════╬══════╬══════╣",
968
- "║ GGGG ║ HHHH ║ IIII ║",
969
- "╚══════╩══════╩══════╝"
970
- )
971
- end
972
- end
973
-
974
- context "and when #style.justify is :left" do
975
- let(:rows) { unjustified_rows }
976
-
977
- let(:style) do
978
- CommandKit::Printing::Tables::Style.new(
979
- border: :double_line,
980
- justify: :left
981
- )
982
- end
983
-
984
- it "must left justify each cell" do
985
- expect { |b|
986
- subject.format(&b)
987
- }.to yield_successive_args(
988
- "╔══════╦══════╦══════╗",
989
- "║ AAAA ║ BBBB ║ CCCC ║",
990
- "║ DD ║ EE ║ FF ║",
991
- "║ G ║ H ║ I ║",
992
- "╚══════╩══════╩══════╝"
993
- )
994
- end
995
- end
996
-
997
- context "and when #style.justify is :right" do
998
- let(:rows) { unjustified_rows }
999
-
1000
- let(:style) do
1001
- CommandKit::Printing::Tables::Style.new(
1002
- border: :double_line,
1003
- justify: :right
1004
- )
1005
- end
1006
-
1007
- it "must right justify each cell" do
1008
- expect { |b|
1009
- subject.format(&b)
1010
- }.to yield_successive_args(
1011
- "╔══════╦══════╦══════╗",
1012
- "║ AAAA ║ BBBB ║ CCCC ║",
1013
- "║ DD ║ EE ║ FF ║",
1014
- "║ G ║ H ║ I ║",
1015
- "╚══════╩══════╩══════╝"
1016
- )
1017
- end
1018
- end
1019
-
1020
- context "and when #style.justify is :center" do
1021
- let(:rows) { unjustified_rows }
1022
-
1023
- let(:style) do
1024
- CommandKit::Printing::Tables::Style.new(
1025
- border: :double_line,
1026
- justify: :center
1027
- )
1028
- end
1029
-
1030
- it "must center justify each cell" do
1031
- expect { |b|
1032
- subject.format(&b)
1033
- }.to yield_successive_args(
1034
- "╔══════╦══════╦══════╗",
1035
- "║ AAAA ║ BBBB ║ CCCC ║",
1036
- "║ DD ║ EE ║ FF ║",
1037
- "║ G ║ H ║ I ║",
1038
- "╚══════╩══════╩══════╝"
1039
- )
1040
- end
1041
- end
1042
-
1043
- context "and when #table.header? is true" do
1044
- let(:table) do
1045
- CommandKit::Printing::Tables::TableBuilder.new(rows, header: header)
1046
- end
1047
-
1048
- it "must yield the center justified header row, then a separator line, then each row" do
1049
- expect { |b|
1050
- subject.format(&b)
1051
- }.to yield_successive_args(
1052
- "╔══════╦══════╦══════╗",
1053
- "║ A ║ B ║ C ║",
1054
- "╠══════╬══════╬══════╣",
1055
- "║ AAAA ║ BBBB ║ CCCC ║",
1056
- "║ DDDD ║ EEEE ║ FFFF ║",
1057
- "║ GGGG ║ HHHH ║ IIII ║",
1058
- "╚══════╩══════╩══════╝"
1059
- )
1060
- end
1061
-
1062
- context "and when #style.separate_rows? is true" do
1063
- let(:style) do
1064
- CommandKit::Printing::Tables::Style.new(
1065
- border: :double_line,
1066
- separate_rows: true
1067
- )
1068
- end
1069
-
1070
- it "must yield the header and each row with separator lines between them" do
1071
- expect { |b|
1072
- subject.format(&b)
1073
- }.to yield_successive_args(
1074
- "╔══════╦══════╦══════╗",
1075
- "║ A ║ B ║ C ║",
1076
- "╠══════╬══════╬══════╣",
1077
- "║ AAAA ║ BBBB ║ CCCC ║",
1078
- "╠══════╬══════╬══════╣",
1079
- "║ DDDD ║ EEEE ║ FFFF ║",
1080
- "╠══════╬══════╬══════╣",
1081
- "║ GGGG ║ HHHH ║ IIII ║",
1082
- "╚══════╩══════╩══════╝"
1083
- )
1084
- end
1085
- end
1086
-
1087
- context "and when #style.justify_header is :left" do
1088
- let(:style) do
1089
- CommandKit::Printing::Tables::Style.new(
1090
- border: :double_line,
1091
- justify_header: :left
1092
- )
1093
- end
1094
-
1095
- it "must left justify the header cells" do
1096
- expect { |b|
1097
- subject.format(&b)
1098
- }.to yield_successive_args(
1099
- "╔══════╦══════╦══════╗",
1100
- "║ A ║ B ║ C ║",
1101
- "╠══════╬══════╬══════╣",
1102
- "║ AAAA ║ BBBB ║ CCCC ║",
1103
- "║ DDDD ║ EEEE ║ FFFF ║",
1104
- "║ GGGG ║ HHHH ║ IIII ║",
1105
- "╚══════╩══════╩══════╝"
1106
- )
1107
- end
1108
- end
1109
-
1110
- context "and when #style.justify_header is :right" do
1111
- let(:style) do
1112
- CommandKit::Printing::Tables::Style.new(
1113
- border: :double_line,
1114
- justify_header: :right
1115
- )
1116
- end
1117
-
1118
- it "must right justify the header cells" do
1119
- expect { |b|
1120
- subject.format(&b)
1121
- }.to yield_successive_args(
1122
- "╔══════╦══════╦══════╗",
1123
- "║ A ║ B ║ C ║",
1124
- "╠══════╬══════╬══════╣",
1125
- "║ AAAA ║ BBBB ║ CCCC ║",
1126
- "║ DDDD ║ EEEE ║ FFFF ║",
1127
- "║ GGGG ║ HHHH ║ IIII ║",
1128
- "╚══════╩══════╩══════╝"
1129
- )
1130
- end
1131
- end
1132
-
1133
- context "and when #style.justify_header is :center" do
1134
- let(:style) do
1135
- CommandKit::Printing::Tables::Style.new(
1136
- border: :double_line,
1137
- justify_header: :center
1138
- )
1139
- end
1140
-
1141
- it "must center justify the header cells" do
1142
- expect { |b|
1143
- subject.format(&b)
1144
- }.to yield_successive_args(
1145
- "╔══════╦══════╦══════╗",
1146
- "║ A ║ B ║ C ║",
1147
- "╠══════╬══════╬══════╣",
1148
- "║ AAAA ║ BBBB ║ CCCC ║",
1149
- "║ DDDD ║ EEEE ║ FFFF ║",
1150
- "║ GGGG ║ HHHH ║ IIII ║",
1151
- "╚══════╩══════╩══════╝"
1152
- )
1153
- end
1154
- end
1155
- end
1156
- end
1157
-
1158
- context "when given an invalid justify_header: value" do
1159
- let(:justify) { :foo }
1160
-
1161
- let(:table) do
1162
- CommandKit::Printing::Tables::TableBuilder.new(rows, header: header)
1163
- end
1164
-
1165
- let(:style) do
1166
- CommandKit::Printing::Tables::Style.new(justify_header: justify)
1167
- end
1168
-
1169
- it do
1170
- expect { |b|
1171
- subject.format(&b)
1172
- }.to raise_error(ArgumentError,"invalid justify value (#{justify.inspect}), must be :left, :right, or :center")
1173
- end
1174
- end
1175
-
1176
- context "when given an invalid justify: value" do
1177
- let(:justify) { :foo }
1178
-
1179
- let(:style) do
1180
- CommandKit::Printing::Tables::Style.new(justify: justify)
1181
- end
1182
-
1183
- it do
1184
- expect { |b|
1185
- subject.format(&b)
1186
- }.to raise_error(ArgumentError,"invalid justify value (#{justify.inspect}), must be :left, :right, or :center")
1187
- end
1188
- end
1189
- end
1190
- end