Skip to content
This repository
  • 522 commits
  • 156 files changed
  • 28 comments
  • 20 contributors
This comparison is big! We're only showing the most recent 250 commits
Oct 30, 2011
Matijs van Zuijlen Eliminate the remaining warnings emitted by rspec-core.
There are still some emitted by upstream dependencies.

- Closes #488.
648b344
David Chelimsky update changelog for #488 9fb2798
David Chelimsky dev: fix ruby-debug version (and deps) for 1.9.2 9a85bd9
David Chelimsky cap Ruby in changelog d36faf2
David Chelimsky align order option on CLI and in RSpec.config (was orderby in the lat…
…ter)
4de9738
David Chelimsky dev: use --tag ui for spec:ui
This was managed with a special options file, but we don't need that now
that tags in rake task's rspec_opts can override those in .rspec.
b5be29c
David Chelimsky change seed_to_report to seed (it works the same way, and we don't ne…
…ed a separate method for it)
630f54e
David Chelimsky Support --seed 123 (equivalent of --order rand:123) a116b36
David Chelimsky changelog for prev commit 4406e9f
David Chelimsky Restore reported run time to begin after files are loaded.
- was causing problems for spork users and others.
- closes #475.

This reverts commit fd04952, with
a couple of minor changes/additions.
24a3ada
David Chelimsky move order option to .rspec file so it can be overridden on the CLI 024638f
David Chelimsky add '--order default' option
This allows you to override --order rand in a .rspec file from the CLI.
It actually worked before, but it was completely by accident - this
makes it explicit and less likely to regress in the future.

Related to #403.
9a22066
David Chelimsky Gherkin loves HTML more than Markdown 529d467
David Chelimsky config.seed always returns the @seed value
Moved the responsibility of not reporting a seed if not randomizing
to CommandLine.
9da117b
Nov 01, 2011
David Chelimsky formalize Reporter#report as an API to support extensions like intera…
…ctive_rspec
f415115
David Chelimsky dev: gemfile tweaks ac66e9f
David Chelimsky doc: how about a touch of abstraction cc0468f
David Chelimsky doc: make Warning look like other yardoc tags 6050b3c
David Chelimsky doc: make Warning look even more like other yardoc tags f6fb5ac
Nov 02, 2011
Myron Marston Fix spec so it matches with the description.
The old spec wasn't actually specifying anything.
cb975e0
Myron Marston Simplify how the expect_with configuration works.
- There's no need to include RSpec::Matchers or Test::Unit::Assertions into an adapter module when we can just include them directly.
- It makes it possible to interrogate @expectation_frameworks to see what was already configured and included.  Before, @expectation_frameworks contained [RSpec::Core::ExpectationFrameworkAdapter], regardless of what was configured.
511f4ba
Myron Marston Don't raise an error when the user is re-setting the existing config. f2dc2f8
Nov 03, 2011
David Chelimsky changelog for #494 and #490 294e379
David Chelimsky Change config.color_enabled (getter/setter/predicate) to color to align
with --[no]-color CLI option.

- color_enabled is still supported for now, but will likely be
  deprecated in a 2.x release so we can remove it in 3.0.
