cairo 1.8.3-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of cairo might be problematic. Click here for more details.
- data/AUTHORS +4 -0
- data/COPYING +59 -0
- data/GPL +340 -0
- data/NEWS +163 -0
- data/Rakefile +190 -0
- data/doc/doc.css +91 -0
- data/doc/en/cairo-antialias.html +38 -0
- data/doc/en/cairo-clip-not-representable-error.html +47 -0
- data/doc/en/cairo-color-base.html +69 -0
- data/doc/en/cairo-color-cmyk.html +157 -0
- data/doc/en/cairo-color-hsv.html +137 -0
- data/doc/en/cairo-color-rgb.html +142 -0
- data/doc/en/cairo-color-x11.html +173 -0
- data/doc/en/cairo-color.html +238 -0
- data/doc/en/cairo-content.html +37 -0
- data/doc/en/cairo-context-blur.html +39 -0
- data/doc/en/cairo-context-circle.html +39 -0
- data/doc/en/cairo-context-color.html +39 -0
- data/doc/en/cairo-context-path.html +44 -0
- data/doc/en/cairo-context-rectangle.html +39 -0
- data/doc/en/cairo-context-triangle.html +39 -0
- data/doc/en/cairo-context.html +643 -0
- data/doc/en/cairo-error.html +44 -0
- data/doc/en/cairo-extend.html +38 -0
- data/doc/en/cairo-file-not-found.html +47 -0
- data/doc/en/cairo-fill-rule.html +36 -0
- data/doc/en/cairo-filter.html +40 -0
- data/doc/en/cairo-font-extents.html +129 -0
- data/doc/en/cairo-font-face.html +38 -0
- data/doc/en/cairo-font-options.html +139 -0
- data/doc/en/cairo-font-slant.html +37 -0
- data/doc/en/cairo-font-type-mismatch.html +47 -0
- data/doc/en/cairo-font-weight.html +36 -0
- data/doc/en/cairo-format.html +46 -0
- data/doc/en/cairo-glyph.html +99 -0
- data/doc/en/cairo-gradient-pattern.html +74 -0
- data/doc/en/cairo-hint-metrics.html +37 -0
- data/doc/en/cairo-hint-style.html +39 -0
- data/doc/en/cairo-image-surface.html +82 -0
- data/doc/en/cairo-invalid-clusters.html +47 -0
- data/doc/en/cairo-invalid-content-error.html +47 -0
- data/doc/en/cairo-invalid-dash-error.html +47 -0
- data/doc/en/cairo-invalid-dsc-comment-error.html +47 -0
- data/doc/en/cairo-invalid-format-error.html +47 -0
- data/doc/en/cairo-invalid-index-error.html +47 -0
- data/doc/en/cairo-invalid-matrix-error.html +47 -0
- data/doc/en/cairo-invalid-path-data-error.html +47 -0
- data/doc/en/cairo-invalid-pop-group-error.html +47 -0
- data/doc/en/cairo-invalid-restore-error.html +47 -0
- data/doc/en/cairo-invalid-slant.html +47 -0
- data/doc/en/cairo-invalid-status-error.html +47 -0
- data/doc/en/cairo-invalid-stride-error.html +47 -0
- data/doc/en/cairo-invalid-string-error.html +47 -0
- data/doc/en/cairo-invalid-visual-error.html +47 -0
- data/doc/en/cairo-invalid-weight.html +47 -0
- data/doc/en/cairo-line-cap.html +37 -0
- data/doc/en/cairo-line-join.html +37 -0
- data/doc/en/cairo-linear-pattern.html +60 -0
- data/doc/en/cairo-matrix.html +259 -0
- data/doc/en/cairo-negative-count.html +47 -0
- data/doc/en/cairo-no-current-point-error.html +47 -0
- data/doc/en/cairo-null-pointer-error.html +47 -0
- data/doc/en/cairo-operator.html +48 -0
- data/doc/en/cairo-paper-parse-error.html +47 -0
- data/doc/en/cairo-paper-unknown-paper-name.html +66 -0
- data/doc/en/cairo-paper-unknown-unit.html +66 -0
- data/doc/en/cairo-paper-unrecognized-paper-description.html +66 -0
- data/doc/en/cairo-paper.html +184 -0
- data/doc/en/cairo-path-close-path.html +49 -0
- data/doc/en/cairo-path-curve-to.html +49 -0
- data/doc/en/cairo-path-data-type.html +38 -0
- data/doc/en/cairo-path-data.html +98 -0
- data/doc/en/cairo-path-line-to.html +49 -0
- data/doc/en/cairo-path-move-to.html +49 -0
- data/doc/en/cairo-path.html +155 -0
- data/doc/en/cairo-pattern-type-mismatch-error.html +47 -0
- data/doc/en/cairo-pattern.html +99 -0
- data/doc/en/cairo-pdf-surface.html +57 -0
- data/doc/en/cairo-point.html +74 -0
- data/doc/en/cairo-ps-level.html +49 -0
- data/doc/en/cairo-ps-surface.html +92 -0
- data/doc/en/cairo-quartz-image-surface.html +57 -0
- data/doc/en/cairo-quartz-surface.html +57 -0
- data/doc/en/cairo-radial-pattern.html +60 -0
- data/doc/en/cairo-read-error.html +47 -0
- data/doc/en/cairo-rectangle.html +89 -0
- data/doc/en/cairo-scaled-font.html +94 -0
- data/doc/en/cairo-solid-pattern.html +62 -0
- data/doc/en/cairo-subpixel-order.html +39 -0
- data/doc/en/cairo-surface-finished-error.html +47 -0
- data/doc/en/cairo-surface-pattern.html +57 -0
- data/doc/en/cairo-surface-type-mismatch-error.html +47 -0
- data/doc/en/cairo-surface.html +121 -0
- data/doc/en/cairo-svg-surface.html +77 -0
- data/doc/en/cairo-svg-version.html +49 -0
- data/doc/en/cairo-temp-file-error.html +47 -0
- data/doc/en/cairo-text-cluster-flag.html +35 -0
- data/doc/en/cairo-text-cluster.html +84 -0
- data/doc/en/cairo-text-extents.html +144 -0
- data/doc/en/cairo-toy-font-face.html +67 -0
- data/doc/en/cairo-user-font-error.html +47 -0
- data/doc/en/cairo-user-font-face-text-to-glyphs-data.html +94 -0
- data/doc/en/cairo-user-font-face.html +72 -0
- data/doc/en/cairo-user-font-immutable.html +47 -0
- data/doc/en/cairo-win32-printing-surface.html +57 -0
- data/doc/en/cairo-win32-surface.html +62 -0
- data/doc/en/cairo-write-error.html +47 -0
- data/doc/en/cairo.html +131 -0
- data/doc/en/index.html +1154 -0
- data/doc/index.html +18 -0
- data/doc/ja/cairo-antialias.html +57 -0
- data/doc/ja/cairo-clip-not-representable-error.html +56 -0
- data/doc/ja/cairo-color-base.html +75 -0
- data/doc/ja/cairo-color-cmyk.html +152 -0
- data/doc/ja/cairo-color-hsv.html +135 -0
- data/doc/ja/cairo-color-rgb.html +145 -0
- data/doc/ja/cairo-color-x11.html +183 -0
- data/doc/ja/cairo-color.html +317 -0
- data/doc/ja/cairo-content.html +51 -0
- data/doc/ja/cairo-context-blur.html +53 -0
- data/doc/ja/cairo-context-circle.html +54 -0
- data/doc/ja/cairo-context-color.html +52 -0
- data/doc/ja/cairo-context-path.html +77 -0
- data/doc/ja/cairo-context-rectangle.html +60 -0
- data/doc/ja/cairo-context-triangle.html +47 -0
- data/doc/ja/cairo-context.html +1542 -0
- data/doc/ja/cairo-error.html +56 -0
- data/doc/ja/cairo-extend.html +56 -0
- data/doc/ja/cairo-file-not-found.html +51 -0
- data/doc/ja/cairo-fill-rule.html +58 -0
- data/doc/ja/cairo-filter.html +43 -0
- data/doc/ja/cairo-font-extents.html +164 -0
- data/doc/ja/cairo-font-face.html +55 -0
- data/doc/ja/cairo-font-options.html +189 -0
- data/doc/ja/cairo-font-slant.html +50 -0
- data/doc/ja/cairo-font-type-mismatch.html +52 -0
- data/doc/ja/cairo-font-weight.html +47 -0
- data/doc/ja/cairo-format.html +81 -0
- data/doc/ja/cairo-glyph.html +115 -0
- data/doc/ja/cairo-gradient-pattern.html +119 -0
- data/doc/ja/cairo-hint-metrics.html +57 -0
- data/doc/ja/cairo-hint-style.html +64 -0
- data/doc/ja/cairo-image-surface.html +131 -0
- data/doc/ja/cairo-invalid-clusters.html +55 -0
- data/doc/ja/cairo-invalid-content-error.html +54 -0
- data/doc/ja/cairo-invalid-dash-error.html +54 -0
- data/doc/ja/cairo-invalid-dsc-comment-error.html +54 -0
- data/doc/ja/cairo-invalid-format-error.html +54 -0
- data/doc/ja/cairo-invalid-index-error.html +54 -0
- data/doc/ja/cairo-invalid-matrix-error.html +54 -0
- data/doc/ja/cairo-invalid-path-data-error.html +54 -0
- data/doc/ja/cairo-invalid-pop-group-error.html +54 -0
- data/doc/ja/cairo-invalid-restore-error.html +55 -0
- data/doc/ja/cairo-invalid-slant.html +57 -0
- data/doc/ja/cairo-invalid-status-error.html +55 -0
- data/doc/ja/cairo-invalid-stride-error.html +55 -0
- data/doc/ja/cairo-invalid-string-error.html +54 -0
- data/doc/ja/cairo-invalid-visual-error.html +57 -0
- data/doc/ja/cairo-invalid-weight.html +57 -0
- data/doc/ja/cairo-line-cap.html +50 -0
- data/doc/ja/cairo-line-join.html +53 -0
- data/doc/ja/cairo-linear-pattern.html +87 -0
- data/doc/ja/cairo-matrix.html +354 -0
- data/doc/ja/cairo-negative-count.html +52 -0
- data/doc/ja/cairo-no-current-point-error.html +54 -0
- data/doc/ja/cairo-null-pointer-error.html +54 -0
- data/doc/ja/cairo-operator.html +51 -0
- data/doc/ja/cairo-paper-parse-error.html +55 -0
- data/doc/ja/cairo-paper-unknown-paper-name.html +76 -0
- data/doc/ja/cairo-paper-unknown-unit.html +75 -0
- data/doc/ja/cairo-paper-unrecognized-paper-description.html +76 -0
- data/doc/ja/cairo-paper.html +357 -0
- data/doc/ja/cairo-path-close-path.html +57 -0
- data/doc/ja/cairo-path-curve-to.html +70 -0
- data/doc/ja/cairo-path-data-type.html +53 -0
- data/doc/ja/cairo-path-data.html +127 -0
- data/doc/ja/cairo-path-line-to.html +62 -0
- data/doc/ja/cairo-path-move-to.html +62 -0
- data/doc/ja/cairo-path.html +144 -0
- data/doc/ja/cairo-pattern-type-mismatch-error.html +56 -0
- data/doc/ja/cairo-pattern.html +128 -0
- data/doc/ja/cairo-pdf-surface.html +86 -0
- data/doc/ja/cairo-point.html +90 -0
- data/doc/ja/cairo-ps-level.html +62 -0
- data/doc/ja/cairo-ps-surface.html +214 -0
- data/doc/ja/cairo-quartz-image-surface.html +75 -0
- data/doc/ja/cairo-quartz-surface.html +93 -0
- data/doc/ja/cairo-radial-pattern.html +93 -0
- data/doc/ja/cairo-read-error.html +55 -0
- data/doc/ja/cairo-rectangle.html +109 -0
- data/doc/ja/cairo-scaled-font.html +180 -0
- data/doc/ja/cairo-solid-pattern.html +87 -0
- data/doc/ja/cairo-subpixel-order.html +57 -0
- data/doc/ja/cairo-surface-finished-error.html +54 -0
- data/doc/ja/cairo-surface-pattern.html +68 -0
- data/doc/ja/cairo-surface-type-mismatch-error.html +56 -0
- data/doc/ja/cairo-surface.html +213 -0
- data/doc/ja/cairo-svg-surface.html +114 -0
- data/doc/ja/cairo-svg-version.html +66 -0
- data/doc/ja/cairo-temp-file-error.html +50 -0
- data/doc/ja/cairo-text-cluster-flag.html +46 -0
- data/doc/ja/cairo-text-cluster.html +102 -0
- data/doc/ja/cairo-text-extents.html +163 -0
- data/doc/ja/cairo-toy-font-face.html +107 -0
- data/doc/ja/cairo-user-font-error.html +55 -0
- data/doc/ja/cairo-user-font-face-text-to-glyphs-data.html +156 -0
- data/doc/ja/cairo-user-font-face.html +268 -0
- data/doc/ja/cairo-user-font-immutable.html +54 -0
- data/doc/ja/cairo-win32-printing-surface.html +80 -0
- data/doc/ja/cairo-win32-surface.html +100 -0
- data/doc/ja/cairo-write-error.html +55 -0
- data/doc/ja/cairo.html +177 -0
- data/doc/ja/index.html +1156 -0
- data/ext/cairo/cairo.def +104 -0
- data/ext/cairo/extconf.rb +80 -0
- data/ext/cairo/rb_cairo.c +104 -0
- data/ext/cairo/rb_cairo.h +275 -0
- data/ext/cairo/rb_cairo_constants.c +478 -0
- data/ext/cairo/rb_cairo_context.c +1693 -0
- data/ext/cairo/rb_cairo_exception.c +354 -0
- data/ext/cairo/rb_cairo_font_extents.c +200 -0
- data/ext/cairo/rb_cairo_font_face.c +713 -0
- data/ext/cairo/rb_cairo_font_options.c +197 -0
- data/ext/cairo/rb_cairo_glyph.c +161 -0
- data/ext/cairo/rb_cairo_matrix.c +366 -0
- data/ext/cairo/rb_cairo_path.c +459 -0
- data/ext/cairo/rb_cairo_pattern.c +540 -0
- data/ext/cairo/rb_cairo_private.c +242 -0
- data/ext/cairo/rb_cairo_private.h +114 -0
- data/ext/cairo/rb_cairo_scaled_font.c +235 -0
- data/ext/cairo/rb_cairo_surface.c +1371 -0
- data/ext/cairo/rb_cairo_text_cluster.c +151 -0
- data/ext/cairo/rb_cairo_text_extents.c +221 -0
- data/extconf.rb +45 -0
- data/lib/1.8/cairo.so +0 -0
- data/lib/1.9/cairo.so +0 -0
- data/lib/cairo.rb +151 -0
- data/lib/cairo/color.rb +267 -0
- data/lib/cairo/colors.rb +656 -0
- data/lib/cairo/constants.rb +24 -0
- data/lib/cairo/context.rb +29 -0
- data/lib/cairo/context/blur.rb +45 -0
- data/lib/cairo/context/circle.rb +9 -0
- data/lib/cairo/context/color.rb +11 -0
- data/lib/cairo/context/path.rb +116 -0
- data/lib/cairo/context/rectangle.rb +33 -0
- data/lib/cairo/context/triangle.rb +12 -0
- data/lib/cairo/paper.rb +183 -0
- data/lib/cairo/papers.rb +41 -0
- data/lib/cairo/path.rb +15 -0
- data/lib/cairo/point.rb +7 -0
- data/misc/update-colors.rb +143 -0
- data/pkg-config.rb +313 -0
- data/samples/agg/README +4 -0
- data/samples/agg/aa_test.rb +304 -0
- data/samples/blur.rb +47 -0
- data/samples/pac.rb +99 -0
- data/samples/pac2.rb +171 -0
- data/samples/png.rb +45 -0
- data/samples/scalable.rb +56 -0
- data/samples/text-on-path.rb +60 -0
- data/samples/text2.rb +131 -0
- data/test-unit/Rakefile +30 -0
- data/test-unit/bin/testrb +5 -0
- data/test-unit/lib/test/unit.rb +280 -0
- data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
- data/test-unit/lib/test/unit/assertions.rb +722 -0
- data/test-unit/lib/test/unit/attribute.rb +125 -0
- data/test-unit/lib/test/unit/autorunner.rb +254 -0
- data/test-unit/lib/test/unit/collector.rb +43 -0
- data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
- data/test-unit/lib/test/unit/collector/dir.rb +108 -0
- data/test-unit/lib/test/unit/collector/load.rb +135 -0
- data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
- data/test-unit/lib/test/unit/color.rb +61 -0
- data/test-unit/lib/test/unit/diff.rb +524 -0
- data/test-unit/lib/test/unit/error.rb +124 -0
- data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
- data/test-unit/lib/test/unit/failure.rb +110 -0
- data/test-unit/lib/test/unit/fixture.rb +185 -0
- data/test-unit/lib/test/unit/notification.rb +125 -0
- data/test-unit/lib/test/unit/omission.rb +143 -0
- data/test-unit/lib/test/unit/pending.rb +146 -0
- data/test-unit/lib/test/unit/priority.rb +146 -0
- data/test-unit/lib/test/unit/runner/console.rb +46 -0
- data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
- data/test-unit/lib/test/unit/testcase.rb +281 -0
- data/test-unit/lib/test/unit/testresult.rb +89 -0
- data/test-unit/lib/test/unit/testsuite.rb +110 -0
- data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +195 -0
- data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
- data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
- data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
- data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
- data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
- data/test-unit/lib/test/unit/util/observable.rb +90 -0
- data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
- data/test-unit/lib/test/unit/version.rb +7 -0
- data/test-unit/sample/adder.rb +13 -0
- data/test-unit/sample/subtracter.rb +12 -0
- data/test-unit/sample/tc_adder.rb +18 -0
- data/test-unit/sample/tc_subtracter.rb +18 -0
- data/test-unit/sample/ts_examples.rb +7 -0
- data/test-unit/test/collector/test_descendant.rb +135 -0
- data/test-unit/test/collector/test_dir.rb +406 -0
- data/test-unit/test/collector/test_load.rb +333 -0
- data/test-unit/test/collector/test_objectspace.rb +98 -0
- data/test-unit/test/run-test.rb +13 -0
- data/test-unit/test/test_assertions.rb +693 -0
- data/test-unit/test/test_attribute.rb +86 -0
- data/test-unit/test/test_color.rb +37 -0
- data/test-unit/test/test_diff.rb +477 -0
- data/test-unit/test/test_emacs_runner.rb +60 -0
- data/test-unit/test/test_error.rb +26 -0
- data/test-unit/test/test_failure.rb +33 -0
- data/test-unit/test/test_fixture.rb +252 -0
- data/test-unit/test/test_notification.rb +33 -0
- data/test-unit/test/test_omission.rb +81 -0
- data/test-unit/test/test_pending.rb +70 -0
- data/test-unit/test/test_priority.rb +89 -0
- data/test-unit/test/test_testcase.rb +430 -0
- data/test-unit/test/test_testresult.rb +113 -0
- data/test-unit/test/test_testsuite.rb +129 -0
- data/test-unit/test/testunit_test_util.rb +14 -0
- data/test-unit/test/ui/test_testrunmediator.rb +20 -0
- data/test-unit/test/util/test_backtracefilter.rb +41 -0
- data/test-unit/test/util/test_observable.rb +102 -0
- data/test-unit/test/util/test_procwrapper.rb +36 -0
- data/test/cairo-test-utils.rb +18 -0
- data/test/run-test.rb +28 -0
- data/test/test_color.rb +17 -0
- data/test/test_constants.rb +16 -0
- data/test/test_context.rb +105 -0
- data/test/test_exception.rb +27 -0
- data/test/test_font_extents.rb +36 -0
- data/test/test_font_face.rb +244 -0
- data/test/test_font_options.rb +13 -0
- data/test/test_paper.rb +81 -0
- data/test/test_pkg_config.rb +123 -0
- data/test/test_scaled_font.rb +34 -0
- data/test/test_surface.rb +41 -0
- data/test/test_text_cluster.rb +32 -0
- data/test/test_text_extents.rb +40 -0
- data/test/test_text_to_glyphs_data.rb +51 -0
- data/tmp/x86-mingw32/cairo/1.8.7/fake.rb +6 -0
- data/tmp/x86-mingw32/cairo/1.8.7/mkmf.rb +1836 -0
- data/tmp/x86-mingw32/cairo/1.8.7/rbconfig.rb +183 -0
- data/tmp/x86-mingw32/cairo/1.9.2/fake.rb +6 -0
- data/tmp/x86-mingw32/cairo/1.9.2/mkmf.rb +2079 -0
- data/tmp/x86-mingw32/cairo/1.9.2/rbconfig.rb +226 -0
- metadata +437 -0
@@ -0,0 +1,195 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Author:: Nathaniel Talbott.
|
4
|
+
# Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
|
5
|
+
# License:: Ruby license.
|
6
|
+
|
7
|
+
require 'test/unit/color'
|
8
|
+
require 'test/unit/ui/testrunner'
|
9
|
+
require 'test/unit/ui/testrunnermediator'
|
10
|
+
require 'test/unit/ui/console/outputlevel'
|
11
|
+
|
12
|
+
module Test
|
13
|
+
module Unit
|
14
|
+
module UI
|
15
|
+
module Console
|
16
|
+
|
17
|
+
# Runs a Test::Unit::TestSuite on the console.
|
18
|
+
class TestRunner < UI::TestRunner
|
19
|
+
include OutputLevel
|
20
|
+
|
21
|
+
COLOR_SCHEMES = {
|
22
|
+
:default => {
|
23
|
+
"success" => Color.new("green", :bold => true),
|
24
|
+
"failure" => Color.new("red", :bold => true),
|
25
|
+
"pending" => Color.new("magenta", :bold => true),
|
26
|
+
"omission" => Color.new("blue", :bold => true),
|
27
|
+
"notification" => Color.new("cyan", :bold => true),
|
28
|
+
"error" => Color.new("yellow", :bold => true),
|
29
|
+
},
|
30
|
+
}
|
31
|
+
|
32
|
+
# Creates a new TestRunner for running the passed
|
33
|
+
# suite. If quiet_mode is true, the output while
|
34
|
+
# running is limited to progress dots, errors and
|
35
|
+
# failures, and the final result. io specifies
|
36
|
+
# where runner output should go to; defaults to
|
37
|
+
# STDOUT.
|
38
|
+
def initialize(suite, options={})
|
39
|
+
super
|
40
|
+
@output_level = @options[:output_level] || NORMAL
|
41
|
+
@output = @options[:output] || STDOUT
|
42
|
+
@use_color = @options[:use_color]
|
43
|
+
@use_color = guess_color_availability if @use_color.nil?
|
44
|
+
@color_scheme = COLOR_SCHEMES[:default]
|
45
|
+
@reset_color = Color.new("reset")
|
46
|
+
@already_outputted = false
|
47
|
+
@faults = []
|
48
|
+
end
|
49
|
+
|
50
|
+
# Begins the test run.
|
51
|
+
def start
|
52
|
+
setup_mediator
|
53
|
+
attach_to_mediator
|
54
|
+
return start_mediator
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
def setup_mediator
|
59
|
+
@mediator = create_mediator(@suite)
|
60
|
+
output_setup_end
|
61
|
+
end
|
62
|
+
|
63
|
+
def output_setup_end
|
64
|
+
suite_name = @suite.to_s
|
65
|
+
suite_name = @suite.name if @suite.kind_of?(Module)
|
66
|
+
output("Loaded suite #{suite_name}")
|
67
|
+
end
|
68
|
+
|
69
|
+
def create_mediator(suite)
|
70
|
+
return TestRunnerMediator.new(suite)
|
71
|
+
end
|
72
|
+
|
73
|
+
def attach_to_mediator
|
74
|
+
@mediator.add_listener(TestResult::FAULT, &method(:add_fault))
|
75
|
+
@mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
|
76
|
+
@mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
|
77
|
+
@mediator.add_listener(TestCase::STARTED, &method(:test_started))
|
78
|
+
@mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
|
79
|
+
end
|
80
|
+
|
81
|
+
def start_mediator
|
82
|
+
return @mediator.run_suite
|
83
|
+
end
|
84
|
+
|
85
|
+
def add_fault(fault)
|
86
|
+
@faults << fault
|
87
|
+
output_single(fault.single_character_display,
|
88
|
+
fault_color(fault),
|
89
|
+
PROGRESS_ONLY)
|
90
|
+
@already_outputted = true
|
91
|
+
end
|
92
|
+
|
93
|
+
def started(result)
|
94
|
+
@result = result
|
95
|
+
output_started
|
96
|
+
end
|
97
|
+
|
98
|
+
def output_started
|
99
|
+
output("Started")
|
100
|
+
end
|
101
|
+
|
102
|
+
def finished(elapsed_time)
|
103
|
+
nl if output?(NORMAL) and !output?(VERBOSE)
|
104
|
+
nl
|
105
|
+
output("Finished in #{elapsed_time} seconds.")
|
106
|
+
@faults.each_with_index do |fault, index|
|
107
|
+
nl
|
108
|
+
output_single("%3d) " % (index + 1))
|
109
|
+
label, detail = format_fault(fault).split(/\r?\n/, 2)
|
110
|
+
output(label, fault_color(fault))
|
111
|
+
output(detail)
|
112
|
+
end
|
113
|
+
nl
|
114
|
+
output(@result, result_color)
|
115
|
+
end
|
116
|
+
|
117
|
+
def format_fault(fault)
|
118
|
+
fault.long_display
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_started(name)
|
122
|
+
output_single(name + ": ", nil, VERBOSE)
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_finished(name)
|
126
|
+
unless @already_outputted
|
127
|
+
output_single(".", @color_scheme["success"], PROGRESS_ONLY)
|
128
|
+
end
|
129
|
+
nl(VERBOSE)
|
130
|
+
@already_outputted = false
|
131
|
+
end
|
132
|
+
|
133
|
+
def nl(level=NORMAL)
|
134
|
+
output("", nil, level)
|
135
|
+
end
|
136
|
+
|
137
|
+
def output(something, color=nil, level=NORMAL)
|
138
|
+
return unless output?(level)
|
139
|
+
output_single(something, color, level)
|
140
|
+
@output.puts
|
141
|
+
end
|
142
|
+
|
143
|
+
def output_single(something, color=nil, level=NORMAL)
|
144
|
+
return unless output?(level)
|
145
|
+
if @use_color and color
|
146
|
+
something = "%s%s%s" % [color.escape_sequence,
|
147
|
+
something,
|
148
|
+
@reset_color.escape_sequence]
|
149
|
+
end
|
150
|
+
@output.write(something)
|
151
|
+
@output.flush
|
152
|
+
end
|
153
|
+
|
154
|
+
def output?(level)
|
155
|
+
level <= @output_level
|
156
|
+
end
|
157
|
+
|
158
|
+
def fault_color(fault)
|
159
|
+
@color_scheme[fault.class.name.split(/::/).last.downcase]
|
160
|
+
end
|
161
|
+
|
162
|
+
def result_color
|
163
|
+
if @result.passed?
|
164
|
+
if @result.pending_count > 0
|
165
|
+
@color_scheme["pending"]
|
166
|
+
elsif @result.omission_count > 0
|
167
|
+
@color_scheme["omission"]
|
168
|
+
elsif @result.notification_count > 0
|
169
|
+
@color_scheme["notification"]
|
170
|
+
else
|
171
|
+
@color_scheme["success"]
|
172
|
+
end
|
173
|
+
elsif @result.error_count > 0
|
174
|
+
@color_scheme["error"]
|
175
|
+
elsif @result.failure_count > 0
|
176
|
+
@color_scheme["failure"]
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def guess_color_availability
|
181
|
+
return false unless @output.tty?
|
182
|
+
term = ENV["TERM"]
|
183
|
+
return true if term and (/term\z/ =~ term or term == "screen")
|
184
|
+
return true if ENV["EMACS"] == "t"
|
185
|
+
false
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
if __FILE__ == $0
|
194
|
+
Test::Unit::UI::Console::TestRunner.start_command_line_test
|
195
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'test/unit/ui/console/testrunner'
|
2
|
+
|
3
|
+
module Test
|
4
|
+
module Unit
|
5
|
+
module UI
|
6
|
+
module Emacs
|
7
|
+
class TestRunner < Console::TestRunner
|
8
|
+
private
|
9
|
+
def output_setup_end
|
10
|
+
end
|
11
|
+
|
12
|
+
def output_started
|
13
|
+
end
|
14
|
+
|
15
|
+
def format_fault(fault)
|
16
|
+
return super unless fault.respond_to?(:label)
|
17
|
+
format_method_name = "format_fault_#{fault.label.downcase}"
|
18
|
+
if respond_to?(format_method_name, true)
|
19
|
+
send(format_method_name, fault)
|
20
|
+
else
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def format_fault_failure(failure)
|
26
|
+
if failure.location.size == 1
|
27
|
+
location = failure.location[0]
|
28
|
+
location_display = location.sub(/\A(.+:\d+).*/, ' [\\1]')
|
29
|
+
else
|
30
|
+
location_display = "\n" + failure.location.join("\n")
|
31
|
+
end
|
32
|
+
result = "#{failure.label}:\n"
|
33
|
+
result << "#{failure.test_name}#{location_display}:\n"
|
34
|
+
result << failure.message
|
35
|
+
result
|
36
|
+
end
|
37
|
+
|
38
|
+
def format_fault_error(error)
|
39
|
+
result = "#{error.label}:\n"
|
40
|
+
result << "#{error.test_name}:\n"
|
41
|
+
result << "#{error.message}\n"
|
42
|
+
result << error.backtrace.join("\n")
|
43
|
+
result
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test/unit/ui/testrunnerutilities'
|
2
|
+
|
3
|
+
module Test
|
4
|
+
module Unit
|
5
|
+
module UI
|
6
|
+
class TestRunner
|
7
|
+
extend TestRunnerUtilities
|
8
|
+
|
9
|
+
def initialize(suite, options={})
|
10
|
+
if suite.respond_to?(:suite)
|
11
|
+
@suite = suite.suite
|
12
|
+
else
|
13
|
+
@suite = suite
|
14
|
+
end
|
15
|
+
@options = options
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Author:: Nathaniel Talbott.
|
4
|
+
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
5
|
+
# License:: Ruby license.
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
require 'test/unit/util/observable'
|
9
|
+
require 'test/unit/testresult'
|
10
|
+
|
11
|
+
module Test
|
12
|
+
module Unit
|
13
|
+
module UI
|
14
|
+
|
15
|
+
# Provides an interface to write any given UI against,
|
16
|
+
# hopefully making it easy to write new UIs.
|
17
|
+
class TestRunnerMediator
|
18
|
+
RESET = name + "::RESET"
|
19
|
+
STARTED = name + "::STARTED"
|
20
|
+
FINISHED = name + "::FINISHED"
|
21
|
+
|
22
|
+
include Util::Observable
|
23
|
+
|
24
|
+
# Creates a new TestRunnerMediator initialized to run
|
25
|
+
# the passed suite.
|
26
|
+
def initialize(suite)
|
27
|
+
@suite = suite
|
28
|
+
end
|
29
|
+
|
30
|
+
# Runs the suite the TestRunnerMediator was created
|
31
|
+
# with.
|
32
|
+
def run_suite
|
33
|
+
Unit.run = true
|
34
|
+
|
35
|
+
result = create_result
|
36
|
+
result_listener = result.add_listener(TestResult::CHANGED) do |*args|
|
37
|
+
notify_listeners(TestResult::CHANGED, *args)
|
38
|
+
end
|
39
|
+
fault_listener = result.add_listener(TestResult::FAULT) do |*args|
|
40
|
+
notify_listeners(TestResult::FAULT, *args)
|
41
|
+
end
|
42
|
+
|
43
|
+
start_time = Time.now
|
44
|
+
begin
|
45
|
+
notify_listeners(RESET, @suite.size)
|
46
|
+
notify_listeners(STARTED, result)
|
47
|
+
|
48
|
+
@suite.run(result) do |channel, value|
|
49
|
+
notify_listeners(channel, value)
|
50
|
+
end
|
51
|
+
ensure
|
52
|
+
elapsed_time = Time.now - start_time
|
53
|
+
result.remove_listener(TestResult::FAULT, fault_listener)
|
54
|
+
result.remove_listener(TestResult::CHANGED, result_listener)
|
55
|
+
notify_listeners(FINISHED, elapsed_time)
|
56
|
+
end
|
57
|
+
|
58
|
+
result
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
# A factory method to create the result the mediator
|
63
|
+
# should run with. Can be overridden by subclasses if
|
64
|
+
# one wants to use a different result.
|
65
|
+
def create_result
|
66
|
+
TestResult.new
|
67
|
+
end
|
68
|
+
|
69
|
+
def measure_time
|
70
|
+
begin_time = Time.now
|
71
|
+
yield
|
72
|
+
Time.now - begin_time
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Author:: Nathaniel Talbott.
|
4
|
+
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
5
|
+
# License:: Ruby license.
|
6
|
+
|
7
|
+
module Test
|
8
|
+
module Unit
|
9
|
+
module UI
|
10
|
+
|
11
|
+
# Provides some utilities common to most, if not all,
|
12
|
+
# TestRunners.
|
13
|
+
#
|
14
|
+
#--
|
15
|
+
#
|
16
|
+
# Perhaps there ought to be a TestRunner superclass? There
|
17
|
+
# seems to be a decent amount of shared code between test
|
18
|
+
# runners.
|
19
|
+
|
20
|
+
module TestRunnerUtilities
|
21
|
+
|
22
|
+
# Creates a new TestRunner and runs the suite.
|
23
|
+
def run(suite, options={})
|
24
|
+
return new(suite, options).start
|
25
|
+
end
|
26
|
+
|
27
|
+
# Takes care of the ARGV parsing and suite
|
28
|
+
# determination necessary for running one of the
|
29
|
+
# TestRunners from the command line.
|
30
|
+
def start_command_line_test
|
31
|
+
if ARGV.empty?
|
32
|
+
puts "You should supply the name of a test suite file to the runner"
|
33
|
+
exit
|
34
|
+
end
|
35
|
+
require ARGV[0].gsub(/.+::/, '')
|
36
|
+
new(eval(ARGV[0])).start
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Test
|
2
|
+
module Unit
|
3
|
+
module Util
|
4
|
+
module BacktraceFilter
|
5
|
+
TESTUNIT_FILE_SEPARATORS = %r{[\\/:]}
|
6
|
+
TESTUNIT_PREFIX = __FILE__.split(TESTUNIT_FILE_SEPARATORS)[0..-3]
|
7
|
+
TESTUNIT_RB_FILE = /\.rb\Z/
|
8
|
+
|
9
|
+
module_function
|
10
|
+
def filter_backtrace(backtrace, prefix=nil)
|
11
|
+
return ["No backtrace"] unless(backtrace)
|
12
|
+
split_p = if(prefix)
|
13
|
+
prefix.split(TESTUNIT_FILE_SEPARATORS)
|
14
|
+
else
|
15
|
+
TESTUNIT_PREFIX
|
16
|
+
end
|
17
|
+
match = proc do |e|
|
18
|
+
split_e = e.split(TESTUNIT_FILE_SEPARATORS)[0, split_p.size]
|
19
|
+
next false unless(split_e[0..-2] == split_p[0..-2])
|
20
|
+
split_e[-1].sub(TESTUNIT_RB_FILE, '') == split_p[-1]
|
21
|
+
end
|
22
|
+
return backtrace unless(backtrace.detect(&match))
|
23
|
+
found_prefix = false
|
24
|
+
new_backtrace = backtrace.reverse.reject do |e|
|
25
|
+
if(match[e])
|
26
|
+
found_prefix = true
|
27
|
+
true
|
28
|
+
elsif(found_prefix)
|
29
|
+
false
|
30
|
+
else
|
31
|
+
true
|
32
|
+
end
|
33
|
+
end.reverse
|
34
|
+
new_backtrace = (new_backtrace.empty? ? backtrace : new_backtrace)
|
35
|
+
new_backtrace = new_backtrace.reject(&match)
|
36
|
+
new_backtrace.empty? ? backtrace : new_backtrace
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Author:: Nathaniel Talbott.
|
4
|
+
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
5
|
+
# License:: Ruby license.
|
6
|
+
|
7
|
+
require 'test/unit/util/procwrapper'
|
8
|
+
|
9
|
+
module Test
|
10
|
+
module Unit
|
11
|
+
module Util
|
12
|
+
|
13
|
+
# This is a utility class that allows anything mixing
|
14
|
+
# it in to notify a set of listeners about interesting
|
15
|
+
# events.
|
16
|
+
module Observable
|
17
|
+
# We use this for defaults since nil might mean something
|
18
|
+
NOTHING = "NOTHING/#{__id__}"
|
19
|
+
|
20
|
+
# Adds the passed proc as a listener on the
|
21
|
+
# channel indicated by channel_name. listener_key
|
22
|
+
# is used to remove the listener later; if none is
|
23
|
+
# specified, the proc itself is used.
|
24
|
+
#
|
25
|
+
# Whatever is used as the listener_key is
|
26
|
+
# returned, making it very easy to use the proc
|
27
|
+
# itself as the listener_key:
|
28
|
+
#
|
29
|
+
# listener = add_listener("Channel") { ... }
|
30
|
+
# remove_listener("Channel", listener)
|
31
|
+
def add_listener(channel_name, listener_key=NOTHING, &listener) # :yields: value
|
32
|
+
unless(block_given?)
|
33
|
+
raise ArgumentError.new("No callback was passed as a listener")
|
34
|
+
end
|
35
|
+
|
36
|
+
key = listener_key
|
37
|
+
if (listener_key == NOTHING)
|
38
|
+
listener_key = listener
|
39
|
+
key = ProcWrapper.new(listener)
|
40
|
+
end
|
41
|
+
|
42
|
+
channels[channel_name] ||= {}
|
43
|
+
channels[channel_name][key] = listener
|
44
|
+
return listener_key
|
45
|
+
end
|
46
|
+
|
47
|
+
# Removes the listener indicated by listener_key
|
48
|
+
# from the channel indicated by
|
49
|
+
# channel_name. Returns the registered proc, or
|
50
|
+
# nil if none was found.
|
51
|
+
def remove_listener(channel_name, listener_key)
|
52
|
+
channel = channels[channel_name]
|
53
|
+
return nil unless (channel)
|
54
|
+
key = listener_key
|
55
|
+
if (listener_key.instance_of?(Proc))
|
56
|
+
key = ProcWrapper.new(listener_key)
|
57
|
+
end
|
58
|
+
if (channel.has_key?(key))
|
59
|
+
return channel.delete(key)
|
60
|
+
end
|
61
|
+
return nil
|
62
|
+
end
|
63
|
+
|
64
|
+
# Calls all the procs registered on the channel
|
65
|
+
# indicated by channel_name. If value is
|
66
|
+
# specified, it is passed in to the procs,
|
67
|
+
# otherwise they are called with no arguments.
|
68
|
+
#
|
69
|
+
#--
|
70
|
+
#
|
71
|
+
# Perhaps this should be private? Would it ever
|
72
|
+
# make sense for an external class to call this
|
73
|
+
# method directly?
|
74
|
+
def notify_listeners(channel_name, *arguments)
|
75
|
+
channel = channels[channel_name]
|
76
|
+
return 0 unless (channel)
|
77
|
+
listeners = channel.values
|
78
|
+
listeners.each { |listener| listener.call(*arguments) }
|
79
|
+
return listeners.size
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
def channels
|
84
|
+
@channels ||= {}
|
85
|
+
return @channels
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|