assert 2.15.0 → 2.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -7
- data/Gemfile +0 -1
- data/{LICENSE.txt → LICENSE} +0 -0
- data/README.md +106 -35
- data/assert.gemspec +2 -2
- data/lib/assert/assert_runner.rb +19 -12
- data/lib/assert/assertions.rb +1 -0
- data/lib/assert/cli.rb +3 -0
- data/lib/assert/config.rb +24 -6
- data/lib/assert/config_helpers.rb +15 -28
- data/lib/assert/context.rb +4 -3
- data/lib/assert/context/test_dsl.rb +3 -2
- data/lib/assert/context_info.rb +19 -0
- data/lib/assert/default_runner.rb +12 -0
- data/lib/assert/default_suite.rb +64 -0
- data/lib/assert/default_view.rb +17 -15
- data/lib/assert/file_line.rb +3 -2
- data/lib/assert/result.rb +6 -0
- data/lib/assert/runner.rb +58 -21
- data/lib/assert/suite.rb +61 -100
- data/lib/assert/test.rb +3 -3
- data/lib/assert/version.rb +1 -1
- data/lib/assert/view.rb +58 -74
- data/lib/assert/view_helpers.rb +10 -48
- data/test/helper.rb +9 -0
- data/test/support/factory.rb +5 -5
- data/test/unit/assertions/assert_raises_tests.rb +20 -0
- data/test/unit/config_helpers_tests.rb +29 -29
- data/test/unit/config_tests.rb +43 -10
- data/test/unit/context/suite_dsl_tests.rb +1 -1
- data/test/unit/context_info_tests.rb +55 -0
- data/test/unit/default_runner_tests.rb +18 -0
- data/test/unit/default_suite_tests.rb +74 -0
- data/test/unit/file_line_tests.rb +6 -2
- data/test/unit/result_tests.rb +15 -4
- data/test/unit/runner_tests.rb +128 -6
- data/test/unit/suite_tests.rb +73 -182
- data/test/unit/view_helpers_tests.rb +44 -38
- data/test/unit/view_tests.rb +15 -39
- metadata +42 -28
- data/Rakefile +0 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 | 
            -
            ---
         | 
| 2 | 
            -
            SHA1:
         | 
| 3 | 
            -
               | 
| 4 | 
            -
               | 
| 5 | 
            -
            SHA512:
         | 
| 6 | 
            -
               | 
| 7 | 
            -
               | 
| 1 | 
            +
            --- 
         | 
| 2 | 
            +
            SHA1: 
         | 
| 3 | 
            +
              data.tar.gz: 224cee40b0eced9582504764379f3f5dafae637c
         | 
| 4 | 
            +
              metadata.gz: 5858e3f1715252601de72d47678dc9f215267254
         | 
| 5 | 
            +
            SHA512: 
         | 
| 6 | 
            +
              data.tar.gz: 6b3d06c534eb907ae92c281b36de62967138bbc3788d536c92ad03b8d28d637dcf0ad0526fb66610dcc9b6cbc894a44e786c312bcfd6f93ae1ea29319f8aaf6f
         | 
| 7 | 
            +
              metadata.gz: ed18f6eaea92fcec29d9b6b2200cb23704ad8b4090372493a81b67067b251176d71408231f8bc7e7c9de1a88c55cd854857d6fa153c67d79bf3a752b5fdb1df1
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/{LICENSE.txt → LICENSE}
    RENAMED
    
    | 
            File without changes
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,7 +1,5 @@ | |
| 1 1 | 
             
            # The Assert Testing Framework
         | 
| 2 2 |  | 
| 3 | 
            -
            Test::Unit style testing framework, just better than Test::Unit.
         | 
| 4 | 
            -
             | 
| 5 3 | 
             
            ## Usage
         | 