a862270
David Chelimsky spec both color and color_enabled 60379b8
David Chelimsky --color on command line or in .rspec (etc) overrides setting in RSpec…
….configure
b563e7d
David Chelimsky CLI tags override their inverses in file options and RSpec.configure
Fixes #369.
602c23b
David Chelimsky Fix bug with full_description and line_numbers= from previous commit. 61c8ec6
David Chelimsky no need for special handling 62f8c43
David Chelimsky (Almost) all command line args can now override RSpec.configure
- Closes #369.
2de55b8
David Chelimsky eliminate the many, many warnings introduced by last commit 9b8e1d1
David Chelimsky don't force line_number or full_description (both of which work bette…
…r on the CLI)
32dbe49
Nov 04, 2011
David Chelimsky path/to/file.rb:37 overrides other filters 6ecf82b
David Chelimsky Restore rand:seed behavior
--order and --seed no longer override RSpec.configure. They should, so
this should be revisited, but this gets the common case working again.
0b28665
Nov 05, 2011
David Chelimsky just add seed and order to the non-forced-options list 1599198
David Chelimsky don't force debug (restores debug behavior) aab0cba
David Chelimsky add benchmark that runs a spec with many examples 83a299f
David Chelimsky begin to move filter management to a single Filter object 9eb45d3
David Chelimsky filter using Filter instead of calling the inclusion/exclusion filter…
…s separately
2595ccf
David Chelimsky ConfigurationOptions uses Filter to manage merging 8062102
David Chelimsky Improve display of run options 765d8c7
David Chelimsky reduce feature envy on Filter 799d2bd
David Chelimsky rename Filter to FilterManager d9115a7
David Chelimsky fix cukes related to filtering 8285766
David Chelimsky changelog d3604a9
David Chelimsky only add a newline if there are both inclusion and exclusion filters e524fa2
David Chelimsky remove unnecessary alias d8b7d36
David Chelimsky delete obsolete methods 939c765
David Chelimsky deprecate :if and :unless as keys for RSpec.configuration.filter_run_…
…excluding
44965b4
David Chelimsky organize the output from rspec --help 8b86187
David Chelimsky rdoc updates ef11f68
David Chelimsky more rdoc updates 1959d05
Nov 06, 2011
David Chelimsky rdoc: hooks, configuration, and more fc67575
David Chelimsky rdoc: ordering info for after hooks 0f9aa32
David Chelimsky reformat the changelog file 3df9693
David Chelimsky bump to 2.8.0.rc1 4ac7447
David Chelimsky make sure we can override order/seed when it is defined in RSpec.conf…
…igure
46485e1
Nov 07, 2011
David Chelimsky add Changelog and License to the generated RDoc 6f173cc
David Chelimsky rename ClassMethods/InstanceMethods to ExampleGroupMethods/ExampleMet…
…hods (more descriptive)

- also add more rdoc
480f419
David Chelimsky use described_class instead of deprecated describes (but keep support…
…ing describes for now)
5a2157b
David Chelimsky dev: rake clobber removes generated docs 9b6a8fe
Nov 08, 2011
David Chelimsky update License and/or authors in gemspec ab02342
David Chelimsky update email addy and homepage in gemspec d1ea9b9
Nov 09, 2011
David Chelimsky fix the formatting in the changelog 96abea4
David Chelimsky more changelog formatting 541c02a
David Chelimsky more README 9e9f8a4
Nov 10, 2011
Peter Schröder add an --init switch to the rspec command
- Closes #430.
3f482b7
David Chelimsky merge --configure and --init into a single command
- #430

