amperser / proselint

A linter for prose.
http://proselint.com
BSD 3-Clause "New" or "Revised" License
4.33k stars 178 forks source link

tests fail on Archlinux and Archlinux32 #936

Closed andreasbaumann closed 3 years ago

andreasbaumann commented 5 years ago

shell> asp export proselint && cd proselint && makepkg -s

The full build log:

Host and machine ids are equal (fddd8ab551594ba3b63ce34f2e69995f): refusing to link journals
:: Synchronizing package databases...
 staging is up to date
 community-staging is up to date
 testing is up to date
 community-testing is up to date
 core is up to date
 extra is up to date
 community is up to date
:: Starting full system upgrade...
 there is nothing to do
==> Building in chroot for [staging] (x86_64)...
==> Synchronizing chroot copy [/data/archbuild/chroots/staging-x86_64/root] -> [abaumann]...done
==> Making package: proselint 0.10.2-4 (Sat Mar  9 09:00:56 2019)
==> Retrieving sources...
  -> Downloading proselint-0.10.2.tar.gz...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0

100   98k  100   98k    0     0   125k      0 --:--:-- --:--:-- --:--:--  125k
==> Validating source files with sha512sums...
    proselint-0.10.2.tar.gz ... Passed
Host and machine ids are equal (fddd8ab551594ba3b63ce34f2e69995f): refusing to link journals
==> Appending keys from archlinux.gpg...
gpg: Warning: using insecure memory!
==> Locally signing trusted keys in keyring...
  -> Locally signing key D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C...
  -> Locally signing key DDB867B92AA789C165EEFA799B729B06A680C281...
  -> Locally signing key 684148BB25B49E986A4944C55184252D824B18E8...
  -> Locally signing key 91FFE0700E80619CEB73235CA88E23E377514E00...
  -> Locally signing key 0E8B644079F599DFC1DDC3973348882F6AC6A4C2...
  -> Locally signing key AB19265E5D7D20687D303246BA1DFB64FFF979E7...
==> Importing owner trust values...
gpg: Warning: using insecure memory!
==> Disabling revoked keys in keyring...
  -> Disabling key 8F76BEEA0289F9E1D3E229C05F946DED983D4366...
  -> Disabling key 63F395DE2D6398BBE458F281F2DBB4931985A992...
  -> Disabling key 50F33E2E5B0C3D900424ABE89BDCF497A4BBCC7F...
  -> Disabling key 27FFC4769E19F096D41D9265A04F9397CDFD6BB0...
  -> Disabling key 39F880E50E49A4D11341E8F939E4F17F295AFBF4...
  -> Disabling key 8840BD07FC24CB7CE394A07CCF7037A4F27FB7DA...
  -> Disabling key 5559BC1A32B8F76B3FCCD9555FA5E5544F010D48...
  -> Disabling key 0B20CA1931F5DA3A70D0F8D2EA6836E1AB441196...
  -> Disabling key 07DFD3A0BC213FA12EDC217559B3122E2FA915EC...
  -> Disabling key 4FCF887689C41B09506BE8D5F3E1D5C5D30DB0AD...
  -> Disabling key 5A2257D19FF7E1E0E415968CE62F853100F0D0F0...
  -> Disabling key 7FA647CD89891DEDC060287BB9113D1ED21E1A55...
  -> Disabling key BC1FBE4D2826A0B51E47ED62E2539214C6C11350...
  -> Disabling key 4A8B17E20B88ACA61860009B5CED81B7C2E5C0D2...
  -> Disabling key 5696C003B0854206450C8E5BE613C09CB4440678...
  -> Disabling key 8CF934E339CAD8ABF342E822E711306E3C4F88BC...
  -> Disabling key F5A361A3A13554B85E57DDDAAF7EF7873CFD4BB6...
  -> Disabling key 5E7585ADFF106BFFBBA319DC654B877A0864983E...
  -> Disabling key 65EEFE022108E2B708CBFCF7F9E712E59AF5F22A...
  -> Disabling key 40440DC037C05620984379A6761FAD69BA06C6A9...
  -> Disabling key 34C5D94FE7E7913E86DC427E7FB1A3800C84C0A5...
  -> Disabling key 81D7F8241DB38BC759C80FCE3A726C6170E80477...
  -> Disabling key E7210A59715F6940CF9A4E36A001876699AD6E84...
  -> Disabling key 5357F3B111688D88C1D88119FCF2CB179205AC90...
  -> Disabling key FB871F0131FEA4FB5A9192B4C8880A6406361833...
  -> Disabling key 66BD74A036D522F51DD70A3C7F2A16726521E06D...
  -> Disabling key B1F2C889CB2CCB2ADA36D963097D629E437520BD...
  -> Disabling key 9515D8A8EAB88E49BB65EDBCE6B456CAF15447D5...
  -> Disabling key 40776A5221EF5AD468A4906D42A1DB15EC133BAD...
  -> Disabling key D4DE5ABDE2A7287644EAC7E36D1A9E70E19DAA50...
  -> Disabling key 44D4A033AC140143927397D47EFD567D4C7EA887...
==> Updating trust database...
gpg: Warning: using insecure memory!
gpg: next trustdb check due at 2019-05-06
==> Making package: proselint 0.10.2-4 (Sat 09 Mar 2019 09:01:04 AM UTC)
==> Checking runtime dependencies...
==> Installing missing dependencies...
resolving dependencies...
looking for conflicting packages...

Packages (5) libnsl-1.2.0-1  python-3.7.2-3  python-click-7.0-1  python-future-0.17.1-1  python-six-1.12.0-1

Total Installed Size:  150.27 MiB

:: Proceed with installation? [Y/n] 
checking keyring...
checking package integrity...
loading package files...
checking for file conflicts...
:: Processing package changes...
installing libnsl...
installing python...
Optional dependencies for python
    python-setuptools
    python-pip
    sqlite [installed]
    mpdecimal: for decimal
    xz: for lzma [installed]
    tk: for tkinter
installing python-click...
installing python-future...
Optional dependencies for python-future
    python-setuptools: futurize and pasteurize scripts
installing python-six...
:: Running post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...
==> Checking buildtime dependencies...
==> Installing missing dependencies...
resolving dependencies...
looking for conflicting packages...

Packages (15) python-apipkg-1.5-1  python-appdirs-1.4.3-2  python-atomicwrites-1.3.0-1  python-attrs-19.1.0-1  python-iniconfig-1.0.0-2  python-more-itertools-4.3.0-1  python-packaging-19.0-1  python-pbr-5.1.3-1  python-pluggy-0.9.0-1  python-py-1.8.0-1  python-pyparsing-2.3.1-1  python-mock-2.0.0-4  python-nose-1.3.7-4  python-pytest-4.3.0-1  python-setuptools-1:40.8.0-1

Total Installed Size:  8.55 MiB

:: Proceed with installation? [Y/n] 
checking keyring...
checking package integrity...
loading package files...
checking for file conflicts...
:: Processing package changes...
installing python-appdirs...
installing python-pyparsing...
installing python-packaging...
installing python-setuptools...
installing python-pbr...
installing python-mock...
installing python-nose...
installing python-iniconfig...
installing python-apipkg...
installing python-py...
installing python-pluggy...
installing python-attrs...
installing python-more-itertools...
installing python-atomicwrites...
installing python-pytest...
:: Running post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...
==> Retrieving sources...
  -> Found proselint-0.10.2.tar.gz
==> WARNING: Skipping all source file integrity checks.
==> Extracting sources...
  -> Extracting proselint-0.10.2.tar.gz with bsdtar