| 6 4 |  | 
| 7 5 | 
             
            ```ruby
         | 
| @@ -34,29 +32,36 @@ Running tests in random order, seeded with "56382" | |
| 34 32 | 
             
            * **Framework**: you define tests and the context they run in - Assert runs them.  Everything is pure ruby so use any 3rd party testing tools you like.  Create 3rd party tools that extend Assert behavior.
         | 
| 35 33 | 
             
            * **First Class**: everything is a first class object and can be extended to your liking (and should be)
         | 
| 36 34 | 
             
            * **MVC**: tests and how they are defined (M) and executed (C) are distinct from how you view the test results (V).
         | 
| 37 | 
            -
            * **Backwards compatible**: (assuming a few minor tweaks) with Test::Unit test suites
         | 
| 38 35 |  | 
| 39 36 | 
             
            ## What Assert is not
         | 
| 40 37 |  | 
| 41 | 
            -
            * ** | 
| 42 | 
            -
            * **Unit/Functional/Integration/etc**: Assert is agnostic - you define whatever kinds of tests you like (one or more of the above) and assert runs them in context | 
| 43 | 
            -
            * **Mock/Spec/BDD/etc**: Assert is the framework and there are a variety of 3rd party tools to do such things - feel free to use whatever you like | 
| 38 | 
            +
            * **RSpec/spec-anything**: define tests using assertion statements
         | 
| 39 | 
            +
            * **Unit/Functional/Integration/etc**: Assert is agnostic - you define whatever kinds of tests you like (one or more of the above) and assert runs them in context
         | 
| 40 | 
            +
            * **Mock/Spec/BDD/etc**: Assert is the framework and there are a variety of 3rd party tools to do such things - feel free to use whatever you like
         | 
| 44 41 |  | 
| 45 42 | 
             
            ## Description
         | 
| 46 43 |  | 
| 47 | 
            -
            Assert is  | 
| 44 | 
            +
            Assert is an assertion style testing framework, meaning you use assertion statements to define your tests and create results.  Assert uses class-based contexts so if you want to nest your contexts, use inheritance.
         | 
| 48 45 |  | 
| 49 | 
            -
             | 
| 46 | 
            +
            ### Features
         | 
| 50 47 |  | 
| 51 | 
            -
             | 
| 48 | 
            +
            * `assert` [executable](https://github.com/redding/assert#cli) for running tests
         | 
| 49 | 
            +
            * run tests by tab completing test file paths
         | 
| 50 | 
            +
            * run only test files that have been modified
         | 
| 51 | 
            +
            * random order test execution
         | 
| 52 | 
            +
            * class-based contexts
         | 
| 53 | 
            +
            * multiple before/setup & after/teardown blocks
         | 
| 54 | 
            +
            * around blocks
         | 
| 55 | 
            +
            * full backtrace for errors
         | 
| 56 | 
            +
            * optionally pretty print objects in failure descriptions
         | 
| 57 | 
            +
            * [stubbing API](https://github.com/redding/assert#stub)
         | 
| 58 | 
            +
            * [factory API](https://github.com/redding/assert#factory)
         | 
| 59 | 
            +
            * `skip` to skip tests
         | 
| 60 | 
            +
            * `Ctrl+c` stops tests and prints failures
         | 
| 52 61 |  | 
| 53 62 | 
             
            ## Defining tests
         | 
| 54 63 |  | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
            ## Factory
         | 
| 58 | 
            -
             | 
| 59 | 
            -
            TODO
         | 
| 64 | 
            +
            **Note**: Assert is tested using itself.  The tests are a good place to look for examples and usage patterns.
         | 
| 60 65 |  | 
| 61 66 | 
             
            ## Stub
         | 
| 62 67 |  | 
| @@ -90,12 +95,13 @@ Assert.stub(myobj, :myval){ 'stub-meth' } | |
| 90 95 | 
             
            Assert.stub(myobj, :myval).with(123){ |val| val.to_s }
         | 
| 91 96 | 
             
            myobj.myval
         | 
| 92 97 | 
             
              # => StubError: arity mismatch
         | 
| 93 | 
            -
            myobj. | 
| 98 | 
            +
            myobj.myval(123)
         | 
| 94 99 | 
             
              # => '123'
         | 
| 95 | 
            -
            myobj. | 
| 96 | 
            -
              # => StubError: ` | 
| 100 | 
            +
            myobj.myval(456)
         | 
| 101 | 
            +
              # => StubError: `myval(456)` not stubbed.
         | 
| 97 102 |  | 
| 98 103 | 
             
            Assert.unstub(myobj, :mymeth)
         | 
| 104 | 
            +
            Assert.unstub(myobj, :myval)
         | 
| 99 105 |  | 
| 100 106 | 
             
            myobj.mymeth
         | 
| 101 107 | 
             
              # => 'meth'
         | 
| @@ -105,15 +111,62 @@ myobj.myval(456) | |
| 105 111 | 
             
              # => 456
         | 
