o
    Q `                    @   s  d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlZddlZddlmZ ejrvddlZnddlm Z dZ!G dd de"Z#dS )zFBase class for tests.

All Filesystems should be able to pass these.

    )absolute_import)unicode_literals)datetimeN)ResourceTypeSeek)errors)walk)glob)open_fs)ClosingSubFSSubFS)	text_typeuZ4  

UTF-8 encoded sample plain-text file
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾

Markus Kuhn [ˈmaʳkʊs kuːn] &lt;mkuhn@acm.org> — 1999-08-20


The ASCII compatible UTF-8 encoding of ISO 10646 and Unicode
plain-text files is defined in RFC 2279 and in ISO 10646-1 Annex R.


Using Unicode/UTF-8, you can write in emails and source code things such as

Mathematics and Sciences:

  ∮ E⋅da = Q,  n → ∞, ∑ f(i) = ∏ g(i), ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β),

  ℕ ⊆ ℕ₀ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ, ⊥ &lt; a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (A ⇔ B),

  2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm

Linguistics and dictionaries:

  ði ıntəˈnæʃənəl fəˈnɛtık əsoʊsiˈeıʃn
  Y [ˈʏpsilɔn], Yen [jɛn], Yoga [ˈjoːgɑ]

APL:

  ((V⍳V)=⍳⍴V)/V←,V    ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈

Nicer typography in plain text files:

  ╔══════════════════════════════════════════╗
  ║                                          ║
  ║   • ‘single’ and “double” quotes         ║
  ║                                          ║
  ║   • Curly apostrophes: “We’ve been here” ║
  ║                                          ║
  ║   • Latin-1 apostrophe and accents: '´`  ║
  ║                                          ║
  ║   • ‚deutsche‘ „Anführungszeichen“       ║
  ║                                          ║
  ║   • †, ‡, ‰, •, 3–4, —, −5/+5, ™, …      ║
  ║                                          ║
  ║   • ASCII safety test: 1lI|, 0OD, 8B     ║
  ║                      ╭─────────╮         ║
  ║   • the euro symbol: │ 14.95 € │         ║
  ║                      ╰─────────╯         ║
  ╚══════════════════════════════════════════╝

Greek (in Polytonic):

  The Greek anthem:

  Σὲ γνωρίζω ἀπὸ τὴν κόψη
  τοῦ σπαθιοῦ τὴν τρομερή,
  σὲ γνωρίζω ἀπὸ τὴν ὄψη
  ποὺ μὲ βία μετράει τὴ γῆ.

  ᾿Απ᾿ τὰ κόκκαλα βγαλμένη
  τῶν ῾Ελλήνων τὰ ἱερά
  καὶ σὰν πρῶτα ἀνδρειωμένη
  χαῖρε, ὦ χαῖρε, ᾿Ελευθεριά!

  From a speech of Demosthenes in the 4th century BC:

  Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,
  ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς
  λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ
  τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿
  εἰς τοῦτο προήκοντα,  ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ
  πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν
  οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι,
  οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν
  ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον
  τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι
  γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν
  προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους
  σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ
  τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ
  τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς
  τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον.

  Δημοσθένους, Γ´ ᾿Ολυνθιακὸς

Georgian:

  From a Unicode conference invitation:

  გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო
  კონფერენციაზე დასასწრებად, რომელიც გაიმართება 10-12 მარტს,
  ქ. მაინცში, გერმანიაში. კონფერენცია შეჰკრებს ერთად მსოფლიოს
  ექსპერტებს ისეთ დარგებში როგორიცაა ინტერნეტი და Unicode-ი,
  ინტერნაციონალიზაცია და ლოკალიზაცია, Unicode-ის გამოყენება
  ოპერაციულ სისტემებსა, და გამოყენებით პროგრამებში, შრიფტებში,
  ტექსტების დამუშავებასა და მრავალენოვან კომპიუტერულ სისტემებში.

Russian:

  From a Unicode conference invitation:

  Зарегистрируйтесь сейчас на Десятую Международную Конференцию по
  Unicode, которая состоится 10-12 марта 1997 года в Майнце в Германии.
  Конференция соберет широкий круг экспертов по  вопросам глобального
  Интернета и Unicode, локализации и интернационализации, воплощению и
  применению Unicode в различных операционных системах и программных
  приложениях, шрифтах, верстке и многоязычных компьютерных системах.

Thai (UCS Level 2):

  Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese
  classic 'San Gua'):

  [----------------------------|------------------------]
    ๏ แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช  พระปกเกศกองบู๊กู้ขึ้นใหม่
  สิบสองกษัตริย์ก่อนหน้าแลถัดไป       สององค์ไซร้โง่เขลาเบาปัญญา
    ทรงนับถือขันทีเป็นที่พึ่ง           บ้านเมืองจึงวิปริตเป็นนักหนา
  โฮจิ๋นเรียกทัพทั่วหัวเมืองมา         หมายจะฆ่ามดชั่วตัวสำคัญ
    เหมือนขับไสไล่เสือจากเคหา      รับหมาป่าเข้ามาเลยอาสัญ
  ฝ่ายอ้องอุ้นยุแยกให้แตกกัน          ใช้สาวนั้นเป็นชนวนชื่นชวนใจ
    พลันลิฉุยกุยกีกลับก่อเหตุ          ช่างอาเพศจริงหนาฟ้าร้องไห้
  ต้องรบราฆ่าฟันจนบรรลัย           ฤๅหาใครค้ำชูกู้บรรลังก์ ฯ

  (The above is a two-column text. If combining characters are handled
  correctly, the lines of the second column should be aligned with the
  | character above.)

Ethiopian:

  Proverbs in the Amharic language:

  ሰማይ አይታረስ ንጉሥ አይከሰስ።
  ብላ ካለኝ እንደአባቴ በቆመጠኝ።
  ጌጥ ያለቤቱ ቁምጥና ነው።
  ደሀ በሕልሙ ቅቤ ባይጠጣ ንጣት በገደለው።
  የአፍ ወለምታ በቅቤ አይታሽም።
  አይጥ በበላ ዳዋ ተመታ።
  ሲተረጉሙ ይደረግሙ።
  ቀስ በቀስ፥ ዕንቁላል በእግሩ ይሄዳል።
  ድር ቢያብር አንበሳ ያስር።
  ሰው እንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርም።
  እግዜር የከፈተውን ጉሮሮ ሳይዘጋው አይድርም።
  የጎረቤት ሌባ፥ ቢያዩት ይስቅ ባያዩት ያጠልቅ።
  ሥራ ከመፍታት ልጄን ላፋታት።
  ዓባይ ማደሪያ የለው፥ ግንድ ይዞ ይዞራል።
  የእስላም አገሩ መካ የአሞራ አገሩ ዋርካ።
  ተንጋሎ ቢተፉ ተመልሶ ባፉ።
  ወዳጅህ ማር ቢሆን ጨርስህ አትላሰው።
  እግርህን በፍራሽህ ልክ ዘርጋ።

