ggem 1.8.3 → 1.9.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,15 +1,14 @@
1
- require 'assert'
2
- require 'ggem/cli'
1
+ require "assert"
2
+ require "ggem/cli"
3
3
 
4
- require 'ggem/cli/clirb'
5
- require 'ggem/cli/commands'
6
- require 'ggem/gem'
7
- require 'ggem/gemspec'
8
- require 'ggem/git_repo'
9
- require 'much-plugin'
4
+ require "ggem/cli/clirb"
5
+ require "ggem/cli/commands"
6
+ require "ggem/gem"
7
+ require "ggem/gemspec"
8
+ require "ggem/git_repo"
9
+ require "much-plugin"
10
10
 
11
11
  class GGem::CLI
12
-
13
12
  class UnitTests < Assert::Context
14
13
  desc "GGem::CLI"
15
14
  setup do
@@ -33,21 +32,20 @@ class GGem::CLI
33
32
 
34
33
  assert_instance_of InvalidCommand, COMMANDS[Factory.string]
35
34
 
36
- assert_instance_of GenerateCommand, COMMANDS['generate']
37
- assert_instance_of BuildCommand, COMMANDS['build']
38
- assert_instance_of InstallCommand, COMMANDS['install']
39
- assert_instance_of PushCommand, COMMANDS['push']
40
- assert_instance_of TagCommand, COMMANDS['tag']
41
- assert_instance_of ReleaseCommand, COMMANDS['release']
35
+ assert_instance_of GenerateCommand, COMMANDS["generate"]
36
+ assert_instance_of BuildCommand, COMMANDS["build"]
37
+ assert_instance_of InstallCommand, COMMANDS["install"]
38
+ assert_instance_of PushCommand, COMMANDS["push"]
39
+ assert_instance_of TagCommand, COMMANDS["tag"]
40
+ assert_instance_of ReleaseCommand, COMMANDS["release"]
42
41
 
43
- assert_same COMMANDS['generate'], COMMANDS['g']
44
- assert_same COMMANDS['build'], COMMANDS['b']
45
- assert_same COMMANDS['install'], COMMANDS['i']
46
- assert_same COMMANDS['push'], COMMANDS['p']
47
- assert_same COMMANDS['tag'], COMMANDS['t']
48
- assert_same COMMANDS['release'], COMMANDS['r']
42
+ assert_same COMMANDS["generate"], COMMANDS["g"]
43
+ assert_same COMMANDS["build"], COMMANDS["b"]
44
+ assert_same COMMANDS["install"], COMMANDS["i"]
45
+ assert_same COMMANDS["push"], COMMANDS["p"]
46
+ assert_same COMMANDS["tag"], COMMANDS["t"]
47
+ assert_same COMMANDS["release"], COMMANDS["r"]
49
48
  end
50
-
51
49
  end
52
50
 
53
51
  class InitTests < UnitTests
@@ -62,7 +60,6 @@ class GGem::CLI
62
60
  subject{ @cli }
63
61
 
64
62
  should have_imeths :run
65
-
66
63
  end
67
64
 
68
65
  class RunSetupTests < InitTests
@@ -71,7 +68,7 @@ class GGem::CLI
71
68
  @argv = [@command_name, Factory.string]
72
69
 
73
70
  @command_class = Class.new
74
- @command_spy = CommandSpy.new
71
+ @command_spy = CommandSpy.new
75
72
  Assert.stub(@command_class, :new){ @command_spy }
76
73
  COMMANDS.add(@command_class, @command_name)
77
74
 
@@ -80,7 +77,6 @@ class GGem::CLI
80
77
  teardown do
81
78
  COMMANDS.remove(@command_name)
82
79
  end
83
-
84
80
  end
85
81
 
86
82
  class RunTests < RunSetupTests
@@ -96,7 +92,6 @@ class GGem::CLI
96
92
  should "have successfully exited" do
97
93
  assert_equal 0, @kernel_spy.exit_status
98
94
  end
99
-
100
95
  end
101
96
 
102
97
  class RunWithNoArgsTests < RunSetupTests
@@ -113,7 +108,6 @@ class GGem::CLI
113
108
  should "have successfully exited" do
114
109
  assert_equal 0, @kernel_spy.exit_status
115
110
  end
116
-
117
111
  end
118
112
 