| 106 112 | 
             
            ```
         | 
| 107 113 |  | 
| 108 | 
            -
            Assert comes with a  | 
| 109 | 
            -
            to be friendly and complain if stubbing doesn't match up with the object/method being stubbed:
         | 
| 114 | 
            +
            Assert comes with a stubbing API - all it does is replace method calls.  In general it tries to be friendly and complain if stubbing doesn't match up with the object/method being stubbed:
         | 
| 110 115 |  | 
| 111 116 | 
             
            * each stub takes a block that is called in place of the method
         | 
| 112 117 | 
             
            * complains if you stub a method that the object doesn't respond to
         | 
| 113 118 | 
             
            * complains if you stub with an arity mismatch
         | 
| 114 | 
            -
            * no methods added to `Object`
         | 
| 119 | 
            +
            * no methods are added to `Object` to support stubbing
         | 
| 115 120 | 
             
            * stubs are auto-unstubbed on test teardown
         | 
| 116 121 |  | 
| 122 | 
            +
            ## Factory
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            ```ruby
         | 
| 125 | 
            +
            require 'assert/factory'
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            Assert::Factory.integer    #=> 15742
         | 
| 128 | 
            +
            Assert::Factory.integer(3) #=> 2
         | 
| 129 | 
            +
            Assert::Factory.float      #=> 87.2716908041922
         | 
| 130 | 
            +
            Assert::Factory.float(3)   #=> 2.5466638138805
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            Assert::Factory.date       #=> #<Date: 4915123/2,0,2299161>
         | 
| 133 | 
            +
            Assert::Factory.time       #=> Wed Sep 07 10:37:22 -0500 2016
         | 
| 134 | 
            +
            Assert::Factory.datetime   #=> #<DateTime: 302518290593/43200,0,2299161>
         | 
| 135 | 
            +
             | 
| 136 | 
            +
            Assert::Factory.string     #=> "boxsrbazeq"
         | 
| 137 | 
            +
            Assert::Factory.string(3)  #=> "rja"
         | 
| 138 | 
            +
            Assert::Factory.text       #=> "khcwyizmymajfzzxlfwz"
         | 
| 139 | 
            +
            Assert::Factory.text(3)    #=> "qcy"
         | 
| 140 | 
            +
            Assert::Factory.slug       #=> "licia"
         | 
| 141 | 
            +
            Assert::Factory.slug(3)    #=> "luu"
         | 
| 142 | 
            +
            Assert::Factory.hex        #=> "48797adb33"
         | 
| 143 | 
            +
            Assert::Factory.hex(3)     #=> "2fe"
         | 
| 144 | 
            +
            Assert::Factory.url        #=> "/cdqz/hqeq/zbsl"
         | 
| 145 | 
            +
            Assert::Factory.email      #=> "vyojvtxght@gmrin.com"
         | 
| 146 | 
            +
             | 
| 147 | 
            +
            Assert::Factory.file_name  #=> "kagahm.ybb"
         | 
| 148 | 
            +
            Assert::Factory.path       #=> "jbzf/omyk/vbha"
         | 
| 149 | 
            +
            Assert::Factory.dir_path   #=> "fxai/lwnq/urqu"
         | 
| 150 | 
            +
            Assert::Factory.file_path  #=> "bcno/pzxg/gois/mpvlfo.wdr"
         | 
| 151 | 
            +
             | 
| 152 | 
            +
            Assert::Factory.binary     #=> "\000\000\003S"
         | 
| 153 | 
            +
            Assert::Factory.boolean    #=> false
         | 
| 154 | 
            +
            ```
         | 
| 155 | 
            +
             | 
| 156 | 
            +
            `Assert::Factory` is an API for generating randomized data.  The randomization is tied to the runner seed so re-running tests with the same seed should produce the same random values.
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            You can also extend on your own factory class:
         | 
| 159 | 
            +
             | 
| 160 | 
            +
            ```ruby
         | 
| 161 | 
            +
            module Factory
         | 
| 162 | 
            +
              extend Assert::Factory
         | 
| 163 | 
            +
             | 
| 164 | 
            +
              def self.data
         | 
| 165 | 
            +
                { Factory.string => Factory.string }
         | 
| 166 | 
            +
              end
         | 
| 167 | 
            +
            end
         | 
| 168 | 
            +
            ```
         | 
| 169 | 
            +
             | 
| 117 170 | 
             
            ## CLI
         | 
| 118 171 |  | 
| 119 172 | 
             
            ```sh
         | 
| @@ -139,7 +192,7 @@ As an example, say your test folder has a file structure like so: | |
| 139 192 | 
             
            * `$ assert test/complex/fast_tests.rb` - runs all tests in fast_tests.rb
         | 