Runes:

  ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ

  (Old English, which transcribed into Latin reads 'He cwaeth that he
  bude thaem lande northweardum with tha Westsae.' and means 'He said
  that he lived in the northern land near the Western Sea.')

Braille:

  ⡌⠁⠧⠑ ⠼⠁⠒  ⡍⠜⠇⠑⠹⠰⠎ ⡣⠕⠌

  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠙⠑⠁⠙⠒ ⠞⠕ ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ ⠊⠎ ⠝⠕ ⠙⠳⠃⠞
  ⠱⠁⠞⠑⠧⠻ ⠁⠃⠳⠞ ⠹⠁⠞⠲ ⡹⠑ ⠗⠑⠛⠊⠌⠻ ⠕⠋ ⠙⠊⠎ ⠃⠥⠗⠊⠁⠇ ⠺⠁⠎
  ⠎⠊⠛⠝⠫ ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹⠍⠁⠝⠂ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ ⠥⠝⠙⠻⠞⠁⠅⠻⠂
  ⠁⠝⠙ ⠹⠑ ⠡⠊⠑⠋ ⠍⠳⠗⠝⠻⠲ ⡎⠊⠗⠕⠕⠛⠑ ⠎⠊⠛⠝⠫ ⠊⠞⠲ ⡁⠝⠙
  ⡎⠊⠗⠕⠕⠛⠑⠰⠎ ⠝⠁⠍⠑ ⠺⠁⠎ ⠛⠕⠕⠙ ⠥⠏⠕⠝ ⠰⡡⠁⠝⠛⠑⠂ ⠋⠕⠗ ⠁⠝⠹⠹⠔⠛ ⠙⠑
  ⠡⠕⠎⠑ ⠞⠕ ⠏⠥⠞ ⠙⠊⠎ ⠙⠁⠝⠙ ⠞⠕⠲

  ⡕⠇⠙ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲

  ⡍⠔⠙⠖ ⡊ ⠙⠕⠝⠰⠞ ⠍⠑⠁⠝ ⠞⠕ ⠎⠁⠹ ⠹⠁⠞ ⡊ ⠅⠝⠪⠂ ⠕⠋ ⠍⠹
  ⠪⠝ ⠅⠝⠪⠇⠫⠛⠑⠂ ⠱⠁⠞ ⠹⠻⠑ ⠊⠎ ⠏⠜⠞⠊⠊⠥⠇⠜⠇⠹ ⠙⠑⠁⠙ ⠁⠃⠳⠞
  ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ ⡊ ⠍⠊⠣⠞ ⠙⠁⠧⠑ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ ⠍⠹⠎⠑⠇⠋⠂ ⠞⠕
  ⠗⠑⠛⠜⠙ ⠁ ⠊⠕⠋⠋⠔⠤⠝⠁⠊⠇ ⠁⠎ ⠹⠑ ⠙⠑⠁⠙⠑⠌ ⠏⠊⠑⠊⠑ ⠕⠋ ⠊⠗⠕⠝⠍⠕⠝⠛⠻⠹
  ⠔ ⠹⠑ ⠞⠗⠁⠙⠑⠲ ⡃⠥⠞ ⠹⠑ ⠺⠊⠎⠙⠕⠍ ⠕⠋ ⠳⠗ ⠁⠝⠊⠑⠌⠕⠗⠎
  ⠊⠎ ⠔ ⠹⠑ ⠎⠊⠍⠊⠇⠑⠆ ⠁⠝⠙ ⠍⠹ ⠥⠝⠙⠁⠇⠇⠪⠫ ⠙⠁⠝⠙⠎
  ⠩⠁⠇⠇ ⠝⠕⠞ ⠙⠊⠌⠥⠗⠃ ⠊⠞⠂ ⠕⠗ ⠹⠑ ⡊⠳⠝⠞⠗⠹⠰⠎ ⠙⠕⠝⠑ ⠋⠕⠗⠲ ⡹⠳
  ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ ⠏⠻⠍⠊⠞ ⠍⠑ ⠞⠕ ⠗⠑⠏⠑⠁⠞⠂ ⠑⠍⠏⠙⠁⠞⠊⠊⠁⠇⠇⠹⠂ ⠹⠁⠞
  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲

  (The first couple of paragraphs of "A Christmas Carol" by Dickens)

Compact font selection example text:

  ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789
  abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ
  –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд
  ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ ﬁ�⑀₂ἠḂӥẄɐː⍎אԱა

Greetings in various languages:

  Hello world, Καλημέρα κόσμε, コンニチハ

Box drawing alignment tests:                                          █
                                                                      ▉
  ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳
  ║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃  ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▋ ╲╱╲╱╳╳╳
  ║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃  ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▌ ╱╲╱╲╳╳╳
  ╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫  ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳
  ║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎
  ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏
  ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛           └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█

c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6dhdi Z7djdk Z8dldm Z9dndo Z:dpdq Z;drds Z<dtdu Z=dvdw Z>dxdy Z?dzd{ Z@d|d} ZAd~d ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd ZadS )FSTestCaseszBasic FS tests.
    c                 C   s   t d)z Return an FS instance.

        zimplement me)NotImplementedErrorself r   )/usr/lib/python3/dist-packages/fs/test.pymake_fs   s   zFSTestCases.make_fsc                 C   s   |   dS )zDestroy a FS instance.

        Arguments:
            fs (FS): A filesystem instance previously opened
                by `~fs.test.FSTestCases.make_fs`.

        N)close)r   fsr   r   r   