119
113
  class RunWithInvalidCommandTests < RunSetupTests
@@ -125,7 +119,7 @@ class GGem::CLI
125
119
  end
126
120
 
127
121
  should "output that it is invalid and output the invalid command's help" do
128
- exp = "'#{@name}' is not a command.\n\n"
122
+ exp = "`#{@name}` is not a command.\n\n"
129
123
  assert_equal exp, @stderr.read
130
124
  assert_equal @invalid_command.help, @stdout.read
131
125
  end
@@ -133,7 +127,6 @@ class GGem::CLI
133
127
  should "have unsuccessfully exited" do
134
128
  assert_equal 1, @kernel_spy.exit_status
135
129
  end
136
-
137
130
  end
138
131
 
139
132
  class RunWithCommandExitErrorTests < RunSetupTests
@@ -147,13 +140,12 @@ class GGem::CLI
147
140
  assert_equal 1, @kernel_spy.exit_status
148
141
  assert_empty @stderr.read
149
142
  end
150
-
151
143
  end
152
144
 
153
145
  class RunWithHelpTests < RunSetupTests
154
146
  desc "and run with the help switch"
155
147
  setup do
156
- @cli.run([ '--help' ])
148
+ @cli.run([ "--help" ])
157
149
  end
158
150
 
159
151
  should "output the invalid command's help" do
@@ -164,13 +156,12 @@ class GGem::CLI
164
156
  should "have successfully exited" do
165
157
  assert_equal 0, @kernel_spy.exit_status
166
158
  end
167
-
168
159
  end
169
160
 
170
161
  class RunWithVersionTests < RunSetupTests
171
162
  desc "and run with the version switch"
172
163
  setup do
173
- @cli.run([ '--version' ])
164
+ @cli.run([ "--version" ])
174
165
  end
175
166
 
176
167
  should "have output its version" do
@@ -181,7 +172,6 @@ class GGem::CLI
181
172
  should "have successfully exited" do
182
173
  assert_equal 0, @kernel_spy.exit_status
183
174
  end
184
-
185
175
  end
186
176
 
187
177
  class RunWithErrorTests < RunSetupTests
@@ -201,7 +191,6 @@ class GGem::CLI
201
191
  should "have unsuccessfully exited" do
202
192
  assert_equal 1, @kernel_spy.exit_status
203
193
  end
204
-
205
194
  end
206
195
 
207
196
  class InvalidCommandTests < UnitTests
@@ -226,12 +215,12 @@ class GGem::CLI
226
215
  end
227
216
 
228
217
  should "parse its argv on run" do
229
- assert_raises(CLIRB::HelpExit){ subject.new.run([ '--help' ]) }
230
- assert_raises(CLIRB::VersionExit){ subject.new.run([ '--version' ]) }
218
+ assert_raises(CLIRB::HelpExit){ subject.new.run([ "--help" ]) }
219
+ assert_raises(CLIRB::VersionExit){ subject.new.run([ "--version" ]) }
231
220
  end
232
221
 
233
222
  should "raise a help exit if its name is empty" do
234
- cmd = @command_class.new([nil, ''].sample)
223
+ cmd = @command_class.new([nil, ""].sample)
235
224
  argv = [Factory.string, Factory.string]
236
225
  assert_raises(CLIRB::HelpExit){ cmd.new.run(argv) }
237
226
  end
@@ -247,7 +236,6 @@ class GGem::CLI
247
236
  "#{COMMANDS.to_s.split("\n").map{ |l| " #{l}" }.join("\n")}\n"
248
237
  assert_equal exp, subject.help
249
238
  end
250
-
251
239
  end
252
240
 
253
241
  class IOCommandTests < UnitTests
@@ -256,7 +244,6 @@ class GGem::CLI
256
244
  @stdout, @stderr = IOSpy.new, IOSpy.new
257
245
  end
258
246
  subject{ @cmd }
259
-
260
247
  end
261
248
 
262
249
  class ValidCommandTests < IOCommandTests
@@ -280,22 +267,21 @@ class GGem::CLI
280
267
 
281
268
  should "take custom CLIRB build procs" do
282
269
  cmd = @command_class.new do
283
- option 'test', 'testing', :abbrev => 't'
270
+ option "test", "testing", :abbrev => "t"
284
271
  end