| 140 193 | 
             
            * `$ assert test/basic test/comp` - runs all tests in basic_tests.rb, complex_tests.rb, fast_tests.rb and slow_tests.rb
         | 
| 141 194 |  | 
| 142 | 
            -
            All you need to do is pass some sort of existing file path ( | 
| 195 | 
            +
            All you need to do is pass some sort of existing file path (use tab-completion!) and Assert will find any test files and run the tests in them.
         | 
| 143 196 |  | 
| 144 197 | 
             
            ## Configuring Assert
         | 
| 145 198 |  | 
| @@ -149,25 +202,25 @@ Assert.configure do |config| | |
| 149 202 | 
             
            end
         | 
| 150 203 | 
             
            ```
         | 
| 151 204 |  | 
| 152 | 
            -
            Assert uses a config pattern for specifying settings.  Using this pattern, you can configure settings, extensions, custom views, etc.  Settings can be configured in 4 different scopes and are applied in this order: User, Local,  | 
| 205 | 
            +
            Assert uses a config pattern for specifying settings.  Using this pattern, you can configure settings, extensions, custom views, etc.  Settings can be configured in 4 different scopes and are applied in this order: User, Local, ENV, CLI.
         | 
| 153 206 |  | 
| 154 207 | 
             
            ### User settings
         | 
| 155 208 |  | 
| 156 | 
            -
            Assert will look for and require the file `$HOME/.assert/init.rb`.  Use this file to specify user settings.  User settings can be overridden by Local,  | 
| 209 | 
            +
            Assert will look for and require the file `$HOME/.assert/init.rb`.  Use this file to specify user settings.  User settings can be overridden by Local, ENV, and CLI settings.
         | 
| 157 210 |  | 
| 158 211 | 
             
            ### Local settings
         | 
| 159 212 |  | 
| 160 | 
            -
            Assert will look for and require the file `./.assert.rb`.  Use this file to specify project settings.  Local settings can be overridden by  | 
| 213 | 
            +
            Assert will look for and require the file `./.assert.rb`.  Use this file to specify project settings.  Local settings can be overridden by ENV, and CLI settings.
         | 
| 161 214 |  | 
| 162 215 | 
             
            To specify a custom local settings file path, use the `ASSERT_LOCALFILE` env var.
         | 
| 163 216 |  | 
| 164 | 
            -
            ###  | 
| 217 | 
            +
            ### ENV settings
         | 
| 165 218 |  | 
| 166 | 
            -
            Assert  | 
| 219 | 
            +
            Assert uses ENV vars to drive certain settings.  Use these vars to specify specific environment settings.  ENV settings can be overridden by CLI settings.
         | 
| 167 220 |  | 
| 168 | 
            -
            ###  | 
| 221 | 
            +
            ### CLI settings
         | 
| 169 222 |  | 
| 170 | 
            -
            Assert  | 
| 223 | 
            +
            Assert accepts options from its CLI.  Use these options to specify absolute runtime settings.  CLI settings are always applied last and cannot be overridden.
         | 
| 171 224 |  | 
| 172 225 | 
             
            ## Running Tests
         | 
| 173 226 |  | 
| @@ -203,7 +256,7 @@ end | |
| 203 256 |  | 
| 204 257 | 
             
            ### Test Order
         | 
| 205 258 |  | 
| 206 | 
            -
            The default runner object runs tests in random order.  To run tests in a consistant order,  | 
| 259 | 
            +
            The default runner object runs tests in random order.  To run tests in a consistant order, pass a custom runner seed:
         | 
| 207 260 |  | 
| 208 261 | 
             
            In user/local settings file:
         | 
| 209 262 |  | 
| @@ -213,16 +266,34 @@ Assert.configure do |config| | |
| 213 266 | 
             
            end
         | 
| 214 267 | 
             
            ```
         | 
| 215 268 |  | 
| 269 | 
            +
            Using an ENV var:
         | 
| 270 | 
            +
             | 
| 271 | 
            +
            ```sh
         | 
| 272 | 
            +
            $ ASSERT_RUNNER_SEED=1234 assert
         | 
| 273 | 
            +
            ```
         | 
| 274 | 
            +
             | 
| 216 275 | 
             
            Using the CLI:
         | 
| 217 276 |  | 
| 218 277 | 
             
            ```sh
         | 
| 219 278 | 
             
            $ assert [-s|--runner-seed] 1234
         | 
| 220 279 | 
             
            ```
         | 
| 221 280 |  | 
| 222 | 
            -
             | 
| 281 | 
            +
            ### Run a single test
         | 
| 282 | 
            +
             | 
| 283 | 
            +
            You can choose to run just a single test so that you can focus on making it pass without the overhead/noise from the output of the other tests in the file.
         | 
| 284 | 
            +
             | 
| 285 | 
            +
            It is recommended that you only use this setting from the CLI.  To run just a single test, pass its file path and line number:
         | 
| 223 286 |  | 
| 224 287 | 
             
            ```sh
         | 
| 225 | 
            -
            $  | 
| 288 | 
            +
            $ assert [-t|--single-test] ./path/for/tests.rb:123
         | 
| 289 | 
            +
            ```
         | 
| 290 | 
            +
             | 
| 291 | 
            +
            **Note**: by default Assert outputs, in the details of each non-passing result, the cmd to re-run the result's test:
         | 
| 292 | 
            +
             | 
| 293 | 
            +
            ```
         | 
| 294 | 
            +
            FAIL: should pass
         | 
| 295 | 
            +
            ./test/unit/test_tests.rb:124
         | 
| 296 | 
            +
            assert -t ./test/unit/test_tests.rb:123
         | 
| 226 297 | 
             
            ```
         | 
| 227 298 |  | 
| 228 299 | 
             
            ### Verbose Output
         | 
| @@ -456,7 +527,7 @@ end | |
| 456 527 | 
             
            However, the view handler you use is itself configurable.  Define you own view handler class and specify it in your user/local settings:
         | 
| 457 528 |  | 
| 458 529 | 
             
            ```ruby
         | 
| 459 | 
            -
            class MyCustomView < Assert::View | 
| 530 | 
            +
            class MyCustomView < Assert::View
         | 
| 460 531 | 
             
              # define your view here...
         | 
| 461 532 | 
             
            end
         | 
| 462 533 |  | 
| @@ -467,7 +538,7 @@ end | |
| 467 538 |  | 
| 468 539 | 
             
            ### Anatomy of a View
         | 
| 469 540 |  | 
| 470 | 
            -
            A view class handles the logic and templating of test result output.  A view class should inherit from `Assert::View | 
| 541 | 
            +
            A view class handles the logic and templating of test result output.  A view class should inherit from `Assert::View`.  This defines default callback handlers for the test runner and gives access to a bunch of common helpers for reading test result data.
         | 
| 471 542 |  | 
| 472 543 | 
             
            Each view should implement the callback handler methods to output information at different points during the running of a test suite.  Callbacks have access to any view methods and should output information using `puts` and `prints`.  See the `DefaultView` template for a usage example.
         | 
| 473 544 |  | 
| @@ -534,7 +605,7 @@ Tests produce results as they are executed.  Every `assert` statement produces a | |
| 534 605 |  | 
| 535 606 | 
             
            ### View
         | 
| 536 607 |  | 
| 537 | 
            -
            A `View` object is responsible for rendering test result output.  Assert provides a `Assert::View | 
| 608 | 
            +
            A `View` object is responsible for rendering test result output.  Assert provides a `Assert::View` object to provide common helpers and default runner callback handlers for building views.  Assert also provides an `Assert::DefaultView` that it renders its output with.  See the "Viewing Test Results" section below for more details.
         | 
| 538 609 |  | 
| 539 610 | 
             
            ### Macro
         | 
| 540 611 |  | 
| @@ -560,4 +631,4 @@ If submitting a Pull Request, please: | |
| 560 631 |  | 
| 561 632 | 
             
            One note: please respect that Assert itself is intended to be the flexible, base-level, framework-type logic that should change little if at all.  Pull requests for niche functionality or personal testing philosphy stuff will likely not be accepted.
         | 
| 562 633 |  | 
| 563 | 
            -
            If you wish to extend Assert for your niche purpose/desire/philosophy, please do so in it's own gem (preferrably named `assert-<whatever>`) that uses Assert as a dependency. | 
| 634 | 
            +
            If you wish to extend Assert for your niche purpose/desire/philosophy, please do so in it's own gem (preferrably named `assert-<whatever>`) that uses Assert as a dependency.
         | 
    
        data/assert.gemspec
    CHANGED
    
    | @@ -8,8 +8,8 @@ Gem::Specification.new do |gem| | |
| 8 8 | 
             
              gem.version     = Assert::VERSION
         | 
| 9 9 | 
             
              gem.authors     = ["Kelly Redding", "Collin Redding"]
         | 
| 10 10 | 
             
              gem.email       = ["kelly@kellyredding.com", "collin.redding@me.com"]
         | 
| 11 | 
            -
              gem. | 
| 12 | 
            -
              gem. | 
| 11 | 
            +
              gem.summary     = %q{Assertion style testing framework.}
         | 
| 12 | 
            +
              gem.description = %q{Assertion style testing framework.}
         | 
| 13 13 | 
             
              gem.homepage    = "http://github.com/redding/assert"
         | 
| 14 14 | 
             
              gem.license     = 'MIT'
         | 
| 15 15 |  | 
    
        data/lib/assert/assert_runner.rb
    CHANGED
    
    | @@ -13,11 +13,12 @@ module Assert | |
| 13 13 | 
             
                  Assert::CLI.bench('Apply settings') do
         | 
| 14 14 | 
             
                    apply_user_settings
         | 
| 15 15 | 
             
                    apply_local_settings
         | 
| 16 | 
            -
                    apply_option_settings(test_options)
         | 
| 17 16 | 
             
                    apply_env_settings
         | 
| 17 | 
            +
                    apply_option_settings(test_options)
         | 
| 18 18 | 
             
                  end
         | 
| 19 19 |  | 
| 20 | 
            -
                   | 
| 20 | 
            +
                  paths = test_paths.empty? ? [*self.config.test_dir] : test_paths
         | 
| 21 | 
            +
                  files = lookup_test_files(paths)
         | 
| 21 22 | 
             
                  init(files, path_of(self.config.test_dir, files.first))
         | 
| 22 23 | 
             
                end
         | 
| 23 24 |  | 
| @@ -33,15 +34,20 @@ module Assert | |
| 33 34 | 
             
                  end
         | 
| 34 35 |  | 
| 35 36 | 
             
                  # load the test files
         | 
| 36 | 
            -
                  self.config. | 
| 37 | 
            -
                   | 
| 37 | 
            +
                  runner, suite, view = self.config.runner, self.config.suite, self.config.view
         | 
| 38 | 
            +
                  runner.before_load(test_files)
         | 
| 39 | 
            +
                  suite.before_load(test_files)
         | 
| 40 | 
            +
                  view.before_load(test_files)
         | 
| 41 | 
            +
                  Assert::CLI.bench("Require #{test_files.size} test files") do
         | 
| 38 42 | 
             
                    test_files.each{ |p| require p }
         | 
| 39 43 | 
             
                  end
         | 
| 40 44 | 
             
                  if self.config.debug
         | 
| 41 45 | 
             
                    puts Assert::CLI.debug_msg("Test files:")
         | 
| 42 46 | 
             
                    test_files.each{ |f| puts Assert::CLI.debug_msg("  #{f}") }
         | 
| 43 47 | 
             
                  end
         | 
| 44 | 
            -
                   | 
| 48 | 
            +
                  runner.after_load
         | 
| 49 | 
            +
                  suite.after_load
         | 
| 50 | 
            +
                  view.after_load
         | 
| 45 51 | 
             
                end
         | 
| 46 52 |  | 
| 47 53 | 
             
                def run
         | 
| @@ -62,17 +68,19 @@ module Assert | |
| 62 68 | 
             
                  safe_require(ENV['ASSERT_LOCALFILE'] || path_of(LOCAL_SETTINGS_FILE, Dir.pwd))
         | 
| 63 69 | 
             
                end
         | 
| 64 70 |  | 
| 65 | 
            -
                def apply_option_settings(options)
         | 
| 66 | 
            -
                  self.config.apply(options)
         | 
| 67 | 
            -
                end
         | 
| 68 | 
            -
             | 
| 69 71 | 
             
                def apply_env_settings
         | 
| 70 72 | 
             
                  self.config.runner_seed ENV['ASSERT_RUNNER_SEED'].to_i if ENV['ASSERT_RUNNER_SEED']
         | 
| 71 73 | 
             
                end
         | 
| 72 74 |  | 
| 73 | 
            -
                def  | 
| 75 | 
            +
                def apply_option_settings(options)
         | 
| 76 | 
            +
                  self.config.apply(options)
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                def lookup_test_files(test_paths)
         | 
| 74 80 | 
             
                  file_paths = if self.config.changed_only
         | 
| 75 81 | 
             
                    changed_test_files(test_paths)
         | 
| 82 | 
            +
                  elsif self.config.single_test?
         | 
| 83 | 
            +
                    globbed_test_files(self.config.single_test_file_path)
         | 
| 76 84 | 
             
                  else
         | 
| 77 85 | 
             
                    globbed_test_files(test_paths)
         | 
| 78 86 | 
             
                  end
         | 
| @@ -101,9 +109,8 @@ module Assert | |
| 101 109 | 
             
                  require settings_file if File.exists?(settings_file)
         | 
| 102 110 | 
             
                end
         | 
| 103 111 |  | 
| 104 | 
            -
                # this method inspects a test path and finds the test dir path.
         | 
| 105 | 
            -
             | 
| 106 112 | 
             
                def path_of(segment, a_path)
         | 
| 113 | 
            +
                  # this method inspects a test path and finds the test dir path.
         | 
| 107 114 | 
             
                  full_path = File.expand_path(a_path || '.', Dir.pwd)
         | 
| 108 115 | 
             
                  seg_pos = full_path.index(segment_regex(segment))
         | 
| 109 116 | 
             
                  File.join(seg_pos && (seg_pos > 0) ? full_path[0..(seg_pos-1)] : full_path, segment)
         | 
    
        data/lib/assert/assertions.rb
    CHANGED
    
    
    
        data/lib/assert/cli.rb
    CHANGED
    
    | @@ -36,6 +36,9 @@ module Assert | |
| 36 36 | 
             
                    option 'changed_ref', 'reference for changes, use with `-c` opt', {
         | 
| 37 37 | 
             
                      :abbrev => 'r', :value => ''
         | 
| 38 38 | 
             
                    }
         | 
| 39 | 
            +
                    option 'single_test', 'only run the test on the given file/line', {
         | 
| 40 | 
            +
                      :abbrev => 't', :value => ''
         | 
| 41 | 
            +
                    }
         | 
| 39 42 | 
             
                    option 'pp_objects', 'pretty-print objects in fail messages', {
         | 
| 40 43 | 
             
                      :abbrev => 'p'
         | 
| 41 44 | 
             
                    }
         | 
    
        data/lib/assert/config.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 | 
            +
            require 'assert/default_runner'
         | 
| 2 | 
            +
            require 'assert/default_suite'
         | 
| 1 3 | 
             
            require 'assert/default_view'
         | 
| 2 | 
            -
            require 'assert/ | 
| 3 | 
            -
            require 'assert/suite'
         | 
| 4 | 
            +
            require 'assert/file_line'
         | 
| 4 5 | 
             
            require 'assert/utils'
         | 
| 5 6 |  | 
| 6 7 | 
             
            module Assert
         | 
| @@ -21,13 +22,14 @@ module Assert | |
| 21 22 | 
             
                settings :view, :suite, :runner
         | 
| 22 23 | 
             
                settings :test_dir, :test_helper, :test_file_suffixes
         | 
| 23 24 | 
             
                settings :changed_proc, :pp_proc, :use_diff_proc, :run_diff_proc
         | 
| 24 | 
            -
                settings :runner_seed, :changed_only, :changed_ref, : | 
| 25 | 
            -
                settings :capture_output, :halt_on_fail, :profile | 
| 25 | 
            +
                settings :runner_seed, :changed_only, :changed_ref, :single_test
         | 
| 26 | 
            +
                settings :pp_objects, :capture_output, :halt_on_fail, :profile
         | 
| 27 | 
            +
                settings :verbose, :list, :debug
         | 
| 26 28 |  | 
| 27 29 | 
             
                def initialize(settings = nil)
         | 
| 28 | 
            -
                  @suite  = Assert::Suite.new(self)
         | 
| 29 30 | 
             
                  @view   = Assert::DefaultView.new(self, $stdout)
         | 
| 30 | 
            -
                  @ | 
| 31 | 
            +
                  @suite  = Assert::DefaultSuite.new(self)
         | 
| 32 | 
            +
                  @runner = Assert::DefaultRunner.new(self)
         | 
| 31 33 |  | 
| 32 34 | 
             
                  @test_dir    = "test"
         | 
| 33 35 | 
             
                  @test_helper = "helper.rb"
         | 
| @@ -42,6 +44,7 @@ module Assert | |
| 42 44 | 
             
                  @runner_seed    = begin; srand; srand % 0xFFFF; end.to_i
         | 
| 43 45 | 
             
                  @changed_only   = false
         | 
| 44 46 | 
             
                  @changed_ref    = ''
         | 
| 47 | 
            +
                  @single_test    = ''
         | 
| 45 48 | 
             
                  @pp_objects     = false
         | 
| 46 49 | 
             
                  @capture_output = false
         | 
| 47 50 | 
             
                  @halt_on_fail   = true
         | 
| @@ -59,6 +62,21 @@ module Assert | |
| 59 62 | 
             
                      self.send(name.to_s, settings[name])
         | 
| 60 63 | 
             
                    end
         | 
| 61 64 | 
             
                  end
         | 
| 65 | 
            +
                  @single_test_file_line = nil
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                def single_test?
         | 
| 69 | 
            +
                  !self.single_test.empty?
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                def single_test_file_line
         | 
| 73 | 
            +
                  @single_test_file_line ||= Assert::FileLine.parse(
         | 
| 74 | 
            +
                    File.expand_path(self.single_test, Dir.pwd)
         | 
| 75 | 
            +
                  )
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                def single_test_file_path
         | 
| 79 | 
            +
                  self.single_test_file_line.file if self.single_test_file_line
         | 
| 62 80 | 
             
                end
         | 
| 63 81 |  | 
| 64 82 | 
             
              end
         | 
| @@ -2,10 +2,22 @@ module Assert | |
| 2 2 |  | 
| 3 3 | 
             
              module ConfigHelpers
         | 
| 4 4 |  | 
| 5 | 
            +
                def runner; self.config.runner; end
         | 
| 6 | 
            +
                def suite;  self.config.suite;  end
         | 
| 7 | 
            +
                def view;   self.config.view;   end
         | 
| 8 | 
            +
             | 
| 5 9 | 
             
                def runner_seed
         | 
| 6 10 | 
             
                  self.config.runner_seed
         | 
| 7 11 | 
             
                end
         | 
| 8 12 |  | 
| 13 | 
            +
                def single_test?
         | 
| 14 | 
            +
                  self.config.single_test?
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def single_test_file_line
         | 
| 18 | 
            +
                  self.config.single_test_file_line
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 9 21 | 
             
                def count(type)
         | 
| 10 22 | 
             
                  self.config.suite.count(type)
         | 
| 11 23 | 
             
                end
         | 
| @@ -18,43 +30,18 @@ module Assert | |
| 18 30 | 
             
                  self.count(:pass) == self.count(:results)
         | 
| 19 31 | 
             
                end
         | 
| 20 32 |  | 
| 21 | 
            -
                 | 
| 22 | 
            -
                def run_time(format = '%.6f')
         | 
| 33 | 
            +
                def formatted_run_time(format = '%.6f')
         | 
| 23 34 | 
             
                  format % self.config.suite.run_time
         | 
| 24 35 | 
             
                end
         | 
| 25 36 |  | 
| 26 | 
            -
                 | 
| 27 | 
            -
                def test_rate(format = '%.6f')
         | 
| 37 | 
            +
                def formatted_test_rate(format = '%.6f')
         | 
| 28 38 | 
             
                  format % self.config.suite.test_rate
         | 
| 29 39 | 
             
                end
         | 
| 30 40 |  | 
| 31 | 
            -
                 | 
| 32 | 
            -
                def result_rate(format = '%.6f')
         | 
| 41 | 
            +
                def formatted_result_rate(format = '%.6f')
         | 
| 33 42 | 
             
                  format % self.config.suite.result_rate
         | 
| 34 43 | 
             
                end
         | 
| 35 44 |  | 
| 36 | 
            -
                # get a uniq list of contexts for the test suite
         | 
| 37 | 
            -
                def suite_contexts
         | 
| 38 | 
            -
                  @suite_contexts ||= self.config.suite.tests.inject([]) do |contexts, test|
         | 
| 39 | 
            -
                    contexts << test.context_info.klass
         | 
| 40 | 
            -
                  end.uniq
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                def ordered_suite_contexts
         | 
| 44 | 
            -
                  self.suite_contexts.sort{ |a,b| a.to_s <=> b.to_s }
         | 
| 45 | 
            -
                end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                # get a uniq list of files containing contexts for the test suite
         | 
| 48 | 
            -
                def suite_files
         | 
| 49 | 
            -
                  @suite_files ||= self.config.suite.tests.inject([]) do |files, test|
         | 
| 50 | 
            -
                    files << test.context_info.file
         | 
| 51 | 
            -
                  end.uniq
         | 
| 52 | 
            -
                end
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                def ordered_suite_files
         | 
| 55 | 
            -
                  self.suite_files.sort{ |a,b| a.to_s <=> b.to_s }
         | 
| 56 | 
            -
                end
         | 
| 57 | 
            -
             | 
| 58 45 | 
             
                def show_test_profile_info?
         | 
| 59 46 | 
             
                  !!self.config.profile
         | 
| 60 47 | 
             
                end
         |