destroy_fs  s   zFSTestCases.destroy_fsc                 C   s   |   | _d S N)r   r   r   r   r   r   setUp     zFSTestCases.setUpc                 C   s   |  | j | `d S r   )r   r   r   r   r   r   tearDown  s   zFSTestCases.tearDownc                 C      |  | j| dS )zeAssert a path exists.

        Arguments:
            path (str): A path on the filesystem.

        N)
assertTruer   existsr   pathr   r   r   assert_exists     zFSTestCases.assert_existsc                 C   r   )zmAssert a path does not exist.

        Arguments:
            path (str): A path on the filesystem.

        N)assertFalser   r   r   r   r   r   assert_not_exists  r"   zFSTestCases.assert_not_existsc                 C   r   )zhAssert a path is a file.

        Arguments:
            path (str): A path on the filesystem.

        N)r   r   isfiler   r   r   r   assert_isfile$  r"   zFSTestCases.assert_isfilec                 C   r   )zmAssert a path is a directory.

        Arguments:
            path (str): A path on the filesystem.

        N)r   r   isdirr   r   r   r   assert_isdir-  r"   zFSTestCases.assert_isdirc                 C   s6   t |tsJ | j|}| || | |t dS )zAssert a file contains the given bytes.

        Arguments:
            path (str): A path on the filesystem.
            contents (bytes): Bytes to compare.

        N)
isinstancebytesr   	readbytesassertEqualassertIsInstance)r   r    contentsdatar   r   r   assert_bytes6  s   zFSTestCases.assert_bytesc                 C   s`   t |tsJ | j|d}| }W d   n1 sw   Y  | || | |t dS )zAssert a file contains the given text.

        Arguments:
            path (str): A path on the filesystem.
            contents (str): Text to compare.

        rtN)r)   r   r   openreadr,   r-   )r   r    r.   fr/   r   r   r   assert_textC  s   
zFSTestCases.assert_textc                 C   sv   |  tj | jd W d    n1 sw   Y  |  tj | jd W d    d S 1 s4w   Y  d S )N/)assertRaisesr   FileExpectedr   r2   openbinr   r   r   r   test_root_dirQ  s   "zFSTestCases.test_root_dirc                 C   p   |  t | jdd W d    n1 sw   Y  | jdd | dd | jdd | dd d S )Nfoobar   bars   bazs   barbaz)r7   	TypeErrorr   Zappendbytesr0   r   r   r   r   test_appendbytesW     zFSTestCases.test_appendbytesc                 C   r;   )Nr<   r>   r=   bazZbarbaz)r7   r?   r   Z
appendtextr5   r   r   r   r   test_appendtext_  rA   zFSTestCases.test_appendtextc                 C   s$   t | j | t| jtj d S r   )reprr   r-   sixr   r   r   r   r   
test_basicg  s   
zFSTestCases.test_basicc                 C   sV   | j  }| || j jdd | t|t | j d}| |t | | d S )NZstandard)	namespace__nosuchnamespace__)r   getmetar,   r   r)   dictr-   r#   )r   metaZno_metar   r   r   test_getmetal  s   
zFSTestCases.test_getmetac                 C   sR   |  | jd | jd | | jd | jd |  | jd d S )Nfoo.txtr=   )r#   r   r%   creater   makedirr   r   r   r   test_isfilez  s
   zFSTestCases.test_isfilec                 C   sR   |  | jd | jd | jd | | jd |  | jd d S Nr<   r=   )r#   r   r'   rN   rO   r   r   r   r   r   
test_isdir  s
   zFSTestCases.test_isdirc                 C   s\   | j d | | j d | tj | j d W d    d S 1 s'w   Y  d S rQ   )r   touchr#   islinkr7   r   ResourceNotFoundr   r   r   r   test_islink  s
   "zFSTestCases.test_islinkc                 C   s   | j dd | j dd | j ddd | | j dd | | j dd	 | | j dd
 | tj | j d W d    d S 1 sNw   Y  d S )Nempty    Zone   aZonethousandA  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbasciir      i  doesnotexist)r   
writebytesencoder,   getsizer7   r   rU   r   r   r   r   test_getsize  s   "zFSTestCases.test_getsizec                 C   s   | j d z| j d}W n tjy!   | | j d Y nw | |t | | j 	dt
 | | j d | j d d S Nr<   za/b/c/foo/bar)r   rN   
getsyspathr   Z	NoSysPathr#   
hassyspathr-   r   Z	getospathr*   r   )r   Zsyspathr   r   r   test_getsyspath  s   zFSTestCases.test_getsyspathc                 C   sf   | j d z| j d W n tjy!   | | j d Y n
w | | j d | j d d S ra   )r   rN   geturlr   NoURLr#   Zhasurlr   r   r   r   r   test_geturl  s   zFSTestCases.test_geturlc                 C   sN   | j d | tj | j jddd W d   dS 1 s w   Y  dS )z7Check an unknown purpose raises a NoURL error.
        r<   Z__nosuchpurpose__)ZpurposeN)r   rN   r7   r   rf   re   r   r   r   r   test_geturl_purpose  s   "zFSTestCases.test_geturl_purposec                 C   s   | j d}| |d dS )z5Check validatepath returns an absolute path.
        r<   /fooN)r   validatepathr,   r   r   r   r   test_validatepath  s   zFSTestCases.test_validatepathc                 C   sx   |  tj | jdd W d    n1 sw   Y  |  tj | jd W d    d S 1 s5w   Y  d S )Nzinvalid filewb)r7   r   ZInvalidCharsInPathr   r2   rj   r   r   r   r   test_invalid_chars  s   "zFSTestCases.test_invalid_charsc              	   C   s  | j d}| |jd | |j | j dd | j d | j dj}| 	|d d t
 | |d d d | |d d  | j dj}| |d d d | |d d  | j jdd	gd
j}| 	|t | |d	 d d | |d	 d ttj | || j dj zt| W n ttfy   tdw | j ddj}| 	|t | |d ddd | j jdg dd
}d	|jv r|jd	 }| 	|dtd ttf | 	|dtd ttf | 	|dtd ttf | 	|dtd ttf d S d S )Nr6    r<   r>   dirbasicnameis_dirdetails
namespacessize   typez info should be JSON serializablerH   Frq   rr   )accessstatrs   accessedmodifiedZcreatedZmetadata_changed)r   getinfor,   rq   r   rr   r]   rO   rawr-   r   r#   rJ   intr   fileZ
getdetailsjsondumpsr?   
ValueErrorAssertionErrorru   getrx   float)r   Z	root_infoinfoZno_infors   r   r   r   test_getinfo  sF   
zFSTestCases.test_getinfoc                 C   sP  |  | jd |  | jd | | jd | | jd | | jd | | jd | jd | jdd |  | jd |  | jd |  | jd | | jd | d | d | d | d | jd | d | | jd | d |  | jd |  | jd d S )Nr6   rn   r<   foo/barfoo/bar/bazegg   test)	r   r   r   r#   makedirsr]   r!   r$   remover   r   r   r   test_exists  s,   





zFSTestCases.test_existsc                 C   s  |  tj | jd W d    n1 sw   Y  | | jdg  | | jdg  | | jdg  | jdd | jdd | jd | jd	d t	| | jdg d
 t	| | jdg d
 t	| | jdg d
 | jdD ]}| 