==> Starting build()...
running build
running build_py
creating build
creating build/lib
creating build/lib/proselint
copying proselint/__init__.py -> build/lib/proselint
copying proselint/tools.py -> build/lib/proselint
copying proselint/version.py -> build/lib/proselint
copying proselint/score.py -> build/lib/proselint
copying proselint/command_line.py -> build/lib/proselint
copying proselint/__main__.py -> build/lib/proselint
creating build/lib/proselint/checks
copying proselint/checks/__init__.py -> build/lib/proselint/checks
creating build/lib/proselint/checks/hedging
copying proselint/checks/hedging/__init__.py -> build/lib/proselint/checks/hedging
copying proselint/checks/hedging/misc.py -> build/lib/proselint/checks/hedging
creating build/lib/proselint/checks/sexism
copying proselint/checks/sexism/__init__.py -> build/lib/proselint/checks/sexism
copying proselint/checks/sexism/misc.py -> build/lib/proselint/checks/sexism
creating build/lib/proselint/checks/corporate_speak
copying proselint/checks/corporate_speak/__init__.py -> build/lib/proselint/checks/corporate_speak
copying proselint/checks/corporate_speak/misc.py -> build/lib/proselint/checks/corporate_speak
creating build/lib/proselint/checks/hyperbole
copying proselint/checks/hyperbole/__init__.py -> build/lib/proselint/checks/hyperbole
copying proselint/checks/hyperbole/misc.py -> build/lib/proselint/checks/hyperbole
creating build/lib/proselint/checks/needless_variants
copying proselint/checks/needless_variants/__init__.py -> build/lib/proselint/checks/needless_variants
copying proselint/checks/needless_variants/misc.py -> build/lib/proselint/checks/needless_variants
creating build/lib/proselint/checks/links
copying proselint/checks/links/broken.py -> build/lib/proselint/checks/links
copying proselint/checks/links/__init__.py -> build/lib/proselint/checks/links
creating build/lib/proselint/checks/oxymorons
copying proselint/checks/oxymorons/__init__.py -> build/lib/proselint/checks/oxymorons
copying proselint/checks/oxymorons/misc.py -> build/lib/proselint/checks/oxymorons
creating build/lib/proselint/checks/spelling
copying proselint/checks/spelling/athletes.py -> build/lib/proselint/checks/spelling
copying proselint/checks/spelling/er_or.py -> build/lib/proselint/checks/spelling
copying proselint/checks/spelling/__init__.py -> build/lib/proselint/checks/spelling
copying proselint/checks/spelling/em_im_en_in.py -> build/lib/proselint/checks/spelling
copying proselint/checks/spelling/able_atable.py -> build/lib/proselint/checks/spelling
copying proselint/checks/spelling/misc.py -> build/lib/proselint/checks/spelling
copying proselint/checks/spelling/in_un.py -> build/lib/proselint/checks/spelling
copying proselint/checks/spelling/able_ible.py -> build/lib/proselint/checks/spelling
creating build/lib/proselint/checks/annotations
copying proselint/checks/annotations/__init__.py -> build/lib/proselint/checks/annotations
copying proselint/checks/annotations/misc.py -> build/lib/proselint/checks/annotations
creating build/lib/proselint/checks/misc
copying proselint/checks/misc/whence.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/but.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/chatspeak.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/greylist.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/phrasal_adjectives.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/__init__.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/many_a.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/bureaucratese.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/debased.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/pretension.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/capitalization.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/false_plurals.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/narcissism.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/preferred_forms.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/latin.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/apologizing.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/illogic.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/currency.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/scare_quotes.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/back_formations.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/waxed.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/not_guilty.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/composition.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/usage.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/punctuation.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/tense_present.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/metadiscourse.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/institution_name.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/inferior_superior.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/suddenly.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/professions.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/commercialese.py -> build/lib/proselint/checks/misc
copying proselint/checks/misc/metaconcepts.py -> build/lib/proselint/checks/misc
creating build/lib/proselint/checks/typography
copying proselint/checks/typography/exclamation.py -> build/lib/proselint/checks/typography
copying proselint/checks/typography/__init__.py -> build/lib/proselint/checks/typography
copying proselint/checks/typography/diacritical_marks.py -> build/lib/proselint/checks/typography
copying proselint/checks/typography/symbols.py -> build/lib/proselint/checks/typography
creating build/lib/proselint/checks/mixed_metaphors
copying proselint/checks/mixed_metaphors/__init__.py -> build/lib/proselint/checks/mixed_metaphors
copying proselint/checks/mixed_metaphors/misc.py -> build/lib/proselint/checks/mixed_metaphors
creating build/lib/proselint/checks/cursing
copying proselint/checks/cursing/filth.py -> build/lib/proselint/checks/cursing
copying proselint/checks/cursing/__init__.py -> build/lib/proselint/checks/cursing
copying proselint/checks/cursing/nword.py -> build/lib/proselint/checks/cursing
copying proselint/checks/cursing/nfl.py -> build/lib/proselint/checks/cursing
creating build/lib/proselint/checks/terms
copying proselint/checks/terms/eponymous_adjectives.py -> build/lib/proselint/checks/terms
copying proselint/checks/terms/__init__.py -> build/lib/proselint/checks/terms
copying proselint/checks/terms/denizen_labels.py -> build/lib/proselint/checks/terms
copying proselint/checks/terms/venery.py -> build/lib/proselint/checks/terms
copying proselint/checks/terms/animal_adjectives.py -> build/lib/proselint/checks/terms
creating build/lib/proselint/checks/archaism
copying proselint/checks/archaism/__init__.py -> build/lib/proselint/checks/archaism
copying proselint/checks/archaism/misc.py -> build/lib/proselint/checks/archaism
creating build/lib/proselint/checks/weasel_words
copying proselint/checks/weasel_words/__init__.py -> build/lib/proselint/checks/weasel_words
copying proselint/checks/weasel_words/misc.py -> build/lib/proselint/checks/weasel_words
copying proselint/checks/weasel_words/very.py -> build/lib/proselint/checks/weasel_words
creating build/lib/proselint/checks/mondegreens
copying proselint/checks/mondegreens/__init__.py -> build/lib/proselint/checks/mondegreens
copying proselint/checks/mondegreens/misc.py -> build/lib/proselint/checks/mondegreens
creating build/lib/proselint/checks/skunked_terms
copying proselint/checks/skunked_terms/__init__.py -> build/lib/proselint/checks/skunked_terms
copying proselint/checks/skunked_terms/misc.py -> build/lib/proselint/checks/skunked_terms
creating build/lib/proselint/checks/redundancy
copying proselint/checks/redundancy/__init__.py -> build/lib/proselint/checks/redundancy
copying proselint/checks/redundancy/misc.py -> build/lib/proselint/checks/redundancy
copying proselint/checks/redundancy/ras_syndrome.py -> build/lib/proselint/checks/redundancy
creating build/lib/proselint/checks/security
copying proselint/checks/security/credit_card.py -> build/lib/proselint/checks/security
copying proselint/checks/security/__init__.py -> build/lib/proselint/checks/security
copying proselint/checks/security/password.py -> build/lib/proselint/checks/security
creating build/lib/proselint/checks/malapropisms
copying proselint/checks/malapropisms/__init__.py -> build/lib/proselint/checks/malapropisms
copying proselint/checks/malapropisms/misc.py -> build/lib/proselint/checks/malapropisms
creating build/lib/proselint/checks/airlinese
copying proselint/checks/airlinese/__init__.py -> build/lib/proselint/checks/airlinese
copying proselint/checks/airlinese/misc.py -> build/lib/proselint/checks/airlinese
creating build/lib/proselint/checks/jargon
copying proselint/checks/jargon/__init__.py -> build/lib/proselint/checks/jargon
copying proselint/checks/jargon/misc.py -> build/lib/proselint/checks/jargon
creating build/lib/proselint/checks/uncomparables
copying proselint/checks/uncomparables/__init__.py -> build/lib/proselint/checks/uncomparables
copying proselint/checks/uncomparables/misc.py -> build/lib/proselint/checks/uncomparables
creating build/lib/proselint/checks/cliches
copying proselint/checks/cliches/__init__.py -> build/lib/proselint/checks/cliches
copying proselint/checks/cliches/misc.py -> build/lib/proselint/checks/cliches
copying proselint/checks/cliches/hell.py -> build/lib/proselint/checks/cliches
creating build/lib/proselint/checks/psychology
copying proselint/checks/psychology/__init__.py -> build/lib/proselint/checks/psychology
copying proselint/checks/psychology/misc.py -> build/lib/proselint/checks/psychology
creating build/lib/proselint/checks/dates_times
copying proselint/checks/dates_times/__init__.py -> build/lib/proselint/checks/dates_times
copying proselint/checks/dates_times/dates.py -> build/lib/proselint/checks/dates_times
copying proselint/checks/dates_times/am_pm.py -> build/lib/proselint/checks/dates_times
creating build/lib/proselint/checks/lgbtq
copying proselint/checks/lgbtq/__init__.py -> build/lib/proselint/checks/lgbtq
copying proselint/checks/lgbtq/offensive_terms.py -> build/lib/proselint/checks/lgbtq
copying proselint/checks/lgbtq/terms.py -> build/lib/proselint/checks/lgbtq
creating build/lib/proselint/checks/nonwords
copying proselint/checks/nonwords/__init__.py -> build/lib/proselint/checks/nonwords
copying proselint/checks/nonwords/misc.py -> build/lib/proselint/checks/nonwords
creating build/lib/proselint/checks/consistency
copying proselint/checks/consistency/__init__.py -> build/lib/proselint/checks/consistency
copying proselint/checks/consistency/spelling.py -> build/lib/proselint/checks/consistency
copying proselint/checks/consistency/spacing.py -> build/lib/proselint/checks/consistency
creating build/lib/proselint/checks/lexical_illusions
copying proselint/checks/lexical_illusions/__init__.py -> build/lib/proselint/checks/lexical_illusions
copying proselint/checks/lexical_illusions/misc.py -> build/lib/proselint/checks/lexical_illusions
copying proselint/demo.md -> build/lib/proselint
copying proselint/.proselintrc -> build/lib/proselint
==> Starting check()...
============================= test session starts ==============================
platform linux -- Python 3.7.2, pytest-4.3.0, py-1.8.0, pluggy-0.9.0
rootdir: /build/proselint/src/proselint-0.10.2, inifile:
collected 145 items / 1 skipped / 144 selected

