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


Reply via email to