o
    pfe!                    @   s  d Z ddlmZ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mZ ddlmZ ddlZddlZddlmZmZmZmZmZ ddlmZ ddlmZmZ ejrbddlZnddlmZ zdd	lm Z  W n e!y   d
d	l"m Z  Y nw 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_literalsN)datetime)	text_type)ResourceTypeSeekerrorsglobwalk)open_fs)ClosingSubFSSubFS)timezone   uZ4  

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                   @   s4  e Zd ZdZdd Zdd Zdd Zd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 Z0dZd[ Z1d\d] Z2d^d_ Z3d`da Z4dbdc Z5ddde Z6dfdg Z7dhdi Z8djdk Z9dldm Z:dndo Z;dpdq Z<drds Z=dtdu Z>dvdw Z?dxdy Z@dzd{ ZAd|d} ZBd~d 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 Zadd Zbdd Zcdd ZdddÄ Zeddń ZfddǄ ZgdS )FSTestCaseszBasic FS tests.s   foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo   s   barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbars 	  bazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazbazs   eggeggeggeggeggeggegg   c                 C   s   t d)zReturn an FS instance.zimplement me)NotImplementedErrorself r   @/home/ertert/spirit/venv/lib/python3.10/site-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    )ztAssert a path is an empty directory.

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

        N)r!   r   isemptyr#   r   r   r   assert_isempty%  r&   zFSTestCases.assert_isemptyc                 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_isdir7  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_bytes@  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readr2   r3   )r   r$   r4   fr5   r   r   r   assert_textM  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   r8   openbinr   r   r   r   test_root_dir[  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)r=   	TypeErrorr   appendbytesr6   r   r   r   r   test_appendbytesa     zFSTestCases.test_appendbytesc                 C   rA   )NrB   rD   rC   bazbarbaz)r=   rE   r   
appendtextr;   r   r   r   r   test_appendtexti  rH   zFSTestCases.test_appendtextc                 C   s$   t | j | t| jtj d S r   )reprr   r3   sixr   r   r   r   r   
test_basicq  s   
zFSTestCases.test_basicc                 C   sV   | j  }| || j jdd | t|t | j d}| |t | | d S )Nstandard)	namespace__nosuchnamespace__)r   getmetar2   r!   r/   dictr3   r'   )r   metano_metar   r   r   test_getmetav  s   
zFSTestCases.test_getmetac                 C   sR   |  | jd | jd | | jd | jd |  | jd d S )Nfoo.txtrC   )r'   r   r+   creater!   makedirr   r   r   r   test_isfile  s
   zFSTestCases.test_isfilec                 C   sR   |  | jd | jd | jd | | jd |  | jd d S NrB   rC   )r'   r   r-   rY   rZ   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 r\   )r   touchr'   islinkr=   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    one   aonethousand  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbasciir   r   i  doesnotexist)r   
writebytesencoder2   getsizer=   r   r`   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 NrB   za/b/c/foo/bar)r   rY   
getsyspathr   	NoSysPathr'   
hassyspathr3   r   	getospathr0   r!   )r   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 rn   )r   rY   geturlr   NoURLr'   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 )z.Check an unknown purpose raises a NoURL error.rB   __nosuchpurpose__)purposeN)r   rY   r=   r   rv   ru   r   r   r   r   test_geturl_purpose  s   "zFSTestCases.test_geturl_purposec                 C   s   | j d}| |d dS )z,Check validatepath returns an absolute path.rB   /fooN)r   validatepathr2   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)r=   r   InvalidCharsInPathr   r8   r}   r   r   r   r   test_invalid_chars  s   "zFSTestCases.test_invalid_charsc              	   C   sP  | j d}| |jd | |j | d|j | j dd | j 	d | j dj
}| d| | |d d t | |d d d | |d d  | j dj
}| d| | |d d d | |d d  | j jdd	gd
j
}| d| | |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 )Nr<    basicrB   rD   dirnameis_dirdetails
namespacessize   typez info should be JSON serializablerR   Fr   r   )accessstatr   accessedmodifiedcreatedmetadata_changed)r   getinfor2   r   r!   r   assertInr   rj   rZ   rawr3   r   r'   rT   intr   file
getdetailsjsondumpsrE   
ValueErrorAssertionErrorgetr   float)r   	root_infoinfono_infor   r   r   r   test_getinfo  sN   
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 )Nr<   r   rB   foo/barfoo/bar/bazegg   test)	r!   r   r"   r'   makedirsrj   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 )Nfoobarr<   .z./rB      eggrC   rI   zbaz/egg)rB   rC   rI   r   z/dirz
dir/foofooz
dir/barbarfoofoobarbarnotadir)r=   r   r`   r   listdirr2   rj   rZ   rN   assertCountEqualr3   r   rY   DirectoryExpected)r   r   r   r   r   test_listdir1  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 )NrB   r   rC   foo2   eggeggT	overwritezegg/barr   spamrI   z
baz/bazbazs   bazbazbaz2zbaz2/bazbazyolk)r   rj   r,   mover(   r%   r6   r=   r   DestinationExistsr`   rZ   r.   r>   r   r   r   r   	test_move`  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 )
Nr<   TrecreaterB   foo/bar.txtr   /foo/bar/baz/foo/barr   )r=   r   DirectoryExistsr   rZ   r3   r   r2   r   r(   r.   gettyper   	directoryrj   r6   r`   )r   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 )
NrB   r   r   Tr   foo.binr   zfoo.bin/barzfoo.bin/bar/baz/egg)r'   r   r"   r   r2   r   r   r   r!   r-   r=   r   r   rj   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/foor   rB   zfoo/foor   r   )r   r   r2   r   listscandirlenr   )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 )Nri   rrB   Hello, World	foo/hellowtr7   Goodbye, World/foo/bar/test.txt      Goodbye)zLine 1zLine 2zLine 3ziter.txtr   )r=   r   r`   r   r8   rZ   rM   r3   ioIOBaser!   writabler'   readableclosedwriter9   r2   r;   filenoUnsupportedOperationoslinesepjoin	writetextzip
splitlinesr   textr:   hellofnlines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 )Nri   r   rB   s   Hello, World
r   wbxs   Goodbye, Worldr   r   r      
)s   Line 1s   Line 2s   Line 3ziter.binr   )r=   r   r`   r   r?   rZ   rM   r   moder3   r   r   r!   r   r'   r   r2   r   r   r   
FileExistsr9   r6   r>   r   r   r   r   rj   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 | j d}t|}| t|d W d    n	1 sw   Y  | 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 sw   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 sGw   Y  | |j d S )(Nr   r   r   zHello
World
   )foo
bar
baz
r   binr   r   )Hello
zWorld
r   r   r   norb   s   Hello
s   World
      s   foo
s   nor   unicodeu   Héllo
Wörld
   Hr      l         W      z
   M   r+b   s   Hellos
   Hello        O)"r   r8   rM   r   r3   r   r   r!   r   r'   r   r   r2   tellr   
writelinesr=   IOErrorr9   	readlines	bytearrayreadintor   iternextseekableseekr   setcurrentendr   truncateprint)r   r:   buffer
iter_linesr   r   r   test_open_filesK  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.binr   r   r   s    r   r7   r   r   rB   r|   r   z/egg/barh)r   r?   rM   r   r   r   r3   r   r   r!   r   r'   r   r   r2   r   r9   r=   r   r   r`   rZ   r>   )r   
write_file	read_filer5   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   bananas)r   r8   r   r=   r   r   r   r:   r   r   r   r%       "zFSTestCases.test_open_exclusivec                 C   r$  )Ntest_openbin_exclusiver   s   bananas)r   r?   r   r=   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 )NrB   r   s   barbarfoo/eggr   r<   rC   r   r   )factory)r   rZ   rj   opendirrM   r   rN   r   r   r!   r+   r2   r1   r'   isclosedr=   r   r`   r   r   r   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   test2foo3s   test3rC   r   zfoo/bar/baz/z)resource 'foo/bar/egg/test.txt' not foundassertRaisesRegexzfoo/bar/egg/test.txt)r   rj   r,   r   r(   r=   r   r`   rZ   r>   r   getattrassertRaisesRegexp)r   	error_msgr3  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 )Nr<   r   r   nodirr*  r   )r=   r   RemoveRootErrorr   	removedirr   r!   r"   r'   r-   r`   rj   r   DirectoryNotEmptyr   r   r   r   test_removedirA  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	 | j d
 | d | d | j d | d | d | j d | tj | j d W d    n1 ssw   Y  | tj	 | j d W d    d S 1 sw   Y  d S )Nr   r   r*  foo/a/b/c/d/efoo/egg.txtfoo/bar/egg.binzfoo/bar/baz/egg.txtfoo/a/b/c/1.txtfoo/a/b/c/2.txtfoo/a/b/c/3.txtrB   rC   r   )