285
- cmd.run(['-t'], @stdout, @stderr)
286
- assert_true cmd.clirb.opts['test']
272
+ cmd.run(["-t"], @stdout, @stderr)
273
+ assert_true cmd.clirb.opts["test"]
287
274
  end
288
275
 
289
276
  should "default its summary" do
290
- assert_equal '', subject.summary
277
+ assert_equal "", subject.summary
291
278
  end
292
-
293
279
  end
294
280
 
295
281
  class GitRepoCommandTests < IOCommandTests
296
282
  desc "GitRepoCommand"
297
283
  setup do
298
- @gem1_root_path = TEST_SUPPORT_PATH.join('gem1')
284
+ @gem1_root_path = TEST_SUPPORT_PATH.join("gem1")
299
285
  Assert.stub(Dir, :pwd){ @gem1_root_path}
300
286
 
301
287
  @command_class = Class.new{ include GitRepoCommand }
@@ -314,7 +300,6 @@ class GGem::CLI
314
300
  @command_class.new
315
301
  assert_equal [Dir.pwd], gitrepo_new_called_with
316
302
  end
317
-
318
303
  end
319
304
 
320
305
  module RootPathTests
@@ -326,7 +311,6 @@ class GGem::CLI
326
311
  Assert.stub(Dir, :pwd){ @root_path }
327
312
  end
328
313
  end
329
-
330
314
  end
331
315
 
332
316
  module GitRepoSpyTests
@@ -339,9 +323,7 @@ class GGem::CLI
339
323
  @repo_spy = nil
340
324
  Assert.stub(GGem::GitRepo, :new){ |*args| @repo_spy = GitRepoSpy.new(*args) }
341
325
  end
342
-
343
326
  end
344
-
345
327
  end
346
328
 
347
329
  class GenerateCommandTests < IOCommandTests
@@ -411,13 +393,12 @@ class GGem::CLI
411
393
  assert_equal exp, err.message
412
394
  assert_not_empty err.backtrace
413
395
  end
414
-
415
396
  end
416
397
 
417
398
  class GemspecCommandTests < IOCommandTests
418
399
  desc "GemspecCommand"
419
400
  setup do
420
- @gem1_root_path = TEST_SUPPORT_PATH.join('gem1')
401
+ @gem1_root_path = TEST_SUPPORT_PATH.join("gem1")
421
402
  Assert.stub(Dir, :pwd){ @gem1_root_path}
422
403
 
423
404
  @command_class = Class.new{ include GemspecCommand }
@@ -449,7 +430,6 @@ class GGem::CLI
449
430
  exp = "There are no gemspecs at #{Dir.pwd}"
450
431
  assert_equal exp, err.message
451
432
  end
452
-
453
433
  end
454
434
 
455
435
  module GemspecSpyTests
@@ -463,7 +443,6 @@ class GGem::CLI
463
443
  Assert.stub(GGem::Gemspec, :new){ |*args| @spec_spy = GemspecSpy.new(*args) }
464
444
  end
465
445
  end
466
-
467
446
  end
468
447
 
469
448
  class BuildCommandTests < IOCommandTests
@@ -494,16 +473,16 @@ class GGem::CLI
494
473
  end
495
474
 
496
475
  should "call the spec's run build cmd when run" do
497
- ENV['DEBUG'] = [nil, '1'].sample
476
+ ENV["DEBUG"] = [nil, "1"].sample
498
477
  subject.run([], @stdout, @stderr)
499
478
 
500
479
  assert_true @spec_spy.run_build_cmd_called
501
480
 
502
- exp = ENV['DEBUG'] == '1' ? "build\nbuild cmd was run\n" : ''
481
+ exp = ENV["DEBUG"] == "1" ? "build\nbuild cmd was run\n" : ""
503
482
  exp += "#{@spec_spy.name} #{@spec_spy.version} built to #{@spec_spy.gem_file}\n"
504
483
  assert_equal exp, @stdout.read
505
484
 
506
- ENV['DEBUG'] = nil
485
+ ENV["DEBUG"] = nil
507
486
  end
508
487
 
509
488
  should "handle cmd errors when run" do
@@ -513,7 +492,6 @@ class GGem::CLI
513
492
  assert_raises(CommandExitError){ subject.run([], @stdout, @stderr) }
