CARVIEW |
Select Language
HTTP/2 302
server: nginx
date: Fri, 22 Aug 2025 11:48:47 GMT
content-type: text/plain; charset=utf-8
content-length: 0
x-archive-redirect-reason: found capture at 20180611031100
location: https://web.archive.org/web/20180611031100/https://github.com/adamwiggins/bacon
server-timing: captures_list;dur=1.189629, exclusion.robots;dur=0.028721, exclusion.robots.policy;dur=0.013153, esindex;dur=0.013259, cdx.remote;dur=50.612938, LoadShardBlock;dur=618.683153, PetaboxLoader3.datanode;dur=305.176477, PetaboxLoader3.resolve;dur=125.609314
x-app-server: wwwb-app239
x-ts: 302
x-tr: 887
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=1
set-cookie: wb-p-SERVER=wwwb-app239; path=/
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 200
server: nginx
date: Fri, 22 Aug 2025 11:48:48 GMT
content-type: text/html; charset=utf-8
x-archive-orig-server: GitHub.com
x-archive-orig-date: Mon, 11 Jun 2018 03:11:00 GMT
x-archive-orig-transfer-encoding: chunked
x-archive-orig-status: 200 OK
x-archive-orig-cache-control: no-cache
x-archive-orig-vary: X-PJAX
x-archive-orig-set-cookie: logged_in=no; domain=.github.com; path=/; expires=Fri, 11 Jun 2038 03:11:00 -0000; secure; HttpOnly
x-archive-orig-set-cookie: _gh_sess=R1BkYytKK1RTc1p4dlA3WjJOR2prZk5nRFNqYlhvZWV1WDhYazN4dFNhSnRoYkU2a2pPZlN6Szd1N1FBQXgvSzJ6UkJNT1RkNEZsalBkZVpZY25hcnhjNEtVNG5sd2ZMVHZvRUlrdGdhS2dKcGtUUHNFZFJoN1h5THBhUExZbnJjb3FnWFc4REIvU1RhVlZsSlNQNWFpVkgyd09CNlpGSExsUXI1ZnhiZkZ2c3M0WkJIemp5aHBCRTR3ZjJoVUw1dEs2Uml6d3doMmMwaVhTYkt2dlg3UXp0aG0vOWQzYzVMSG9wSFVVbjEyaXp5Q1JjbmxOdHdHbkVwN0VIQU5SREhVKzNpRWV4UUhqeUN2cG8zTm5rVjB4WTJ2b2F3eE9lUFNURXNaTWUwTEFTS2thcktmc3BlTW51RC84T3oyWTF4UHI0OENtYU43NEs3cTMydVhWczRVOVRkZjBybFpMV0p5M21GVmRJZktUZlJmdFAySFRPYy9XRkhEYkloSkZJYWJyNXV2OXZ6UkUrN1BLQnMrd0xDMkp6ZmY4WXNvM3psWjVsdE9jcHA3RT0tLU5URHI2NUorL3B0cWQwUEZxTXRVVVE9PQ%3D%3D--f87dae1eebb246ed00de102d3aac0df99e60d2b8; path=/; secure; HttpOnly
x-archive-orig-x-request-id: 84aa7e6d-26f4-4d1f-9b26-e8b752ec13f2
x-archive-orig-x-runtime: 0.234118
x-archive-orig-strict-transport-security: max-age=31536000; includeSubdomains; preload
x-archive-orig-x-frame-options: deny
x-archive-orig-x-content-type-options: nosniff
x-archive-orig-x-xss-protection: 1; mode=block
x-archive-orig-expect-ct: max-age=2592000, report-uri="https://api.github.com/_private/browser/errors"
x-archive-orig-content-security-policy: default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com status.github.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src assets-cdn.github.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: assets-cdn.github.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src assets-cdn.github.com; style-src 'unsafe-inline' assets-cdn.github.com
x-archive-orig-x-runtime-rack: 0.251580
x-archive-orig-x-github-request-id: 87B6:57EF:5E09833:AE41C1A:5B1DE844
x-archive-guessed-content-type: text/html
x-archive-guessed-charset: utf-8
memento-datetime: Mon, 11 Jun 2018 03:11:00 GMT
link: ; rel="original", ; rel="timemap"; type="application/link-format", ; rel="timegate", ; rel="first memento"; datetime="Mon, 11 Jun 2018 03:11:00 GMT", ; rel="memento"; datetime="Mon, 11 Jun 2018 03:11:00 GMT", ; rel="next memento"; datetime="Mon, 14 Sep 2020 23:09:23 GMT", ; rel="last memento"; datetime="Mon, 14 Sep 2020 23:09:23 GMT"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: archiveteam_github_20180703020419/archiveteam_github_20180703020419.megawarc.warc.gz
server-timing: captures_list;dur=0.527812, exclusion.robots;dur=0.018149, exclusion.robots.policy;dur=0.007869, esindex;dur=0.009504, cdx.remote;dur=385.541478, LoadShardBlock;dur=116.268526, PetaboxLoader3.datanode;dur=103.547133, PetaboxLoader3.resolve;dur=107.834820, load_resource;dur=143.326810
x-app-server: wwwb-app239
x-ts: 200
x-tr: 731
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
content-encoding: gzip
GitHub - adamwiggins/bacon: a small RSpec clone
Fetching latest commit…
Permalink
adamwiggins/bacon forked from chneukirchen/bacon
Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
a small RSpec clone
https://rubyforge.org/projects/test-spec/
Clone or download
Launching GitHub Desktop...
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop...
If nothing happens, download GitHub Desktop and try again.
Launching Xcode...
If nothing happens, download Xcode and try again.
Launching Visual Studio...
If nothing happens, download the GitHub extension for Visual Studio and try again.
Pull request
Compare
This branch is 48 commits behind chneukirchen:master.