tests/test_annotations.py .                                              [  0%]
tests/test_archaism.py .                                                 [  1%]
tests/test_butterick_symbols.py .......                                  [  6%]
tests/test_clear_cache.py .........                                      [ 12%]
tests/test_cliches.py ...                                                [ 14%]
tests/test_consistency_check.py .                                        [ 15%]
tests/test_consistency_spacing.py .                                      [ 15%]
tests/test_consistency_spelling.py .                                     [ 16%]
tests/test_corporate_speak.py .                                          [ 17%]
tests/test_cursing_filth.py .                                            [ 17%]
tests/test_cursing_nfl.py .                                              [ 18%]
tests/test_cursing_nword.py .                                            [ 19%]
tests/test_dates_times_am_pm.py ....                                     [ 22%]
tests/test_dates_times_dates.py .....                                    [ 25%]
tests/test_dfw_uncomparables.py ...                                      [ 27%]
tests/test_existence_check.py ...                                        [ 29%]
tests/test_exit_codes.py FF                                              [ 31%]
tests/test_garner_dates.py ...                                           [ 33%]
tests/test_hedging.py .                                                  [ 33%]
tests/test_hyperbole.py .                                                [ 34%]
tests/test_illegal_chars.py F                                            [ 35%]
tests/test_jargon.py .                                                   [ 35%]
tests/test_leonard.py ..                                                 [ 37%]
tests/test_lexical_illusions.py .                                        [ 37%]
tests/test_lgbtq_offensive_terms.py .                                    [ 38%]
tests/test_lgbtq_terms.py ...                                            [ 40%]
tests/test_malaproprisms.py .                                            [ 41%]
tests/test_misc_apologizing.py .                                         [ 42%]
tests/test_misc_back_formations.py .                                     [ 42%]
tests/test_misc_bureaucratese.py .                                       [ 43%]
tests/test_misc_but.py .                                                 [ 44%]
tests/test_misc_capitalization.py ...                                    [ 46%]
tests/test_misc_chatspeak.py .                                           [ 46%]
tests/test_misc_commercialese.py .                                       [ 47%]
tests/test_misc_composition.py .                                         [ 48%]
tests/test_misc_currency.py .                                            [ 48%]
tests/test_misc_debased.py .                                             [ 49%]
tests/test_misc_false_plurals.py ..                                      [ 51%]
tests/test_misc_greylist.py .                                            [ 51%]
tests/test_misc_illogic.py ...                                           [ 53%]
tests/test_misc_inferior_superior.py .                                   [ 54%]
tests/test_misc_latin.py .                                               [ 55%]
tests/test_misc_many_a.py .                                              [ 55%]
tests/test_misc_metaconcepts.py .                                        [ 56%]
tests/test_misc_metadiscourse.py .                                       [ 57%]
tests/test_misc_narcissism.py .                                          [ 57%]
tests/test_misc_not_guilty.py .                                          [ 58%]
tests/test_misc_phrasal_adjectives.py ..                                 [ 60%]
tests/test_misc_preferred_forms.py .                                     [ 60%]
tests/test_misc_pretension.py .                                          [ 61%]
tests/test_misc_professions.py .                                         [ 62%]
tests/test_misc_punctuation.py .                                         [ 62%]
tests/test_misc_scare_quotes.py .                                        [ 63%]
tests/test_misc_suddenly.py .                                            [ 64%]
tests/test_misc_tense_present.py .                                       [ 64%]
tests/test_misc_usage.py .                                               [ 65%]
tests/test_misc_waxed.py .                                               [ 66%]
tests/test_misc_whence.py .                                              [ 66%]
tests/test_mixed_metaphors.py ..                                         [ 68%]
tests/test_mondegreens.py .                                              [ 68%]
tests/test_needless_variants.py .                                        [ 69%]
tests/test_nonwords.py .                                                 [ 70%]
tests/test_oxymorons.py .                                                [ 71%]
tests/test_preferred_forms_check.py ..                                   [ 72%]
tests/test_psychology.py ...                                             [ 74%]
tests/test_redundancy_misc.py ....                                       [ 77%]
tests/test_redundancy_ras_syndrome.py .                                  [ 77%]
tests/test_security_credit_card.py .                                     [ 78%]
tests/test_security_password.py .                                        [ 79%]
tests/test_sexism.py .                                                   [ 80%]
tests/test_skunked_terms.py .                                            [ 80%]
tests/test_spelling_able_atable.py .                                     [ 81%]
tests/test_spelling_able_ible.py .                                       [ 82%]
tests/test_spelling_athletes.py .                                        [ 82%]
tests/test_spelling_em_im_en_in.py .                                     [ 83%]
tests/test_spelling_er_or.py .                                           [ 84%]
tests/test_spelling_in_un.py .                                           [ 84%]
tests/test_spelling_misc.py .                                            [ 85%]
tests/test_terms_animal_adjectives.py .                                  [ 86%]
tests/test_terms_denizen_labels.py .                                     [ 86%]
tests/test_terms_eponymous_adjectives.py .                               [ 87%]
tests/test_terms_venery.py .                                             [ 88%]
tests/test_tools.py ..                                                   [ 89%]
tests/test_topic_detector.py .                                           [ 90%]
tests/test_typography_diacritical_marks.py .                             [ 91%]
tests/test_typography_exclamation.py ..                                  [ 92%]
tests/test_typography_symbols.py .......                                 [ 97%]
tests/test_uncomparables.py .                                            [ 97%]
tests/test_weasel_words_very.py .                                        [ 98%]
tests/test_gmeu/test_a_A.py x                                            [ 99%]
tests/test_gmeu/test_a_B.py x                                            [100%]