- generates .rspec if not present
- generates spec/spec_helper if not present
- offers to delete obsolete autotest/discover.rb if present
- offers to delete obsolete lib/tasks/rspec.rake if present
3eff799
David Chelimsky changelog for #430 8a613b5
David Chelimsky changelog tweak fe4d40c
Nov 11, 2011
David Chelimsky refactoring: extract method for warning 13586e0
David Chelimsky refactoring: break up complex method 964a302
David Chelimsky refactoring: break up complex method 7c52488
Nov 12, 2011
Calvin Bascom Create the fakefs home directory path so writes to ~/.rspec succeed 88b342b
David Chelimsky Merge pull request #501 from cbascom/config_spec_failures
Create the fakefs home directory path so writes to ~/.rspec succeed
a085b6f
Nov 13, 2011
Ian Leitch Use require_relative inplace of standard require if available. 49fcd9d
David Chelimsky Merge pull request #502 from ileitch/require_relative
Use require_relative inplace of standard require if available.
002f6b7
David Chelimsky use require_relative for subdirs as well (#502) 032f373
David Chelimsky changelog and benchmark for #502
Using require_relative instead of require results in a roughly 12%
improvement in the time it takes to load rspec-core's own lib files
c59cdf8
David Chelimsky use defined?(xxx) (tastes great, less filling) e8c392c
Calvin Bascom Add support for passing parameters and a block through include_examples 71f6911
Calvin Bascom Add support for passing parameters and a block to include_context as …
…well
c78da6c
Nov 14, 2011
Calvin Bascom Remove support for passing a block to include_[examples|context] 386e329
Calvin Bascom Add a warning if a block is provided to include_[examples|context] 26802fb
Nov 15, 2011
David Chelimsky Merge pull request #503 from cbascom/shared_example_params
Add support for passing parameters and a block through include_examples and include_context
2273007
David Chelimsky changelog and cleanup for #503 96ef203
David Chelimsky reorder the rake task args (no functional change) and clean up rspec's
own rake tasks
ca30f1a
David Chelimsky Merge pull request #485 from ragaskar/master
Use inject instead of reduce.
41c20df
David Chelimsky Merge pull request #451 from richievos/master
Add time to run each example to html formatter.
001522b
David Chelimsky Use 5 decimal places for time reports in html formatter.
- also update formatter specs and gold masters
- #451
79587d5
David Chelimsky changelog for #451 8de2a97
Nov 19, 2011
David Chelimsky rdoc 7a72f38
Justin Ko Don't shell out for "ui" specs. a349051
Justin Ko Don't exclude "ui" specs from the default spec run - they're fast eno…
…ugh now.
024ec12
Nov 22, 2011
David Chelimsky dev: add rdoc task 258c250
David Chelimsky rdoc - use yard's @private tag to hide a lot of noise. More to go, bu…
…t good progress.
feb5e85
Nov 23, 2011
Chris Griego Fix --drb --failure-exit-code 726c5cd
Nov 24, 2011
David Chelimsky more rdoc tweaks bbc965c
Nov 25, 2011
David Chelimsky dev: hack the Gemfile to print instructions for ruby-debug-base19 and…
… linecache19 on ruby-1.9.3
20a57f1
David Chelimsky restore debugger method directly to Kernel 3b996ae
David Chelimsky ci: don't warn about ruby-debug-base19 and linecache19 in ci 0404fe3
David Chelimsky dev: add support for a Gemfile-custom file so devs can customize their
dev env.
ee56306
David Chelimsky dev: move dev-env gems to Gemfile-custom.sample fcb8455
David Chelimsky add DEV-README.md
Would have prefered to call it README-DEV, but yard picks that up and
won't ignore it even if I tell it to :(
87d34b2
Nov 26, 2011
David Chelimsky Merge pull request #509 from cgriego/drb-failure-exit-code
Fix --drb --failure-exit-code
9dad329
Nov 27, 2011
fix small typo 9c43e1f
David Chelimsky Merge pull request #510 from AlexKVal/patch-1
fix small typo
721140d
Nov 28, 2011
simpler --tag TAG[:VALUE] parsing d5d12e8
remove duplication b062e79
use the OptionParser type option 91feb97
remove duplicate test 1d31b88
Justin Ko Merge pull request #513 from AlexKVal/remove_duplicate_test
remove duplicate test
8f944f5
Justin Ko Fix 1.8 syntax error. cb1d205
Nov 29, 2011
Matt Kirk Using Kernel.rand instead of just rand due to injection issues af76b40
Justin Ko Merge pull request #514 from hexgnu/master
Use `Kernel.rand` instead of `rand` for randomization.
bb2b02a
David Chelimsky Merge pull request #511 from AlexKVal/simpler_syntax
simpler --tag TAG[:VALUE] parsing and remove small duplication
a94414f
David Chelimsky Merge pull request #512 from AlexKVal/failure_exit_code
use the OptionParser type option
55152f1
David Chelimsky Restore the duplication removed from a spec in the previous commit. I
find it easier to read and it aligns better w/ the other examples in the
same file.

- #512.
eb034d7
David Chelimsky update gold masters for html formatter specs in jruby a53add2
David Chelimsky ci: restore jruby 9b2bc3e
Nov 30, 2011
testing all options are output 28462c2
Justin Ko Merge pull request #517 from AlexKVal/sml
unnecessary to_s
cf41edb
Dec 01, 2011
unnecessary to_s 159f889
more concise FilterManager#update 90e56a9
David Chelimsky Merge pull request #518 from AlexKVal/filter_manager
more concise FilterManager#update
c007248
David Chelimsky Merge pull request #516 from AlexKVal/drb_options_spec
ensure all options make it across DRb
6483c82
David Chelimsky ci: jruby build is still timing out on travis 355f727
little more test coverage for FilterManager#include ae95c6a
test for :replace priority in FilterManager#update 310defb
Myron Marston Tweak some JRuby/Java settings to run the cukes faster.
On my mac book pro this made them about twice as fast.

Before these changes, `time bundle exec cucumber` resulted in:
  bundle exec cucumber  2644.08s user 214.31s system 225% cpu 21:09.29 total

After these changes, `time bundle exec cucumber` resulted in:
  bundle exec cucumber  732.46s user 115.82s system 136% cpu 10:22.37 total
1592c94
David Chelimsky Merge pull request #519 from AlexKVal/filter_manager_spec
two additional tests for FilterManager
b2a9716
David Chelimsky Expose more intention revealing methods on FilterManager to eliminate
dependency on magic symbols.
399436c
David Chelimsky Fix bug introduced in previous commit where low priority exclusion
filters bypassed the deprecation warnings for if/unless.
a51efc7
Dec 02, 2011
David Chelimsky yield_unless_standalone.sub(/^yield_/,'') 58a2db4
David Chelimsky remove obsolete methods fbfa150
David Chelimsky changes 5cf3ec4
David Chelimsky rdoc: more detail on before/after hooks c149f58
remove unreachable code 9589b68
David Chelimsky add license to gemspec (and consequently the gem)
- Fixes #515
33e835a
David Chelimsky Merge pull request #521 from AlexKVal/metadata
remove unreachable code
f33faed
Dec 03, 2011
David Chelimsky rdoc 84cb5f2
David Chelimsky rdoc - hide more private stuff 1354f1a
Dec 04, 2011
David Chelimsky use github-flavored-markup in readme d13d28f
some cosmetics for Metadata class 31bc17d
David Chelimsky also see ... 2be6788
Dec 05, 2011
David Chelimsky Merge pull request #523 from AlexKVal/meta
some cosmetics for Metadata class
45eb0d3
Dec 06, 2011
Alexander Shemetovsky readability refactoring of #filter_applies? 19d157c
David Chelimsky Merge pull request #528 from AlexKVal/meta
readability refactoring of #filter_applies?
42f2e1c
David Chelimsky More refactoring of Metadata#filter_applies? and its helpers.
- related to #528.
742a658
David Chelimsky Metadata#filter_applies? - let Enumerable case fall through to defaul…
…t case

- #528
a7d6acd
Dec 08, 2011
Alexander Shemetovsky #prune tests with the double d6b1dbc
David Chelimsky Merge pull request #535 from AlexKVal/meta3
#prune tests with the double
4b91fa0
Alexander Shemetovsky remove overhead 5e7f7d8
David Chelimsky Merge pull request #536 from AlexKVal/fm_locations
remove overhead
0cdc8d4
Dec 09, 2011
Alexander Shemetovsky missed tests ced1340
Josh Cheek Add colour option for -p's slow test output
Worked on with @cdemyanovich during waza at @8thlight
de29068
Dec 10, 2011
David Chelimsky Merge pull request #539 from JoshCheek/profile-color-customization
Add colour option for -p's slow test output
d00e001
David Chelimsky Revert "Merge pull request #539 from JoshCheek/profile-color-customiz…
…ation"

This reverts commit d00e001, reversing
changes made to 0cdc8d4.
b624a00
Dec 11, 2011
David Chelimsky rdoc - add note about pending + before 59602fa
David Chelimsky move PendingExampleFixedError to RSpec::Core::Pending b5d10cc
David Chelimsky a little more duck typing and a little less dependency on class 7fa264f
David Chelimsky :pending => 'message' assigns message (defaults to 'No reason given' …
…if :pending => true)

- defaults to 'No reason given' if :pending => true
- change default pending message to 'No reason given'
- assign 'Not yet implemented' when no block passed to example (a.k.a.
  it/specify)
- Closes #540
eb3d26e
David Chelimsky better messages for xit, xspecify, xexample 763eaab
Dec 12, 2011
David Chelimsky rdoc 13fd3ef
David Chelimsky very subjective little refactoring 80bdf06
Dec 13, 2011
David Chelimsky fill in pending example ea12445
David Chelimsky clean up drb spec 5b2b374
David Chelimsky even though it's pending, it should be red, not green 4ad3630
Dec 14, 2011
David Chelimsky small doc change 1e241a5
Dec 17, 2011
ineverov Metadata supports arrays e.g. it "does something", :foo => ['bar','baz']
- Closes #504.
571f189
David Chelimsky Handle filter_applies? with an array in a more generic way.
Previous implementation handles only strings, numbers, symbols. This
handles anything in any array the same way it handles the same value
when its not in an array.

- #504.
864e192
David Chelimsky Changelog for #504 d0cdea9
Dec 18, 2011
David Chelimsky Refactoring: guard clause for the special cases
- #504.
de1dffa
David Chelimsky Refactoring: Hash is a special case too
- #504.
5e54d76
Alexander Shemetovsky --order --seed and #force. Removed duplication. 5a2dcc4
David Chelimsky Merge pull request #542 from AlexKVal/force1
--order --seed and #force. Removed duplication.
51e7e31
David Chelimsky Handle --tty option, but remove it from published options as it's onl…
…y for internal use.
dedea7c
David Chelimsky make the help text (i.e. rspec --help) more consistent 06b107b
Dec 19, 2011
David Chelimsky prep for 2.8.0.rc2 e69e7e7
Dec 25, 2011
David Chelimsky refactoring: simplify some methods in base_text_formatter 423af13
David Chelimsky rdoc af8d17c
Dec 27, 2011
Meike Wiemann metadata supports arrays for procs as well 2332f34
Justin Ko Merge pull request #545 from weidenfreak/master
metadata supports arrays for procs
aea82a9
Justin Ko changelog 8ee5005
Dec 30, 2011
David Chelimsky Ensure that each spec file is only loaded once.
- Fixes #546, in which trying to run 2 or more specific examples in the
  same file caused the whole file to be run. This was happening because
  the following command caused the file to be loaded twice, and the filter
  was not being applied to the second instance:

    rspec path/to/file:37 path/to/file:42
a97dab0
David Chelimsky Merge pull request #538 from AlexKVal/config_spec
missed tests
3428c6f
David Chelimsky Changelog for #546 43bd805
Jan 04, 2012
David Chelimsky add some starter code to the files generated by 189dc9c
David Chelimsky bump to 2.8.0 5bafc3a
Jan 06, 2012
David Chelimsky doc/file listings/configs cd58cb1
David Chelimsky bump some dev deps and move their declarations to gemspec 88868ff
David Chelimsky ci: without without development 6f8feca
David Chelimsky dev: syntax gem is a dev dependency a7ebbb4
Jan 09, 2012
David Chelimsky Changlog.md (not txt) 47d7d0c
Jan 12, 2012
David Chelimsky Use sets defined once instead of arrays declared in line where order
doesn't matter.

Very minor perf improvement, evidence of which is either anecdotal
(rspec's suite appears to run about 0.1 second faster on average) or
assumed based on benchmarks posted at
https://github.com/rspec/rspec-expectations/blob/master/benchmarks/set_vs_array_include.rb
d8af26e
David Chelimsky CONDITIONAL is more descriptive 7ce078e
Jan 13, 2012
David Chelimsky No need to override command line switches that don't accept false (e.g.
full_backtrace).

- Fixes $552.
454f3b4
Jan 16, 2012
ineverov Require 'set' a89fb4d
Merge branch 'master' of git://github.com/rspec/rspec-core db5a740
ineverov Remove to_set method call per d8af26e#commitcomment-861297 2b76e88
David Chelimsky Merge pull request #555 from ineverov/add_set_require
require 'set'
192cd02
David Chelimsky remove unnecessary indirection bf848ec
David Chelimsky Ensure that values passed to `config.filter_run` are respected when
running over DRb (using spork).

- Fixes #554.
80a2e38
Jan 17, 2012
David Chelimsky Changelog for #554 e0de119
Jan 21, 2012
Olek Janiszewski Fix Cucumber deprecation warnings
This removes the following warning:

    WARNING: Using 'Given/When/Then' in step definitions
    is deprecated, use 'step' to call other steps instead
8651de2
Justin Ko Merge pull request #559 from exviva/fix_cucumber_warnings
Fix Cucumber deprecation warnings
b94ec20
Jan 24, 2012
Justin Ko Ensure shared example groups are reset after a run (as example groups…
… are).
8e8fb2b
Jan 28, 2012
Maksim Zhylinski base text formatter now displays "xx minute(s) xx seconds" if more th…
…an 60 seconds
76be2a8
Jan 29, 2012
Arkadiy Zabazhanov Now the both values are stored, but i.e. `controller` method, created…
… anonymouus controller in corresponding example group, redefines only :described_class, but later we try to get `described_class` it examples to instantiate anonymous controller and got :describes value. Described class chould be taken first.
ffeaf62
Arkadiy Zabazhanov Added spec for patched case a4c33a5
Justin Ko Merge pull request #563 from uzzz/master
Display both minutes and seconds of duration time when specs are finished.
e9e31ee
Justin Ko Pluralization support for runtime duration output (minute). 68a66de
Justin Ko changelog a08eabc
Jan 30, 2012
David Chelimsky doc formatter strips whitespace from group and example descriptions 7db7f4b
David Chelimsky Changelog for prev commit 04d77ec
Justin Ko Spec for RSpec::Core::World#reset 5c73b8c
David Chelimsky simplify spec for #reset
- See 5c73b8c
8ecae7d
Jan 31, 2012
David Chelimsky ci: update rubygems if < 1.8 (needed for ZenTest in ree) 7e6dc98
David Chelimsky ci: before_script doesn't run before bundling, so no way to run again…
…st ree for now
9a6850e
David Chelimsky ci: one more try ... 311b525
David Chelimsky ci: it's before_install (RTFM) ff5e12f
David Chelimsky ci: it's gem, not rubygems bcdb6f4
David Chelimsky dev: need to include dev rspec in case dependent gems depend on rspec a4bff1c
Feb 02, 2012
David Chelimsky don't rescue from calling proc filters
- Closes #556.
fb0b136
David Chelimsky Changelog for #556 147a3a5
David Chelimsky it was rescue false, not rescue nil
- #556.
5686c13
Feb 03, 2012
Suraj N. Kurapati at_exit: don't mask nonzero exit status due to $!
This change ensures that RSpec's at_exit handler doesn't mask (override)
any nonzero exit status, which can happen when Ruby is on it's way out
due to an uncaught exception ($!) such as a SyntaxError.

Please see this bug report for more information:

sunaku/tork#31 (comment)
e7fdaaa
Feb 04, 2012
Tom Stuart Fix autotest when RSpec executable path contains spaces b804c70
David Chelimsky Merge pull request #570 from tomstuart/rspec-executable-spaces
Autotest fails if RSpec executable path contains spaces
49ea20b
Feb 05, 2012
David Chelimsky Merge pull request #564 from pyromaniac/patch-1
Prefer described_class over describes
8a6f77b
David Chelimsky Changelog for #564 c6dc90b
David Chelimsky Don't process filters when the metadata doesn't even have the key.
This allows us to simplify the filter_applies? method on metadata, and
gives us a small performance boost by not evaluating procs that would
always return false.

- Closes #556.
155e200
David Chelimsky fix copy/paste oversight b06bc35
Feb 10, 2012
Justin Ko Merge pull request #569 from sunaku/patch-1
at_exit: don't mask nonzero exit status due to $!
74b170c
Justin Ko changelog aefb25c
Feb 16, 2012
David Chelimsky add note that explicit ref to subject is not recommended 5dc1872
Mar 03, 2012
David Chelimsky Don't include or extend when ancestor group is already extended.
- Fixes #576.
0ecf872
David Chelimsky Changelog for #576 9f425c2
David Chelimsky link to full dev changelog [ci skip] 2fa0741
David Chelimsky Fix #576 for Ruby 1.8 as well
Per benchmarks/check_inclusion, this:
  (class << host; self; end) < mod
is faster than this:
  (class << host; self; end).included_modules.include?(mod)

The faster version doesn't work in Ruby 1.8, so we use the slower
version in Ruby 1.8, but the faster version in 1.9:w
149ee42
David Chelimsky run benchmarks against ruby 1.8 as well 6d75ce6
Mar 05, 2012
David Chelimsky remove spork-0.9 shim (0.9 has been released) dbf1d64
Mar 10, 2012
Justin Ko Fix broken link. Closes #580 76cd682
Mar 11, 2012
David Chelimsky bump to 2.9.0.rc1 5b255ac
David Chelimsky don't forget rake 8d1eff9
Mar 12, 2012
David Chelimsky bump to 2.9.0.rc2 a4607d5
Mar 17, 2012
David Chelimsky Merge pull request #582 from masarakki/master
Support false and nil subject
5b861bb
David Chelimsky Beef up/clarified specs for #582.
Also refactored `its` a bit
924f59a
David Chelimsky Changelog for #582 76fed28
David Chelimsky bump to 2.9.0 52bbe9f