1# pyfakefs Release Notes 2The released versions correspond to PyPi releases. 3 4## Version 4.1.0 (as yet unreleased) 5 6## [Version 4.0.2](https://pypi.python.org/pypi/pyfakefs/4.0.2) 7 8This as a patch release that only builds for Python 3. Note that 9versions 4.0.0 and 4.0.1 will be removed from PyPi to not to be able to 10install them under Python 2. 11 12#### Fixes 13 * Do not build for Python 2 (see [#524](../../issues/524)) 14 15## [Version 4.0.1](https://pypi.python.org/pypi/pyfakefs/4.0.1) 16 17This as a bug fix release for a regression bug. 18 19#### Fixes 20 * Avoid exception if using `flask-restx` (see [#523](../../issues/523)) 21 22## [Version 4.0.0](https://pypi.python.org/pypi/pyfakefs/4.0.0) 23 24 * pyfakefs 4.0.0 drops support for Python 2.7. If you still need 25 Python 2.7, you can continue to use pyfakefs 3.7.x. 26 27#### Changes 28 * Removed Python 2.7 and 3.4 support (see [#492](../../issues/492)) 29 30#### New Features 31 * Added support for handling keyword-only arguments in some `os` functions 32 * Added possibility to pass additional parameters to `fs` pytest fixture 33 * Added automatic patching of default arguments that are file system 34 functions 35 * Added convenience decorator `patchfs` to patch single functions using 36 the fake filesystem 37 38#### Fixes 39 * Added missing `st_ino` in `makedir` (see [#515](../../issues/515)) 40 * Fixed handling of relative paths in `lresolve` / `os.lstat` 41 (see [#516](../../issues/516)) 42 * Fixed handling of byte string paths 43 (see [#517](../../issues/517)) 44 * Fixed `os.walk` if path ends with path separator 45 (see [#512](../../issues/512)) 46 * Fixed handling of empty path in `os.makedirs` 47 (see [#510](../../issues/510)) 48 * Fixed handling of `os.TMPFILE` flag under Linux 49 (see [#509](../../issues/509) and [#511](../../issues/511)) 50 * Adapted fake `pathlib` to changes in Python 3.7.6/3.8.1 51 (see [#508](../../issues/508)) 52 * Fixed behavior of `os.makedirs` in write-protected directory 53 (see [#507](../../issues/507)) 54 55## [Version 3.7.2](https://pypi.python.org/pypi/pyfakefs/3.7.2) 56 57This version backports some fixes from master. 58 59#### Fixes 60 * Fixed handling of relative paths in `lresolve` / `os.lstat` 61 (see [#516](../../issues/516)) 62 * Fixed `os.walk` if path ends with path separator 63 (see [#512](../../issues/512)) 64 * Fixed handling of empty path in `os.makedirs` 65 (see [#510](../../issues/510)) 66 * Fixed handling of `os.TMPFILE` flag under Linux 67 (see [#509](../../issues/509) and [#511](../../issues/511)) 68 * Fixed behavior of `os.makedirs` in write-protected directory 69 (see [#507](../../issues/507)) 70 71## [Version 3.7.1](https://pypi.python.org/pypi/pyfakefs/3.7.1) 72 73This version adds support for Python 3.7.6 and 3.8.1. 74 75#### Fixes 76 * Adapted fake `pathlib` to changes in Python 3.7.6/3.8.1 77 (see [#508](../../issues/508)) (backported from master) 78 79## [Version 3.7](https://pypi.python.org/pypi/pyfakefs/3.7) 80 81This version adds support for Python 3.8. 82 83_Note:_ This is the last pyfakefs version that will support Python 2.7 84and Python 3.4 (possible bug fix releases notwithstanding). 85 86#### New Features 87 * added support for Python 3.8 (see [#504](../../issues/504)) 88 * added preliminary support for Windows-specific `os.stat_result` attributes 89 `tst_file_attributes` and `st_reparse_tag` (see [#504](../../issues/504)) 90 * added support for fake `os.sendfile` (Posix only, Python 3 only) 91 (see [#504](../../issues/504)) 92 93#### Fixes 94 * support `devnull` in Windows under Python 3.8 95 (see [#504](../../issues/504)) 96 * fixed side effect of calling `DirEntry.stat()` under Windows (changed 97 st_nlink) (see [#502](../../issues/502)) 98 * fixed problem of fake modules still referenced after a test in modules 99 loaded during the test (see [#501](../../issues/501) and [#427](../../issues/427)) 100 * correctly handle missing read permission for parent directory 101 (see [#496](../../issues/496)) 102 * raise for `os.scandir` with non-existing directory 103 (see [#498](../../issues/498)) 104 105#### Infrastructure 106 * fixed CI tests scripts to always propagate errors 107 (see [#500](../../issues/500)) 108 109## [Version 3.6.1](https://pypi.python.org/pypi/pyfakefs/3.6.1) 110 111#### Fixes 112 * avoid rare side effect during module iteration in test setup 113 (see [#338](../../issues/338)) 114 * make sure real OS tests are not executed by default 115 (see [#495](../../issues/495)) 116 117## [Version 3.6](https://pypi.python.org/pypi/pyfakefs/3.6) 118 119#### Changes 120 * removed unneeded parameter `use_dynamic_patch` 121 122#### New Features 123 * support for `src_dir_fd` and `dst_dir_fd` arguments in `os.rename`, 124 `os.replace` and `os.link` 125 * added possibility to use modules instead of module names for the 126 `additional_skip_names` argument (see [#482](../../issues/482)) 127 * added argument `allow_root_user` to `Patcher` and `UnitTest` to allow 128 forcing non-root access (see [#474](../../issues/474)) 129 * added basic support for `os.pipe` (see [#473](../../issues/473)) 130 * added support for symlinks in `add_real_directory` 131 * added new public method `add_real_symlink` 132 133#### Infrastructure 134 * added check for correctly installed Python 3 version in Travis.CI 135 (see [#487](../../issues/487)) 136 137#### Fixes 138 * fixed incorrect argument names for some `os` functions 139 * fake `DirEntry` now implements `os.PathLike` in Python >= 3.6 140 (see [#483](../../issues/483)) 141 * fixed incorrect argument name for `os.makedirs` 142 (see [#481](../../issues/481)) 143 * avoid pytest warning under Python 2.7 (see [#466](../../issues/466)) 144 * add __next__ to FakeFileWrapper (see [#485](../../issues/485)) 145 146## [Version 3.5.8](https://pypi.python.org/pypi/pyfakefs/3.5.8) 147 148Another bug-fix release that mainly fixes a regression wih Python 2 that has 149been introduced in version 3.5.3. 150 151#### Fixes 152 * regression: patching build-in `open` under Python 2 broke unit tests 153 (see [#469](../../issues/469)) 154 * fixed writing to file added with `add_real_file` 155 (see [#470](../../issues/470)) 156 * fixed argument name of `FakeIOModule.open` (see [#471](../../pull/471)) 157 158#### Infrastructure 159 * more changes to run tests using `python setup.py test` under Python 2 160 regardless of `pathlib2` presence 161 162## [Version 3.5.7](https://pypi.python.org/pypi/pyfakefs/3.5.7) 163 164This is mostly a bug-fix release. 165 166#### Fixes 167 * regression: `pathlib` did not get patched in the presence of `pathlib2` 168 (see [#467](../../issues/467)) 169 * fixed errors if running the PyCharm debugger under Python 2 170 (see [#464](../../issues/464)) 171 172#### Infrastructure 173 * do not run real file system tests by default (fixes deployment problem, 174 see [#465](../../issues/465)) 175 * make tests run if running `python setup.py test` under Python 2 176 177## [Version 3.5.6](https://pypi.python.org/pypi/pyfakefs/3.5.6) 178 179#### Changes 180 * import external `pathlib2` and `scandir` packages first if present 181 (see [#462](../../issues/462)) 182 183## [Version 3.5.5](https://pypi.python.org/pypi/pyfakefs/3.5.5) 184 185#### Fixes 186 * removed shebang from test files to avoid packaging warnings 187 (see [#461](../../issues/461)) 188 189## [Version 3.5.4](https://pypi.python.org/pypi/pyfakefs/3.5.4) 190 191#### New Features 192 * added context manager class `Pause` for pause/resume 193 (see [#448](../../issues/448)) 194 195#### Fixes 196 * fixed `AttributeError` shown while displaying `fs` in a failing pytest 197 in Python 2 198 * fixed permission handling for root user 199 * avoid `AttributeError` triggered by modules without `__module__` attribute 200 (see [#460](../../issues/460)) 201 202## [Version 3.5.3](https://pypi.python.org/pypi/pyfakefs/3.5.3) 203 204This is a minor release to have a version with passing tests for OpenSUSE 205packaging. 206 207#### New Features 208 * automatically patch file system methods imported as another name like 209 `from os.path import exists as my_exists`, including builtin `open` 210 and `io.open` 211 212#### Fixes 213 * make tests for access time less strict to account for file systems that 214 do not change it immediately ([#453](../../issues/453)) 215 216## [Version 3.5.2](https://pypi.python.org/pypi/pyfakefs/3.5.2) 217 218This is mostly a bug-fix release. 219 220#### New Features 221 * added support for pause/resume of patching the file system modules 222 ([#448](../../issues/448)) 223 * allow to set current group ID, set current user ID and group ID as 224 `st_uid` and `st_gid` in new files ([#449](../../issues/449)) 225 226#### Fixes 227 * fixed using `modules_to_patch` (regression, see [#450](../../issues/450)) 228 * fixed recursion error on unpickling the fake file system 229 ([#445](../../issues/445)) 230 * allow trailing path in `add_real_directory` ([#446](../../issues/446)) 231 232## [Version 3.5](https://pypi.python.org/pypi/pyfakefs/3.5) 233 234#### Changes 235 * This version of pyfakefs does not support Python 3.3. Python 3.3 users 236 must keep using pyfakefs 3.4.3, or upgrade to a newer Python version. 237 * The deprecation warnings for the old API are now switched on by default. 238 To switch them off for legacy code, use: 239 ```python 240 from pyfakefs.deprecator import Deprecator 241 Deprecator.show_warnings = False 242 ``` 243 244#### New Features 245 * Improved automatic patching: 246 * automatically patch methods of a patched file system module imported like 247 `from os.path import exists` ([#443](../../pull/443)) 248 * a module imported as another name (`import os as _os`) is now correctly 249 patched without the need of additional parameters 250 ([#434](../../pull/434)) 251 * automatically patch `Path` if imported like `from pathlib import Path` 252 ([#440](../../issues/440)) 253 * parameter `patch_path` has been removed from `UnitTest` and `Patcher`, 254 the correct patching of `path` imports is now done automatically 255 ([#429](../../pull/429)) 256 * `UnitTest` /`Patcher` arguments can now also be set in `setUpPyfakefs()` 257 ([#430](../../pull/430)) 258 * added possibility to set user ID ([#431](../../issues/431)) 259 * added side_effect option to fake files ([#433](../../pull/433)) 260 * added some support for extended filesystem attributes under Linux 261 ([#423](../../issues/423)) 262 * handle `contents=None` in `create_file()` as empty contents if size not 263 set ([#424](../../issues/424)) 264 * added `pathlib2` support ([#408](../../issues/408)) ([#422](../../issues/422)) 265 * added support for null device ([#418](../../issues/418)) 266 * improved error message for "Bad file descriptor in fake filesystem" 267 ([#419](../../issues/419)) 268 269#### Fixes 270 * fixed pytest when both pyfakefs and future are installed 271 ([#441](../../issues/441)) 272 * file timestamps are now updated more according to the real behavior 273 ([#435](../../issues/435)) 274 * fixed a problem related to patching `shutil` functions using `zipfile` 275 ([#427](../../issues/427)) 276 277## [Version 3.4.3](https://pypi.python.org/pypi/pyfakefs/3.4.3) 278 279This is mostly a bug fix release, mainly for bugs found by 280[@agroce](https://github.com/agroce) using [tstl](https://github.com/agroce/tstl). 281 282#### New Features 283 * added support for path-like objects as arguments in `create_file()`, 284 `create_dir()`, `create_symlink()`, `add_real_file()` and 285 `add_real_directory()` (Python >= 3.6, see [#409](../../issues/409)) 286 287#### Infrastructure 288 * moved tests into package 289 * use README.md in pypi ([#358](../../issues/358)) 290 291#### Fixes 292 * `tell` after `seek` gave incorrect result in append mode 293 ([#363](../../issues/363)) 294 * a failing pytest did not display the test function correctly 295 ([#381](../../issues/381)) 296 * flushing file contents after truncate was incorrect under some conditions 297 ([#412](../../issues/412)) 298 * `readline()` did not work correctly in binary mode 299 ([#411](../../issues/411)) 300 * `pathlib.Path.resolve()` behaved incorrectly if the path does not exist 301 ([#401](../../issues/401)) 302 * `closed` attribute was not implemented in fake file ([#380](../../issues/380)) 303 * `add_real_directory` did not behave correctly for nested paths 304 * the following functions did not behave correctly for paths ending with a 305 path separator (found by @agroce using [tstl](https://github.com/agroce/tstl)): 306 * `os.rename` ([#400](../../issues/400)) 307 * `os.link` ([#399](../../issues/399), [#407](../../issues/407)) 308 * `os.rmdir` ([#398](../../issues/398)) 309 * `os.mkdir`, `os.makedirs` ([#396](../../issues/396)) 310 * `os.rename` ([#391](../../issues/391), [#395](../../issues/395), 311 [#396](../../issues/396), [#389](../../issues/389), 312 [#406](../../issues/406)) 313 * `os.symlink` ([#371](../../issues/371), [#390](../../issues/390)) 314 * `os.path.isdir` ([#387](../../issues/387)) 315 * `open` ([#362](../../issues/362), [#369](../../issues/369), 316 [#397](../../issues/397)) 317 * `os.path.lexists`, `os.path.islink` ([#365](../../issues/365), 318 [#373](../../issues/373), [#396](../../issues/396)) 319 * `os.remove` ([#360](../../issues/360), [#377](../../issues/377), 320 [#396](../../issues/396)) 321 * `os.stat` ([#376](../../issues/376)) 322 * `os.path.isfile` ([#374](../../issues/374)) 323 * `os.path.getsize` ([#368](../../issues/368)) 324 * `os.lstat` ([#366](../../issues/366)) 325 * `os.path.exists` ([#364](../../issues/364)) 326 * `os.readlink` ([#359](../../issues/359), [#372](../../issues/372), 327 [#392](../../issues/392)) 328 329## [Version 3.4.1](https://pypi.python.org/pypi/pyfakefs/3.4.1) 330 331This is a bug fix only release. 332 333#### Fixes 334 * Missing cleanup after using dynamic patcher let to incorrect behavior of 335 `tempfile` after test execution (regression, see [#356](../../issues/356)) 336 * `add_real_directory` does not work after `chdir` (see [#355](../../issues/355)) 337 338## [Version 3.4](https://pypi.python.org/pypi/pyfakefs/3.4) 339 340This version of pyfakefs does not support Python 2.6. Python 2.6 users 341must use pyfakefs 3.3 or earlier. 342 343#### New Features 344 * Added possibility to map real files or directories to another path in 345 the fake file system (see [#347](../../issues/347)) 346 * Configuration of `Patcher` and `TestCase`: 347 * Possibility to reload modules is now also available in `Patcher` 348 * Added possibility to add own fake modules via `modules_to_patch` 349 argument (see [#345](../../issues/345)) 350 * Dynamic loading of modules after setup is now on by default and no more 351 considered experimental (see [#340](../../issues/340)) 352 * Added support for file descriptor path parameter in `os.scandir` 353 (Python >= 3.7, Posix only) (see [#346](../../issues/346)) 354 * Added support to fake out backported `scandir` module ([#332](../../issues/332)) 355 * `IOError`/`OSError` exception messages in the fake file system now always 356 start with the message issued in the real file system in Unix systems (see [#202](../../issues/202)) 357 358#### Infrastructure 359 * Changed API to be PEP-8 conform ([#186](../../issues/186)). Note: The old 360 API is still available. 361 * Removed Python 2.6 support ([#293](../../issues/293)) 362 * Added usage documentation to GitHub Pages 363 * Added contributing guide 364 * Added flake8 tests to Travis CI 365 366#### Fixes 367 * Links in base path in `os.scandir` shall not be resolved ([#350](../../issues/350)) 368 * Fixed unit tests when run on a computer not having umask set to 0022 369 * Correctly handle newline parameter in `open()` for Python 3, added support for universal newline mode in Python 2 ([#339](../../issues/339)) 370 * Fixed handling of case-changing rename with symlink under MacOS ([#322](../../issues/322)) 371 * Creating a file with a path ending with path separator did not raise ([#320](../../issues/320)) 372 * Fixed more problems related to `flush` ([#302](../../issues/302), [#300](../../issues/300)) 373 * Correctly handle opening files more than once ([#343](../../issues/343)) 374 * Fake `os.lstat()` crashed with several trailing path separators ([#342](../../issues/342)) 375 * Fixed handling of path components starting with a drive letter([#337](../../issues/337)) 376 * Symlinks to absolute paths were incorrectly resolved under Windows ([#341](../../issues/341)) 377 * Unittest mock didn't work after setUpPyfakefs ([#334](../../issues/334)) 378 * `os.path.split()` and `os.path.dirname()` gave incorrect results under Windows ([#335](../../issues/335)) 379 380## [Version 3.3](https://pypi.python.org/pypi/pyfakefs/3.3) 381 382This is the last release that supports Python 2.6. 383 384#### New Features 385 * The OS specific temp directory is now automatically created in `setUp()` (related to [#191](../../issues/191)). 386 Note that this may break test code that assumes that the fake file system is completely empty at test start. 387 * Added possibility to reload modules and switch on dynamic loading of modules 388 after setup (experimental, see [#248](../../issues/248)) 389 * Added possibility to patch modules that import file system modules under 390 another name, for example `import os as '_os` ([#231](../../issues/231)) 391 * Added support for `dir_fd` argument in several `os` functions 392 ([#206](../../issues/206)) 393 * Added support for open file descriptor as path argument in `os.utime`, 394 `os.chmod`, `os.chdir`, `os.chown`, `os.listdir`, `os.stat` and `os.lstat` 395 (Python >= 3.3) ([#205](../../issues/205)) 396 * Added support for basic modes in fake `os.open()` ([#204](../../issues/204)) 397 * Added fake `os.path.samefile` implementation ([#193](../../issues/193)) 398 * Added support for `ns` argument in `os.utime()` (Python >= 3.3) 399 ([#192](../../issues/192)) 400 * Added nanosecond time members in `os.stat_result` (Python >= 3.3) 401 ([#196](../../issues/196)) 402 403#### Infrastructure 404 * Added Travis CI tests for MacOSX (Python 2.7 and 3.6) 405 * Added Appveyor CI tests for Windows (Python 2.7, 3.3 and 3.6) 406 * Added auto-generated documentation for development version on GitHub Pages 407 * Removed most of `fake_filesystem_shutil` implementation, relying on the 408 patched `os` module instead ([#194](../../issues/194)) 409 * Removed `fake_tempfile` and `fake_filesystem_glob`, relying on the patched 410 `os` module instead ([#189](../../issues/189), [#191](../../issues/191)) 411 412#### Fixes 413 * Multiple fixes of bugs found using TSTL by @agroce (see about 100 issues 414 with the `TSTL` label) 415 * several problems with buffer handling in high-level IO functions 416 * several problems with multiple handles on the same file 417 * several problems with low-level IO functions 418 * incorrect exception (`IOError` vs `OSError`) raised in several cases 419 * Fake `rename` did not behave like `os.rename` in many cases 420 * Symlinks have not been considered or incorrectly handled in several 421 functions 422 * A nonexistent file that has the same name as the content of the parent 423 object was seen as existing 424 * Incorrect error handling during directory creation 425 * many fixes for OS-specific behavior 426 * Also patch modules that are loaded between `__init__()` and `setUp()` 427 ([#199](../../issues/199)) 428 * Creating files in read-only directory was possible ([#203](../../issues/203)) 429 430## [Version 3.2](https://pypi.python.org/pypi/pyfakefs/3.2) 431 432#### New Features 433 * The `errors` argument is supported for `io.open()` and `os.open()` 434 * New methods `add_real_file()`, `add_real_directory()` and `add_real_paths()` 435 make real files and directories appear within the fake file system. 436 File contents are read from the real file system only as needed ([#170](../../issues/170)). 437 See `example_test.py` for a usage example. 438 * Deprecated `TestCase.copyRealFile()` in favor of `add_real_file()`. 439 `copyRealFile()` remains only for backward compatability. Also, some 440 less-popular argument combinations have been disallowed. 441 * Added this file you are reading, `CHANGES.md`, to the release manifest 442 443#### Infrastructure 444 * The `mox3` package is no longer a prerequisite--the portion required by pyfakefs 445 has been integrated into pyfakefs ([#182](../../issues/182)) 446 447#### Fixes 448 * Corrected the handling of byte/unicode paths in several functions ([#187](../../issues/187)) 449 * `FakeShutilModule.rmtree()` failed for directories ending with path separator ([#177](../../issues/177)) 450 * Case was incorrectly handled for added Windows drives 451 * `pathlib.glob()` incorrectly handled case under MacOS ([#167](../../issues/167)) 452 * tox support was broken ([#163](../../issues/163)) 453 * On Windows it was not possible to rename a file when only the case of the file 454 name changed ([#160](../../issues/160)) 455 456## [Version 3.1](https://pypi.python.org/pypi/pyfakefs/3.1) 457 458#### New Features 459 * Added helper method `TestCase.copyRealFile()` to copy a file from 460 the real file system to the fake file system. This makes it easy to use 461 template, data and configuration files in your tests. 462 * A pytest plugin is now installed with pyfakefs that exports the 463 fake filesystem as pytest fixture `fs`. 464 465#### Fixes 466 * Incorrect disk usage calculation if too large file created ([#155](../../issues/155)) 467 468## [Version 3.0](https://pypi.python.org/pypi/pyfakefs/3.0) 469 470#### New Features 471 * Support for path-like objects as arguments in fake `os` 472 and `os.path` modules (Python >= 3.6) 473 * Some changes to make pyfakefs work with Python 3.6 474 * Added fake `pathlib` module (Python >= 3.4) ([#29](../../issues/29)) 475 * Support for `os.replace` (Python >= 3.3) 476 * `os.access`, `os.chmod`, `os.chown`, `os.stat`, `os.utime`: 477 support for `follow_symlinks` argument (Python >= 3.3) 478 * Support for `os.scandir` (Python >= 3.5) ([#119](../../issues/119)) 479 * Option to not fake modules named `path` ([#53](../../issues/53)) 480 * `glob.glob`, `glob.iglob`: support for `recursive` argument (Python >= 3.5) ([#116](../../issues/116)) 481 * Support for `glob.iglob` ([#59](../../issues/59)) 482 483#### Infrastructure 484 * Added [auto-generated documentation](http://jmcgeheeiv.github.io/pyfakefs/) 485 486#### Fixes 487 * `shutil.move` incorrectly moves directories ([#145](../../issues/145)) 488 * Missing support for 'x' mode in `open` (Python >= 3.3) ([#147](../../issues/147)) 489 * Incorrect exception type in Posix if path ancestor is a file ([#139](../../issues/139)) 490 * Exception handling when using `Patcher` with py.test ([#135](../../issues/135)) 491 * Fake `os.listdir` returned sorted instead of unsorted entries 492 493## [Version 2.9](https://pypi.python.org/pypi/pyfakefs/2.9) 494 495#### New Features 496 * `io.open`, `os.open`: support for `encoding` argument ([#120](../../issues/120)) 497 * `os.makedirs`: support for `exist_ok` argument (Python >= 3.2) ([#98](../../issues/98)) 498 * Support for fake `io.open()` ([#70](../../issues/70)) 499 * Support for mount points ([#25](../../issues/25)) 500 * Support for hard links ([#75](../../issues/75)) 501 * Support for float times (mtime, ctime) 502 * Windows support: 503 * support for alternative path separator 504 * support for case-insensitive filesystems ([#69](../../issues/69)) 505 * support for drive letters and UNC paths 506 * Support for filesystem size ([#86](../../issues/86)) 507 * `shutil.rmtree`: support for `ignore_errors` and `onerror` arguments ([#72](../../issues/72)) 508 * Support for `os.fsync()` and `os.fdatasync()` ([#73](../../issues/73)) 509 * `os.walk`: Support for `followlinks` argument 510 511#### Fixes 512 * `shutil` functions like `make_archive` do not work with pyfakefs ([#104](../../issues/104)) 513 * File permissions on deletion not correctly handled ([#27](../../issues/27)) 514 * `shutil.copy` error with bytes contents ([#105](../../issues/105)) 515 * mtime and ctime not updated on content changes 516 517## [Version 2.7](https://pypi.python.org/pypi/pyfakefs/2.7) 518 519#### Infrastructure 520 * Moved repository from GoogleCode to GitHub, merging 3 projects 521 * Added continuous integration testing with Travis CI 522 * Added usage documentation in project wiki 523 * Better support for pypi releases 524 525#### New Features 526 * Added direct unit test support in `fake_filesystem_unittest` 527 (transparently patches all calls to faked implementations) 528 * Added support for doctests 529 * Added support for cygwin 530 * Better support for Python 3 531 532#### Fixes 533 * `os.utime` fails to traverse symlinks ([#49](../../issues/49)) 534 * `chown` incorrectly accepts non-integer uid/gid arguments ([#30](../../issues/30)) 535 * Reading from fake block devices doesn't work ([#24](../../issues/24)) 536 * `fake_tempfile` is using `AddOpenFile` incorrectly ([#23](../../issues/23)) 537 * Incorrect behavior of `relpath`, `abspath` and `normpath` on Windows. 538 * Cygwin wasn't treated as Windows ([#37](../../issues/37)) 539 * Python 3 `open` in binary mode not working ([#32](../../issues/32)) 540 * `os.remove` doesn't work with relative paths ([#31](../../issues/31)) 541 * `mkstemp` returns no valid file descriptor ([#19](../../issues/19)) 542 * `open` methods lack `IOError` for prohibited operations ([#18](../../issues/18)) 543 * Incorrectly resolved relative path ([#3](../../issues/3)) 544 * `FakeFileOpen` keyword args do not match the `__builtin__` equivalents ([#5](../../issues/5)) 545 * Relative paths not supported ([#16](../../issues/16), [#17](../../issues/17))) 546 547## Older Versions 548There are no release notes for releases 2.6 and below. The following versions are still available on PyPi: 549 * [1.1](https://pypi.python.org/pypi/pyfakefs/1.1), [1.2](https://pypi.python.org/pypi/pyfakefs/1.2), [2.0](https://pypi.python.org/pypi/pyfakefs/2.0), [2.1](https://pypi.python.org/pypi/pyfakefs/2.1), [2.2](https://pypi.python.org/pypi/pyfakefs/2.2), [2.3](https://pypi.python.org/pypi/pyfakefs/2.3) and [2.4](https://pypi.python.org/pypi/pyfakefs/2.4) 550