=================================== FAILURES ===================================
_____________________________ test_exit_code_demo ______________________________

    def test_exit_code_demo():
        """Ensure that linting the demo returns an exit code of 1."""
        try:
>           subprocess.check_output(["proselint", "--demo"])

tests/test_exit_codes.py:9: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.7/subprocess.py:395: in check_output
    **kwargs).stdout
/usr/lib/python3.7/subprocess.py:472: in run
    with Popen(*popenargs, **kwargs) as process:
/usr/lib/python3.7/subprocess.py:775: in __init__
    restore_signals, start_new_session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <subprocess.Popen object at 0x7fac0a675978>
args = ['proselint', '--demo'], executable = b'proselint', preexec_fn = None
close_fds = True, pass_fds = (), cwd = None, env = None, startupinfo = None
creationflags = 0, shell = False, p2cread = -1, p2cwrite = -1, c2pread = 8
c2pwrite = 10, errread = -1, errwrite = -1, restore_signals = True
start_new_session = False

    def _execute_child(self, args, executable, preexec_fn, close_fds,
                       pass_fds, cwd, env,
                       startupinfo, creationflags, shell,
                       p2cread, p2cwrite,
                       c2pread, c2pwrite,
                       errread, errwrite,
                       restore_signals, start_new_session):
        """Execute program (POSIX version)"""

        if isinstance(args, (str, bytes)):
            args = [args]
        else:
            args = list(args)

        if shell:
            # On Android the default shell is at '/system/bin/sh'.
            unix_shell = ('/system/bin/sh' if
                      hasattr(sys, 'getandroidapilevel') else '/bin/sh')
            args = [unix_shell, "-c"] + args
            if executable:
                args[0] = executable

        if executable is None:
            executable = args[0]
        orig_executable = executable

        # For transferring possible exec failure from child to parent.
        # Data format: "exception name:hex errno:description"
        # Pickle is not used; it is complex and involves memory allocation.
        errpipe_read, errpipe_write = os.pipe()
        # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
        low_fds_to_close = []
        while errpipe_write < 3:
            low_fds_to_close.append(errpipe_write)
            errpipe_write = os.dup(errpipe_write)
        for low_fd in low_fds_to_close:
            os.close(low_fd)
        try:
            try:
                # We must avoid complex work that could involve
                # malloc or free in the child process to avoid
                # potential deadlocks, thus we do all this here.
                # and pass it to fork_exec()

                if env is not None:
                    env_list = []
                    for k, v in env.items():
                        k = os.fsencode(k)
                        if b'=' in k:
                            raise ValueError("illegal environment variable name")
                        env_list.append(k + b'=' + os.fsencode(v))
                else:
                    env_list = None  # Use execv instead of execve.
                executable = os.fsencode(executable)
                if os.path.dirname(executable):
                    executable_list = (executable,)
                else:
                    # This matches the behavior of os._execvpe().
                    executable_list = tuple(
                        os.path.join(os.fsencode(dir), executable)
                        for dir in os.get_exec_path(env))
                fds_to_keep = set(pass_fds)
                fds_to_keep.add(errpipe_write)
                self.pid = _posixsubprocess.fork_exec(
                        args, executable_list,
                        close_fds, tuple(sorted(map(int, fds_to_keep))),
                        cwd, env_list,
                        p2cread, p2cwrite, c2pread, c2pwrite,
                        errread, errwrite,
                        errpipe_read, errpipe_write,
                        restore_signals, start_new_session, preexec_fn)
                self._child_created = True
            finally:
                # be sure the FD is closed no matter what
                os.close(errpipe_write)

            # self._devnull is not always defined.
            devnull_fd = getattr(self, '_devnull', None)
            if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
                os.close(p2cread)
            if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
                os.close(c2pwrite)
            if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
                os.close(errwrite)
            if devnull_fd is not None:
                os.close(devnull_fd)
            # Prevent a double close of these fds from __init__ on error.
            self._closed_child_pipe_fds = True

            # Wait for exec to fail or succeed; possibly raising an
            # exception (limited in size)
            errpipe_data = bytearray()
            while True:
                part = os.read(errpipe_read, 50000)
                errpipe_data += part
                if not part or len(errpipe_data) > 50000:
                    break
        finally:
            # be sure the FD is closed no matter what
            os.close(errpipe_read)

        if errpipe_data:
            try:
                pid, sts = os.waitpid(self.pid, 0)
                if pid == self.pid:
                    self._handle_exitstatus(sts)
                else:
                    self.returncode = sys.maxsize
            except ChildProcessError:
                pass

            try:
                exception_name, hex_errno, err_msg = (
                        errpipe_data.split(b':', 2))
                # The encoding here should match the encoding
                # written in by the subprocess implementations
                # like _posixsubprocess
                err_msg = err_msg.decode()
            except ValueError:
                exception_name = b'SubprocessError'
                hex_errno = b'0'
                err_msg = 'Bad exception data from child: {!r}'.format(
                              bytes(errpipe_data))
            child_exception_type = getattr(
                    builtins, exception_name.decode('ascii'),
                    SubprocessError)
            if issubclass(child_exception_type, OSError) and hex_errno:
                errno_num = int(hex_errno, 16)
                child_exec_never_called = (err_msg == "noexec")
                if child_exec_never_called:
                    err_msg = ""
                    # The error must be from chdir(cwd).
                    err_filename = cwd
                else:
                    err_filename = orig_executable
                if errno_num != 0:
                    err_msg = os.strerror(errno_num)
                    if errno_num == errno.ENOENT:
                        err_msg += ': ' + repr(err_filename)
>               raise child_exception_type(errno_num, err_msg, err_filename)
E               FileNotFoundError: [Errno 2] No such file or directory: 'proselint': 'proselint'

/usr/lib/python3.7/subprocess.py:1522: FileNotFoundError
____________________________ test_exit_code_version ____________________________

    def test_exit_code_version():
        """Ensure that getting the version returns an exit code of 0."""
        try:
>           subprocess.check_output(["proselint", "--version"])

tests/test_exit_codes.py:18: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.7/subprocess.py:395: in check_output
    **kwargs).stdout
/usr/lib/python3.7/subprocess.py:472: in run
    with Popen(*popenargs, **kwargs) as process:
/usr/lib/python3.7/subprocess.py:775: in __init__
    restore_signals, start_new_session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <subprocess.Popen object at 0x7fac0a658828>