r   r   rY   r%   
removetreer(   r=   r   r   r`   r   r   r   r   test_removetreeZ  s,   



"zFSTestCases.test_removetreec                 C   s   | j d | j d | j d | j d | j d | j d | j d | j d | d | d | j d	 | d	 | d	 | j d
 | j d | d
 | d d S )Nr   r*  r=  r>  r?  r@  rA  rB  r<   r   r   )r   r   rY   r%   rC  r*   rZ   r   r   r   r   test_removetree_rootv  s"   




z FSTestCases.test_removetree_rootc                 C   s   | j d t }d|d |d di}| j d| | j jddgd}|dd}|dd}|rA| j|dd|d d	d
 |rQ| j|dd|d d	d
 | t	j
 | j di  W d    d S 1 sjw   Y  d S )Nbirthday.txtr   <   i  )r   r   r   r   r   r   )placesnothing)r   rY   timesetinfor   is_writeableassertAlmostEqualr   r=   r   r`   )r   nowchange_infonew_infocan_write_acccesscan_write_modifiedr   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}|dd	}|r7| |jtdddtj	d
 |rI| |j
tdddtj	d
 d S d S )NrF    r   r  )r   r   r   r   r   tzinfo)r   rY   settimesr   r   rL  r2   r   r   utcr   )r   r   rQ  rR  r   r   r   test_settimes  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.txtrT  r   r  r   r   r   rU  )r   r^   r,   rW  r   r   rL  r2   r   r   rX  rJ  r   r!   )r   r   rN  r   r   r   r   