Cannot retrieve the latest commit at this time.
Failed to load latest commit information. | |||
![]() |
bin | ||
![]() |
lib | ||
![]() |
test | ||
![]() |
.gitignore | ||
![]() |
COPYING | ||
![]() |
README | ||
![]() |
Rakefile |
README
= Bacon -- small RSpec clone. "Truth will sooner come out from error than from confusion." ---Francis Bacon Bacon is a small RSpec clone weighing less than 350 LoC but nevertheless providing all essential features. == Whirl-wind tour require 'bacon' describe 'A new array' do before do @ary = Array.new end it 'should be empty' do @ary.should.be.empty @ary.should.not.include 1 end it 'should have zero size' do @ary.size.should.equal 0 @ary.size.should.be.close 0.1, 0.5 end it 'should raise on trying fetch any index' do lambda { @ary.fetch 0 }. should.raise(IndexError). message.should.match(/out of array/) # Alternatively: should.raise(IndexError) { @ary.fetch 0 } end it 'should have an object identity' do @ary.should.not.be.same_as Array.new end # Custom assertions are trivial to do, they are lambdas returning a # boolean vale: palindrome = lambda { |obj| obj == obj.reverse } it 'should be a palindrome' do @ary.should.be.a palindrome end it 'should have super powers' do should.flunk "no super powers found" end end Now run it: $ bacon whirlwind.rb A new array - should be empty - should have zero size - should raise on trying fetch any index - should have an object identity - should be a palindrome - should have super powers [FAILED] Bacon::Error: no super powers found ./whirlwind.rb:39: A new array - should have super powers ./whirlwind.rb:38 ./whirlwind.rb:3 6 specifications (9 requirements), 1 failures, 0 errors If you want shorter output, use the Test::Unit format: $ bacon -q whirlwind.rb .....F Bacon::Error: no super powers found ./whirlwind.rb:39: A new array - should have super powers ./whirlwind.rb:38 ./whirlwind.rb:3 6 tests, 9 assertions, 1 failures, 0 errors It also supports TAP: $ bacon -p whirlwind.rb ok 1 - should be empty ok 2 - should have zero size ok 3 - should raise on trying fetch any index ok 4 - should have an object identity ok 5 - should be a palindrome not ok 6 - should have super powers: FAILED # Bacon::Error: no super powers found # ./whirlwind.rb:39: A new array - should have super powers # ./whirlwind.rb:38 # ./whirlwind.rb:3 1..6 # 6 tests, 9 assertions, 1 failures, 0 errors $ bacon -p whirlwind.rb | taptap -q Tests took 0.00 seconds. FAILED tests 6 6) should have super powers: FAILED Failed 1/6 tests, 83.33% okay. (taptap is available from https://chneukirchen.org/repos/taptap/) == Implemented assertions * should.<predicate> and should.be.<predicate> * should.equal * should.match * should.be.identical_to / should.be.same_as * should.raise(*exceptions) { } * should.change { } * should.throw(symbol) { } * should.satisfy { |object| } == Added core predicates * Object#true? * Object#false? * Proc#change? * Proc#raise? * Proc#throw? * Numeric#close? == before/after before and after need to be defined before the first specification in a context and are run before and after each specification. As of Bacon 1.1, before and after do nest in nested contexts. == Shared contexts You can define shared contexts in Bacon like this: shared "an empty container" do it "should have size zero" do end it "should be empty" do end end context "A new array" do behaves_like "an empty container" end These contexts are not executed on their own, but can be included with behaves_like in other contexts. You can use shared contexts to structure suites with many recurring specifications. == Matchers Custom matchers are simply lambdas returning a boolean value, for example: def shorter_than(max_size) lambda { |obj| obj.size < max_size } end [1,2,3].should.be shorter_than(5) You can use modules and extend to group matchers for use in multiple contexts. == bacon standalone runner -s, --specdox do AgileDox-like output (default) -q, --quiet do Test::Unit-like non-verbose output -p, --tap do TAP (Test Anything Protocol) output -o, --output FORMAT do FORMAT (SpecDox/TestUnit/Tap) output -a, --automatic gather tests from ./test/, include ./lib/ -n, --name NAME runs tests matching regexp NAME -t, --testcase TESTCASE runs tests in TestCases matching regexp TESTCASE If you don't want to use the standalone runner, run Bacon.summary_on_exit to install an exit handler showing the summary. == Object#should You can use Object#should outside of contexts, where the result of assertion will be returned as a boolean. This is nice for demonstrations, quick checks and doctest tests. >> require 'bacon' >> (1 + 1).should.equal 2 => true >> (6*9).should.equal 42 => false == Bacon with autotest Since version 1.0, there is autotest support. You need to tag your test directories (test/ or spec/) by creating an .bacon file there. Autotest then will find it. bin/bacon needs to be in PATH or RUBYPATH. == Converting specs spec-converter is a simple tool to convert test-unit or dust style tests to test/spec specs. It can be found at https://opensource.thinkrelevance.com/wiki/spec_converter. == Thanks to * Michael Fellinger, for fixing Bacon for 1.9 and various improvements. * Gabriele Renzi, for implementing Context#should. * James Tucker, for the autotest support * everyone contributing bug fixes. == History * January 7, 2008: First public release 0.9. * July 6th, 2008: Second public release 1.0. * Add Context#should as a shortcut for Context#it('should ' + _). * describe now supports multiple arguments for better organization. * Empty specifications are now erroneous. * after-blocks run in the case of exceptions too. * Autotest support. * Bug fixes. * XXX, 2008: Third public release 1.1. * Add -Q/--no-backtraces to not show details about failed specifications. * Nested before/after == Contact Please mail bugs, suggestions and patches to <mailto:chneukirchen@gmail.com>. Git repository (patches rebased on HEAD are most welcome): https://github.com/chneukirchen/bacon git://github.com/chneukirchen/bacon.git == Copying Copyright (C) 2007, 2008 Christian Neukirchen <purl.org/net/chneukirchen> Bacon is freely distributable under the terms of an MIT-style license. See COPYING or https://www.opensource.org/licenses/mit-license.php. == Links Behavior-Driven Development:: <https://behaviour-driven.org/> RSpec:: <https://rspec.rubyforge.org/> test/spec:: <https://test-spec.rubyforge.org/> Christian Neukirchen:: <https://chneukirchen.org/>
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session.
You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.