args = ['proselint', '--version'], executable = b'proselint', preexec_fn = None
close_fds = True, pass_fds = (), cwd = None, env = None, startupinfo = None
creationflags = 0, shell = False, p2cread = -1, p2cwrite = -1, c2pread = 8
c2pwrite = 10, errread = -1, errwrite = -1, restore_signals = True
start_new_session = False

    def _execute_child(self, args, executable, preexec_fn, close_fds,
                       pass_fds, cwd, env,
                       startupinfo, creationflags, shell,
                       p2cread, p2cwrite,
                       c2pread, c2pwrite,
                       errread, errwrite,
                       restore_signals, start_new_session):
        """Execute program (POSIX version)"""

        if isinstance(args, (str, bytes)):
            args = [args]
        else:
            args = list(args)

        if shell:
            # On Android the default shell is at '/system/bin/sh'.
            unix_shell = ('/system/bin/sh' if
                      hasattr(sys, 'getandroidapilevel') else '/bin/sh')
            args = [unix_shell, "-c"] + args
            if executable:
                args[0] = executable

        if executable is None:
            executable = args[0]
        orig_executable = executable

        # For transferring possible exec failure from child to parent.
        # Data format: "exception name:hex errno:description"
        # Pickle is not used; it is complex and involves memory allocation.
        errpipe_read, errpipe_write = os.pipe()
        # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
        low_fds_to_close = []
        while errpipe_write < 3:
            low_fds_to_close.append(errpipe_write)
            errpipe_write = os.dup(errpipe_write)
        for low_fd in low_fds_to_close:
            os.close(low_fd)
        try:
            try:
                # We must avoid complex work that could involve
                # malloc or free in the child process to avoid
                # potential deadlocks, thus we do all this here.
                # and pass it to fork_exec()

                if env is not None:
                    env_list = []
                    for k, v in env.items():
                        k = os.fsencode(k)
                        if b'=' in k:
                            raise ValueError("illegal environment variable name")
                        env_list.append(k + b'=' + os.fsencode(v))
                else:
                    env_list = None  # Use execv instead of execve.
                executable = os.fsencode(executable)
                if os.path.dirname(executable):
                    executable_list = (executable,)
                else:
                    # This matches the behavior of os._execvpe().
                    executable_list = tuple(
                        os.path.join(os.fsencode(dir), executable)
                        for dir in os.get_exec_path(env))
                fds_to_keep = set(pass_fds)
                fds_to_keep.add(errpipe_write)
                self.pid = _posixsubprocess.fork_exec(
                        args, executable_list,
                        close_fds, tuple(sorted(map(int, fds_to_keep))),
                        cwd, env_list,
                        p2cread, p2cwrite, c2pread, c2pwrite,
                        errread, errwrite,
                        errpipe_read, errpipe_write,
                        restore_signals, start_new_session, preexec_fn)
                self._child_created = True
            finally:
                # be sure the FD is closed no matter what
                os.close(errpipe_write)

            # self._devnull is not always defined.
            devnull_fd = getattr(self, '_devnull', None)
            if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
                os.close(p2cread)
            if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
                os.close(c2pwrite)
            if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
                os.close(errwrite)
            if devnull_fd is not None:
                os.close(devnull_fd)
            # Prevent a double close of these fds from __init__ on error.
            self._closed_child_pipe_fds = True

            # Wait for exec to fail or succeed; possibly raising an
            # exception (limited in size)
            errpipe_data = bytearray()
            while True:
                part = os.read(errpipe_read, 50000)
                errpipe_data += part
                if not part or len(errpipe_data) > 50000:
                    break
        finally:
            # be sure the FD is closed no matter what
            os.close(errpipe_read)

        if errpipe_data:
            try:
                pid, sts = os.waitpid(self.pid, 0)
                if pid == self.pid:
                    self._handle_exitstatus(sts)
                else:
                    self.returncode = sys.maxsize
            except ChildProcessError:
                pass

            try:
                exception_name, hex_errno, err_msg = (
                        errpipe_data.split(b':', 2))
                # The encoding here should match the encoding
                # written in by the subprocess implementations
                # like _posixsubprocess
                err_msg = err_msg.decode()
            except ValueError:
                exception_name = b'SubprocessError'
                hex_errno = b'0'
                err_msg = 'Bad exception data from child: {!r}'.format(
                              bytes(errpipe_data))
            child_exception_type = getattr(
                    builtins, exception_name.decode('ascii'),
                    SubprocessError)
            if issubclass(child_exception_type, OSError) and hex_errno:
                errno_num = int(hex_errno, 16)
                child_exec_never_called = (err_msg == "noexec")
                if child_exec_never_called:
                    err_msg = ""
                    # The error must be from chdir(cwd).
                    err_filename = cwd
                else:
                    err_filename = orig_executable
                if errno_num != 0:
                    err_msg = os.strerror(errno_num)
                    if errno_num == errno.ENOENT:
                        err_msg += ': ' + repr(err_filename)
>               raise child_exception_type(errno_num, err_msg, err_filename)
E               FileNotFoundError: [Errno 2] No such file or directory: 'proselint': 'proselint'

/usr/lib/python3.7/subprocess.py:1522: FileNotFoundError
___________________________ test_invalid_characters ____________________________

    def test_invalid_characters():
        """Ensure that a file with illegal characters does not break us."""
        try:
            output = ""
            curr_dir = pth.dirname(pth.abspath(__file__))
            test_file = pth.join(curr_dir, "illegal-chars.txt")
            # We only print out exception text and continue after printing a trace,
            # so the only way (currently) to test for failure is to look for the
            # exception text. Refactoring the command line function would let us
            # write better tests (one day).
            output = str(subprocess.check_output(
                ["proselint", test_file],
>               stderr=subprocess.STDOUT
            ))

tests/test_illegal_chars.py:19: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

timeout = None
popenargs = (['proselint', '/build/proselint/src/proselint-0.10.2/tests/illegal-chars.txt'],)
kwargs = {'stderr': -2}

    def check_output(*popenargs, timeout=None, **kwargs):
        r"""Run command with arguments and return its output.

        If the exit code was non-zero it raises a CalledProcessError.  The
        CalledProcessError object will have the return code in the returncode
        attribute and output in the output attribute.

        The arguments are the same as for the Popen constructor.  Example:

        >>> check_output(["ls", "-l", "/dev/null"])
        b'crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n'

        The stdout argument is not allowed as it is used internally.
        To capture standard error in the result, use stderr=STDOUT.

        >>> check_output(["/bin/sh", "-c",
        ...               "ls -l non_existent_file ; exit 0"],
        ...              stderr=STDOUT)
        b'ls: non_existent_file: No such file or directory\n'

        There is an additional optional argument, "input", allowing you to
        pass a string to the subprocess's stdin.  If you use this argument
        you may not also use the Popen constructor's "stdin" argument, as
        it too will be used internally.  Example:

        >>> check_output(["sed", "-e", "s/foo/bar/"],
        ...              input=b"when in the course of fooman events\n")
        b'when in the course of barman events\n'

        By default, all communication is in bytes, and therefore any "input"
        should be bytes, and the return value wil be bytes.  If in text mode,
        any "input" should be a string, and the return value will be a string
        decoded according to locale encoding, or by "encoding" if set. Text mode
        is triggered by setting any of text, encoding, errors or universal_newlines.
        """
        if 'stdout' in kwargs:
            raise ValueError('stdout argument not allowed, it will be overridden.')

        if 'input' in kwargs and kwargs['input'] is None:
            # Explicitly passing input=None was previously equivalent to passing an
            # empty string. That is maintained here for backwards compatibility.
            kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''

        return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
>                  **kwargs).stdout

/usr/lib/python3.7/subprocess.py:395: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