test_touch  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!   r=   r   FilesystemClosedr?   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 )NrB   r   rC   rI   s
   truncatemeTr   z	a/b/c/bazr   r   r   folder)
r   rj   copyr6   r=   r   r   r`   rZ   r>   r   r   r   r   	test_copy  s&   "zFSTestCases.test_copyc                 C   s   t d_}|d| j |d| j |dd| j |dd| j | j}tj	j
|||d | |d| j | |d| j | |d	| j | |d
| j W d   dS 1 sfw   Y  dS z3Test fs.copy with varying number of worker threads.temp://rB   rC   dir1rI   z	dir2/dir3r   )workerszdir1/bazzdir2/dir3/eggN)r   rj   data1data2rZ   data3r   data4r   r^  copy_fsr2   r1   r   rc  src_fsdst_fsr   r   r   _test_upload  s   
"zFSTestCases._test_uploadc                 C      |  d d S Nr   rl  r   r   r   r   test_upload_0  r   zFSTestCases.test_upload_0c                 C   rm  Nr   ro  r   r   r   r   test_upload_1  r   zFSTestCases.test_upload_1c                 C   rm  Nr  ro  r   r   r   r   test_upload_2  r   zFSTestCases.test_upload_2c                 C   rm  Nr   ro  r   r   r   r   test_upload_4  r   zFSTestCases.test_upload_4c                 C   s   | j }td\}|d| j |d| j |dd| j |dd| j t j	j
|||d | |d| j | |d| j | |d	| j | |d
| j W d   dS 1 sfw   Y  dS r`  )r   r   rj   rd  re  rZ   rf  r   rg  r^  rh  r2   r1   ri  r   r   r   _test_download  s   
"zFSTestCases._test_downloadc                 C   rm  rn  rw  r   r   r   r   test_download_0  r   zFSTestCases.test_download_0c                 C   rm  rq  rx  r   r   r   r   test_download_1  r   zFSTestCases.test_download_1c                 C   rm  rs  rx  r   r   r   r   test_download_2  r   zFSTestCases.test_download_2c                 C   rm  ru  rx  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 )NrB   r   rD   r   T)wipeF)r'   r   r"   rY   r!   r2   r   r   r   rl   rj   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 )NrB   r   r<   r   rC   )	r   rY   descr3   r   rZ   r=   r   r`   )r   descriptionr   r   r   	test_desc0  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/foobarr<   rB   rC   r   c                 s       | ]}|j V  qd S r   )r   .0r   r   r   r   	<genexpr>Y      z+FSTestCases.test_scandir.<locals>.<genexpr>c                 S   s   | d d S )Nr   r   r   )r   r   r   r   <lambda>Y  s    z*FSTestCases.test_scandir.<locals>.<lambda>)keyc                 S   s   g | ]}d |d  iqS )r   r   )r  ir   r   r   
<listcomp>^  s    z,FSTestCases.test_scandir.<locals>.<listcomp>r   Fr   T)r   linkr   lstatr   r   rs  pager  r  r   r   r   r  r   c                 S   s   h | ]}|j qS r   r   r  r   r   r   	<setcomp>w      z+FSTestCases.test_scandir.<locals>.<setcomp>>   rC   r   rB   )r=   r   r`   r   r   r!   r/   collections_abcIterabler2   r   rY   r   rZ   sortedr   	itertoolschain)r   _infoiter_scandirr   page1page2page3pagedr   r   r   test_scandirA  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 ) Nr<   *.py)filesrC   rX   foo.pyfoo.pycrs  r  r  r  r  r   c                 S      g | ]}|j qS r   r  r  r   r   r   r   r    r  z.FSTestCases.test_filterdir.<locals>.<listcomp>>   rC   r  r  rX   c                 S   r  r   r  r  r   r   r   r    r  c                 S   r  r   r  r  r   r   r   r    s    z*.pyc>   rC   r  r  c                 S   r  r   r  r  r   r   r   r        *)exclude_dirsr  c                 S   r  r   r  r  r   r   r   r    r  )exclude_filesc                 S   r  r   r  r  r   r   r   r    r  rI   c                 S   r  r   r  r  r   r   r   r    r  z??z)r  dirsc                 S   r  r   r  r  r   r   r   r    r  )r2   r   r   	filterdirrZ   rY   r   r  r  r  r=   rE   )r   r  r  r  namesdir_listr   r   r   test_filterdirz  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 )	Nrc   c                 s       | ]}t |V  qd S r   rN   int2byter  nr   r   r   r        z-FSTestCases.test_readbytes.<locals>.<genexpr>r   rB   r   r   rI   )r   ranger   r8   r   r2   r1   r3   r0   r=   r   r`   rZ   r>   )r   	all_bytesr:   
_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   rj   r   BytesIOdownloadr2   getvaluer=   r   r`   r   
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, Worldr  r   
chunk_size)r   rj   r   r  r  r2   r  r  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 )Nr<   rB   r|   r   )r!   r   r)   rZ   r'   rY   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 )	Nrc   c                 s   r  r   r  r  r   r   r   r    r  z.FSTestCases.test_writebytes.<locals>.<genexpr>r   rB   r   notbytesr   )r   r  r   rj   r8   r9   r3   r0   r2   r6   r=   rE   )r   r  r:   _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 )NrB   zfoo/unicode.txtr   )
r   rZ   r8   r   UNICODE_TEXTreadtextr3   r   r2   r;   )r   r:   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 )NrB   rC   r7   nottexts   bytes)	r   r   r8   r9   r2   r3   r   r=   rE   )r   r:   rB   r   r   r   test_writetext  s   
"zFSTestCases.test_writetextc                 C   s^   t d}| jd| | jdd}| }W d    n1 s"w   Y  | |d d S )NrD   rB   r   )r   r  r   	writefiler8   r9   r2   r   
bytes_filer:   r5   r   r   r   test_writefile  s   