514
493
  assert_equal "#{err_msg}\n", @stderr.read
515
494
  end
516
-
517
495
  end
518
496
 
519
497
  class InstallCommandTests < IOCommandTests
@@ -550,18 +528,18 @@ class GGem::CLI
550
528
  end
551
529
 
552
530
  should "run the build command and call the spec's run install cmds when run" do
553
- ENV['DEBUG'] = [nil, '1'].sample
531
+ ENV["DEBUG"] = [nil, "1"].sample
554
532
  subject.run(@argv, @stdout, @stderr)
555
533
 
556
534
  assert_true @build_spy.run_called
557
535
  assert_equal [], @build_spy.argv
558
536
  assert_true @spec_spy.run_install_cmd_called
559
537
 
560
- exp = ENV['DEBUG'] == '1' ? "install\ninstall cmd was run\n" : ''
538
+ exp = ENV["DEBUG"] == "1" ? "install\ninstall cmd was run\n" : ""
561
539
  exp += "#{@spec_spy.name} #{@spec_spy.version} installed to system gems\n"
562
540
  assert_includes exp, @stdout.read
563
541
 
564
- ENV['DEBUG'] = nil
542
+ ENV["DEBUG"] = nil
565
543
  end
566
544
 
567
545
  should "handle cmd errors when run" do
@@ -571,7 +549,6 @@ class GGem::CLI
571
549
  assert_raises(CommandExitError){ subject.run(@argv, @stdout, @stderr) }
572
550
  assert_equal "#{err_msg}\n", @stderr.read
573
551
  end
574
-
575
552
  end
576
553
 
577
554
  class PushCommandTests < IOCommandTests
@@ -608,7 +585,7 @@ class GGem::CLI
608
585
  end
609
586
 
610
587
  should "run the build command and call the spec's run push cmds when run" do
611
- ENV['DEBUG'] = [nil, '1'].sample
588
+ ENV["DEBUG"] = [nil, "1"].sample
612
589
  subject.run(@argv, @stdout, @stderr)
613
590
 
614
591
  assert_true @build_spy.run_called
@@ -616,11 +593,11 @@ class GGem::CLI
616
593
  assert_true @spec_spy.run_push_cmd_called
617
594
 
618
595
  exp = "Pushing #{@spec_spy.gem_file_name} to #{@spec_spy.push_host}...\n"
619
- exp += ENV['DEBUG'] == '1' ? "push\npush cmd was run\n" : ''
596
+ exp += ENV["DEBUG"] == "1" ? "push\npush cmd was run\n" : ""
620
597
  exp += "#{@spec_spy.gem_file_name} received.\n"
621
598
  assert_equal exp, @stdout.read
622
599
 
623
- ENV['DEBUG'] = nil
600
+ ENV["DEBUG"] = nil
624
601
  end
625
602
 
626
603
  should "handle cmd errors when run" do
@@ -630,7 +607,6 @@ class GGem::CLI
630
607
  assert_raises(CommandExitError){ subject.run(@argv, @stdout, @stderr) }
631
608
  assert_equal "#{err_msg}\n", @stderr.read
632
609
  end
633
-
634
610
  end
635
611
 
636
612
  class ForceTagOptionCommandTests < IOCommandTests
@@ -645,10 +621,9 @@ class GGem::CLI
645
621
  end
646
622
 
647
623
  should "add a force-tag CLIRB option" do
648
- subject.run(['-f'], @stdout, @stderr)
649
- assert_true subject.clirb.opts['force-tag']
624
+ subject.run(["-f"], @stdout, @stderr)
625
+ assert_true subject.clirb.opts["force-tag"]
650
626
  end
651
-
652
627
  end
653
628
 
654
629
  class TagCommandTests < IOCommandTests
@@ -681,7 +656,7 @@ class GGem::CLI
681
656
  end
682
657
 
683
658
  should "call the repo's run build/push cmds when run" do
684
- ENV['DEBUG'] = [nil, '1'].sample
659
+ ENV["DEBUG"] = [nil, "1"].sample
685
660
  subject.run([], @stdout, @stderr)
686
661
 
687
662
  assert_true @repo_spy.run_validate_clean_cmd_called
@@ -693,19 +668,19 @@ class GGem::CLI
693
668
  assert_true @repo_spy.run_push_cmd_called