|t q| jd | | jdg  | jdd | jdd t	| | jdddg | jdD ]}| 
|t q| jd |  tj | jd W d    d S 1 sw   Y  d S )NZfoobarr6   .z./r<      eggr=   rB   zbaz/egg)r<   r=   rB   ro   z/dirz
dir/foofooz
dir/barbarfoofooZbarbarZnotadir)r7   r   rU   r   listdirr,   r]   rO   rE   assertCountEqualr-   r   rN   DirectoryExpected)r   rq   r   r   r   test_listdir%  s4   "zFSTestCases.test_listdirc                 C   s  | j dd | d | j dd | d | d | dd | j dd | tj	 | j dd W d    n1 sBw   Y  | j jdddd | d | tj
 | j dd W d    n1 smw   Y  | tj
 | j d	d
 W d    n1 sw   Y  | j d | j dd | j d | j dd | d | dd | d | d | tj | j dd W d    d S 1 sw   Y  d S )Nr<   r   r=   foo2   eggeggTZ	overwritezegg/barr   spamrB   z
baz/bazbazs   bazbazZbaz2zbaz2/bazbazZyolk)r   r]   r&   mover$   r!   r0   r7   r   DestinationExistsrU   rO   r(   r8   r   r   r   r   	test_moveT  s:   






"zFSTestCases.test_movec                 C   s  |  tj | jd W d    n1 sw   Y  | jjddd}| |t | | jdg  | 	d | jd | 
d | | jdtj | jdd | dd |  tj | jd W d    n1 ssw   Y  |  tj | jd W d    n1 sw   Y  | jd | jd |  tj | jd	 W d    n1 sw   Y  |  tj | jd W d    d S 1 sw   Y  d S )
Nr6   TZrecreater<   foo/bar.txtr   /foo/bar/baz/foo/barr   )r7   r   DirectoryExistsr   rO   r-   r   r,   r   r$   r(   gettyper   	directoryr]   r0   rU   )r   Zslash_fsr   r   r   test_makedir  s4   