input = None, capture_output = False, timeout = None, check = True
popenargs = (['proselint', '/build/proselint/src/proselint-0.10.2/tests/illegal-chars.txt'],)
kwargs = {'stderr': -2, 'stdout': -1}

    def run(*popenargs,
            input=None, capture_output=False, timeout=None, check=False, **kwargs):
        """Run command with arguments and return a CompletedProcess instance.

        The returned instance will have attributes args, returncode, stdout and
        stderr. By default, stdout and stderr are not captured, and those attributes
        will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.

        If check is True and the exit code was non-zero, it raises a
        CalledProcessError. The CalledProcessError object will have the return code
        in the returncode attribute, and output & stderr attributes if those streams
        were captured.

        If timeout is given, and the process takes too long, a TimeoutExpired
        exception will be raised.

        There is an optional argument "input", allowing you to
        pass bytes or a string to the subprocess's stdin.  If you use this argument
        you may not also use the Popen constructor's "stdin" argument, as
        it will be used internally.

        By default, all communication is in bytes, and therefore any "input" should
        be bytes, and the stdout and stderr will be bytes. If in text mode, any
        "input" should be a string, and stdout and stderr will be strings decoded
        according to locale encoding, or by "encoding" if set. Text mode is
        triggered by setting any of text, encoding, errors or universal_newlines.

        The other arguments are the same as for the Popen constructor.
        """
        if input is not None:
            if 'stdin' in kwargs:
                raise ValueError('stdin and input arguments may not both be used.')
            kwargs['stdin'] = PIPE

        if capture_output:
            if ('stdout' in kwargs) or ('stderr' in kwargs):
                raise ValueError('stdout and stderr arguments may not be used '
                                 'with capture_output.')
            kwargs['stdout'] = PIPE
            kwargs['stderr'] = PIPE

>       with Popen(*popenargs, **kwargs) as process:

/usr/lib/python3.7/subprocess.py:472: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <subprocess.Popen object at 0x7fac0a67c550>
args = ['proselint', '/build/proselint/src/proselint-0.10.2/tests/illegal-chars.txt']
bufsize = -1, executable = None, stdin = None, stdout = -1, stderr = -2
preexec_fn = None, close_fds = True, shell = False, cwd = None, env = None
universal_newlines = None, startupinfo = None, creationflags = 0
restore_signals = True, start_new_session = False, pass_fds = ()

    def __init__(self, args, bufsize=-1, executable=None,
                 stdin=None, stdout=None, stderr=None,
                 preexec_fn=None, close_fds=True,
                 shell=False, cwd=None, env=None, universal_newlines=None,
                 startupinfo=None, creationflags=0,
                 restore_signals=True, start_new_session=False,
                 pass_fds=(), *, encoding=None, errors=None, text=None):
        """Create new Popen instance."""
        _cleanup()
        # Held while anything is calling waitpid before returncode has been
        # updated to prevent clobbering returncode if wait() or poll() are
        # called from multiple threads at once.  After acquiring the lock,
        # code must re-check self.returncode to see if another thread just
        # finished a waitpid() call.
        self._waitpid_lock = threading.Lock()

        self._input = None
        self._communication_started = False
        if bufsize is None:
            bufsize = -1  # Restore default
        if not isinstance(bufsize, int):
            raise TypeError("bufsize must be an integer")

        if _mswindows:
            if preexec_fn is not None:
                raise ValueError("preexec_fn is not supported on Windows "
                                 "platforms")
        else:
            # POSIX
            if pass_fds and not close_fds:
                warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
                close_fds = True
            if startupinfo is not None:
                raise ValueError("startupinfo is only supported on Windows "
                                 "platforms")
            if creationflags != 0:
                raise ValueError("creationflags is only supported on Windows "
                                 "platforms")

        self.args = args
        self.stdin = None
        self.stdout = None
        self.stderr = None
        self.pid = None
        self.returncode = None
        self.encoding = encoding
        self.errors = errors

        # Validate the combinations of text and universal_newlines
        if (text is not None and universal_newlines is not None
            and bool(universal_newlines) != bool(text)):
            raise SubprocessError('Cannot disambiguate when both text '
                                  'and universal_newlines are supplied but '
                                  'different. Pass one or the other.')

        # Input and output objects. The general principle is like
        # this:
        #
        # Parent                   Child
        # ------                   -----
        # p2cwrite   ---stdin--->  p2cread
        # c2pread    <--stdout---  c2pwrite
        # errread    <--stderr---  errwrite
        #
        # On POSIX, the child objects are file descriptors.  On
        # Windows, these are Windows file handles.  The parent objects
        # are file descriptors on both platforms.  The parent objects
        # are -1 when not using PIPEs. The child objects are -1
        # when not redirecting.

        (p2cread, p2cwrite,
         c2pread, c2pwrite,
         errread, errwrite) = self._get_handles(stdin, stdout, stderr)

        # We wrap OS handles *before* launching the child, otherwise a
        # quickly terminating child could make our fds unwrappable
        # (see #8458).

        if _mswindows:
            if p2cwrite != -1:
                p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
            if c2pread != -1:
                c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
            if errread != -1:
                errread = msvcrt.open_osfhandle(errread.Detach(), 0)

        self.text_mode = encoding or errors or text or universal_newlines

        # How long to resume waiting on a child after the first ^C.
        # There is no right value for this.  The purpose is to be polite
        # yet remain good for interactive users trying to exit a tool.
        self._sigint_wait_secs = 0.25  # 1/xkcd221.getRandomNumber()

        self._closed_child_pipe_fds = False

        try:
            if p2cwrite != -1:
                self.stdin = io.open(p2cwrite, 'wb', bufsize)
                if self.text_mode:
                    self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
                            line_buffering=(bufsize == 1),
                            encoding=encoding, errors=errors)
            if c2pread != -1:
                self.stdout = io.open(c2pread, 'rb', bufsize)
                if self.text_mode:
                    self.stdout = io.TextIOWrapper(self.stdout,
                            encoding=encoding, errors=errors)
            if errread != -1:
                self.stderr = io.open(errread, 'rb', bufsize)
                if self.text_mode:
                    self.stderr = io.TextIOWrapper(self.stderr,
                            encoding=encoding, errors=errors)

            self._execute_child(args, executable, preexec_fn, close_fds,
                                pass_fds, cwd, env,
                                startupinfo, creationflags, shell,
                                p2cread, p2cwrite,
                                c2pread, c2pwrite,
                                errread, errwrite,
>                               restore_signals, start_new_session)

