Hello community, here is the log from the commit of package python-pytest-trio for openSUSE:Factory checked in at 2020-11-08 20:59:18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pytest-trio (Old) and /work/SRC/openSUSE:Factory/.python-pytest-trio.new.11331 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pytest-trio" Sun Nov 8 20:59:18 2020 rev:6 rq:846887 version:0.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pytest-trio/python-pytest-trio.changes 2020-10-12 14:00:07.450236348 +0200 +++ /work/SRC/openSUSE:Factory/.python-pytest-trio.new.11331/python-pytest-trio.changes 2020-11-08 20:59:24.148278127 +0100 @@ -1,0 +2,11 @@ +Thu Nov 5 14:05:47 UTC 2020 - Marketa Machova <mmach...@suse.com> + +- Update to 0.7.0 + * Support added for alternative Trio run functions via the trio_run + configuration variable and @pytest.mark.trio(run=...). Presently + supports Trio and QTrio. + * Python 3.5 support removed. + * pytest 6 support added +- Drop merged pytest6.patch + +------------------------------------------------------------------- Old: ---- pytest6.patch v0.6.0.tar.gz New: ---- v0.7.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pytest-trio.spec ++++++ --- /var/tmp/diff_new_pack.GfTiiY/_old 2020-11-08 20:59:24.992276489 +0100 +++ /var/tmp/diff_new_pack.GfTiiY/_new 2020-11-08 20:59:24.996276481 +0100 @@ -19,13 +19,12 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-pytest-trio -Version: 0.6.0 +Version: 0.7.0 Release: 0 Summary: Pytest plugin for trio License: MIT OR Apache-2.0 URL: https://github.com/python-trio/pytest-trio Source: https://github.com/python-trio/pytest-trio/archive/v%{version}.tar.gz -Patch0: pytest6.patch BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros @@ -52,7 +51,6 @@ %prep %setup -q -n pytest-trio-%{version} -%patch0 -p1 rm pytest.ini rm pytest_trio/_tests/test_hypothesis_interaction.py ++++++ v0.6.0.tar.gz -> v0.7.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/.readthedocs.yml new/pytest-trio-0.7.0/.readthedocs.yml --- old/pytest-trio-0.6.0/.readthedocs.yml 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/.readthedocs.yml 2020-10-15 15:34:44.000000000 +0200 @@ -1,10 +1,14 @@ -# https://docs.readthedocs.io/en/latest/yaml-config.html +# https://docs.readthedocs.io/en/latest/config-file/index.html +version: 2 + formats: - htmlzip - epub -requirements_file: ci/rtd-requirements.txt - python: - version: 3 - pip_install: True + version: 3.7 + install: + - requirements: docs-requirements.txt + +sphinx: + fail_on_warning: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/.travis.yml new/pytest-trio-0.7.0/.travis.yml --- old/pytest-trio-0.6.0/.travis.yml 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/.travis.yml 2020-10-15 15:34:44.000000000 +0200 @@ -9,6 +9,7 @@ - 3.7-dev - 3.8 - 3.8-dev +- 3.9-dev jobs: include: - os: osx diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/ci/rtd-requirements.txt new/pytest-trio-0.7.0/ci/rtd-requirements.txt --- old/pytest-trio-0.6.0/ci/rtd-requirements.txt 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/ci/rtd-requirements.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,7 +0,0 @@ -# RTD is currently installing 1.5.3, which has a bug in :lineno-match: -sphinx >= 1.6.1 -sphinx_rtd_theme -sphinxcontrib-trio -# Workaround for this weird issue: -# https://travis-ci.org/python-trio/pytest-trio/jobs/407495415 -attrs >= 17.4.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/ci/travis.sh new/pytest-trio-0.7.0/ci/travis.sh --- old/pytest-trio-0.6.0/ci/travis.sh 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/ci/travis.sh 2020-10-15 15:34:44.000000000 +0200 @@ -43,7 +43,7 @@ pip install dist/*.zip if [ "$CHECK_DOCS" = "1" ]; then - pip install -Ur ci/rtd-requirements.txt + pip install -Ur docs-requirements.txt cd docs # -n (nit-picky): warn on missing references # -W: turn warnings into errors Binary files old/pytest-trio-0.6.0/docs/source/_static/favicon-32.png and new/pytest-trio-0.7.0/docs/source/_static/favicon-32.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs/source/_static/favicon.svg new/pytest-trio-0.7.0/docs/source/_static/favicon.svg --- old/pytest-trio-0.6.0/docs/source/_static/favicon.svg 1970-01-01 01:00:00.000000000 +0100 +++ new/pytest-trio-0.7.0/docs/source/_static/favicon.svg 2020-10-15 15:34:44.000000000 +0200 @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1.9272662in" + height="1.9347428in" + viewBox="0 0 48.952561 49.142465" + version="1.1" + id="svg6920" + inkscape:version="0.92.1 r15371" + sodipodi:docname="favicon.svg" + inkscape:export-filename="/tmp/favicon.png" + inkscape:export-xdpi="16.6" + inkscape:export-ydpi="16.6"> + <defs + id="defs6914"> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient7854" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.14883897,0,0,0.15027592,4.0547886,29.542673)" + x1="-86.856689" + y1="-115.56387" + x2="52.763859" + y2="144.01498" /> + <linearGradient + id="linearGradient4689"> + <stop + id="stop4691" + offset="0" + style="stop-color:#5a9fd4;stop-opacity:1;" /> + <stop + id="stop4693" + offset="1" + style="stop-color:#306998;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient8074" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.14883897,0,0,0.15027592,4.0547886,29.542673)" + x1="-86.856689" + y1="-115.56387" + x2="52.763859" + y2="144.01498" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient8076" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.14883897,0,0,0.15027592,4.0547886,29.542673)" + x1="-86.856689" + y1="-115.56387" + x2="52.763859" + y2="144.01498" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.657" + inkscape:cx="107.17844" + inkscape:cy="32.91232" + inkscape:document-units="in" + inkscape:current-layer="g8192-4-3" + showgrid="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:window-width="960" + inkscape:window-height="1009" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="0" + inkscape:measure-start="88.79,26.2523" + inkscape:measure-end="96.7109,26.2523" + units="in" /> + <metadata + id="metadata6917"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-43.512182,-92.122053)"> + <g + id="g8192-4-3" + transform="matrix(1.0955007,0,0,1.0955007,-784.48788,-248.40155)" + inkscape:export-filename="/tmp/logos-for-twitter.png" + inkscape:export-xdpi="300.043" + inkscape:export-ydpi="300.043"> + <g + id="use13406-2-2" + inkscape:transform-center-x="0.86697019" + inkscape:transform-center-y="-1.8134207" + transform="matrix(-0.81099572,0.77300502,-0.77300502,-0.81099572,1553.489,18.995344)"> + <ellipse + ry="1.849257" + rx="2.0100617" + cy="279.16974" + cx="689.078" + id="use7838" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffd43b;fill-opacity:1;fill-rule:nonzero;stroke:#4482b4;stroke-width:0.0429756;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(-1.9840008)" /> + <g + transform="matrix(-0.9961282,0.08791246,0.08791246,0.9961282,704.74992,216.96001)" + id="g7842"> + <path + id="path7840" + d="m 15.3234,33.004502 c -3.303492,0.07446 -6.1437556,1.504007 -9.2216051,3.637225 -3.0778495,2.133218 1.1469662,4.696443 2.2243048,4.724767 0.4064221,0.07588 7.4213833,-2.193711 7.5353703,-2.114185 -7.3702624,3.235119 -17.438782,5.601128 -17.5429341,11.95308 -0.056078,3.420038 5.6067196,5.019668 8.3397073,5.163067 2.7329877,0.143399 5.8908108,-0.376697 8.0717988,-1.744073 0,0 -5.6723856,-0.571553 -6.6108579,-1.705741 C 4.2006539,48.182914 20.758645,45.864429 22.535439,39.558198 22.959329,38.053721 22.33965,36.180141 21.266061,35.044121 19.827575,33.521985 17.41718,32.957309 15.3234,33.004502 Z m -5.8055665,3.154757 c 0.7327735,0 1.3311835,0.60818 1.3311835,1.35599 0,0.74515 -0.59841,1.34772 -1.3311835,1.34772 -0.7354039,0 -1.331185,-0.60257 -1.331185,-1.34772 0,-0.74781 0.5957811,-1.35599 1.331185,-1.35599 z" + style="fill:url(#linearGradient8074);fill-opacity:1;stroke-width:0.26458332" + inkscape:connector-curvature="0" + sodipodi:nodetypes="azccszcsaaasssss" /> + </g> + <ellipse + ry="1.849257" + rx="2.0100617" + cy="308.6362" + cx="698.05829" + id="use7844" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffd43b;fill-opacity:1;fill-rule:nonzero;stroke:#4482b4;stroke-width:0.0429756;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(-1.9840008)" /> + <g + transform="matrix(0.42192968,-0.90662856,-0.90662856,-0.42192968,738.18801,309.07018)" + id="use7846"> + <path + id="path7862" + d="m 15.3234,33.004502 c -3.303492,0.07446 -6.1437556,1.504007 -9.2216051,3.637225 -3.0778495,2.133218 1.1469662,4.696443 2.2243048,4.724767 0.4064221,0.07588 7.4213833,-2.193711 7.5353703,-2.114185 -7.3702624,3.235119 -17.438782,5.601128 -17.5429341,11.95308 -0.056078,3.420038 5.6067196,5.019668 8.3397073,5.163067 2.7329877,0.143399 5.8908108,-0.376697 8.0717988,-1.744073 0,0 -5.6723856,-0.571553 -6.6108579,-1.705741 C 4.2006539,48.182914 20.758645,45.864429 22.535439,39.558198 22.959329,38.053721 22.33965,36.180141 21.266061,35.044121 19.827575,33.521985 17.41718,32.957309 15.3234,33.004502 Z m -5.8055665,3.154757 c 0.7327735,0 1.3311835,0.60818 1.3311835,1.35599 0,0.74515 -0.59841,1.34772 -1.3311835,1.34772 -0.7354039,0 -1.331185,-0.60257 -1.331185,-1.34772 0,-0.74781 0.5957811,-1.35599 1.331185,-1.35599 z" + style="fill:url(#linearGradient8076);fill-opacity:1;stroke-width:0.26458332" + inkscape:connector-curvature="0" + sodipodi:nodetypes="azccszcsaaasssss" /> + </g> + <ellipse + ry="1.849257" + rx="2.0100617" + cy="301.38651" + cx="667.98376" + id="use7848" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffd43b;fill-opacity:1;fill-rule:nonzero;stroke:#4482b4;stroke-width:0.0429756;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(-1.9840008)" /> + <g + transform="matrix(0.57419852,0.8187161,0.8187161,-0.57419852,641.69928,291.97337)" + id="use7850"> + <path + id="path7856" + d="m 15.3234,33.004502 c -3.303492,0.07446 -6.1437556,1.504007 -9.2216051,3.637225 -3.0778495,2.133218 1.1469662,4.696443 2.2243048,4.724767 0.4064221,0.07588 7.4213833,-2.193711 7.5353703,-2.114185 -7.3702624,3.235119 -17.438782,5.601128 -17.5429341,11.95308 -0.056078,3.420038 5.6067196,5.019668 8.3397073,5.163067 2.7329877,0.143399 5.8908108,-0.376697 8.0717988,-1.744073 0,0 -5.6723856,-0.571553 -6.6108579,-1.705741 C 4.2006539,48.182914 20.758645,45.864429 22.535439,39.558198 22.959329,38.053721 22.33965,36.180141 21.266061,35.044121 19.827575,33.521985 17.41718,32.957309 15.3234,33.004502 Z m -5.8055665,3.154757 c 0.7327735,0 1.3311835,0.60818 1.3311835,1.35599 0,0.74515 -0.59841,1.34772 -1.3311835,1.34772 -0.7354039,0 -1.331185,-0.60257 -1.331185,-1.34772 0,-0.74781 0.5957811,-1.35599 1.331185,-1.35599 z" + style="fill:url(#linearGradient7854);fill-opacity:1;stroke-width:0.26458332" + inkscape:connector-curvature="0" + sodipodi:nodetypes="azccszcsaaasssss" /> + </g> + </g> + </g> + </g> +</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs/source/_static/hackrtd.css new/pytest-trio-0.7.0/docs/source/_static/hackrtd.css --- old/pytest-trio-0.6.0/docs/source/_static/hackrtd.css 1970-01-01 01:00:00.000000000 +0100 +++ new/pytest-trio-0.7.0/docs/source/_static/hackrtd.css 2020-10-15 15:34:44.000000000 +0200 @@ -0,0 +1,112 @@ +/* Temporary hack to work around bug in rtd theme 2.0 through 2.4 + See https://github.com/rtfd/sphinx_rtd_theme/pull/382 +*/ +pre { + line-height: normal !important; +} + +/* Make .. deprecation:: blocks visible + * (by default they're entirely unstyled) + */ +.deprecated { + background-color: #ffe13b; +} + +/* Add a snakey triskelion ornament to <hr> + * https://stackoverflow.com/questions/8862344/css-hr-with-ornament/18541258#18541258 + * but only do it to <hr>s in the content box, b/c the RTD popup control panel + * thingummy also has an <hr> in it, and putting the ornament on that looks + * *really weird*. (In particular, the background color is wrong.) + */ +.rst-content hr:after { + /* This .svg gets displayed on top of the middle of the hrule. It has a box + * behind the logo that's colored to match the RTD theme body background + * color (#fcfcfc), which hides the middle part of the hrule to make it + * look like there's a gap in it. The size of the box determines the size + * of the gap. + */ + background: url('ornament.svg') no-repeat top center; + background-size: contain; + content: ""; + display: block; + height: 30px; + position: relative; + top: -15px; +} + +/* Hacks to make the upper-left logo area look nicer */ + +.wy-side-nav-search { + /* Lighter background color to match logo */ + background-color: #d2e7fa !important; +} + +.wy-side-nav-search > a { + color: #306998 !important; +} + +.wy-side-nav-search > a.logo { + display: block !important; + padding-bottom: 0.809em !important; +} + +.wy-side-nav-search > a img.logo { + display: inline !important; + padding: 20 !important; +} + +.trio-version { + display: inline; + /* I *cannot* figure out how to get the version text vertically centered + on the logo. Oh well... + height: 32px; + line-height: 32px; + */ +} + +.wy-side-nav-search > a { + /* Mostly this is just to simplify things, so we don't have margin/padding + * on both the <a> and the <img> inside it */ + margin: 0 !important; + padding: 0 !important; +} + +/* Get rid of the weird super dark "Contents" label that wastes vertical space + */ +.wy-menu-vertical > p.caption { + display: none !important; +} + +/* I do not like RTD's use of Roboto Slab for headlines. So force it back to + * Lato (or whatever fallback it's using if Lato isn't available for some + * reason). I also experimented with using Montserrat to be extra obnoxiously + * on brand, but honestly you couldn't really tell so there wasn't much point + * in adding page weight for that, and this is going to match the body text + * better. (Montserrat for body text *definitely* didn't look good, alas.) + */ +h1, h2, h3, h4, h5, h6, legend, .rst-content .toctree-wrapper p.caption { + font-family: inherit !important; +} + +/* Get rid of the horrible red for literal content */ +.rst-content tt.literal, .rst-content tt.literal, .rst-content code.literal { + color: #222 !important; +} + +/* Style the "Need help?" text just underneath the search box */ +.trio-help-hint { + line-height: normal; + margin-bottom: 0; + /* font-size: 12px; */ + font-size: 80%; /* matches the "Search docs" box */ + padding-top: 6px; + color: #306998; + text-align: center; +} + +a.trio-help-hint, .trio-help-hint a:link, .trio-help-hint a:visited { + color: inherit; + /* Like text-decoration: underline, but with a thinner line */ + text-decoration: none; + border-bottom: 1px solid; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs/source/_static/ornament.svg new/pytest-trio-0.7.0/docs/source/_static/ornament.svg --- old/pytest-trio-0.6.0/docs/source/_static/ornament.svg 1970-01-01 01:00:00.000000000 +0100 +++ new/pytest-trio-0.7.0/docs/source/_static/ornament.svg 2020-10-15 15:34:44.000000000 +0200 @@ -0,0 +1,188 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="2.5959945in" + height="2.0181205in" + viewBox="0 0 65.938256 51.260259" + version="1.1" + id="svg6920" + inkscape:version="0.92.1 r15371" + sodipodi:docname="ornament.svg" + inkscape:export-filename="/tmp/circle-sticker.png" + inkscape:export-xdpi="599.99994" + inkscape:export-ydpi="599.99994"> + <defs + id="defs6914"> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient7854" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.14883897,0,0,0.15027592,4.0547886,29.542673)" + x1="-86.856689" + y1="-115.56387" + x2="52.763859" + y2="144.01498" /> + <linearGradient + id="linearGradient4689"> + <stop + id="stop4691" + offset="0" + style="stop-color:#5a9fd4;stop-opacity:1;" /> + <stop + id="stop4693" + offset="1" + style="stop-color:#306998;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient8074" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.14883897,0,0,0.15027592,4.0547886,29.542673)" + x1="-86.856689" + y1="-115.56387" + x2="52.763859" + y2="144.01498" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4689" + id="linearGradient8076" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.14883897,0,0,0.15027592,4.0547886,29.542673)" + x1="-86.856689" + y1="-115.56387" + x2="52.763859" + y2="144.01498" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#fcfcfc" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:zoom="1.171676" + inkscape:cx="80.012088" + inkscape:cy="51.222629" + inkscape:document-units="in" + inkscape:current-layer="g8192-4-3" + showgrid="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:window-width="1920" + inkscape:window-height="1009" + inkscape:window-x="0" + inkscape:window-y="34" + inkscape:window-maximized="1" + inkscape:measure-start="173.256,59.3167" + inkscape:measure-end="217.21,59.3167" + units="in" + inkscape:pagecheckerboard="true" + inkscape:snap-global="true" + inkscape:snap-object-midpoints="true" /> + <metadata + id="metadata6917"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-32.160552,-91.16746)"> + <g + id="g8192-4-3" + transform="matrix(1.0955007,0,0,1.0955007,-784.48788,-248.40155)" + inkscape:export-filename="/tmp/logos-for-twitter.png" + inkscape:export-xdpi="300.043" + inkscape:export-ydpi="300.043"> + <rect + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#fcfcfc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.33591944;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect11334" + width="60.190063" + height="46.791626" + x="745.45679" + y="309.96695" + ry="0" /> + <g + id="use13406-2-2" + inkscape:transform-center-x="0.81974001" + inkscape:transform-center-y="-1.714597" + transform="matrix(-0.76679765,0.73087738,-0.73087738,-0.76679765,1510.1954,34.572412)"> + <ellipse + ry="1.849257" + rx="2.0100617" + cy="279.16974" + cx="689.078" + id="use7838" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffd43b;fill-opacity:1;fill-rule:nonzero;stroke:#4482b4;stroke-width:0.0429756;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(-1.9840008)" /> + <g + transform="matrix(-0.9961282,0.08791246,0.08791246,0.9961282,704.74992,216.96001)" + id="g7842"> + <path + id="path7840" + d="m 15.3234,33.004502 c -3.303492,0.07446 -6.1437556,1.504007 -9.2216051,3.637225 -3.0778495,2.133218 1.1469662,4.696443 2.2243048,4.724767 0.4064221,0.07588 7.4213833,-2.193711 7.5353703,-2.114185 -7.3702624,3.235119 -17.438782,5.601128 -17.5429341,11.95308 -0.056078,3.420038 5.6067196,5.019668 8.3397073,5.163067 2.7329877,0.143399 5.8908108,-0.376697 8.0717988,-1.744073 0,0 -5.6723856,-0.571553 -6.6108579,-1.705741 C 4.2006539,48.182914 20.758645,45.864429 22.535439,39.558198 22.959329,38.053721 22.33965,36.180141 21.266061,35.044121 19.827575,33.521985 17.41718,32.957309 15.3234,33.004502 Z m -5.8055665,3.154757 c 0.7327735,0 1.3311835,0.60818 1.3311835,1.35599 0,0.74515 -0.59841,1.34772 -1.3311835,1.34772 -0.7354039,0 -1.331185,-0.60257 -1.331185,-1.34772 0,-0.74781 0.5957811,-1.35599 1.331185,-1.35599 z" + style="fill:url(#linearGradient8074);fill-opacity:1;stroke-width:0.26458332" + inkscape:connector-curvature="0" + sodipodi:nodetypes="azccszcsaaasssss" /> + </g> + <ellipse + ry="1.849257" + rx="2.0100617" + cy="308.6362" + cx="698.05829" + id="use7844" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffd43b;fill-opacity:1;fill-rule:nonzero;stroke:#4482b4;stroke-width:0.0429756;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(-1.9840008)" /> + <g + transform="matrix(0.42192968,-0.90662856,-0.90662856,-0.42192968,738.18801,309.07018)" + id="use7846"> + <path + id="path7862" + d="m 15.3234,33.004502 c -3.303492,0.07446 -6.1437556,1.504007 -9.2216051,3.637225 -3.0778495,2.133218 1.1469662,4.696443 2.2243048,4.724767 0.4064221,0.07588 7.4213833,-2.193711 7.5353703,-2.114185 -7.3702624,3.235119 -17.438782,5.601128 -17.5429341,11.95308 -0.056078,3.420038 5.6067196,5.019668 8.3397073,5.163067 2.7329877,0.143399 5.8908108,-0.376697 8.0717988,-1.744073 0,0 -5.6723856,-0.571553 -6.6108579,-1.705741 C 4.2006539,48.182914 20.758645,45.864429 22.535439,39.558198 22.959329,38.053721 22.33965,36.180141 21.266061,35.044121 19.827575,33.521985 17.41718,32.957309 15.3234,33.004502 Z m -5.8055665,3.154757 c 0.7327735,0 1.3311835,0.60818 1.3311835,1.35599 0,0.74515 -0.59841,1.34772 -1.3311835,1.34772 -0.7354039,0 -1.331185,-0.60257 -1.331185,-1.34772 0,-0.74781 0.5957811,-1.35599 1.331185,-1.35599 z" + style="fill:url(#linearGradient8076);fill-opacity:1;stroke-width:0.26458332" + inkscape:connector-curvature="0" + sodipodi:nodetypes="azccszcsaaasssss" /> + </g> + <ellipse + ry="1.849257" + rx="2.0100617" + cy="301.38651" + cx="667.98376" + id="use7848" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffd43b;fill-opacity:1;fill-rule:nonzero;stroke:#4482b4;stroke-width:0.0429756;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + transform="rotate(-1.9840008)" /> + <g + transform="matrix(0.57419852,0.8187161,0.8187161,-0.57419852,641.69928,291.97337)" + id="use7850"> + <path + id="path7856" + d="m 15.3234,33.004502 c -3.303492,0.07446 -6.1437556,1.504007 -9.2216051,3.637225 -3.0778495,2.133218 1.1469662,4.696443 2.2243048,4.724767 0.4064221,0.07588 7.4213833,-2.193711 7.5353703,-2.114185 -7.3702624,3.235119 -17.438782,5.601128 -17.5429341,11.95308 -0.056078,3.420038 5.6067196,5.019668 8.3397073,5.163067 2.7329877,0.143399 5.8908108,-0.376697 8.0717988,-1.744073 0,0 -5.6723856,-0.571553 -6.6108579,-1.705741 C 4.2006539,48.182914 20.758645,45.864429 22.535439,39.558198 22.959329,38.053721 22.33965,36.180141 21.266061,35.044121 19.827575,33.521985 17.41718,32.957309 15.3234,33.004502 Z m -5.8055665,3.154757 c 0.7327735,0 1.3311835,0.60818 1.3311835,1.35599 0,0.74515 -0.59841,1.34772 -1.3311835,1.34772 -0.7354039,0 -1.331185,-0.60257 -1.331185,-1.34772 0,-0.74781 0.5957811,-1.35599 1.331185,-1.35599 z" + style="fill:url(#linearGradient7854);fill-opacity:1;stroke-width:0.26458332" + inkscape:connector-curvature="0" + sodipodi:nodetypes="azccszcsaaasssss" /> + </g> + </g> + </g> + </g> +</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs/source/_templates/layout.html new/pytest-trio-0.7.0/docs/source/_templates/layout.html --- old/pytest-trio-0.6.0/docs/source/_templates/layout.html 1970-01-01 01:00:00.000000000 +0100 +++ new/pytest-trio-0.7.0/docs/source/_templates/layout.html 2020-10-15 15:34:44.000000000 +0200 @@ -0,0 +1,27 @@ +{# +https://stackoverflow.com/questions/25243482/how-to-add-sphinx-generated-index-to-the-sidebar-when-using-read-the-docs-theme +#} +{% extends "!layout.html" %} + +{% block sidebartitle %} +<a href="{{ pathto(master_doc) }}"> + {{ project }} + {%- set nav_version = version %} + {% if READTHEDOCS and current_version %} + {%- set nav_version = current_version %} + {% endif %} + {# don't show the version on RTD if it's the default #} + {% if nav_version != 'latest' %} + <div class="trio-version">{{ nav_version }}</div> + {% endif %} + <br> + <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" /> +</a> + +{% include "searchbox.html" %} + +<p class="trio-help-hint">Need help? <a +href="https://gitter.im/python-trio/general">Live chat</a>, <a +href="https://trio.discourse.group">forum</a>, <a +href="https://stackoverflow.com/questions/ask?tags=python+python-trio">StackOverflow</a>.</p> +{% endblock %} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs/source/conf.py new/pytest-trio-0.7.0/docs/source/conf.py --- old/pytest-trio-0.6.0/docs/source/conf.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/docs/source/conf.py 2020-10-15 15:34:44.000000000 +0200 @@ -22,6 +22,18 @@ # So autodoc can import our package sys.path.insert(0, os.path.abspath('../..')) +# https://docs.readthedocs.io/en/stable/builds.html#build-environment +if "READTHEDOCS" in os.environ: + import glob + if glob.glob("../../newsfragments/*.*.rst"): + print("-- Found newsfragments; running towncrier --", flush=True) + import subprocess + subprocess.run( + ["towncrier", "--yes", "--date", "not released yet"], + cwd="../..", + check=True, + ) + # Warn about all references to unknown targets nitpicky = True # Except for these ones, which we expect to point to unknown targets: @@ -30,6 +42,14 @@ ("py:obj", "bytes-like"), ] +# XX hack the RTD theme until +# https://github.com/rtfd/sphinx_rtd_theme/pull/382 +# is shipped (should be in the release after 0.2.4) +# ...note that this has since grown to contain a bunch of other CSS hacks too +# though. +def setup(app): + app.add_css_file("hackrtd.css") + # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. @@ -55,7 +75,7 @@ autodoc_member_order = "bysource" # Add any paths that contain templates here, relative to this directory. -templates_path = [] +templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: @@ -81,6 +101,9 @@ # The full version, including alpha/beta/rc tags. release = version +html_favicon = "_static/favicon-32.png" +html_logo = "../../logo/wordmark-transparent.svg" + # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # @@ -94,14 +117,17 @@ exclude_patterns = [] # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = 'default' -# The default language for :: blocks highlight_language = 'python3' # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False +# This avoids a warning by the epub builder that it can't figure out +# the MIME type for our favicon. +suppress_warnings = ["epub.unknown_project_files"] + # -- Options for HTML output ---------------------------------------------- @@ -128,7 +154,8 @@ # I'm not 100% sure this actually does anything with our current # versions/settings... "navigation_depth": 4, - "logo_only": True, + "logo_only": False, + 'prev_next_buttons_location': 'both' } # Add any paths that contain custom static files (such as style sheets) here, @@ -167,7 +194,7 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'pytest-trio.tex', 'Trio Documentation', + (master_doc, 'pytest-trio.tex', 'pytest-trio Documentation', author, 'manual'), ] @@ -189,6 +216,6 @@ # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'pytest-trio', 'pytest-trio Documentation', - author, 'pytest-trio', 'Pytest plugin for trio', + author, 'pytest-trio', 'pytest plugin for Trio', 'Miscellaneous'), ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs/source/history.rst new/pytest-trio-0.7.0/docs/source/history.rst --- old/pytest-trio-0.6.0/docs/source/history.rst 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/docs/source/history.rst 2020-10-15 15:34:44.000000000 +0200 @@ -5,6 +5,21 @@ .. towncrier release notes start +pytest-trio 0.7.0 (2020-10-15) +------------------------------ + +Features +~~~~~~~~ + +- Support added for :ref:`alternative Trio run functions <trio-run-config>` via the ``trio_run`` configuration variable and ``@pytest.mark.trio(run=...)``. Presently supports Trio and QTrio. (`#105 <https://github.com/python-trio/pytest-trio/issues/105>`__) + + +Deprecations and Removals +~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Python 3.5 support removed. (`#96 <https://github.com/python-trio/pytest-trio/issues/96>`__) + + pytest-trio 0.6.0 (2020-05-20) ---------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs/source/quickstart.rst new/pytest-trio-0.7.0/docs/source/quickstart.rst --- old/pytest-trio-0.6.0/docs/source/quickstart.rst 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/docs/source/quickstart.rst 2020-10-15 15:34:44.000000000 +0200 @@ -26,43 +26,37 @@ async def test_should_fail(): assert False -If we run this under pytest normally, then we get a strange result: +If we run this under pytest normally, then the tests are skipped and we get +a warning explaining how pytest itself does not directly support async def +tests. Note that in versions of pytest prior to v4.4.0 the tests end up +being reported as passing with other warnings despite not actually having +been properly run. .. code-block:: none $ pytest test_example.py - ======================== test session starts ========================= - platform linux -- Python 3.6.5, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 - rootdir: /tmp, inifile: + platform linux -- Python 3.8.5, pytest-6.0.1, py-1.9.0, pluggy-0.13.1 + rootdir: /tmp collected 2 items - test_example.py .. [100%] + test_example.py ss [100%] ========================== warnings summary ========================== test_example.py::test_sleep - .../_pytest/python.py:196: RuntimeWarning: coroutine 'test_sleep' was never awaited - testfunction(**testargs) - test_example.py::test_should_fail - .../_pytest/python.py:196: RuntimeWarning: coroutine 'test_should_fail' was never awaited - testfunction(**testargs) - - -- Docs: http://doc.pytest.org/en/latest/warnings.html - ================ 2 passed, 2 warnings in 0.02 seconds ================ + .../_pytest/python.py:169: PytestUnhandledCoroutineWarning: async + def functions are not natively supported and have been skipped. + You need to install a suitable plugin for your async framework, for + example: + - pytest-asyncio + - pytest-trio + - pytest-tornasync + - pytest-twisted + warnings.warn(PytestUnhandledCoroutineWarning(msg.format(nodeid))) -So ``test_sleep`` passed, which is what we expected... but -``test_should_fail`` also passes, which is strange. And it says that -the whole test run completed in 0.02 seconds, which is weird, because -``test_sleep`` should have taken at least second to run. And then -there are these strange warnings at the bottom... what's going on -here? - -The problem is that our tests are async, and pytest doesn't know what -to do with it. So it basically skips running them entirely, and then -reports them as passed. This is not very helpful! If you see warnings -like this, or if your tests seem to pass but your coverage reports -claim that they weren't run at all, then this might be the problem. + -- Docs: https://docs.pytest.org/en/stable/warnings.html + =================== 2 skipped, 2 warnings in 0.26s =================== Here's the fix: @@ -89,9 +83,9 @@ $ pytest test_example.py ======================== test session starts ========================= - platform linux -- Python 3.6.5, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 - rootdir: /tmp, inifile: pytest.ini - plugins: trio-0.4.2 + platform linux -- Python 3.8.5, pytest-6.0.1, py-1.9.0, pluggy-0.13.1 + rootdir: /tmp, configfile: pytest.ini + plugins: trio-0.6.0 collected 2 items test_example.py .F [100%] @@ -99,12 +93,25 @@ ============================== FAILURES ============================== __________________________ test_should_fail __________________________ + value = <trio.Nursery object at 0x7f97b21fafa0> + + async def yield_(value=None): + > return await _yield_(value) + + venv/lib/python3.8/site-packages/async_generator/_impl.py:106: + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + venv/lib/python3.8/site-packages/async_generator/_impl.py:99: in _yield_ + return (yield _wrap(value)) + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + async def test_should_fail(): > assert False E assert False - test_example.py:7: AssertionError - ================= 1 failed, 1 passed in 1.05 seconds ================= + test_example.py:11: AssertionError + ====================== short test summary info ======================= + FAILED test_example.py::test_should_fail - assert False + ==================== 1 failed, 1 passed in 1.23s ===================== Notice that now it says ``plugins: trio``, which means that pytest-trio is installed, and the results make sense: the good test @@ -127,7 +134,7 @@ start_time = trio.current_time() await trio.sleep(1) end_time = trio.current_time() - assert start_time - end_time == 1 + assert end_time - start_time == 1 In the version of this test we saw before that used real time, at the end we had to use a ``>=`` comparison, in order to account for @@ -332,7 +339,7 @@ pick an unused one for you automatically. Problem solved! But wait... if the operating system is picking the port for us, how do -we know figure out which one it picked, so we can connect to it later? +we know which one it picked, so we can connect to it later? Well, there's no way to predict the port ahead of time. But after :func:`~trio.serve_tcp` has opened a port, it can check and see what diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs/source/reference.rst new/pytest-trio-0.7.0/docs/source/reference.rst --- old/pytest-trio-0.6.0/docs/source/reference.rst 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/docs/source/reference.rst 2020-10-15 15:34:44.000000000 +0200 @@ -381,3 +381,42 @@ <https://hypothesis.readthedocs.io/en/latest/stateful.html>`__ for Trio-based libraries, then check out `hypothesis-trio <https://github.com/python-trio/hypothesis-trio>`__. + + +.. _trio-run-config: + +Using alternative Trio runners +------------------------------ + +If you are working with a library that provides integration with Trio, +such as via :ref:`guest mode <trio:guest-mode>`, it can be used with +pytest-trio as well. Setting ``trio_run`` in the pytest configuration +makes your choice the global default for both tests explicitly marked +with ``@pytest.mark.trio`` and those automatically marked by Trio mode. +``trio_run`` presently supports ``trio`` and ``qtrio``. + +.. code-block:: ini + + # pytest.ini + [pytest] + trio_mode = true + trio_run = qtrio + +.. code-block:: python + + import pytest + + @pytest.mark.trio + async def test(): + assert True + +If you want more granular control or need to use a specific function, +it can be passed directly to the marker. + +.. code-block:: python + + import pytest + + @pytest.mark.trio(run=qtrio.run) + async def test(): + assert True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs-requirements.in new/pytest-trio-0.7.0/docs-requirements.in --- old/pytest-trio-0.6.0/docs-requirements.in 1970-01-01 01:00:00.000000000 +0100 +++ new/pytest-trio-0.7.0/docs-requirements.in 2020-10-15 15:34:44.000000000 +0200 @@ -0,0 +1,16 @@ +# RTD is currently installing 1.5.3, which has a bug in :lineno-match: +sphinx >= 1.6.1 +sphinx_rtd_theme +sphinxcontrib-trio +# Workaround for this weird issue: +# https://travis-ci.org/python-trio/pytest-trio/jobs/407495415 +attrs >= 17.4.0 +# != 19.9.0rc1 for https://github.com/twisted/towncrier/issues/180 +towncrier != 19.9.0rc1 + +# pytest-trio's own dependencies +trio >= 0.15.0 +async_generator >= 1.9 +outcome +# For node.get_closest_marker +pytest >= 3.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/docs-requirements.txt new/pytest-trio-0.7.0/docs-requirements.txt --- old/pytest-trio-0.6.0/docs-requirements.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/pytest-trio-0.7.0/docs-requirements.txt 2020-10-15 15:34:44.000000000 +0200 @@ -0,0 +1,49 @@ +# +# This file is autogenerated by pip-compile +# To update, run: +# +# pip-compile --output-file=docs-requirements.txt docs-requirements.in +# +alabaster==0.7.12 # via sphinx +async-generator==1.10 # via -r docs-requirements.in, trio +attrs==20.2.0 # via -r docs-requirements.in, outcome, pytest, trio +babel==2.8.0 # via sphinx +certifi==2020.6.20 # via requests +chardet==3.0.4 # via requests +click==7.1.2 # via towncrier +docutils==0.16 # via sphinx +idna==2.10 # via requests, trio +imagesize==1.2.0 # via sphinx +incremental==17.5.0 # via towncrier +iniconfig==1.0.1 # via pytest +jinja2==2.11.2 # via sphinx, towncrier +markupsafe==1.1.1 # via jinja2 +outcome==1.0.1 # via -r docs-requirements.in, trio +packaging==20.4 # via pytest, sphinx +pluggy==0.13.1 # via pytest +py==1.9.0 # via pytest +pygments==2.7.1 # via sphinx +pyparsing==2.4.7 # via packaging +pytest==6.1.1 # via -r docs-requirements.in +pytz==2020.1 # via babel +requests==2.24.0 # via sphinx +six==1.15.0 # via packaging +sniffio==1.2.0 # via trio +snowballstemmer==2.0.0 # via sphinx +sortedcontainers==2.2.2 # via trio +sphinx-rtd-theme==0.5.0 # via -r docs-requirements.in +sphinx==3.2.1 # via -r docs-requirements.in, sphinx-rtd-theme, sphinxcontrib-trio +sphinxcontrib-applehelp==1.0.2 # via sphinx +sphinxcontrib-devhelp==1.0.2 # via sphinx +sphinxcontrib-htmlhelp==1.0.3 # via sphinx +sphinxcontrib-jsmath==1.0.1 # via sphinx +sphinxcontrib-qthelp==1.0.3 # via sphinx +sphinxcontrib-serializinghtml==1.1.4 # via sphinx +sphinxcontrib-trio==1.1.2 # via -r docs-requirements.in +toml==0.10.1 # via pytest, towncrier +towncrier==19.2.0 # via -r docs-requirements.in +trio==0.17.0 # via -r docs-requirements.in +urllib3==1.25.10 # via requests + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/logo/wordmark-transparent.svg new/pytest-trio-0.7.0/logo/wordmark-transparent.svg --- old/pytest-trio-0.6.0/logo/wordmark-transparent.svg 1970-01-01 01:00:00.000000000 +0100 +++ new/pytest-trio-0.7.0/logo/wordmark-transparent.svg 2020-10-15 15:34:44.000000000 +0200 @@ -0,0 +1,136 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1.286989in" + height="0.3373065in" + viewBox="0 0 32.689521 8.5675855" + version="1.1" + id="svg7605" + sodipodi:docname="wordmark-transparent.svg" + inkscape:version="0.92.1 r15371" + inkscape:export-filename="/tmp/workmark-sticker.png" + inkscape:export-xdpi="599.50616" + inkscape:export-ydpi="599.50616"> + <defs + id="defs7599"> + <inkscape:path-effect + effect="spiro" + id="path-effect6652-6-7-8-67" + is_visible="true" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.657" + inkscape:cx="89.887302" + inkscape:cy="-34.352279" + inkscape:document-units="in" + inkscape:current-layer="g6578-5" + showgrid="false" + units="in" + inkscape:window-width="960" + inkscape:window-height="1009" + inkscape:window-x="571" + inkscape:window-y="34" + inkscape:window-maximized="0" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:lockguides="false" /> + <metadata + id="metadata7602"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-41.793892,-77.600921)"> + <g + transform="matrix(1.4728762,0,0,1.4728762,-1083.9962,-618.83509)" + id="g6578-5" + inkscape:export-filename="/tmp/logos-for-twitter.png" + inkscape:export-xdpi="300.043" + inkscape:export-ydpi="300.043"> + <g + id="g6634" + transform="matrix(0.86029053,0,0,0.86029053,106.55507,67.09462)"> + <g + transform="matrix(0.99229395,0,0,0.99229395,114.28242,173.24527)" + id="g12643-8-9-6-2-5"> + <circle + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffe13b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.84061527px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="path12383-8-2-2-3-6" + cx="678.75415" + cy="-302.17123" + r="3.141927" + transform="rotate(48.154844)" /> + </g> + <g + id="g6764-3-9-5-2" + transform="translate(0.74207257,-36.552093)"> + <g + aria-label="TRI" + style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:9.52499962px;line-height:125%;font-family:Montserrat;-inkscape-font-specification:'Montserrat Medium';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;opacity:1;vector-effect:none;fill:#306a98;fill-opacity:1;stroke:none;stroke-width:0.182354px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="text5266-35-3-8-6-6-2-6-9"> + <path + d="m 763.87521,508.2288 v 1.13348 h 2.07645 v 5.53402 h 1.28588 v -5.53402 h 2.07645 v -1.13348 z" + style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-family:Montserrat;-inkscape-font-specification:'Montserrat Medium';text-align:start;letter-spacing:1.14829171px;text-anchor:start;vector-effect:none;fill:#306a98;fill-opacity:1;stroke:none;stroke-width:0.182354px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path8176" + inkscape:connector-curvature="0" /> + <path + d="m 776.99539,514.8963 -1.46685,-2.2098 c 0.85725,-0.36195 1.32397,-1.11442 1.32397,-2.16217 0,-1.46685 -0.98107,-2.29553 -2.7051,-2.29553 h -2.7813 v 6.6675 h 1.27635 v -1.96215 h 1.50495 c 0.0857,0 0.16193,0 0.23813,-0.01 l 1.15252,1.97167 z m -4.35293,-5.55307 h 1.50495 c 0.9525,0 1.4859,0.40005 1.4859,1.2192 0,0.8382 -0.5334,1.24777 -1.4859,1.24777 h -1.50495 z" + style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-family:Montserrat;-inkscape-font-specification:'Montserrat Medium';text-align:start;letter-spacing:1.14829171px;text-anchor:start;vector-effect:none;fill:#306a98;fill-opacity:1;stroke:none;stroke-width:0.182354px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path8178" + inkscape:connector-curvature="0" /> + <path + d="m 779.3977,508.2288 v 6.6675 h 1.27635 v -6.6675 z" + style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-family:Montserrat;-inkscape-font-specification:'Montserrat Medium';text-align:start;letter-spacing:1.14829171px;text-anchor:start;vector-effect:none;fill:#306a98;fill-opacity:1;stroke:none;stroke-width:0.182354px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="path8180" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + style="opacity:1;vector-effect:none;fill:#306a98;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.18425378px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="m 785.08115,473.57457 c -0.23644,0.41458 -0.34562,0.90061 -0.30918,1.37648 0.0431,0.56335 0.29084,1.10679 0.67858,1.51774 0.48941,0.5187 1.20379,0.82051 1.91659,0.79857 0.54586,-0.0168 1.08183,-0.21863 1.51392,-0.55261 0.27039,-0.20899 0.50188,-0.46939 0.67082,-0.76646 0.17148,-0.30152 0.27752,-0.63912 0.31738,-0.9837 0.0519,-0.44846 -0.009,-0.9095 -0.17477,-1.32931 -0.0241,-0.0428 -0.042,-0.0891 -0.0529,-0.13705 -0.007,-0.0316 -0.0112,-0.0647 -0.004,-0.0962 0.004,-0.0157 0.0106,-0.0309 0.0206,-0.0436 0.01,-0.0127 0.0234,-0.0229 0.0387,-0.0283 0.0216,-0.008 0.0458,-0.005 0.0672,0.003 0.0214,0.008 0.0404,0.0214 0.0584,0.0356 0.0362,0.0286 0.0692,0.0613 0.0981,0.0973 0.11539,0.14666 0.21227,0.30785 0.28764,0.47856 0.21383,0.48434 0.24865,1.03482 0.16644,1.55785 -0.1081,0.68775 -0.41817,1.34561 -0.89586,1.85206 -0.64497,0.68381 -1.59065,1.07013 -2.53029,1.04456 -1.11307,-0.0303 -2.19505,-0.64771 -2.7815,-1.59423 -0.32595,-0.52608 -0.50211,-1.14316 -0.50763,-1.76201 -0.007,-0.73702 0.23157,-1.4757 0.67545,-2.06409 0.37134,-0.49223 0.88306,-0.87678 1.45801,-1.09953 0.51774,-0.20059 1.08239,-0.27037 1.6361,-0.22915 0.16495,0.0123 0.32918,0.0342 0.49156,0.0657 0.12818,-0.0137 0.25728,-0.0189 0.38614,-0.0153 0.15735,0.004 0.31767,0.0225 0.46035,0.089 0.0777,0.0362 0.14865,0.0861 0.21179,0.14415 0.0595,0.0546 0.11204,0.11624 0.16652,0.17586 0.0734,0.0803 0.15046,0.15726 0.22184,0.23936 0.08,0.092 0.15461,0.19435 0.18142,0.31332 0.0201,0.0893 0.0115,0.18481 -0.0238,0.26927 -0.0291,0.0696 -0.0762,0.13161 -0.13579,0.17783 -0.0532,0.0413 -0.11644,0.0699 -0.18286,0.0811 -0.10555,0.0178 -0.21303,-0.008 -0.31685,-0.0342 -0.14496,-0.0364 -0.28979,-0.0734 -0.43542,-0.10704 -0.0898,-0.0207 -0.18074,-0.0405 -0.26418,-0.0796 -0.14737,-0.0691 -0.26117,-0.19377 -0.3574,-0.32504 -0.0556,-0.0758 -0.10667,-0.15483 -0.15299,-0.23659 -0.54571,-0.12201 -1.13396,-0.0435 -1.62856,0.21739 -0.40577,0.21402 -0.74719,0.54822 -0.96985,0.94931 z" + id="path6650-1-0-7-7" + inkscape:connector-curvature="0" + inkscape:path-effect="#path-effect6652-6-7-8-67" + inkscape:original-d="m 785.08115,473.57457 c -0.25409,0.2338 -0.14878,0.83014 -0.30918,1.37648 -0.16038,0.54636 0.41666,0.94339 0.67858,1.51774 0.26197,0.57432 1.30573,0.55919 1.91659,0.79857 0.61085,0.23944 0.9905,-0.36197 1.51392,-0.55261 0.52345,-0.19061 0.41518,-0.47168 0.67082,-0.76646 0.25563,-0.29482 0.21835,-0.60502 0.31738,-0.9837 0.099,-0.37874 -0.17477,-1.32931 -0.17477,-1.32931 0,0 -0.0437,-0.10438 -0.0529,-0.13705 -0.009,-0.0326 0.003,-0.14096 0.0556,-0.1681 0.0388,-0.02 0.0692,0.0632 0.12563,0.0385 0.0563,-0.0246 0.0981,0.0973 0.0981,0.0973 0,0 0.10542,0.0237 0.28764,0.47856 0.18223,0.45476 0.16442,1.19747 0.16644,1.55785 0.003,0.36035 -0.59494,1.24279 -0.89586,1.85206 -0.30095,0.6093 -1.67698,0.69748 -2.53029,1.04456 -0.85332,0.34706 -1.85407,-1.06309 -2.7815,-1.59423 -0.92743,-0.53113 -0.33814,-1.17494 -0.50763,-1.76201 -0.16947,-0.58708 0.45057,-1.37634 0.67545,-2.06409 0.22486,-0.68777 0.96953,-0.72713 1.45801,-1.09953 0.48848,-0.37241 1.05879,-0.16648 1.6361,-0.22915 0.57727,-0.0626 0.49156,0.0657 0.49156,0.0657 0,0 0.31605,-0.009 0.38614,-0.0153 0.14032,-0.0127 0.33018,0.0435 0.46035,0.089 0.0652,0.0228 0.16436,0.10916 0.21179,0.14415 0.0473,0.035 0.10403,0.1103 0.16652,0.17586 0.0623,0.0655 0.14823,0.15932 0.22184,0.23936 0.0735,0.0802 0.12124,0.20862 0.18142,0.31332 0.0601,0.1047 -0.0149,0.17933 -0.0238,0.26927 -0.009,0.0901 -0.0903,0.11829 -0.13579,0.17783 -0.0455,0.0595 -0.12156,0.0538 -0.18286,0.0811 -0.0611,0.0273 -0.24388,-0.0372 -0.31685,-0.0342 -0.073,0.002 -0.28447,-0.0704 -0.43542,-0.10704 -0.15097,-0.0369 -0.16756,-0.0505 -0.26418,-0.0796 -0.0966,-0.0289 -0.26526,-0.2587 -0.3574,-0.32504 -0.0923,-0.0663 -0.15299,-0.23659 -0.15299,-0.23659 -0.6183,0.0834 -1.18084,-0.0292 -1.62856,0.21739 -0.38869,0.24591 -0.65332,0.65204 -0.96985,0.94931 z" + sodipodi:nodetypes="cccccccccaccccccccscccssccccscccscccccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.4669385px;line-height:125%;font-family:Montserrat;-inkscape-font-specification:Montserrat;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.17963718px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="780.59448" + y="476.77414" + id="text8204"><tspan + sodipodi:role="line" + id="tspan8202" + x="780.59448" + y="482.71786" + style="stroke-width:0.17963718px" /></text> + </g> + </g> + </g> +</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/pytest_trio/_tests/helpers.py new/pytest-trio-0.7.0/pytest_trio/_tests/helpers.py --- old/pytest-trio-0.6.0/pytest_trio/_tests/helpers.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/pytest_trio/_tests/helpers.py 2020-10-15 15:34:44.000000000 +0200 @@ -5,11 +5,20 @@ testdir.makefile(".ini", pytest="[pytest]\ntrio_mode = true\n") +def enable_trio_mode_trio_run_via_pytest_ini(testdir): + testdir.makefile( + ".ini", pytest="[pytest]\ntrio_mode = true\ntrio_run = trio\n" + ) + + def enable_trio_mode_via_conftest_py(testdir): testdir.makeconftest("from pytest_trio.enable_trio_mode import *") enable_trio_mode = pytest.mark.parametrize( - "enable_trio_mode", - [enable_trio_mode_via_pytest_ini, enable_trio_mode_via_conftest_py] + "enable_trio_mode", [ + enable_trio_mode_via_pytest_ini, + enable_trio_mode_trio_run_via_pytest_ini, + enable_trio_mode_via_conftest_py, + ] ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/pytest_trio/_tests/test_async_fixture.py new/pytest-trio-0.7.0/pytest_trio/_tests/test_async_fixture.py --- old/pytest-trio-0.6.0/pytest_trio/_tests/test_async_fixture.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/pytest_trio/_tests/test_async_fixture.py 2020-10-15 15:34:44.000000000 +0200 @@ -139,4 +139,4 @@ result = testdir.runpytest() - result.assert_outcomes(error=1) + result.assert_outcomes(errors=1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/pytest_trio/_tests/test_async_yield_fixture.py new/pytest-trio-0.7.0/pytest_trio/_tests/test_async_yield_fixture.py --- old/pytest-trio-0.6.0/pytest_trio/_tests/test_async_yield_fixture.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/pytest_trio/_tests/test_async_yield_fixture.py 2020-10-15 15:34:44.000000000 +0200 @@ -6,17 +6,14 @@ @pytest.fixture(params=['Python>=36', 'async_generator']) def async_yield_implementation(request): if request.param == 'Python>=36': - if sys.version_info < (3, 6): - pytest.skip("requires python3.6") - else: - - def patch_code(code): - # Convert code to use Python>=3.6 builtin async generator - code = re.sub(r'(?m)^\s*@async_generator\n', r'', code) - code = re.sub(r'await yield_', r'yield', code) - return code - return patch_code + def patch_code(code): + # Convert code to use Python>=3.6 builtin async generator + code = re.sub(r'(?m)^\s*@async_generator\n', r'', code) + code = re.sub(r'await yield_', r'yield', code) + return code + + return patch_code else: return lambda x: x @@ -262,7 +259,7 @@ result = testdir.runpytest() # TODO: should trigger error instead of failure - # result.assert_outcomes(error=1) + # result.assert_outcomes(errors=1) result.assert_outcomes(failed=1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/pytest_trio/_tests/test_basic.py new/pytest-trio-0.7.0/pytest_trio/_tests/test_basic.py --- old/pytest-trio-0.6.0/pytest_trio/_tests/test_basic.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/pytest_trio/_tests/test_basic.py 2020-10-15 15:34:44.000000000 +0200 @@ -73,4 +73,4 @@ result = testdir.runpytest() - result.assert_outcomes(error=1) + result.assert_outcomes(errors=1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/pytest_trio/_tests/test_fixture_mistakes.py new/pytest-trio-0.7.0/pytest_trio/_tests/test_fixture_mistakes.py --- old/pytest-trio-0.6.0/pytest_trio/_tests/test_fixture_mistakes.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/pytest_trio/_tests/test_fixture_mistakes.py 2020-10-15 15:34:44.000000000 +0200 @@ -34,7 +34,7 @@ result = testdir.runpytest() - result.assert_outcomes(passed=1, error=2) + result.assert_outcomes(passed=1, errors=2) result.stdout.fnmatch_lines( ["*: Trio fixtures can only be used by Trio tests*"] ) @@ -65,7 +65,7 @@ result = testdir.runpytest() - result.assert_outcomes(error=1) + result.assert_outcomes(errors=1) result.stdout.fnmatch_lines(["*: Trio fixtures must be function-scope*"]) @@ -89,7 +89,7 @@ result = testdir.runpytest() - result.assert_outcomes(error=1) + result.assert_outcomes(errors=1) result.stdout.fnmatch_lines(["*: Trio fixtures must be function-scope*"]) @@ -113,7 +113,7 @@ result = testdir.runpytest() - result.assert_outcomes(error=1) + result.assert_outcomes(errors=1) result.stdout.fnmatch_lines( ["*: Trio fixtures can only be used by Trio tests*"] ) @@ -146,3 +146,28 @@ result.assert_outcomes(failed=1) result.stdout.fnmatch_lines(["*async_fixture*cancelled the test*"]) + + +@enable_trio_mode +def test_too_many_clocks(testdir, enable_trio_mode): + enable_trio_mode(testdir) + + testdir.makepyfile( + """ + import pytest + + @pytest.fixture + def extra_clock(mock_clock): + return mock_clock + + async def test_whatever(mock_clock, extra_clock): + pass + """ + ) + + result = testdir.runpytest() + + result.assert_outcomes(failed=1) + result.stdout.fnmatch_lines( + ["*ValueError: too many clocks spoil the broth!*"] + ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/pytest_trio/_tests/test_trio_mode.py new/pytest-trio-0.7.0/pytest_trio/_tests/test_trio_mode.py --- old/pytest-trio-0.6.0/pytest_trio/_tests/test_trio_mode.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/pytest_trio/_tests/test_trio_mode.py 2020-10-15 15:34:44.000000000 +0200 @@ -36,3 +36,148 @@ result = testdir.runpytest() result.assert_outcomes(passed=2, failed=2) + + +# This is faking qtrio due to real qtrio's dependence on either +# PyQt5 or PySide2. They are both large and require special +# handling in CI. The testing here is able to focus on the +# pytest-trio features with just this minimal substitute. +qtrio_text = """ +import trio + +fake_used = False + +def run(*args, **kwargs): + global fake_used + fake_used = True + + return trio.run(*args, **kwargs) +""" + + +def test_trio_mode_and_qtrio_run_configuration(testdir): + testdir.makefile( + ".ini", pytest="[pytest]\ntrio_mode = true\ntrio_run = qtrio\n" + ) + + testdir.makepyfile(qtrio=qtrio_text) + + test_text = """ + import qtrio + import trio + + async def test_fake_qtrio_used(): + await trio.sleep(0) + assert qtrio.fake_used + """ + testdir.makepyfile(test_text) + + result = testdir.runpytest() + result.assert_outcomes(passed=1) + + +def test_trio_mode_and_qtrio_marker(testdir): + testdir.makefile(".ini", pytest="[pytest]\ntrio_mode = true\n") + + testdir.makepyfile(qtrio=qtrio_text) + + test_text = """ + import pytest + import qtrio + import trio + + @pytest.mark.trio(run=qtrio.run) + async def test_fake_qtrio_used(): + await trio.sleep(0) + assert qtrio.fake_used + """ + testdir.makepyfile(test_text) + + result = testdir.runpytest() + result.assert_outcomes(passed=1) + + +def test_qtrio_just_run_configuration(testdir): + testdir.makefile(".ini", pytest="[pytest]\ntrio_run = qtrio\n") + + testdir.makepyfile(qtrio=qtrio_text) + + test_text = """ + import pytest + import qtrio + import trio + + @pytest.mark.trio + async def test_fake_qtrio_used(): + await trio.sleep(0) + assert qtrio.fake_used + """ + testdir.makepyfile(test_text) + + result = testdir.runpytest() + result.assert_outcomes(passed=1) + + +def test_invalid_trio_run_fails(testdir): + run_name = "invalid_trio_run" + + testdir.makefile( + ".ini", pytest=f"[pytest]\ntrio_mode = true\ntrio_run = {run_name}\n" + ) + + test_text = """ + async def test(): + pass + """ + testdir.makepyfile(test_text) + + result = testdir.runpytest() + result.assert_outcomes() + result.stdout.fnmatch_lines( + [ + f"*ValueError: {run_name!r} not valid for 'trio_run' config. Must be one of: *" + ] + ) + + +def test_closest_explicit_run_wins(testdir): + testdir.makefile( + ".ini", pytest=f"[pytest]\ntrio_mode = true\ntrio_run = trio\n" + ) + testdir.makepyfile(qtrio=qtrio_text) + + test_text = """ + import pytest + import pytest_trio + import qtrio + + @pytest.mark.trio(run='should be ignored') + @pytest.mark.trio(run=qtrio.run) + async def test(): + assert qtrio.fake_used + """ + testdir.makepyfile(test_text) + + result = testdir.runpytest() + result.assert_outcomes(passed=1) + + +def test_ini_run_wins_with_blank_marker(testdir): + testdir.makefile( + ".ini", pytest=f"[pytest]\ntrio_mode = true\ntrio_run = qtrio\n" + ) + testdir.makepyfile(qtrio=qtrio_text) + + test_text = """ + import pytest + import pytest_trio + import qtrio + + @pytest.mark.trio + async def test(): + assert qtrio.fake_used + """ + testdir.makepyfile(test_text) + + result = testdir.runpytest() + result.assert_outcomes(passed=1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/pytest_trio/_version.py new/pytest-trio-0.7.0/pytest_trio/_version.py --- old/pytest-trio-0.6.0/pytest_trio/_version.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/pytest_trio/_version.py 2020-10-15 15:34:44.000000000 +0200 @@ -1,3 +1,3 @@ # This file is imported from __init__.py and exec'd from setup.py -__version__ = "0.6.0" +__version__ = "0.7.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/pytest_trio/plugin.py new/pytest-trio-0.7.0/pytest_trio/plugin.py --- old/pytest-trio-0.6.0/pytest_trio/plugin.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/pytest_trio/plugin.py 2020-10-15 15:34:44.000000000 +0200 @@ -1,4 +1,5 @@ """pytest-trio implementation.""" +from functools import wraps, partial import sys from traceback import format_exception from collections.abc import Coroutine, Generator @@ -7,7 +8,8 @@ import outcome import pytest import trio -from trio.testing import MockClock, trio_test +from trio.abc import Clock, Instrument +from trio.testing import MockClock from async_generator import ( async_generator, yield_, asynccontextmanager, isasyncgen, isasyncgenfunction @@ -17,12 +19,6 @@ # Basic setup ################################################################ -if sys.version_info >= (3, 6): - ORDERED_DICTS = True -else: - # Ordered dict (and **kwargs) not available with Python<3.6 - ORDERED_DICTS = False - try: from hypothesis import register_random except ImportError: # pragma: no cover @@ -45,6 +41,11 @@ type="bool", default=False, ) + parser.addini( + "trio_run", + "what runner should pytest-trio use? [trio, qtrio]", + default="trio", + ) def pytest_configure(config): @@ -313,8 +314,53 @@ raise RuntimeError("too many yields in fixture") +def _trio_test(run): + """Use: + @trio_test + async def test_whatever(): + await ... + + Also: if a pytest fixture is passed in that subclasses the ``Clock`` abc, then + that clock is passed to ``trio.run()``. + """ + + def decorator(fn): + @wraps(fn) + def wrapper(**kwargs): + __tracebackhide__ = True + clocks = [c for c in kwargs.values() if isinstance(c, Clock)] + if not clocks: + clock = None + elif len(clocks) == 1: + clock = clocks[0] + else: + raise ValueError("too many clocks spoil the broth!") + instruments = [ + i for i in kwargs.values() if isinstance(i, Instrument) + ] + return run( + partial(fn, **kwargs), clock=clock, instruments=instruments + ) + + return wrapper + + return decorator + + def _trio_test_runner_factory(item, testfunc=None): - testfunc = testfunc or item.obj + if testfunc: + run = trio.run + else: + testfunc = item.obj + + for marker in item.iter_markers("trio"): + maybe_run = marker.kwargs.get('run') + if maybe_run is not None: + run = maybe_run + break + else: + # no marker found that explicitly specifiers the runner so use config + run = choose_run(config=item.config) if getattr(testfunc, '_trio_test_runner_wrapped', False): # We have already wrapped this, perhaps because we combined Hypothesis @@ -326,7 +372,7 @@ 'test function `%r` is marked trio but is not async' % item ) - @trio_test + @_trio_test(run=run) async def _bootstrap_fixtures_and_run_test(**kwargs): __tracebackhide__ = True @@ -444,19 +490,36 @@ ################################################################ -def automark(items): +def automark(items, run=trio.run): for item in items: if hasattr(item.obj, "hypothesis"): test_func = item.obj.hypothesis.inner_test else: test_func = item.obj if iscoroutinefunction(test_func): - item.add_marker(pytest.mark.trio) + item.add_marker(pytest.mark.trio(run=run)) + + +def choose_run(config): + run_string = config.getini("trio_run") + + if run_string == "trio": + run = trio.run + elif run_string == "qtrio": + import qtrio + run = qtrio.run + else: + raise ValueError( + f"{run_string!r} not valid for 'trio_run' config." + + " Must be one of: trio, qtrio" + ) + + return run def pytest_collection_modifyitems(config, items): if config.getini("trio_mode"): - automark(items) + automark(items, run=choose_run(config=config)) ################################################################ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/setup.py new/pytest-trio-0.7.0/setup.py --- old/pytest-trio-0.6.0/setup.py 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/setup.py 2020-10-15 15:34:44.000000000 +0200 @@ -28,7 +28,7 @@ 'testing', 'trio', ], - python_requires=">=3.5", + python_requires=">=3.6", classifiers=[ "License :: OSI Approved :: MIT License", "License :: OSI Approved :: Apache Software License", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-trio-0.6.0/test-requirements.txt new/pytest-trio-0.7.0/test-requirements.txt --- old/pytest-trio-0.6.0/test-requirements.txt 2020-05-20 03:56:34.000000000 +0200 +++ new/pytest-trio-0.7.0/test-requirements.txt 2020-10-15 15:34:44.000000000 +0200 @@ -1,3 +1,3 @@ -pytest !=3.7.0, !=3.7.1 # https://github.com/python-trio/pytest-trio/pull/50#issuecomment-413124393 +pytest >= 6.0.0 # https://github.com/python-trio/pytest-trio/pull/98#issuecomment-678699693 pytest-cov hypothesis>=3.64