detest 3.1.1 → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/detest/inochi.rb +3 -3
  2. data/man/man1/detest.1 +420 -389
  3. metadata +8 -8
@@ -18,12 +18,12 @@ module Detest
18
18
  ##
19
19
  # Number of this release of this project.
20
20
  #
21
- VERSION = '3.1.1'
21
+ VERSION = '3.1.2'
22
22
 
23
23
  ##
24
24
  # Date of this release of this project.
25
25
  #
26
- RELDATE = '2010-08-08'
26
+ RELDATE = '2010-08-10'
27
27
 
28
28
  ##
29
29
  # Description of this release of this project.
@@ -74,7 +74,7 @@ module Detest
74
74
  # }
75
75
  #
76
76
  DEVTIME = {
77
- 'inochi' => [ '>= 5.0.0', '< 6' ],
77
+ 'inochi' => [ '>= 5.0.1', '< 6' ],
78
78
  }
79
79
 
80
80
  # establish gem version dependencies
@@ -2,12 +2,12 @@
2
2
  .\" Title: detest
3
3
  .\" Author: [see the "AUTHORS" section]
4
4
  .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
5
- .\" Date: 08/08/2010
5
+ .\" Date: 08/10/2010
6
6
  .\" Manual: \ \&
7
- .\" Source: \ \& 3.1.1
7
+ .\" Source: \ \& 3.1.2
8
8
  .\" Language: English
9
9
  .\"
10
- .TH "DETEST" "1" "08/08/2010" "\ \& 3\&.1\&.1" "\ \&"
10
+ .TH "DETEST" "1" "08/10/2010" "\ \& 3\&.1\&.2" "\ \&"
11
11
  .\" -----------------------------------------------------------------
12
12
  .\" * set default formatting
13
13
  .\" -----------------------------------------------------------------
@@ -346,6 +346,252 @@ require \'detest/auto\'
346
346
  .\}
347
347
  .sp
348
348
  See the API documentation for more information and examples\&.