/usr/lib/python3.7/subprocess.py:775: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <subprocess.Popen object at 0x7fac0a67c550>
args = ['proselint', '/build/proselint/src/proselint-0.10.2/tests/illegal-chars.txt']
executable = b'proselint', preexec_fn = None, close_fds = True, pass_fds = ()
cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False
p2cread = -1, p2cwrite = -1, c2pread = 8, c2pwrite = 10, errread = -1
errwrite = 10, restore_signals = True, start_new_session = False

    def _execute_child(self, args, executable, preexec_fn, close_fds,
                       pass_fds, cwd, env,
                       startupinfo, creationflags, shell,
                       p2cread, p2cwrite,
                       c2pread, c2pwrite,
                       errread, errwrite,
                       restore_signals, start_new_session):
        """Execute program (POSIX version)"""

        if isinstance(args, (str, bytes)):
            args = [args]
        else:
            args = list(args)

        if shell:
            # On Android the default shell is at '/system/bin/sh'.
            unix_shell = ('/system/bin/sh' if
                      hasattr(sys, 'getandroidapilevel') else '/bin/sh')
            args = [unix_shell, "-c"] + args
            if executable:
                args[0] = executable

        if executable is None:
            executable = args[0]
        orig_executable = executable

        # For transferring possible exec failure from child to parent.
        # Data format: "exception name:hex errno:description"
        # Pickle is not used; it is complex and involves memory allocation.
        errpipe_read, errpipe_write = os.pipe()
        # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
        low_fds_to_close = []
        while errpipe_write < 3:
            low_fds_to_close.append(errpipe_write)
            errpipe_write = os.dup(errpipe_write)
        for low_fd in low_fds_to_close:
            os.close(low_fd)
        try:
            try:
                # We must avoid complex work that could involve
                # malloc or free in the child process to avoid
                # potential deadlocks, thus we do all this here.
                # and pass it to fork_exec()

                if env is not None:
                    env_list = []
                    for k, v in env.items():
                        k = os.fsencode(k)
                        if b'=' in k:
                            raise ValueError("illegal environment variable name")
                        env_list.append(k + b'=' + os.fsencode(v))
                else:
                    env_list = None  # Use execv instead of execve.
                executable = os.fsencode(executable)
                if os.path.dirname(executable):
                    executable_list = (executable,)
                else:
                    # This matches the behavior of os._execvpe().
                    executable_list = tuple(
                        os.path.join(os.fsencode(dir), executable)
                        for dir in os.get_exec_path(env))
                fds_to_keep = set(pass_fds)
                fds_to_keep.add(errpipe_write)
                self.pid = _posixsubprocess.fork_exec(
                        args, executable_list,
                        close_fds, tuple(sorted(map(int, fds_to_keep))),
                        cwd, env_list,
                        p2cread, p2cwrite, c2pread, c2pwrite,
                        errread, errwrite,
                        errpipe_read, errpipe_write,
                        restore_signals, start_new_session, preexec_fn)
                self._child_created = True
            finally:
                # be sure the FD is closed no matter what
                os.close(errpipe_write)

            # self._devnull is not always defined.
            devnull_fd = getattr(self, '_devnull', None)
            if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
                os.close(p2cread)
            if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
                os.close(c2pwrite)
            if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
                os.close(errwrite)
            if devnull_fd is not None:
                os.close(devnull_fd)
            # Prevent a double close of these fds from __init__ on error.
            self._closed_child_pipe_fds = True

            # Wait for exec to fail or succeed; possibly raising an
            # exception (limited in size)
            errpipe_data = bytearray()
            while True:
                part = os.read(errpipe_read, 50000)
                errpipe_data += part
                if not part or len(errpipe_data) > 50000:
                    break
        finally:
            # be sure the FD is closed no matter what
            os.close(errpipe_read)

        if errpipe_data:
            try:
                pid, sts = os.waitpid(self.pid, 0)
                if pid == self.pid:
                    self._handle_exitstatus(sts)
                else:
                    self.returncode = sys.maxsize
            except ChildProcessError:
                pass

            try:
                exception_name, hex_errno, err_msg = (
                        errpipe_data.split(b':', 2))
                # The encoding here should match the encoding
                # written in by the subprocess implementations
                # like _posixsubprocess
                err_msg = err_msg.decode()
            except ValueError:
                exception_name = b'SubprocessError'
                hex_errno = b'0'
                err_msg = 'Bad exception data from child: {!r}'.format(
                              bytes(errpipe_data))
            child_exception_type = getattr(
                    builtins, exception_name.decode('ascii'),
                    SubprocessError)
            if issubclass(child_exception_type, OSError) and hex_errno:
                errno_num = int(hex_errno, 16)
                child_exec_never_called = (err_msg == "noexec")
                if child_exec_never_called:
                    err_msg = ""
                    # The error must be from chdir(cwd).
                    err_filename = cwd
                else:
                    err_filename = orig_executable
                if errno_num != 0:
                    err_msg = os.strerror(errno_num)
                    if errno_num == errno.ENOENT:
                        err_msg += ': ' + repr(err_filename)
>               raise child_exception_type(errno_num, err_msg, err_filename)
E               FileNotFoundError: [Errno 2] No such file or directory: 'proselint': 'proselint'

/usr/lib/python3.7/subprocess.py:1522: FileNotFoundError

During handling of the above exception, another exception occurred:

    def test_invalid_characters():
        """Ensure that a file with illegal characters does not break us."""
        try:
            output = ""
            curr_dir = pth.dirname(pth.abspath(__file__))
            test_file = pth.join(curr_dir, "illegal-chars.txt")
            # We only print out exception text and continue after printing a trace,
            # so the only way (currently) to test for failure is to look for the
            # exception text. Refactoring the command line function would let us
            # write better tests (one day).
            output = str(subprocess.check_output(
                ["proselint", test_file],
                stderr=subprocess.STDOUT
            ))
        except subprocess.CalledProcessError as e:
            # Non-zero return codes are OK, but what did we catch?
            print("Non-zero return value: will proceed. %s" % e)
            output += str(e.output)
        except Exception:
>           assert(not "Unknown Exception Occurred")
E           AssertionError: assert not 'Unknown Exception Occurred'

tests/test_illegal_chars.py:26: AssertionError
=============================== warnings summary ===============================
/usr/lib/python3.7/site-packages/past/types/oldstr.py:5
  /usr/lib/python3.7/site-packages/past/types/oldstr.py:5: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
    from collections import Iterable

/usr/lib/python3.7/site-packages/past/builtins/misc.py:4
  /usr/lib/python3.7/site-packages/past/builtins/misc.py:4: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
    from collections import Mapping

proselint/checks/typography/symbols.py:16
  /build/proselint/src/proselint-0.10.2/proselint/checks/typography/symbols.py:16: DeprecationWarning: invalid escape sequence \.
    regex = "\.\.\."