zFSTestCases.test_writefilec                 C   s   t d}| jd| | jdd}| }W d    n1 s"w   Y  | |d | tj	 | jd| W d    d S 1 sFw   Y  d S )NrD   rB   r   z
/spam/eggs)
r   r  r   uploadr8   r9   r2   r=   r   r`   r  r   r   r   test_upload  s   

"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  barbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarbarrB   r   r  r   )r   r  r   r  r8   r9   r2   )r   	test_datar  r:   r5   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 )Nr1  r   re      b   cs   abcr   s   hello
s   worlds   hello
worldr  r   s   hel)r   r?   r   rM   r   r6   r  r2   readliner  r   appendr  r  r8   r  rl   r   r:   r   liner   r   r   test_bin_files  sP   



zFSTestCases.test_bin_filesc              	   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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 t  td | j dd}~W d    n	1 sYw   Y  | t% | j dd}|d W d    n	1 s|w   Y  W d    n	1 sw   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 )Nr1  r   ar   cabcr   zhello
worldzhello
worldzr+r   helab   ps   helpignorer   zno!newfoor   r  )r   r8   r   rM   r   r;   r  r2   r  r  r   r  r  rl   r6   warningscatch_warningssimplefilterr=   r  r9   r  r   r   r   
test_filesB  st   





 $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 )Nr  rX   zbar.txtmem://)r   rj   r^  	copy_filer6   r   r2   r1   )r   
bytes_testmem_fsr   r   r   test_copy_file|  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      /eggr|   r   r   )
r   r   r   rZ   r^  copy_structurer2   r  r
   	walk_dirs)r   r  r   r   r   r   test_copy_structure  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   r<   r  r  r|   z/bar/baz/test.txtBEFOREr  FSOTHERz/egg/bar/baz/test.txt)r   r   r   rZ   r   r^  copy_dirr2   r  r
   r  r;   r   
walk_filesr  treer   protocolother_fsr   r   r   r   _test_copy_dir  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   r<   r  )r   r   rZ   r   r   r^  r  r2   r  r
   r  r;   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  Nra  r  r   r   r   r   test_copy_dir_temp  r  zFSTestCases.test_copy_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 | t| j dg d | tdd | j dD g d d S )Nr   r   r  r   r  r   rB   r   >   /foo2	/foo2/bar/foo2/bar/bazr  z/foo2/bar/baz/test.txtr<   )r   r   r  c                 s   r  r   r  )r  r   r   r   r   r    r  z4FSTestCases.test_move_dir_same_fs.<locals>.<genexpr>)r   r   rZ   r   r   move_dirr2   r  r
   r  r;   r  r   r   )r   r   r   r   r   test_move_dir_same_fs  s   z!FSTestCases.test_move_dir_same_fsc                 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   rZ   r   r   r   r  r2   r   r  r
   r  r;   r  r   r   r   _test_move_dir_write  s   

z FSTestCases._test_move_dir_writec                 C   rm  r  r  r   r   r   r   test_move_dir_mem  r   zFSTestCases.test_move_dir_memc                 C   rm  r  r  r   r   r   r   test_move_dir_temp  r   zFSTestCases.test_move_dir_tempc                 C   s   d}| j dd| | d| t j| j d| j d | d | d| | | j ddg | t	| j 
djd d S )Nr   rB   test.txtfoo/test.txtfoo/test2.txtz	test2.txt)r   rZ   r   r;   r   	move_filer(   r2   r   r  r   r   )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 )Nr   rB   r  r  r  )r   r   rZ   r   r;   r=   r   r`   r   r  r2   r  )r   r  r  r   r   r   r   _test_move_file   s   
zFSTestCases._test_move_filec                 C   rm  r  r  r   r   r   r   test_move_file_mem  r   zFSTestCases.test_move_file_memc                 C   rm  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/eggrB   r   r   r   TrY   z
foofoo.txt)r   r   r   rZ   copydirr;   r.   r=   r   r`   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  rB   r   r   r   Tr  )r   r   r   rZ   movedirr;   r.   r(   r=   r   r`   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 )Nr  r  zFOO.PYcase_insensitiveF)r!   r   matchr2   rS   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   rY   r   StringIOr  r  r2   )r   
write_treewrittenr   r   r   r   	test_treeE  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 )
N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   rS   r   unittestSkipTestrZ   r   rj   r.   r2   r   r   r   r;   r6   rq   r!   r   r$   r"   ro   r   r(   r:  r   r   r   r   test_unicode_pathN  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.rB   FoofOOFoO)r   rS   r,  r-  r   rZ   r^   r%   r(   r.   r,   )r   rU   r   r   r   test_case_sensitived  s   








