From 1fd57deed6d4108daef33c5aae1b8f187b032136 Mon Sep 17 00:00:00 2001 From: Steve Canny Date: Fri, 4 Jan 2019 23:29:04 -0800 Subject: [PATCH] acpt: add odd-even-page-headers scenarios --- features/doc-settings.feature | 30 ++++++++++++++-- features/steps/settings.py | 34 ++++++++++++++---- .../steps/test_files/doc-odd-even-hdrs.docx | Bin 0 -> 17711 bytes 3 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 features/steps/test_files/doc-odd-even-hdrs.docx diff --git a/features/doc-settings.feature b/features/doc-settings.feature index 612dfcc19..3eccbb57e 100644 --- a/features/doc-settings.feature +++ b/features/doc-settings.feature @@ -1,7 +1,8 @@ -Feature: Access to document settings +Feature: Document.settings In order to operate on document-level settings As a developer using python-docx - I access to settings stored in the settings part + I need access to settings to the Settings object for the document + And I need properties and methods on Settings Scenario Outline: Access document settings @@ -12,3 +13,28 @@ Feature: Access to document settings | a-or-no | | a | | no | + + + @wip + Scenario Outline: Settings.odd_and_even_pages_header_footer getter + Given a Settings object odd and even page headers as settings + Then settings.odd_and_even_pages_header_footer is + + Examples: Settings.odd_and_even_pages_header_footer states + | with-or-without | value | + | with | True | + | without | False | + + + @wip + Scenario Outline: Settings.odd_and_even_pages_header_footer setter + Given a Settings object odd and even page headers as settings + When I assign to settings.odd_and_even_pages_header_footer + Then settings.odd_and_even_pages_header_footer is + + Examples: Settings.odd_and_even_pages_header_footer assignment cases + | with-or-without | value | + | with | True | + | with | False | + | without | True | + | without | False | diff --git a/features/steps/settings.py b/features/steps/settings.py index b818487b5..f770f8c19 100644 --- a/features/steps/settings.py +++ b/features/steps/settings.py @@ -1,14 +1,10 @@ # encoding: utf-8 -""" -Step implementations for document settings-related features -""" +"""Step implementations for document settings-related features""" -from __future__ import ( - absolute_import, division, print_function, unicode_literals -) +from __future__ import absolute_import, division, print_function, unicode_literals -from behave import given, then +from behave import given, then, when from docx import Document from docx.settings import Settings @@ -28,9 +24,33 @@ def given_a_document_having_no_settings_part(context): context.document = Document(test_docx('set-no-settings-part')) +@given("a Settings object {with_or_without} odd and even page headers as settings") +def given_a_Settings_object_with_or_without_odd_and_even_hdrs(context, with_or_without): + testfile_name = { + "with": "doc-odd-even-hdrs", "without": "sct-section-props" + }[with_or_without] + context.settings = Document(test_docx(testfile_name)).settings + + +# when ===================================================== + +@when("I assign {bool_val} to settings.odd_and_even_pages_header_footer") +def when_I_assign_value_to_settings_odd_and_even_pages_header_footer(context, bool_val): + context.settings.odd_and_even_pages_header_footer = eval(bool_val) + + # then ===================================================== @then('document.settings is a Settings object') def then_document_settings_is_a_Settings_object(context): document = context.document assert type(document.settings) is Settings + + +@then("settings.odd_and_even_pages_header_footer is {bool_val}") +def then_settings_odd_and_even_pages_header_footer_is(context, bool_val): + actual = context.settings.odd_and_even_pages_header_footer + expected = eval(bool_val) + assert actual == expected, ( + "settings.odd_and_even_pages_header_footer is %s" % actual + ) diff --git a/features/steps/test_files/doc-odd-even-hdrs.docx b/features/steps/test_files/doc-odd-even-hdrs.docx new file mode 100644 index 0000000000000000000000000000000000000000..576a7e9bac407e119b8f57bb31b6c00c89985416 GIT binary patch literal 17711 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 Wo(V>i`A&S|)j+B^Q#g?<}?#cLOhnHc9;+WUIp z7W@j+j>xHFE7yX&+PpFHFrI;8XeT|;4XwR%%N)xIR%`Dl*=PHB3Ybe{pPf<*i>p!W zgk|rcnVTfG4sB(?Q!h7ZX07SThb!SP z>oK#?`6i8Hc$C88%NzCZO=X%!8`Ldp*pEAJ#u%9cUkXLxYxCmAt{#J&J||R{BGPRs zBnS-zELq!L+^ntlCAOjK8}tOp%EHLMGThHR)GO=?C3(<$no$6m5$tTw(O)2@YpvDN zz}s3q@Ffx~6u?l%N7uI<-*|tZO_!bWFs_HFWwUn+a$T7G-j9rfp*B{LW#!uUf(1iP zi#`4NUY)aT1AoMHX0oy}3L6(=q+>Yx-}eA*vymMXfc%PRKnMrz&pm*viJ{V8d<6;9 zW0oLHNI;t(axRb@7RnS0Xv>ADl60kV&Om!l%YsaqiBMaXi)>ddeJ;0kg~*3IhXPXR zTn>97Me28HxUex4KXNE*b(HU}oH*FgfK!~kKN}P#yYF;h>S#}^Gl4C|l%UEsjzym! zOOvuugeg$8V*i*HjMjND7DRlU(9@_|yz|Ho2WK!jR9;qNQPD5TlqgQFn=3z~4tj4~ z55@2NK|Efd)jEjiVdDqQ|7IY!|geZL>&JzNb%!I zD8JNP$j5khamJ2C@36J@;5NQ8(;#bF#0wjxpGkd_AOb1|GMO7AWm~js-3CQLYByN7 ztC3?MMQvxCw7x;s-J4r^X$cF8f!^3jV}S|FLdGM4s&w3o;BXF+HQC-oWi>uk0!JQo_f;WCtSAT4S`&Okz^IeIr*by8eme{{162L2n(T#oaoi96CAMmJ^HUz zm7P_UM=)DZT^a9n*hUL_uo0HvT{7_Zj+*~YL-os>#H}(|xEJlJnDBngu ztdvvG;;K9|Oe+XGSvasa>A)Lrj)iK`Fl63OJ-N3L9>s`86NL-iRhrU9^)ne|-@3Ft zl?XocZ^BgQ4^o|9${V!vS8zzvR5zI4K(#TK%NyYTSzD>W`dv zSTD$&$1;-(qR*imtQHtB1(-x$KwnhrgOBxDm!0pwgv% z)w*b59+9tAbj(R~Lb zEvdig`=}&($hVrca0|KUd9pVdK@_1l$`}jxd5XQdM~}?Z*EQX_ z#3&Sa*S;hu2N|dyrv9Lqa=iXY65hjEyc%O;JW*&?=o#t|0=X>Ll2MJlndgH$dQsXN zv{yb`gPb_KkgQ*PT!pr^pNdeKZS0=^wbH@$%yPm3@T(8}h}-{FHW}F2{hw$8$fQ4B z8HyuvfXd}olCOvg=U-<0r~~TDNh=sv`&bJm-*pg(_LhYujM*{$U{!JCkQ zD~+Bv7Kc;dX&E(}A)c6&DysdG{GjD7&@@z&5}?w}89wq9z@+ze1lA3H+(-i3NDPgg z{+gW3XGA>#zMfdl!pcIiX);X2x;V9zn$CV_H%Bymv6T`7P5?zS&~h8HyVb0fukbaF znu5p6UM-9Ft374atr+R<#9Co0b+V>DC`^HLcS5r$KZTq5rphc9PZ@*$gVGWL^s-^genuEktluuQpDAaUBPCiX3D=Pcx6BE9A2&5Uc^mc%=ooC>Th5z;p4-- zg8ivOfkEg1hRDA^X5i1?<4(v{PXvoelOhn)t3Vx%j+Lye80ngFH8Cbp8-??{)GRnNa=U{?=>X9@TLH#?@#<+ zDoTDw|6U^S3*86E_WAGVe-sS-j{ZFZ{1=)OU~K*c{WB@!cl7TWzQ53Z7=J_m%=i5r z{d)%IFZ3qX-~R7^9sBo0ykBTFoWG%erse%U_U}niztGV5f1v-GBK14`_Y{_2@HE0d z;J+ud{NBay0l;5fWK;an#b3jLzr%kI4g7-l()+q8c>aY4Jb8o*2