349
+ .SH "ASSERTIONS"
350
+ .SS "Writing assertions"
351
+ .sp
352
+ The following methods accept a block parameter and assert something about the result of executing that block\&. They also accept an optional message, which is shown in their failure reports if they fail\&.
353
+ .TS
354
+ tab(:);
355
+ lt lt
356
+ lt lt
357
+ lt lt
358
+ lt lt
359
+ lt lt.
360
+ T{
361
+ .sp
362
+ T()
363
+ T}:T{
364
+ .sp
365
+ assert true (not nil and not false) \(em API documentation
366
+ T}
367
+ T{
368
+ .sp
369
+ F()
370
+ T}:T{
371
+ .sp
372
+ assert not true (nil or false) \(em API documentation
373
+ T}
374
+ T{
375
+ .sp
376
+ N()
377
+ T}:T{
378
+ .sp
379
+ assert that the value is nil \(em API documentation
380
+ T}
381
+ T{
382
+ .sp
383
+ E()
384
+ T}:T{
385
+ .sp
386
+ assert that an execption is raised \(em API documentation
387
+ T}
388
+ T{
389
+ .sp
390
+ C()
391
+ T}:T{
392
+ .sp
393
+ assert that a symbol is thrown \(em API documentation
394
+ T}
395
+ .TE
396
+ .sp 1
397
+ .sp
398
+ For the T() and F() methods, you may alternatively pass the condition to be asserted as the first argument (instead of passing it as a block)\&. This might result in a more pleasing syntax, depending on your taste:
399
+ .sp
400
+ .if n \{\
401
+ .RS 4
402
+ .\}
403
+ .nf
404
+ my_ticket = rand()
405
+ winning_ticket = rand()
406
+
407
+ # passing the condition as a block:
408
+ T("I won?! Dream on\&.") { my_ticket != winning_ticket }
409
+ F("I won?! Dream on\&.") { my_ticket == winning_ticket }
410
+
411
+ # passing the condition as an argument:
412
+ T my_ticket != winning_ticket, "I won?! Dream on\&."
413
+ F my_ticket == winning_ticket, "I won?! Dream on\&."
414
+ .fi
415
+ .if n \{\
416
+ .RE
417
+ .\}
418
+ .SS "Negating assertions"
419
+ .sp
420
+ The following methods are the \fIopposite\fR of normal assertions\&.
421
+ .TS
422
+ tab(:);
423
+ lt lt
424
+ lt lt
425
+ lt lt
426
+ lt lt
427
+ lt lt.
428
+ T{
429
+ .sp
430
+ T!()
431
+ T}:T{
432
+ .sp
433
+ same as F() \(em API documentation
434
+ T}
435
+ T{
436
+ .sp
437
+ F!()
438
+ T}:T{
439
+ .sp
440
+ same as T() \(em API documentation
441
+ T}
442
+ T{
443
+ .sp
444
+ N!()
445
+ T}:T{
446
+ .sp
447
+ assert that value is not nil \(em API documentation
448
+ T}
449
+ T{
450
+ .sp
451
+ E!()
452
+ T}:T{
453
+ .sp
454
+ assert that an exception is \fInot\fR raised \(em API documentation
455
+ T}
456
+ T{
457
+ .sp
458
+ C!()
459
+ T}:T{
460
+ .sp
461
+ assert that a symbol is \fInot\fR thrown \(em API documentation
462
+ T}
463
+ .TE
464
+ .sp 1
465
+ .SS "Sampling assertions"
466
+ .sp
467
+ The following methods let you \fIcheck the outcome\fR of an assertion without recording a success or failure in the test execution report\&.
468
+ .TS
469
+ tab(:);
470
+ lt lt
471
+ lt lt
472
+ lt lt
473
+ lt lt
474
+ lt lt.
475
+ T{
476
+ .sp
477
+ T?()
478
+ T}:T{
479
+ .sp
480
+ returns true if T() passes; false otherwise \(em API documentation
481
+ T}
482
+ T{
483
+ .sp
484
+ F?()
485
+ T}:T{
486
+ .sp
487
+ returns true if F() passes; false otherwise \(em API documentation
488
+ T}
489
+ T{
490
+ .sp
491
+ N?()
492
+ T}:T{
493
+ .sp
494
+ returns true if N() passes; false otherwise \(em API documentation
495
+ T}
496
+ T{
497
+ .sp
498
+ E?()
499
+ T}:T{
500
+ .sp
501
+ returns true if E() passes; false otherwise \(em API documentation
502
+ T}
503
+ T{
504
+ .sp
505
+ C?()
506
+ T}:T{
507
+ .sp
508
+ returns true if C() passes; false otherwise \(em API documentation
509
+ T}
510
+ .TE
511
+ .sp 1
512
+ .SS "Assertion failure reports"
513
+ .sp
514
+ Assertions failures are reported in the following manner:
515
+ .sp
516
+ .if n \{\
517
+ .RS 4
518
+ .\}
519
+ .nf
520
+ \- fail: block must yield true (!nil && !false)
521
+ call:
522
+ \- test/simple\&.rb:17
523
+ \- test/simple\&.rb:3
524
+ code: |\-
525
+ [12\&.\&.22] in test/simple\&.rb
526
+ 12
527
+ 13 D "with more nested tests" do
528
+ 14 x = 5
529
+ 15
530
+ 16 T { x > 2 } # passes
531
+ => 17 F { x > 2 } # fails
532
+ 18 E { x\&.hello } # passes
533
+ 19 end
534
+ 20 end
535
+ 21
536
+ 22 # equivalent of before(:each) or setup()
537
+ bind: test/simple\&.rb:17
538
+ vars:
539
+ x: (Fixnum) 5
540
+ y: (Fixnum) 83
541
+ .fi
542
+ .if n \{\
543
+ .RE
544
+ .\}
545
+ .sp
546
+ Failure reports are composed of the following sections:
547
+ .TS
548
+ tab(:);
549
+ lt lt
550
+ lt lt
551
+ lt lt
552
+ lt lt
553
+ lt lt.
554
+ T{
555
+ .sp
556
+ :fail
557
+ T}:T{
558
+ .sp
559
+ Description of the assertion failure\&.
560
+ T}
561
+ T{
562
+ .sp
563
+ :call
564
+ T}:T{
565
+ .sp
566
+ Stack trace leading to the point of failure\&.
567
+ T}
568
+ T{
569
+ .sp
570
+ :code
571
+ T}:T{
572
+ .sp
573
+ Source code surrounding the point of failure\&.
574
+ T}
575
+ T{
576
+ .sp
577
+ :bind
578
+ T}:T{
579
+ .sp
580
+ Source location of values in :vars section\&.
581
+ T}
582
+ T{
583
+ .sp
584
+ :vars
585
+ T}:T{
586
+ .sp
587
+ Local variables visible at the point of failure\&.
588
+ T}
589
+ .TE
590
+ .sp 1
591
+ .sp
592
+ After the failure is reported, you will be placed into a debugger to investigate the failure if the Detest\&.debug option is enabled\&.
593
+ .sp
594
+ Assertion failure reports can be accessed at any time within the test execution trace provided by the Detest\&.trace() method\&.
349
595
  .SH "TESTS"
350
596
  .SS "Defining tests"
351
597
  .sp
@@ -370,9 +616,25 @@ end
370
616
  A test may contain nested tests, as illustrated above\&.
371
617
  .SS "Insulating tests"
372
618
  .sp
373
- The D!() method defines a new test that is explicitly insulated from the tests that contain it and also from the top\-level Ruby environment\&. Root\-level calls to the D() method are insulated by default\&.
619
+ The D!() method defines a new test that is explicitly insulated from the tests that contain it and also from the top\-level Ruby environment\&.
374
620
  .sp
375
621
  Inside an insulated test, you are free to mix\-in (using the \fBextend\fR keyword, not the \fBinclude\fR keyword) any modules your test logic needs\&. You can also define your own constants, methods, classes, and modules here\&.
622
+ .if n \{\
623
+ .sp
624
+ .\}
625
+ .RS 4
626
+ .it 1 an-trap
627
+ .nr an-no-space-flag 1
628
+ .nr an-break-flag 1
629
+ .br
630
+ .ps +1
631
+ \fBNote\fR
632
+ .ps -1
633
+ .br
634
+ .sp
635
+ Root\-level calls to the D() method are insulated by default\&.
636
+ .sp .5v
637
+ .RE
376
638
  .PP
377
639
  \fBExample\ \&1.\ \&Insulated and uninsulated tests\fR
378
640
  .sp
@@ -423,24 +685,14 @@ Detest will output the following:
423
685
  \- an inner, insulated test:
424
686
  \-\-\-
425
687
  pass: 10
426
- time: 0\&.009435692
688
+ time: 0\&.009158971
427
689
  .fi
428
690
  .if n \{\
429
691
  .RE
430
692
  .\}
431
693
  .SS "Sharing tests"
432
- .TS
433
- tab(:);
434
- lt lt
435
- lt lt
436
- lt lt.
437
- T{
438
- .sp
439
- S()
440
- T}:T{
441
694
  .sp
442
- Mechanism for sharing code\&. It can be used in two ways:
443
-
695
+ The S() method is a mechanism for sharing code\&. It can be used in two ways:
444
696
  .sp
445
697
  .RS 4
446
698
  .ie n \{\
@@ -463,23 +715,10 @@ When called with a block, it shares the given block (under a given identifier) f
463
715
  .\}
464
716
  When called without a block, it injects a previously shared block (under a given identifier) into the environment where it is called\&.
465
717
  .RE
466
- T}
467
- T{
468
718
  .sp
469
- S!()
470
- T}:T{
719
+ The S!() method is a combination of the two uses of the S() method: it lets you simultaneously share a block of code while injecting it into the environment where that method is called\&.
471
720
  .sp
472
- Combination of the two uses of the S() method: it lets you simultaneously share a block of code while injecting it into the environment where that method is called\&.
473
- T}
474
- T{
475
- .sp
476
- S?()
477
- T}:T{
478
- .sp
479
- Checks whether any code has been shared under a given identifier\&.
480
- T}
481
- .TE
482
- .sp 1
721
+ The S?() method checks whether any code has been shared under a given identifier\&.
483
722
  .PP
484
723
  \fBExample\ \&2.\ \&Sharing code between tests\fR
485
724
  .sp
@@ -539,32 +778,16 @@ Detest will output the following:
539
778
  \- Power is power!
540
779
  \-\-\-
541
780
  pass: 3
542
- time: 0\&.007379665
781
+ time: 0\&.007596486
543
782
  .fi
544
783
  .if n \{\
545
784
  .RE
546
785
  .\}
547
786
  .SS "Logging information"
548
- .TS
549
- tab(:);
550
- lt lt
551
- lt lt.
552
- T{
553
787
  .sp
554
- I()
555
- T}:T{
556
- .sp
557
- Mechanism for inserting arbitrary Ruby objects into the test execution report\&. You can think of this method as being a way \fIto inform\fR someone\&.
558
- T}
559
- T{
560
- .sp
561
- I!()
562
- T}:T{
788
+ The I() method is a mechanism for inserting arbitrary Ruby objects into the test execution report\&. You can think of this method as being a way \fIto inform\fR someone\&.
563
789
  .sp
564
- Starts the interactive debugger at the location where it is called\&.
565
- T}
566
- .TE
567
- .sp 1
790
+ The I!() method starts the interactive debugger at the location where it is called\&. You can think of this method as being a way \fIto investigate\fR the state of your program\&.
568
791
  .PP
569
792
  \fBExample\ \&3.\ \&Logging information in the execution report\fR
570
793
  .sp
@@ -603,7 +826,7 @@ Detest will output the following:
603
826
  \- Preparing spell to defeat mortal foes\&.\&.\&.
604
827
  \- Magician:
605
828
  \- Preparing rabbits to pull from hat\&.\&.\&.
606
- \- 6
829
+ \- 8
607
830
  \- Calculator:
608
831
  \- 3\&.141592653589793
609
832
  \- \- 1
@@ -613,391 +836,137 @@ Detest will output the following:
613
836
  \- b
614
837
  \- c
615
838
  \- foo: bar!
616
- \-\-\-
617
- time: 0\&.00284595
618
- .fi
619
- .if n \{\
620
- .RE
621
- .\}
622
- .SS "Execution hooks"
623
- .sp
624
- A \fBhook\fR is a scheduled point of entry into the test execution process\&. The following \fBhook methods\fR allow you to register a block of code to execute when a hook occurs:
625
- .TS
626
- tab(:);
627
- lt lt
628
- lt lt
629
- lt lt
630
- lt lt.
631
- T{
632
- .sp
633
- D\&.<()
634
- T}:T{
635
- .sp
636
- Calls the given block \fIbefore each\fR child test\&.
637
- T}
638
- T{
639
- .sp
640
- D\&.>()
641
- T}:T{
642
- .sp
643
- Calls the given block \fIafter each\fR child test\&.
644
- T}
645
- T{
646
- .sp
647
- D\&.<<()
648
- T}:T{
649
- .sp
650
- Calls the given block \fIbefore all\fR child tests\&.
651
- T}
652
- T{
653
- .sp
654
- D\&.>>()
655
- T}:T{
656
- .sp
657
- Calls the given block \fIafter all\fR child tests\&.
658
- T}
659
- .TE
660
- .sp 1
661
- .sp
662
- A hook method can be called multiple times\&. Each additional call schedules more logic to be executed during the hook:
663
- .sp
664
- .if n \{\
665
- .RS 4
666
- .\}
667
- .nf
668
- D \&.< { puts "do something" }
669
- D \&.< { puts "do something more!" }
670
- .fi
671
- .if n \{\
672
- .RE
673
- .\}
674
- .PP
675
- \fBExample\ \&4.\ \&Using hooks to perform before and after actions\fR
676
- .sp
677
- When the following test is run:
678
- .sp
679
- .if n \{\
680
- .RS 4
681
- .\}
682
- .nf
683
- require \'detest/auto\'
684
-
685
- D "outer test" do
686
- D \&.< { I "(outer hook) before each" }
687
- D \&.> { I "(outer hook) after each" }
688
- D \&.<< { I "(outer hook) before all" }
689
- D \&.>> { I "(outer hook) after all" }
690
-
691
- D "inner test 1" do
692
- D \&.< { I "(inner hook) before each" }
693
- D \&.> { I "(inner hook) after each" }
694
- D \&.<< { I "(inner hook) before all" }
695
- D \&.>> { I "(inner hook) after all" }
696
-
697
- D "inner test 1\&.1" do
698
- I "hello world"
699
- end
700
- end
701
-
702
- D "inner test 2" do
703
- I "goodbye world"
704
- end
705
-
706
- D \&.< { I "(outer hook) before each, again" }
707
- D \&.> { I "(outer hook) after each, again" }
708
- end
709
- .fi
710
- .if n \{\
711
- .RE
712
- .\}
713
- .sp
714
- Detest will output the following:
715
- .sp
716
- .if n \{\
717
- .RS 4
718
- .\}
719
- .nf
720
- \-\-\-
721
- \- outer test:
722
- \- (outer hook) before all
723
- \- (outer hook) before each
724
- \- (outer hook) before each, again
725
- \- inner test 1:
726
- \- (inner hook) before all
727
- \- (inner hook) before each
728
- \- inner test 1\&.1:
729
- \- hello world
730
- \- (inner hook) after each
731
- \- (inner hook) after all
732
- \- (outer hook) after each
733
- \- (outer hook) after each, again
734
- \- (outer hook) before each
735
- \- (outer hook) before each, again
736
- \- inner test 2:
737
- \- goodbye world
738
- \- (outer hook) after each
739
- \- (outer hook) after each, again
740
- \- (outer hook) after all
741
- \-\-\-
742
- time: 0\&.007706195
743
- .fi
744
- .if n \{\
745
- .RE
746
- .\}
747
- .SH "ASSERTIONS"
748
- .SS "Writing assertions"
749
- .sp
750
- The following methods accept a block parameter and assert something about the result of executing that block\&. They also accept an optional message, which is shown in their failure reports if they fail\&.
751
- .TS
752
- tab(:);
753
- lt lt
754
- lt lt
755
- lt lt
756
- lt lt
757
- lt lt.
758
- T{
759
- .sp
760
- T()
761
- T}:T{
762
- .sp
763
- assert true (not nil and not false)
764
- T}
765
- T{
766
- .sp
767
- F()
768
- T}:T{
769
- .sp
770
- assert not true (nil or false)
771
- T}
772
- T{
773
- .sp
774
- N()
775
- T}:T{
776
- .sp
777
- assert that the value is nil
778
- T}
779
- T{
780
- .sp
781
- E()
782
- T}:T{
783
- .sp
784
- assert that an execption is raised
785
- T}
786
- T{
787
- .sp
788
- C()
789
- T}:T{
790
- .sp
791
- assert that a symbol is thrown
792
- T}
793
- .TE
794
- .sp 1
795
- .sp
796
- For the T() and F() methods, you may alternatively pass the condition to be asserted as the first argument (instead of passing it as a block)\&. This might result in a more pleasing syntax, depending on your taste:
797
- .sp
798
- .if n \{\
799
- .RS 4
800
- .\}
801
- .nf
802
- D "Lottery" do
803
- winning_ticket = rand()
804
-
805
- D "My chances of winning" do
806
- my_ticket = rand()
807
-
808
- #
809
- # Option 1: passing the condition as a block:
810
- #
811
- F("I won?! Dream on\&.") { my_ticket == winning_ticket }
812
-
813
- #
814
- # Option 2: passing the condition as an argument:
815
- #
816
- F my_ticket == winning_ticket, "I won?! Dream on\&."
817
-
818
- end
819
- end
839
+ \-\-\-
840
+ time: 0\&.002930334
820
841
  .fi
821
842
  .if n \{\
822
843
  .RE
823
844
  .\}
824
- .SS "Negating assertions"
825
- .sp
826
- The following methods are the \fIopposite\fR of normal assertions\&.
827
- .TS
828
- tab(:);
829
- lt lt
830
- lt lt
831
- lt lt
832
- lt lt
833
- lt lt.
834
- T{
835
- .sp
836
- T!()
837
- T}:T{
838
- .sp
839
- same as F()
840
- T}
841
- T{
842
- .sp
843
- F!()
844
- T}:T{
845
- .sp
846
- same as T()
847
- T}
848
- T{
849
- .sp
850
- N!()
851
- T}:T{
852
- .sp
853
- assert that value is not nil
854
- T}
855
- T{
856
- .sp
857
- E!()
858
- T}:T{
859
- .sp
860
- assert that an exception is \fInot\fR raised
861
- T}
862
- T{
863
- .sp
864
- C!()
865
- T}:T{
866
- .sp
867
- assert that a symbol is \fInot\fR thrown
868
- T}
869
- .TE
870
- .sp 1
871
- .SS "Sampling assertions"
845
+ .SS "Execution hooks"
872
846
  .sp
873
- The following methods let you \fIcheck the outcome\fR of an assertion without recording a success or failure in the test execution report\&.
847
+ A \fBhook\fR is a scheduled point of entry into the test execution process\&. The following \fBhook methods\fR allow you to register a block of code to execute when a hook occurs:
874
848
  .TS
875
849
  tab(:);
876
850
  lt lt
877
851
  lt lt
878
852
  lt lt
879
- lt lt
880
853
  lt lt.
881
854
  T{
882
855
  .sp
883
- T?()
884
- T}:T{
885
- .sp
886
- returns true if T() passes; false otherwise
887
- T}
888
- T{
889
- .sp
890
- F?()
856
+ D\&.<()
891
857
  T}:T{
892
858
  .sp
893
- returns true if F() passes; false otherwise
859
+ calls the given block \fIbefore each\fR child test \(em API documentation
894
860
  T}
895
861
  T{
896
862
  .sp
897
- N?()
863
+ D\&.>()
898
864
  T}:T{
899
865
  .sp
900
- returns true if N() passes; false otherwise
866
+ calls the given block \fIafter each\fR child test \(em API documentation
901
867
  T}
902
868
  T{
903
869
  .sp
904
- E?()
870
+ D\&.<<()
905
871
  T}:T{
906
872
  .sp
907
- returns true if E() passes; false otherwise
873
+ calls the given block \fIbefore all\fR child tests \(em API documentation
908
874
  T}
909
875
  T{
910
876
  .sp
911
- C?()
877
+ D\&.>>()
912
878
  T}:T{
913
879
  .sp
914
- returns true if C() passes; false otherwise
880
+ calls the given block \fIafter all\fR child tests \(em API documentation
915
881
  T}
916
882
  .TE
917
883
  .sp 1
918
- .SS "Assertion failure reports"
919
884
  .sp
920
- Assertions failures are reported in the following manner:
885
+ A hook method can be called multiple times\&. Each additional call schedules more logic to be executed during the hook:
921
886
  .sp
922
887
  .if n \{\
923
888
  .RS 4
924
889
  .\}
925
890
  .nf
926
- \- fail: block must yield true (!nil && !false)
927
- call:
928
- \- test/simple\&.rb:17
929
- \- test/simple\&.rb:3
930
- code: |\-
931
- [12\&.\&.22] in test/simple\&.rb
932
- 12
933
- 13 D "with more nested tests" do
934
- 14 x = 5
935
- 15
936
- 16 T { x > 2 } # passes
937
- => 17 F { x > 2 } # fails
938
- 18 E { x\&.hello } # passes
939
- 19 end
940
- 20 end
941
- 21
942
- 22 # equivalent of before(:each) or setup()
943
- bind: test/simple\&.rb:17
944
- vars:
945
- x: (Fixnum) 5
946
- y: (Fixnum) 83
891
+ D \&.< { puts "do something" }
892
+ D \&.< { puts "do something more!" }
947
893
  .fi
948
894
  .if n \{\
949
895
  .RE
950
896
  .\}
897
+ .PP
898
+ \fBExample\ \&4.\ \&Using hooks to perform before and after actions\fR
951
899
  .sp
952
- Failure reports are composed of the following sections:
953
- .TS
954
- tab(:);
955
- lt lt
956
- lt lt
957
- lt lt
958
- lt lt
959
- lt lt.
960
- T{
961
- .sp
962
- :fail
963
- T}:T{
964
- .sp
965
- Description of the assertion failure\&.
966
- T}
967
- T{
968
- .sp
969
- :call
970
- T}:T{
971
- .sp
972
- Stack trace leading to the point of failure\&.
973
- T}
974
- T{
975
- .sp
976
- :code
977
- T}:T{
978
- .sp
979
- Source code surrounding the point of failure\&.
980
- T}
981
- T{
982
- .sp
983
- :bind
984
- T}:T{
985
- .sp
986
- Source location of values in :vars section\&.
987
- T}
988
- T{
989
- .sp
990
- :vars
991
- T}:T{
900
+ When the following test is run:
992
901
  .sp
993
- Local variables visible at the point of failure\&.
994
- T}
995
- .TE
996
- .sp 1
902
+ .if n \{\
903
+ .RS 4
904
+ .\}
905
+ .nf
906
+ require \'detest/auto\'
907
+
908
+ D "outer test" do
909
+ D \&.< { I "(outer hook) before each" }
910
+ D \&.> { I "(outer hook) after each" }
911
+ D \&.<< { I "(outer hook) before all" }
912
+ D \&.>> { I "(outer hook) after all" }
913
+
914
+ D "inner test 1" do
915
+ D \&.< { I "(inner hook) before each" }
916
+ D \&.> { I "(inner hook) after each" }
917
+ D \&.<< { I "(inner hook) before all" }
918
+ D \&.>> { I "(inner hook) after all" }
919
+
920
+ D "inner test 1\&.1" do
921
+ I "hello world"
922
+ end
923
+ end
924
+
925
+ D "inner test 2" do
926
+ I "goodbye world"
927
+ end
928
+
929
+ D \&.< { I "(outer hook) before each, again" }
930
+ D \&.> { I "(outer hook) after each, again" }
931
+ end
932
+ .fi
933
+ .if n \{\
934
+ .RE
935
+ .\}
997
936
  .sp
998
- After the failure is reported, you will be placed into a debugger to investigate the failure if the Detest\&.debug option is enabled\&.
937
+ Detest will output the following:
999
938
  .sp
1000
- Assertion failure reports can be accessed at any time within the test execution trace provided by the Detest\&.trace() method\&.
939
+ .if n \{\
940
+ .RS 4
941
+ .\}
942
+ .nf
943
+ \-\-\-
944
+ \- outer test:
945
+ \- (outer hook) before all
946
+ \- (outer hook) before each
947
+ \- (outer hook) before each, again
948
+ \- inner test 1:
949
+ \- (inner hook) before all
950
+ \- (inner hook) before each
951
+ \- inner test 1\&.1:
952
+ \- hello world
953
+ \- (inner hook) after each
954
+ \- (inner hook) after all
955
+ \- (outer hook) after each
956
+ \- (outer hook) after each, again
957
+ \- (outer hook) before each
958
+ \- (outer hook) before each, again
959
+ \- inner test 2:
960
+ \- goodbye world
961
+ \- (outer hook) after each
962
+ \- (outer hook) after each, again
963
+ \- (outer hook) after all
964
+ \-\-\-
965
+ time: 0\&.009311863
966
+ .fi
967
+ .if n \{\
968
+ .RE
969
+ .\}
1001
970
  .SH "EMULATION"
1002
971
  .sp
1003
972
  Detest can emulate several popular testing libraries:
@@ -1819,6 +1788,68 @@ Its exit status will indicate whether all tests have passed\&. It may also print
1819
1788
  .sp
1820
1789
  Fork this project on GitHub and send a pull request\&.
1821
1790
  .SH "HISTORY"
1791
+ .SS "Version 3\&.1\&.2 (2010\-08\-10)"
1792
+ .sp
1793
+ This release adds links to API documentation beside methods mentioned in the help manual and restores metadata that was missing in the gem release package\&.
1794
+ .PP
1795
+ \fBHousekeeping\fR
1796
+ .sp
1797
+ .RS 4
1798
+ .ie n \{\
1799
+ \h'-04'\(bu\h'+03'\c
1800
+ .\}
1801
+ .el \{\
1802
+ .sp -1
1803
+ .IP \(bu 2.3
1804
+ .\}
1805
+ Upgrade to Inochi 5\&.0\&.1 to fix metadata generation in gemspec\&.
1806
+ .RE
1807
+ .sp
1808
+ .RS 4
1809
+ .ie n \{\
1810
+ \h'-04'\(bu\h'+03'\c
1811
+ .\}
1812
+ .el \{\
1813
+ .sp -1
1814
+ .IP \(bu 2.3
1815
+ .\}
1816
+ Introduce assertions before tests in help manual\&.
1817
+ .RE
1818
+ .sp
1819
+ .RS 4
1820
+ .ie n \{\
1821
+ \h'-04'\(bu\h'+03'\c
1822
+ .\}
1823
+ .el \{\
1824
+ .sp -1
1825
+ .IP \(bu 2.3
1826
+ .\}
1827
+ Make use of AsciiDoc admonitions and icon images\&.
1828
+ .RE
1829
+ .sp
1830
+ .RS 4
1831
+ .ie n \{\
1832
+ \h'-04'\(bu\h'+03'\c
1833
+ .\}
1834
+ .el \{\
1835
+ .sp -1
1836
+ .IP \(bu 2.3
1837
+ .\}
1838
+ Add links into API documentation for core methods\&.
1839
+ .RE
1840
+ .sp
1841
+ .RS 4
1842
+ .ie n \{\
1843
+ \h'-04'\(bu\h'+03'\c
1844
+ .\}
1845
+ .el \{\
1846
+ .sp -1
1847
+ .IP \(bu 2.3
1848
+ .\}
1849
+ Add test case to ensure that
1850
+ E()
1851
+ returns the exception that was raised\&.
1852
+ .RE
1822
1853
  .SS "Version 3\&.1\&.1 (2010\-08\-08)"
1823
1854
  .sp
1824
1855
  This release adds forgotten nil assertions and updates the help manual\&.
metadata CHANGED
@@ -5,16 +5,16 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 3
7
7
  - 1
8
- - 1
9
- version: 3.1.1
8
+ - 2
9
+ version: 3.1.2
10
10
  platform: ruby
11
- authors: []
12
-
11
+ authors:
12
+ - Suraj N. Kurapati
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-08 00:00:00 -07:00
17
+ date: 2010-08-10 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -28,8 +28,8 @@ dependencies:
28
28
  segments:
29
29
  - 5
30
30
  - 0
31
- - 0
32
- version: 5.0.0
31
+ - 1
32
+ version: 5.0.1
33
33
  - - <
34
34
  - !ruby/object:Gem::Version
35
35
  segments:
@@ -37,7 +37,7 @@ dependencies:
37
37
  version: "6"
38
38
  type: :development
39
39
  version_requirements: *id001
40
- description: ""
40
+ description: Detest is an assertion testing library for the Ruby programming language. It features a simple assertion vocabulary, instant debuggability
41
41
  of failures, and flexibility in composing tests.
42
42
  email:
43
43
  executables:
44
44
  - detest