"zFSTestCases.test_makedirc                 C   s0  |  | jd | jd | | jdtj | jd | | j	d | | j	d | 
tj | jd W d    n1 sIw   Y  | jjddd | jdd | 
tj | jd W d    n1 stw   Y  | 
tj | jd	 W d    d S 1 sw   Y  d S )
Nr<   r   r   Tr   foo.binr   zfoo.bin/barzfoo.bin/bar/baz/egg)r#   r   r   r   r,   r   r   r   r   r'   r7   r   r   r]   r   r   r   r   r   test_makedirs  s"   "zFSTestCases.test_makedirsc                 C   s   | j d | | j ddg | | j ddg | | j ddg | | j dg  t| j d}| t|d | |d jd d S )Nzfoo/foo/foorn   r<   zfoo/foor[   r   )r   r   r,   r   listscandirlenrq   )r   scanr   r   r   test_repeat_dir  s   zFSTestCases.test_repeat_dirc              	   C   s  |  tj | jdd W d    n1 sw   Y  | jd d}| jdd,}t| | |tj	 | 
|  | |  | |j || W d    n1 s[w   Y  | 
|j | jdd'}| |tj	 | 
|  | |  | |j | }W d    n1 sw   Y  | 
|j | || | d| d}| jdd}|| W d    n1 sw   Y  | d| |  tj | jd	 W d    n1 sw   Y  | jd$}z| }W n tjy   Y nw | t|d
d W d    n	1 sw   Y  tjg d}| jd| | jd}t||dD ]\}}| || q?W d    d S 1 sWw   Y  d S )Nr\   rr<   Hello, World	foo/hellowtr1   Goodbye, World/foo/bar/test.txt      Goodbye)zLine 1zLine 2zLine 3ziter.txtr[   )r7   r   rU   r   r2   rO   rD   r-   ioIOBaser   writabler#   readableclosedwriter3   r,   r5   filenoUnsupportedOperationoslinesepjoin	writetextzip
splitlinesr   textr4   ZhellofnlinesZactualexpectedr   r   r   	test_open  s`   
	$zFSTestCases.test_openc              	   C   s  |  tj | jdd W d    n1 sw   Y  | jd d}| jdd9}t| | d|j | 	|t
j | |  | |  | t||| | |j W d    n1 shw   Y  | |j |  tj | jdd}W d    n1 sw   Y  W d    n1 sw   Y  | jdd.}| d|j | 	|t
j | |  | |  | }| |j W d    n1 sw   Y  | |j | || | d| d	}| jdd}| t||| W d    n	1 sw   Y  | d| |  tj | jd W d    n	1 s2w   Y  |  tj | jd
 W d    n	1 sOw   Y  | jd$}z| }W n t
jyl   Y nw | t|dd W d    n	1 sw   Y  dg d}| jd| | jd}t||dD ]\}}| || qW d    d S 1 sw   Y  d S )Nr\   r   r<   s   Hello, World
r   wbxs   Goodbye, Worldr   r   r      
)s   Line 1s   Line 2s   Line 3ziter.binr[   )r7   r   rU   r   r9   rO   rD   assertInmoder-   r   r   r   r   r#   r   r,   r   r   r   
FileExistsr3   r0   r8   r   r   r   r   r]   r   r   r   r   r   r   test_openbin_rw  sv   	$zFSTestCases.test_openbin_rwc              	   C   s  | j dda}t| t| | |tj | |  | 	|
  | 	|j | | d |d | | d |g d | t |d W d    n1 s\w   Y  W d    n1 skw   Y  | |j | j dd	"}| t |d W d    n1 sw   Y  W d    n1 sw   Y  | j dd
O}t| t| | |tj | 	|  | |
  | 	|j | | g d | t |d W d    n1 sw   Y  W d    n	1 sw   Y  | |j | j ddl}| |tj | 	|  | |
  | 	|j | |dddg | | d td}| ||d | | d | |d | t |d W d    n	1 ssw   Y  W d    n	1 sw   Y  | |j | j dd
}| t|g d | 	|j W d    n	1 sw   Y  | |j t| j d}| t|d | j dd}| d|d W d    n	1 sw   Y  | j dd}| |tj | 	|  | |
  | |  | 	|j | |dd | d|dtj | |dd | d|dtj | |dd | d|dtj | |dd  | t |d!d" W d    n	1 ssw   Y  W d    n	1 sw   Y  | |j | j dd#}| |tj | |
  | |  | |  | 	|j | d$|d$ | d$|   | d|d | | d% | d!| d! | d$|  | d|d t!t| j  t!t| | | d& | d|d |d' | d|d | |dd' W d    n	1 s4w   Y  | |j d S )(Nr   r   r   zHello
World
   )foo
bar
baz
r[   binrl   r   )Hello
zWorld
r   r   r   norb   s   Hello
s   World
      s   foo
s   nor   unicodeu   Héllo
Wörld
   Hrw      l         W      z
   M   r+b   s   Hellos
   Hello        O)"r   r2   rD   r   r-   r   r   r   r   r#   r   r   r,   tellr   
writelinesr7   IOErrorr3   	readlines	bytearrayreadintor   iternextseekableseekr   setZcurrentendr   truncateprint)r   r4   bufferZ
iter_linesr   r   r   test_open_files?  s   

zFSTestCases.test_open_filesc              	   C   sD  | j dd;}t| t| | d|j | |tj | 	|
  | |  | |j | d|d W d    n1 sEw   Y  | 	|j | j dd6}t| t| | d|j | |tj | 	|  | |
  | |j | }W d    n1 sw   Y  | |d | 	|j | t | j dd}W d    n1 sw   Y  W d    n1 sw   Y  | tj | j d W d    n1 sw   Y  | tj | j d	 W d    n	1 sw   Y  | j d
 | tj | j d W d    n	1 s$w   Y  | tj | j dd W d    n	1 sBw   Y  | tj | j d W d    n	1 s_w   Y  | tj | j dd W d    n	1 s}w   Y  | t | j dd W d    d S 1 sw   Y  d S )Nzfile.binrl   r   rw   s    r   r1   r   r   r<   ri   r   z/egg/barh)r   r9   rD   r   r   r   r-   r   r   r   r   r#   r   r   r,   r   r3   r7   r   r   rU   rO   r8   )r   
write_fileZ	read_filer/   r   r   r   test_openbin  sf   	
	$zFSTestCases.test_openbinc                 C   x   | j dd}|d W d    n1 sw   Y  | tj | j dd W d    d S 1 s5w   Y  d S )Ntest_open_exclusiver   Zbananas)r   r2   r   r7   r   r   r   r4   r   r   r   r        "zFSTestCases.test_open_exclusivec                 C   r   )Ntest_openbin_exclusiver   s   bananas)r   r9   r   r7   r   r   r   r   r   r   r    r  z"FSTestCases.test_openbin_exclusivec                 C   s  | j d | j dd | j dd | j d>}t| t| t| |dddg | 	|
d | 	|
d | |dd | |dd W d    n1 s[w   Y  | | j   | tj | j d W d    n1 sw   Y  | tj | j d W d    n1 sw   Y  | j d	 | j d | j jdtd
6}t| |dddg | 	|
d | 	|
d | |dd | |dd W d    n1 sw   Y  | 	| j   d S )Nr<   r   s   barbarfoo/eggr   r6   r=   r   rn   )factory)r   rO   r]   opendirrD   r   rE   r   r   r   r%   r,   r+   r#   isclosedr7   r   rU   r   r   r   Zfoo_fsr   r   r   test_opendir  s:   	zFSTestCases.test_opendirc                 C   sJ  | j dd | j dd | j dd | d | d | d | j d | d | d | d | tj | j d W d    n1 sPw   Y  | j d | tj	 | j d W d    n1 srw   Y  | j 
d	 d
}t| d| j}|tj| | j d W d    d S 1 sw   Y  d S )Nfoo1s   test1r   s   test2Zfoo3s   test3r=   ro   zfoo/bar/baz/z)resource 'foo/bar/egg/test.txt' not foundassertRaisesRegexzfoo/bar/egg/test.txt)r   r]   r&   r   r$   r7   r   rU   rO   r8   r   getattrZassertRaisesRegexp)r   Z	error_msgr
  r   r   r   test_remove  s.   





"zFSTestCases.test_removec                 C   sN  |  tj | jd W d    n1 sw   Y  | jd | | jd | jd | | jd | | j	d |  tj
 | jd W d    n1 sZw   Y  | jd | jdd |  tj | jd W d    n1 sw   Y  |  tj | jd W d    d S 1 sw   Y  d S )Nr6   r   r   Znodirr  r   )r7   r   ZRemoveRootErrorr   	removedirr   r   r   r#   r'   rU   r]   r   ZDirectoryNotEmptyr   r   r   r   test_removedir4  s&   "zFSTestCases.test_removedirc                 C   s   | j d | j d | j d | j d | j d | j d | j d | j d | j d	 | d | d | j d
 | d
 d S )Nr   r  zfoo/a/b/c/d/ezfoo/egg.txtzfoo/bar/egg.binzfoo/bar/baz/egg.txtzfoo/a/b/c/1.txtzfoo/a/b/c/2.txtzfoo/a/b/c/3.txtr<   )r   r   rN   r!   Z
removetreer$   r   r   r   r   test_removetreeM  s   

zFSTestCases.test_removetreec                 C   s   | j d tt }d|d |d di}| j d| | j jddgdj}d|dg v r=| 	|d d |d  d	|dg v rQ| 	|d d	 |d  | 
tj | j d
i  W d    d S 1 sjw   Y  d S )Nbirthday.txtrs   <   i  )r|   r}   rt   r|   _writer}   Znothing)r   rN   mathZfloortimeZsetinfor~   r   r   r,   r7   r   rU   )r   nowZchange_infoZnew_infor   r   r   test_setinfo^  s   "zFSTestCases.test_setinfoc              	   C   s   | j d | j jdtdddd | j jddgd}|ddg }d	|v r4| |jtdddtj	d
 d|v rH| |j
tdddtj	d
 d S d S )Nr    r   r   )r|   rs   rt   r  r|   Ztzinfor}   )r   rN   settimesr   r~   r   r,   r|   pytzUTCr}   )r   r   Z	writeabler   r   r   test_settimesm  s    zFSTestCases.test_settimesc              	   C   s   | j d | d | j dtddd | j jddgd}|ddrV| |jtdddt	j
d t }| j d | j jddgdjd d }| || dk  d S d S )	Nznew.txtr  r   r   rs   rt   r|   r  )r   rS   r&   r  r   r~   Zis_writeabler,   r|   r  r  r  r   r   )r   r   r  r|   r   r   r   
test_touchw  s   
zFSTestCases.test_touchc                 C   s   |  | j  | j  | | j  | j  | | j  | tj | jd W d    d S 1 s:w   Y  d S )Nztest.bin)	r#   r   r  r   r   r7   r   ZFilesystemClosedr9   r   r   r   r   
test_close  s   

"zFSTestCases.test_closec                 C   sN  | j dd | j dd | dd | j dd | j jdddd | dd | tj | j dd W d    n1 sBw   Y  | tj | j dd W d    n1 s_w   Y  | tj | j d	d
 W d    n1 s|w   Y  | j d | tj	 | j dd W d    d S 1 sw   Y  d S )Nr<   r   r=   rB   s
   truncatemeTr   z	a/b/c/bazr   r   ro   Zfolder)
r   r]   copyr0   r7   r   r   rU   rO   r8   r   r   r   r   	test_copy  s&   "zFSTestCases.test_copyc                 C   s   dd }dd }dd }dd d }t dW}|d| |d	| |d
d| |dd| | j}tjj|||d | |d| | |d	| | |d| | |d| W d   dS 1 spw   Y  dS z3Test fs.copy with varying number of worker threads.s   foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo   s   barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbars 	  bazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazs   eggeggeggeggeggeggegg   temp://r<   r=   Zdir1rB   z	dir2/dir3r   )workerszdir1/bazzdir2/dir3/eggN)	r
   r]   rO   r   r   r  copy_fsr,   r+   r   r%  Zdata1Zdata2Zdata3Zdata4Zsrc_fsZdst_fsr   r   r   _test_upload  s    
"zFSTestCases._test_uploadc                 C      |  d d S Nr   r(  r   r   r   r   test_upload_0  r   zFSTestCases.test_upload_0c                 C   r)  Nr[   r+  r   r   r   r   test_upload_1  r   zFSTestCases.test_upload_1c                 C   r)  Nr   r+  r   r   r   r   test_upload_2  r   zFSTestCases.test_upload_2c                 C   r)  Nr   r+  r   r   r   r   test_upload_4  r   zFSTestCases.test_upload_4c                 C   s   dd }dd }dd }dd d }| j }tdT}|d| |d	| |d
d| |dd| t jj|||d | |d| | |d	| | |d| | |d| W d   dS 1 spw   Y  dS r!  )	r   r
   r]   rO   r   r  r&  r,   r+   r'  r   r   r   _test_download  s    
"zFSTestCases._test_downloadc                 C   r)  r*  r3  r   r   r   r   test_download_0  r   zFSTestCases.test_download_0c                 C   r)  r-  r4  r   r   r   r   test_download_1  r   zFSTestCases.test_download_1c                 C   r)  r/  r4  r   r   r   r   test_download_2  r   zFSTestCases.test_download_2c                 C   r)  r1  r4  r   r   r   r   test_download_4  r   zFSTestCases.test_download_4c                 C   s   |  | jd | jd | | jd | | jdtj | | j	dd | j
dd | | j	dd | jjddd | | j	dd | j
dd | | j	dd | jjddd | | j	dd d S )Nr<   r   r>   rw   T)ZwipeF)r#   r   r   rN   r   r,   r   r   r   r_   r]   r   r   r   r   test_create  s   zFSTestCases.test_createc                 C   s   | j d | j d}| |t | j d | j d | j d | j d | tj | j d W d    d S 1 sBw   Y  d S )Nr<   ro   r6   rn   r=   )	r   rN   Zdescr-   r   rO   r7   r   rU   )r   descriptionr   r   r   	test_desc  s   "zFSTestCases.test_descc              	   C   s  |  tj | jdD ]}qW d    n1 sw   Y  | jd}| t|tj | 	t
|g  | jd |  tj t
| jd W d    n1 sUw   Y  | jd | jd | jd}| t|tj tdd |D dd	 d
}dd |D }| 	|ddddiddddiddddig t
| jjdg dd t
| jjddd}| 	t|d t
| jjddd}| 	t|d t
| jjddd}| 	t|d dd t||D }| 	|h d d S )Nz/foobarr6   r<   r=   ro   c                 s   s    | ]}|j V  qd S r   )r   .0r   r   r   r   	<genexpr>'  s    z+FSTestCases.test_scandir.<locals>.<genexpr>c                 S   s   | d d S )Nrp   rq   r   )r   r   r   r   <lambda>'  s    z*FSTestCases.test_scandir.<locals>.<lambda>)keyc                 S   s   g | ]}d |d  iqS )rp   r   )r=  ir   r   r   
<listcomp>,  s    z,FSTestCases.test_scandir.<locals>.<listcomp>rp   Fry   T)rs   linkr{   lstatrz   rt   r/  Zpager   r   r   r[   r   r   r   c                 S   s   h | ]}|j qS r   rq   r<  r   r   r   	<setcomp>E      z+FSTestCases.test_scandir.<locals>.<setcomp>>   r=   ro   r<   )r7   r   rU   r   r   r   r)   collections_abcIterabler,   r   rN   r   rO   sortedr   	itertoolschain)r   _infoZiter_scandirr   page1page2page3Zpagedr   r   r   test_scandir  sP   
zFSTestCases.test_scandirc                 C   s~  |  t| jjddgdg  | jd | jd | jd | jd t| jjddd	}t| jjdd
d	}t| jjddd	}|  t|d |  t|d |  t|d dd t|||D }|  t	|h d dd | jjddgdD }|  t	|ddh dd | jjdddgdD }|  t	|h d dd | jjddgddgdD }|  t	|ddh dd | jjddgdD }|  t	|dh | 
t dd | jjdddD }W d    n1 sw   Y  | jd dd | jjddgdgdD }|  t	|dh | 
t dd | jjddgddD }W d    d S 1 s8w   Y  d S ) Nr6   *.py)filesr=   rM   foo.pyfoo.pycr/  rE  rF  rG  r   r   c                 S      g | ]}|j qS r   rH  r=  r   r   r   r   rB  W  rJ  z.FSTestCases.test_filterdir.<locals>.<listcomp>>   r=   rW  rX  rM   c                 S   rY  r   rH  rZ  r   r   r   rB  [  rJ  c                 S   rY  r   rH  rZ  r   r   r   rB  _  s    z*.pyc>   r=   rW  rX  c                 S   rY  r   rH  rZ  r   r   r   rB  e      *)Zexclude_dirsrV  c                 S   rY  r   rH  rZ  r   r   r   rB  n  rJ  )exclude_filesc                 S   rY  r   rH  rZ  r   r   r   rB  s  rJ  rB   c                 S   rY  r   rH  rZ  r   r   r   rB  v  r[  z??z)r]  dirsc                 S   rY  r   rH  rZ  r   r   r   rB  }  r[  )r,   r   r   Z	filterdirrO   rN   r   rN  rO  r   r7   r?   )r   rQ  rR  rS  namesZdir_listr   r   r   test_filterdirH  sP   $zFSTestCases.test_filterdirc                 C   s
  d dd tdD }| jdd}|| W d    n1 s#w   Y  | | jd| | jd}| |t | || | 	t
j | jd W d    n1 s[w   Y  | jd | 	t
j | jd W d    d S 1 s~w   Y  d S )	NrX   c                 s       | ]}t |V  qd S r   rE   Zint2byter=  nr   r   r   r>        z-FSTestCases.test_readbytes.<locals>.<genexpr>r#  r<   rl   r   rB   )r   ranger   r2   r   r,   r+   r-   r*   r7   r   rU   rO   r8   )r   	all_bytesr4   Z
_all_bytesr   r   r   test_readbytes  s   "zFSTestCases.test_readbytesc                 C   sx   d}| j d| t }| j d| | | | | tj	 | j d| W d    d S 1 s5w   Y  d S )N   Hello, World	hello.binr   )
r   r]   r   BytesIOdownloadr,   getvaluer7   r   rU   r   Z
test_bytesr   r   r   r   test_download  s   "zFSTestCases.test_downloadc                 C   s@   d}| j d| t }| j jd|dd | | | d S )Ns  Hello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, WorldHello, Worldrj  r   Z
chunk_size)r   r]   r   rk  rl  r,   rm  rn  r   r   r   test_download_chunk_size  s
   z$FSTestCases.test_download_chunk_sizec                 C   s   |  | jd | jd | | jd |  | jd | jd | | jd | jd |  | jd d S )Nr6   r<   ri   r   )r   r   ZisemptyrO   r#   rN   r   r   r   r   r   test_isempty  s   zFSTestCases.test_isemptyc                 C   s   d dd tdD }| jd| | jdd}| }W d    n1 s)w   Y  | |t | || | 	d| | 
t | jdd W d    d S 1 sXw   Y  d S )	NrX   c                 s   ra  r   rb  rc  r   r   r   r>    re  z.FSTestCases.test_writebytes.<locals>.<genexpr>r#  r<   r   Znotbytesr   )r   rf  r   r]   r2   r3   r-   r*   r,   r0   r7   r?   )r   rg  r4   Z_bytesr   r   r   test_writebytes  s   
"zFSTestCases.test_writebytesc                 C   sx   | j d | j dd}|t W d    n1 sw   Y  | j d}| |t | |t | 	dt d S )Nr<   zfoo/unicode.txtr   )
r   rO   r2   r   UNICODE_TEXTreadtextr-   r   r,   r5   )r   r4   r   r   r   r   test_readtext  s   zFSTestCases.test_readtextc                 C   s   | j dd | j dd}| }W d    n1 sw   Y  | |d | |t | t | j dd W d    d S 1 sFw   Y  d S )Nr<   r=   r1   Znottexts   bytes)	r   r   r2   r3   r,   r-   r   r7   r?   )r   r4   r<   r   r   r   test_writetext  s   
"zFSTestCases.test_writetextc                 C   ^   t d}| jd| | jdd}| }W d    n1 s"w   Y  | |d d S Nr>   r<   r   )r   rk  r   Z	writefiler2   r3   r,   r   
bytes_filer4   r/   r   r   r   test_writefile     

zFSTestCases.test_writefilec                 C   rx  ry  r   rk  r   Zuploadr2   r3   r,   rz  r   r   r   test_upload  r}  zFSTestCases.test_uploadc                 C   sf   d}t |}| jjd|dd | jdd}| }W d    n1 s&w   Y  | || d S )Ns  barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarr<   r   rp  r   r~  )r   Z	test_datar{  r4   r/   r   r   r   test_upload_chunk_size  s   

z"FSTestCases.test_upload_chunk_sizec                 C   s  | j dd}t| t| |d |d |d W d    n1 s)w   Y  | dd | j dd}|dd	g W d    n1 sMw   Y  | dd
 | j d}| | d | | d	 W d    n1 syw   Y  | j d}|	 }W d    n1 sw   Y  | |dd	g | j d}t
|}W d    n1 sw   Y  | |dd	g | j d}g }|D ]}|| qW d    n1 sw   Y  | |dd	g | j d}tt| | t|d W d    n	1 sw   Y  | j dd}|d W d    n	1 s)w   Y  | | j dd | dd d S )Nr	  rl   rY      b   cs   abcr   s   hello
s   worlds   hello
worldr   rw   s   hel)r   r9   r   rD   r   r0   r   r,   readliner   r   appendr   r   r2   r   r_   r   r4   r   liner   r   r   test_bin_files  sP   



zFSTestCases.test_bin_filesc              	   C   sj  | j dd}t| t| |d |d |d W d    n1 s)w   Y  | dd | j dd}|dd	g W d    n1 sMw   Y  | dd
 | j d}| | d | | d	 W d    n1 syw   Y  | j d}|	 }W d    n1 sw   Y  | |dd	g | j d}t
|}W d    n1 sw   Y  | |dd	g | j d}g }|D ]}|| qW d    n1 sw   Y  | |dd	g | j dd}|d W d    n	1 sw   Y  | | j dd | dd | j dd}|d W d    n	1 s1w   Y  | dd | j dd}~| t% | j dd}|d W d    n	1 sbw   Y  W d    n	1 srw   Y  | t. | j dd}|d W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr	  r   ar   cabcr   zhello
Zworldzhello
worldzr+rw   Zhelab   ps   helpr   zno!Znewfoor   r   )r   r2   r   rD   r   r5   r   r,   r  r   r   r  r   r_   r0   r7   r   r3   r  r   r   r   
test_files  sn   



 $zFSTestCases.test_filesc                 C   sf   d}| j d| t j| j d| j d | d| td}t j| j d|d | |d| d S )Nri  rM   zbar.txtmem://)r   r]   r  Z	copy_filer0   r
   r,   r+   )r   Z
bytes_testmem_fsr   r   r   test_copy_fileD  s   zFSTestCases.test_copy_filec                 C   sR   t d}| jd | jd tj| j| h d}| tt	|| d S )Nr  r   r      /eggri   r   r   )
r
   r   r   rO   r  Zcopy_structurer,   r   r   	walk_dirs)r   r  r   r   r   r   test_copy_structureP  s   zFSTestCases.test_copy_structurec                 C   s(  t |}| jd | jd | jdd | jdd tj| jd|d h d}| tt	
|| | dd | dd t d	}tj| jd
|d | tt	|dg td | j  |  tj| jd
|d td | j  td |  | tt	|ddg d S )Nr   r   top.txtr   /foo/bar/baz/test.txtr   r6   r  r  ri   z/bar/baz/test.txtZBEFOREr  ZFSZOTHERz/egg/bar/baz/test.txt)r
   r   r   rO   r   r  copy_dirr,   r   r   r  r5   r   Z
walk_filesr   treer   protocolother_fsr   r   r   r   _test_copy_dirY  s2   

zFSTestCases._test_copy_dirc                 C   s   t |}|d |d |dd |dd tj|d| jd h d}| tt	
| j| | dd | dd d S 	Nr   r   r  r   r  r   r6   r  )r
   r   rO   r   r   r  r  r,   r   r   r  r5   r  r   r   r   _test_copy_dir_write|  s   

z FSTestCases._test_copy_dir_writec                 C      |  d | d d S Nr  r  r  r   r   r   r   test_copy_dir_mem     
zFSTestCases.test_copy_dir_memc                 C   r  Nr$  r  r   r   r   r   test_copy_dir_temp  r  zFSTestCases.test_copy_dir_tempc                 C   s   t |}|d |d |dd |dd tj|d| jd h d}| |dg  | t	t
| j| | dd | dd d S r  )r
   r   rO   r   r   r   move_dirr,   r   r   r   r  r5   r  r   r   r   _test_move_dir_write  s   

z FSTestCases._test_move_dir_writec                 C   r)  r  r  r   r   r   r   test_move_dir_mem  r   zFSTestCases.test_move_dir_memc                 C   r)  r  r  r   r   r   r   test_move_dir_temp  r   zFSTestCases.test_move_dir_tempc                 C   s   | j d | j d | j dd | j dd t j| j d| j d h d	}| tt	| j | | 
dd | 
d
d d S )Nr   r   r  r   r  r   r<   r   >   /foo2	/foo2/bar/foo2/bar/bazr  z/foo2/bar/baz/test.txt)r   r   rO   r   r   r  r,   r   r   r  r5   )r   r   r   r   r   test_move_same_fs  s   zFSTestCases.test_move_same_fsc                 C   sT   d}| j dd| | d| t j| j d| j d | d | d| d S Nr   r<   test.txtzfoo/test.txtzfoo/test2.txt)r   rO   r   r5   r   	move_filer$   )r   r   r   r   r   test_move_file_same_fs  s   
z"FSTestCases.test_move_file_same_fsc                 C   s   t |}d}| jdd| | d| | tj tj	| jd|d W d    n1 s1w   Y  |d tj	| jd|d | 
|d| d S r  )r
   r   rO   r   r5   r7   r   rU   r   r  r,   ru  )r   r  r  r   r   r   r   _test_move_file  s   
zFSTestCases._test_move_filec                 C   r)  r  r  r   r   r   r   test_move_file_mem  r   zFSTestCases.test_move_file_memc                 C   r)  r  r  r   r   r   r   test_move_file_temp  r   zFSTestCases.test_move_file_tempc                 C   s  | j d | j dd | j d | j dd | dd | d | dd | d | tj	 | j dd	 W d    n1 sHw   Y  | tj	 | j jd
ddd W d    n1 sgw   Y  | tj
 | j jdddd W d    d S 1 sw   Y  d S )Nfoo/bar/baz/eggfoo/bar/foofoo.txtHellor   r   foo2/foofoo.txtfoo2/baz/eggr<   r   r   r   TrN   z
foofoo.txt)r   r   r   rO   Zcopydirr5   r(   r7   r   rU   r   r   r   r   r   test_copydir  s"   

"zFSTestCases.test_copydirc                 C   s   | j d | j dd | j d | j dd | dd | d | d | d | d | t	j
 | j dd	 W d    n1 sLw   Y  | t	j
 | j jd
ddd W d    n1 skw   Y  | t	j | j dd W d    d S 1 sw   Y  d S )Nr  r  r  r   r   r  r  r<   r   r   r   Tr  )r   r   r   rO   Zmovedirr5   r(   r$   r7   r   rU   r   r   r   r   r   test_movedir  s$   



"zFSTestCases.test_movedirc                 C   s@   |  | jdgd | | jdgd| j dd d S )NrU  rW  zFOO.PYcase_insensitiveF)r   r   matchr,   rI   r   r   r   r   r   
test_match  s
   zFSTestCases.test_matchc                 C   sJ   | j d | j d t }| j j|d | }d}| || d S )Nr   r  )r   z!|-- foo
|   `-- bar
`-- test.txt
)r   r   rN   r   StringIOr  rm  r,   )r   Z
write_treeZwrittenr   r   r   r   	test_tree  s   zFSTestCases.test_treec                 C   s   | j  ddstd| j d | j dd | j dd | d | 	d	g| j 
d | 	d	| j dj | dd | dd | j dr\| tj| j d | j d | d | j d | d d S )
NZunicode_pathsFz.the filesystem does not support unicode paths.u   földéru   ☭.txtzSmells like communism.u   földér/☣.txts   Smells like an old syringe.u   ☣.txt)r   rI   r   unittestSkipTestrO   r   r]   r(   r,   r   r~   rq   r5   r0   rc   r   r   r    r   rb   r   r$   r  r   r   r   r   test_unicode_path  s    


zFSTestCases.test_unicode_pathc                 C   s   | j  }d|vrtd|ddrtd| j d | j d | j d | d | d | d | d | 	d | 	d | 
d d S )	Nr  zcase sensitivity not knownFz%the filesystem is not case sensitive.r<   ZFooZfOOZFoO)r   rI   r  r  r   rO   rS   r!   r$   r(   r&   )r   rK   r   r   r   test_case_sensitive$  s   








zFSTestCases.test_case_sensitivec                 C   s   |  | jjtj d S r   )r-   r   r	   ZBoundGlobberr   r   r   r   	test_glob9  s   zFSTestCases.test_globc                 C   s   | j dddd  | | j ddd | tj | j dd W d    n1 s/w   Y  | j d}| |ddd W d    d S 1 sPw   Y  d S )	Nr<   z
hashme.txts   foobarr"  zfoo/hashme.txtZmd5Z 9fff4bb103ab8ce4619064109c54cb9cZnohash)	r   rO   r]   r,   hashr7   r   ZUnsupportedHashr  r  r   r   r   	test_hash<  s   "zFSTestCases.test_hashN)b__name__
__module____qualname____doc__r   r   r   r   r!   r$   r&   r(   r0   r5   r:   r@   rC   rF   rL   rP   rR   rV   r`   rd   rg   rh   rk   rm   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r   r(  r,  r.  r0  r2  r3  r5  r6  r7  r8  r9  r;  rT  r`  rh  ro  rq  rr  rs  rv  rw  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r      s    
				
:&/."8Be<(
9:

	
*8	#		r   )$r  Z
__future__r   r   r   r   rN  r   r  r   r  r  Zfs.copyr   Zfs.mover   r   r   r   r	   Z	fs.openerr
   Zfs.subfsr   r   r  rE   r   ZPY2collectionsrK  Zcollections.abcr  rt  objectr   r   r   r   r   <module>   s8   
 Q