694
669
  assert_nil @repo_spy.run_rm_tag_cmd_called_with
695
670
 
696
- exp = if ENV['DEBUG'] == '1'
671
+ exp = if ENV["DEBUG"] == "1"
697
672
  "validate clean\nvalidate clean cmd was run\n" \
698
673
  "validate committed\nvalidate committed cmd was run\n" \
699
674
  "add tag\nadd tag cmd was run\n"
700
675
  else
701
- ''
676
+ ""
702
677
  end
703
678
  exp += "Tagged #{@spec_spy.version_tag}.\n"
704
- exp += ENV['DEBUG'] == '1' ? "push\npush cmd was run\n" : ''
679
+ exp += ENV["DEBUG"] == "1" ? "push\npush cmd was run\n" : ""
705
680
  exp += "Pushed git commits and tags.\n"
706
681
  assert_equal exp, @stdout.read
707
682
 
708
- ENV['DEBUG'] = nil
683
+ ENV["DEBUG"] = nil
709
684
  end
710
685
 
711
686
  should "handle validation cmd errors when run" do
@@ -723,7 +698,7 @@ class GGem::CLI
723
698
  err_on = [:run_validate_clean_cmd, :run_validate_committed_cmd].sample
724
699
  Assert.stub(@repo_spy, err_on){ raise GGem::GitRepo::CmdError, err_msg }
725
700
 
726
- subject.run([['--force-tag', '-f'].sample], @stdout, @stderr)
701
+ subject.run([["--force-tag", "-f"].sample], @stdout, @stderr)
727
702
  exp = "There are files that need to be committed first.\n" \
728
703
  "Forcing tag anyway...\n"
729
704
  assert_equal exp, @stderr.read
@@ -757,7 +732,6 @@ class GGem::CLI
757
732
  assert_raises(CommandExitError){ subject.run([], @stdout, @stderr) }
758
733
  assert_equal "#{err_msg}\n", @stderr.read
759
734
  end
760
-
761
735
  end
762
736
 
763
737
  class ReleaseCommandTests < IOCommandTests
@@ -812,16 +786,15 @@ class GGem::CLI
812
786
  end
813
787
 
814
788
  should "pass any force-tag option to the tag cmd but not the release cmd" do
815
- force_tag_argv = [['--force-tag', '-f'].sample]
789
+ force_tag_argv = [["--force-tag", "-f"].sample]
816
790
  subject.run(force_tag_argv, @stdout, @stderr)
817
791
 
818
792
  assert_true @tag_spy.run_called
819
- assert_equal ['--force-tag'], @tag_spy.argv
793
+ assert_equal ["--force-tag"], @tag_spy.argv
820
794
 
821
795
  assert_true @push_spy.run_called
822
796
  assert_equal [], @push_spy.argv
823
797
  end
824
-
825
798
  end
826
799
 
827
800
  class CommandSetTests < UnitTests
@@ -836,41 +809,41 @@ class GGem::CLI
836
809
 
837
810
  should "add/rm commands, be able to look them up and know its size" do
838
811
  assert_equal 0, subject.size
839
- assert_equal '', subject.to_s
812
+ assert_equal "", subject.to_s
840
813
 
841
- subject.add(CommandSpy, 'test', 't', 'tst')
814
+ subject.add(CommandSpy, "test", "t", "tst")
842
815
  assert_equal 1, subject.size
843
816
 
844
- assert_instance_of CommandSpy, subject['test']
845
- assert_same subject['test'], subject['t']
846
- assert_same subject['test'], subject['tst']
817
+ assert_instance_of CommandSpy, subject["test"]
818
+ assert_same subject["test"], subject["t"]
819
+ assert_same subject["test"], subject["tst"]
847
820
 
848
- exp_strs = ["test (t, tst) # #{subject['test'].summary}"]
821
+ exp_strs = ["test (t, tst) # #{subject["test"].summary}"]
849
822
  assert_equal exp_strs.join("\n"), subject.to_s
850
823
 
851
- subject.add(CommandSpy, 'add1')
852
- exp_strs << "add1 # #{subject['add1'].summary}"
824
+ subject.add(CommandSpy, "add1")
825
+ exp_strs << "add1 # #{subject["add1"].summary}"
853
826
 
854
827
  @cmd_spy = CommandSpy.new