zFSTestCases.test_case_sensitivec                 C   s   |  | jjtj d S r   )r3   r   r	   BoundGlobberr   r   r   r   	test_globy  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 )	NrB   z
hashme.txts   foobarr   zfoo/hashme.txtmd5 9fff4bb103ab8ce4619064109c54cb9cnohash)	r   rZ   rj   r2   hashr=   r   UnsupportedHashr,  r.  r   r   r   	test_hash|  s   "zFSTestCases.test_hashN)h__name__
__module____qualname____doc__rd  re  rf  rg  r   r   r   r   r%   r(   r*   r,   r.   r6   r;   r@   rG   rL   rO   rW   r[   r]   ra   rm   rt   rx   r{   r~   r   r   r   r   r   r   r   r   r   r   r  r#  r%  r)  r0  r7  r<  rD  rE  rS  rY  rZ  r\  r_  rl  rp  rr  rt  rv  rw  ry  rz  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  r!  r#  r&  r*  r.  r2  r4  r:  r   r   r   r   r      s    
					
>&/."8Bf<(9:

	
*:	#	r   )&r>  
__future__r   r   r   r  r   r   rN   rJ  r,  r  r   r   fs.copyr   fs.mover   r   r   r	   r
   	fs.openerr   fs.subfsr   r   PY2collectionsr  collections.abcr  r   ImportError	_tzcompatr  objectr   r   r   r   r   <module>   s8   
 Q