proselint/checks/typography/symbols.py:27
  /build/proselint/src/proselint-0.10.2/proselint/checks/typography/symbols.py:27: DeprecationWarning: invalid escape sequence \(
    regex = "\([cC]\)"

proselint/checks/typography/symbols.py:38
  /build/proselint/src/proselint-0.10.2/proselint/checks/typography/symbols.py:38: DeprecationWarning: invalid escape sequence \(
    regex = "\(TM\)"

proselint/checks/typography/symbols.py:49
  /build/proselint/src/proselint-0.10.2/proselint/checks/typography/symbols.py:49: DeprecationWarning: invalid escape sequence \(
    regex = "\([rR]\)"

proselint/checks/typography/symbols.py:60
  /build/proselint/src/proselint-0.10.2/proselint/checks/typography/symbols.py:60: DeprecationWarning: invalid escape sequence \.
    regex = "\. {3}"

proselint/checks/consistency/spacing.py:26
proselint/checks/consistency/spacing.py:26
  /build/proselint/src/proselint-0.10.2/proselint/checks/consistency/spacing.py:26: DeprecationWarning: invalid escape sequence \.
    regex = ["[\.\?!] [A-Z]", "[\.\?!]  [A-Z]"]

proselint/checks/dates_times/am_pm.py:23
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/am_pm.py:23: DeprecationWarning: invalid escape sequence \d
    return existence_check(text, ["\d{1,2} ?[ap]m"], err, msg)

proselint/checks/dates_times/am_pm.py:32
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/am_pm.py:32: DeprecationWarning: invalid escape sequence \d
    return existence_check(text, ["\d{1,2}[ap]\.?m\.?"], err, msg)

proselint/checks/dates_times/am_pm.py:42
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/am_pm.py:42: DeprecationWarning: invalid escape sequence \.
    return existence_check(text, ["12 ?[ap]\.?m\.?"], err, msg)

proselint/checks/dates_times/am_pm.py:52
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/am_pm.py:52: DeprecationWarning: invalid escape sequence \d
    "\d{1,2} ?a\.?m\.? in the morning",

proselint/checks/dates_times/am_pm.py:53
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/am_pm.py:53: DeprecationWarning: invalid escape sequence \d
    "\d{1,2} ?p\.?m\.? in the evening",

proselint/checks/dates_times/am_pm.py:54
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/am_pm.py:54: DeprecationWarning: invalid escape sequence \d
    "\d{1,2} ?p\.?m\.? at night",

proselint/checks/dates_times/am_pm.py:55
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/am_pm.py:55: DeprecationWarning: invalid escape sequence \d
    "\d{1,2} ?p\.?m\.? in the afternoon",

proselint/checks/dates_times/dates.py:26
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/dates.py:26: DeprecationWarning: invalid escape sequence \d
    regex = "\d0\'s"

proselint/checks/dates_times/dates.py:38
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/dates.py:38: DeprecationWarning: invalid escape sequence \d
    regex = "\d\d\d0\'s"

proselint/checks/dates_times/dates.py:48
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/dates.py:48: DeprecationWarning: invalid escape sequence \d
    regex = "[fF]rom \d+[^ \t\n\r\f\va-zA-Z0-9_\.]\d+"

proselint/checks/dates_times/dates.py:57
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/dates.py:57: DeprecationWarning: invalid escape sequence \d
    regex = "(?:" + "|".join(calendar.month_name[1:]) + "), \d{3,}"

proselint/checks/dates_times/dates.py:67
  /build/proselint/src/proselint-0.10.2/proselint/checks/dates_times/dates.py:67: DeprecationWarning: invalid escape sequence \d
    regex = "(?:" + "|".join(calendar.month_name[1:]) + ") of \d{3,}"

proselint/checks/uncomparables/misc.py:117
  /build/proselint/src/proselint-0.10.2/proselint/checks/uncomparables/misc.py:117: DeprecationWarning: invalid escape sequence \s
    all = ["\\b" + i[0] + "\s" + i[1] + "[\W$]" for i in itertools.product(

proselint/checks/uncomparables/misc.py:117
  /build/proselint/src/proselint-0.10.2/proselint/checks/uncomparables/misc.py:117: DeprecationWarning: invalid escape sequence \W
    all = ["\\b" + i[0] + "\s" + i[1] + "[\W$]" for i in itertools.product(

proselint/checks/hyperbole/misc.py:27
  /build/proselint/src/proselint-0.10.2/proselint/checks/hyperbole/misc.py:27: DeprecationWarning: invalid escape sequence \?
    "[a-z]*\?{2,}"

proselint/checks/lexical_illusions/misc.py:26
  /build/proselint/src/proselint-0.10.2/proselint/checks/lexical_illusions/misc.py:26: DeprecationWarning: invalid escape sequence \s
    "the\sthe",

proselint/checks/lexical_illusions/misc.py:27
  /build/proselint/src/proselint-0.10.2/proselint/checks/lexical_illusions/misc.py:27: DeprecationWarning: invalid escape sequence \s
    "am\sam",

proselint/checks/lexical_illusions/misc.py:28
  /build/proselint/src/proselint-0.10.2/proselint/checks/lexical_illusions/misc.py:28: DeprecationWarning: invalid escape sequence \s
    "has\shas"

proselint/checks/misc/but.py:24
  /build/proselint/src/proselint-0.10.2/proselint/checks/misc/but.py:24: DeprecationWarning: invalid escape sequence \s
    regex = "(^|([\n\r]+))(\s*)But"

proselint/checks/misc/commercialese.py:33
  /build/proselint/src/proselint-0.10.2/proselint/checks/misc/commercialese.py:33: DeprecationWarning: invalid escape sequence \.
    "inst\.",

proselint/checks/misc/commercialese.py:40
  /build/proselint/src/proselint-0.10.2/proselint/checks/misc/commercialese.py:40: DeprecationWarning: invalid escape sequence \.
    "prox\.",

proselint/checks/misc/commercialese.py:47
  /build/proselint/src/proselint-0.10.2/proselint/checks/misc/commercialese.py:47: DeprecationWarning: invalid escape sequence \.
    "ult\."

proselint/checks/misc/currency.py:26
  /build/proselint/src/proselint-0.10.2/proselint/checks/misc/currency.py:26: DeprecationWarning: invalid escape sequence \$
    "\$[\d]* ?(?:dollars|usd|us dollars)"

proselint/checks/misc/phrasal_adjectives.py:27
  /build/proselint/src/proselint-0.10.2/proselint/checks/misc/phrasal_adjectives.py:27: DeprecationWarning: invalid escape sequence \s
    regex = "\s[^\s-]+ly-"

proselint/checks/misc/tense_present.py:27
  /build/proselint/src/proselint-0.10.2/proselint/checks/misc/tense_present.py:27: DeprecationWarning: invalid escape sequence \d
    u"up to \d{1,3}% ?[-\u2014\u2013]{0,3} ?(?:or|and) more\W?",

proselint/checks/misc/tense_present.py:42
  /build/proselint/src/proselint-0.10.2/proselint/checks/misc/tense_present.py:42: DeprecationWarning: invalid escape sequence \s
    for m in re.finditer(u"\s{}\s".format(i), text, flags=re.U | re.I):

proselint/checks/security/credit_card.py:26
  /build/proselint/src/proselint-0.10.2/proselint/checks/security/credit_card.py:26: DeprecationWarning: invalid escape sequence \d
    "4\d{15}",

proselint/checks/security/credit_card.py:27
  /build/proselint/src/proselint-0.10.2/proselint/checks/security/credit_card.py:27: DeprecationWarning: invalid escape sequence \d
    "5[1-5]\d{14}",

proselint/checks/security/credit_card.py:28
  /build/proselint/src/proselint-0.10.2/proselint/checks/security/credit_card.py:28: DeprecationWarning: invalid escape sequence \d
    "3[4,7]\d{13}",

proselint/checks/security/credit_card.py:29
  /build/proselint/src/proselint-0.10.2/proselint/checks/security/credit_card.py:29: DeprecationWarning: invalid escape sequence \d
    "3[0,6,8]\d{12}",

proselint/checks/security/credit_card.py:30
  /build/proselint/src/proselint-0.10.2/proselint/checks/security/credit_card.py:30: DeprecationWarning: invalid escape sequence \d
    "6011\d{12}",

proselint/checks/security/password.py:24
  /build/proselint/src/proselint-0.10.2/proselint/checks/security/password.py:24: DeprecationWarning: invalid escape sequence \S
    pwd_regex = "[:]? [\S]{6,30}"

tests/test_gmeu/test_a_A.py:10
  tests/test_gmeu/test_a_A.py:10: PytestWarning: yield tests were removed in pytest 4.0 - test_a_vs_an will be ignored
    def test_a_vs_an():

tests/test_gmeu/test_a_B.py:10
  tests/test_gmeu/test_a_B.py:10: PytestWarning: yield tests were removed in pytest 4.0 - test_a_distributive will be ignored
    def test_a_distributive():

-- Docs: https://docs.pytest.org/en/latest/warnings.html
=== 3 failed, 140 passed, 1 skipped, 2 xfailed, 43 warnings in 12.32 seconds ===
==> ERROR: A failure occurred in check().
    Aborting...
==> ERROR: Build failed, check /data/archbuild/chroots/staging-x86_64/abaumann/build
polyzen commented 4 years ago

It was my mistake for enabling the tests without properly trying them out. This has been resolved: https://git.archlinux.org/svntogit/community.git/commit/trunk?h=packages/proselint&id=379718a230c57b754519af1c9defbe6e47952b6b

carlsmedstad commented 3 years ago

Can you close this @Nytelife26? Old & fixed issue.

Nytelife26 commented 3 years ago

That I can. Thanks for triage assistance, @carlsmedstad