855
- Assert.stub(@cmd_spy, :summary){ [nil, ''].sample }
828
+ Assert.stub(@cmd_spy, :summary){ [nil, ""].sample }
856
829
  Assert.stub(CommandSpy, :new){ @cmd_spy }
857
830
 
858
- subject.add(CommandSpy, 'add2', 'add')
831
+ subject.add(CommandSpy, "add2", "add")
859
832
  exp_strs << "add2 (add) "
860
833
 
861
- subject.add(CommandSpy, 'add3')
862
- Assert.stub(subject['add3'], :summary){ [nil, ''].sample }
834
+ subject.add(CommandSpy, "add3")
835
+ Assert.stub(subject["add3"], :summary){ [nil, ""].sample }
863
836
  exp_strs << "add3 "
864
837
 
865
838
  assert_equal exp_strs.join("\n"), subject.to_s
866
839
 
867
- subject.remove('test')
868
- subject.remove('add1')
869
- subject.remove('add2')
870
- subject.remove('add3')
840
+ subject.remove("test")
841
+ subject.remove("add1")
842
+ subject.remove("add2")
843
+ subject.remove("add3")
871
844
 
872
845
  assert_equal 0, subject.size
873
- assert_equal '', subject.to_s
846
+ assert_equal "", subject.to_s
874
847
  end
875
848
 
876
849
  should "call the given block when looking up unknown command names" do
@@ -878,7 +851,6 @@ class GGem::CLI
878
851
  subject[unknown_cmd_name]
879
852
  assert_equal [unknown_cmd_name], @unknown_cmd_block_called_with
880
853
  end
881
-
882
854
  end
883
855
 
884
856
  class CLISpy
@@ -991,19 +963,18 @@ class GGem::CLI
991
963
 
992
964
  def run_build_cmd
993
965
  @run_build_cmd_called = true
994
- ['build', 0, 'build cmd was run']
966
+ ["build", 0, "build cmd was run"]
995
967
  end
996
968
 
997
969
  def run_install_cmd
998
970
  @run_install_cmd_called = true
999
- ['install', 0, 'install cmd was run']
971
+ ["install", 0, "install cmd was run"]
1000
972
  end
1001
973
 
1002
974
  def run_push_cmd
1003
975
  @run_push_cmd_called = true
1004
- ['push', 0, 'push cmd was run']
976
+ ["push", 0, "push cmd was run"]
1005
977
  end
1006
-
1007
978
  end
1008
979
 
1009
980
  class GitRepoSpy
@@ -1029,34 +1000,32 @@ class GGem::CLI
1029
1000
 
1030
1001
  def run_init_cmd
1031
1002
  @run_init_cmd_called = true
1032
- ['init', 0, 'init cmd was run']
1003
+ ["init", 0, "init cmd was run"]
1033
1004
  end
1034
1005
 
1035
1006
  def run_validate_clean_cmd
1036
1007
  @run_validate_clean_cmd_called = true
1037
- ['validate clean', 0, 'validate clean cmd was run']
1008
+ ["validate clean", 0, "validate clean cmd was run"]
1038
1009
  end
1039
1010
 
1040
1011
  def run_validate_committed_cmd
1041
1012
  @run_validate_committed_cmd_called = true
1042
- ['validate committed', 0, 'validate committed cmd was run']
1013
+ ["validate committed", 0, "validate committed cmd was run"]
1043
1014
  end
1044
1015
 
1045
1016
  def run_add_version_tag_cmd(*args)
1046
1017
  @run_add_version_tag_cmd_called_with = args
1047
- ['add tag', 0, 'add tag cmd was run']
1018
+ ["add tag", 0, "add tag cmd was run"]
1048
1019
  end
1049
1020
 
1050
1021
  def run_rm_tag_cmd(*args)
1051
1022
  @run_rm_tag_cmd_called_with = args
1052
- ['rm tag', 0, 'rm tag cmd was run']
1023
+ ["rm tag", 0, "rm tag cmd was run"]
1053
1024
  end
1054
1025
 
1055
1026
  def run_push_cmd
1056
1027
  @run_push_cmd_called = true
1057
- ['push', 0, 'push cmd was run']
1028
+ ["push", 0, "push cmd was run"]
1058
1029
  end
1059
-
1060
1030
  end
1061
-
1062
1031
  end