a
    äzeÄ  ã                   @   sB  d dl Z d dlZd dlmZ d dlmZmZ d dlZd dlZd dl	Z	d dl
Z
d dlZdZdZdZdZedd	d
dZdZg d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢ggg d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d ¢g d!¢g d"¢gg d#¢g d$¢g d%¢g d&¢g d'¢ggg d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d¢g d¢g d¢g d(¢gg d)¢g d*¢g d+¢g d,¢g d-¢ggg d.¢g d/¢g d0¢g d1¢g d2¢gg d¢g d¢g d¢g d¢g d3¢gg d)¢g d*¢g d+¢g d,¢g d4¢gggZg d5¢g d6¢g d7¢gg d8¢g d9¢g d:¢gg d;¢g d<¢g d=¢gg d>¢g d?¢g d@¢ggZG dAdB„ dBejƒZG dCdD„ dDejƒZG dEdF„ dFejƒZG dGdH„ dHeƒZG dIdJ„ dJeƒZG dKdL„ dLejƒZG dMdN„ dNejƒZG dOdP„ dPejƒZdQdR„ ZG dSdT„ dTejƒZG dUdV„ dVejƒZ G dWdX„ dXejƒZ!e"dYkr>e #¡  dS )Zé    N)Úsupport)Úassert_python_okÚassert_python_failurez     February 0
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29
a                                     0

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2          1  2  3  4  5  6             1  2  3  4  5
 3  4  5  6  7  8  9       7  8  9 10 11 12 13       6  7  8  9 10 11 12
10 11 12 13 14 15 16      14 15 16 17 18 19 20      13 14 15 16 17 18 19
17 18 19 20 21 22 23      21 22 23 24 25 26 27      20 21 22 23 24 25 26
24 25 26 27 28 29 30      28 29                     27 28 29 30 31
31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2       1  2  3  4  5  6  7                1  2  3  4
 3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 11
10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 18
17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 25
24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2          1  2  3  4  5  6                   1  2  3
 3  4  5  6  7  8  9       7  8  9 10 11 12 13       4  5  6  7  8  9 10
10 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 17
17 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 24
24 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 30
31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5                   1  2  3
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       4  5  6  7  8  9 10
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      11 12 13 14 15 16 17
16 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 24
23 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 31
30 31
zŒ    January 2004
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
a!                                    2004

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1       1  2  3  4  5  6  7
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       8  9 10 11 12 13 14
12 13 14 15 16 17 18       9 10 11 12 13 14 15      15 16 17 18 19 20 21
19 20 21 22 23 24 25      16 17 18 19 20 21 22      22 23 24 25 26 27 28
26 27 28 29 30 31         23 24 25 26 27 28 29      29 30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                      1  2          1  2  3  4  5  6
 5  6  7  8  9 10 11       3  4  5  6  7  8  9       7  8  9 10 11 12 13
12 13 14 15 16 17 18      10 11 12 13 14 15 16      14 15 16 17 18 19 20
19 20 21 22 23 24 25      17 18 19 20 21 22 23      21 22 23 24 25 26 27
26 27 28 29 30            24 25 26 27 28 29 30      28 29 30
                          31

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1             1  2  3  4  5
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       6  7  8  9 10 11 12
12 13 14 15 16 17 18       9 10 11 12 13 14 15      13 14 15 16 17 18 19
19 20 21 22 23 24 25      16 17 18 19 20 21 22      20 21 22 23 24 25 26
26 27 28 29 30 31         23 24 25 26 27 28 29      27 28 29 30
                          30 31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
             1  2  3       1  2  3  4  5  6  7             1  2  3  4  5
 4  5  6  7  8  9 10       8  9 10 11 12 13 14       6  7  8  9 10 11 12
11 12 13 14 15 16 17      15 16 17 18 19 20 21      13 14 15 16 17 18 19
18 19 20 21 22 23 24      22 23 24 25 26 27 28      20 21 22 23 24 25 26
25 26 27 28 29 30 31      29 30                     27 28 29 30 31
ÚyearÚmonthÚascii)r   r   Úencodingax;  <?xml version="1.0" encoding="{encoding}"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset={encoding}" />
<link rel="stylesheet" type="text/css" href="calendar.css" />
<title>Calendar for 2004</title>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" class="{year}">
<tr><th colspan="3" class="{year}">2004</th></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">January</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="thu">1</td><td class="fri">2</td><td class="sat">3</td><td class="sun">4</td></tr>
<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10</td><td class="sun">11</td></tr>
<tr><td class="mon">12</td><td class="tue">13</td><td class="wed">14</td><td class="thu">15</td><td class="fri">16</td><td class="sat">17</td><td class="sun">18</td></tr>
<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24</td><td class="sun">25</td></tr>
<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28</td><td class="thu">29</td><td class="fri">30</td><td class="sat">31</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">February</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sun">1</td></tr>
<tr><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu">5</td><td class="fri">6</td><td class="sat">7</td><td class="sun">8</td></tr>
<tr><td class="mon">9</td><td class="tue">10</td><td class="wed">11</td><td class="thu">12</td><td class="fri">13</td><td class="sat">14</td><td class="sun">15</td></tr>
<tr><td class="mon">16</td><td class="tue">17</td><td class="wed">18</td><td class="thu">19</td><td class="fri">20</td><td class="sat">21</td><td class="sun">22</td></tr>
<tr><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu">26</td><td class="fri">27</td><td class="sat">28</td><td class="sun">29</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">March</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td><td class="sun">7</td></tr>
<tr><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td><td class="sun">14</td></tr>
<tr><td class="mon">15</td><td class="tue">16</td><td class="wed">17</td><td class="thu">18</td><td class="fri">19</td><td class="sat">20</td><td class="sun">21</td></tr>
<tr><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td><td class="sun">28</td></tr>
<tr><td class="mon">29</td><td class="tue">30</td><td class="wed">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">April</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="thu">1</td><td class="fri">2</td><td class="sat">3</td><td class="sun">4</td></tr>
<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10</td><td class="sun">11</td></tr>
<tr><td class="mon">12</td><td class="tue">13</td><td class="wed">14</td><td class="thu">15</td><td class="fri">16</td><td class="sat">17</td><td class="sun">18</td></tr>
<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24</td><td class="sun">25</td></tr>
<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28</td><td class="thu">29</td><td class="fri">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">May</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sat">1</td><td class="sun">2</td></tr>
<tr><td class="mon">3</td><td class="tue">4</td><td class="wed">5</td><td class="thu">6</td><td class="fri">7</td><td class="sat">8</td><td class="sun">9</td></tr>
<tr><td class="mon">10</td><td class="tue">11</td><td class="wed">12</td><td class="thu">13</td><td class="fri">14</td><td class="sat">15</td><td class="sun">16</td></tr>
<tr><td class="mon">17</td><td class="tue">18</td><td class="wed">19</td><td class="thu">20</td><td class="fri">21</td><td class="sat">22</td><td class="sun">23</td></tr>
<tr><td class="mon">24</td><td class="tue">25</td><td class="wed">26</td><td class="thu">27</td><td class="fri">28</td><td class="sat">29</td><td class="sun">30</td></tr>
<tr><td class="mon">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">June</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td><td class="sun">6</td></tr>
<tr><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td><td class="sun">13</td></tr>
<tr><td class="mon">14</td><td class="tue">15</td><td class="wed">16</td><td class="thu">17</td><td class="fri">18</td><td class="sat">19</td><td class="sun">20</td></tr>
<tr><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td><td class="sun">27</td></tr>
<tr><td class="mon">28</td><td class="tue">29</td><td class="wed">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">July</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="thu">1</td><td class="fri">2</td><td class="sat">3</td><td class="sun">4</td></tr>
<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10</td><td class="sun">11</td></tr>
<tr><td class="mon">12</td><td class="tue">13</td><td class="wed">14</td><td class="thu">15</td><td class="fri">16</td><td class="sat">17</td><td class="sun">18</td></tr>
<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24</td><td class="sun">25</td></tr>
<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28</td><td class="thu">29</td><td class="fri">30</td><td class="sat">31</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">August</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sun">1</td></tr>
<tr><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu">5</td><td class="fri">6</td><td class="sat">7</td><td class="sun">8</td></tr>
<tr><td class="mon">9</td><td class="tue">10</td><td class="wed">11</td><td class="thu">12</td><td class="fri">13</td><td class="sat">14</td><td class="sun">15</td></tr>
<tr><td class="mon">16</td><td class="tue">17</td><td class="wed">18</td><td class="thu">19</td><td class="fri">20</td><td class="sat">21</td><td class="sun">22</td></tr>
<tr><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu">26</td><td class="fri">27</td><td class="sat">28</td><td class="sun">29</td></tr>
<tr><td class="mon">30</td><td class="tue">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">September</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="wed">1</td><td class="thu">2</td><td class="fri">3</td><td class="sat">4</td><td class="sun">5</td></tr>
<tr><td class="mon">6</td><td class="tue">7</td><td class="wed">8</td><td class="thu">9</td><td class="fri">10</td><td class="sat">11</td><td class="sun">12</td></tr>
<tr><td class="mon">13</td><td class="tue">14</td><td class="wed">15</td><td class="thu">16</td><td class="fri">17</td><td class="sat">18</td><td class="sun">19</td></tr>
<tr><td class="mon">20</td><td class="tue">21</td><td class="wed">22</td><td class="thu">23</td><td class="fri">24</td><td class="sat">25</td><td class="sun">26</td></tr>
<tr><td class="mon">27</td><td class="tue">28</td><td class="wed">29</td><td class="thu">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">October</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="fri">1</td><td class="sat">2</td><td class="sun">3</td></tr>
<tr><td class="mon">4</td><td class="tue">5</td><td class="wed">6</td><td class="thu">7</td><td class="fri">8</td><td class="sat">9</td><td class="sun">10</td></tr>
<tr><td class="mon">11</td><td class="tue">12</td><td class="wed">13</td><td class="thu">14</td><td class="fri">15</td><td class="sat">16</td><td class="sun">17</td></tr>
<tr><td class="mon">18</td><td class="tue">19</td><td class="wed">20</td><td class="thu">21</td><td class="fri">22</td><td class="sat">23</td><td class="sun">24</td></tr>
<tr><td class="mon">25</td><td class="tue">26</td><td class="wed">27</td><td class="thu">28</td><td class="fri">29</td><td class="sat">30</td><td class="sun">31</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">November</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td><td class="sun">7</td></tr>
<tr><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td><td class="sun">14</td></tr>
<tr><td class="mon">15</td><td class="tue">16</td><td class="wed">17</td><td class="thu">18</td><td class="fri">19</td><td class="sat">20</td><td class="sun">21</td></tr>
<tr><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td><td class="sun">28</td></tr>
<tr><td class="mon">29</td><td class="tue">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
<tr><th colspan="7" class="{month}">December</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="wed">1</td><td class="thu">2</td><td class="fri">3</td><td class="sat">4</td><td class="sun">5</td></tr>
<tr><td class="mon">6</td><td class="tue">7</td><td class="wed">8</td><td class="thu">9</td><td class="fri">10</td><td class="sat">11</td><td class="sun">12</td></tr>
<tr><td class="mon">13</td><td class="tue">14</td><td class="wed">15</td><td class="thu">16</td><td class="fri">17</td><td class="sat">18</td><td class="sun">19</td></tr>
<tr><td class="mon">20</td><td class="tue">21</td><td class="wed">22</td><td class="thu">23</td><td class="fri">24</td><td class="sat">25</td><td class="sun">26</td></tr>
<tr><td class="mon">27</td><td class="tue">28</td><td class="wed">29</td><td class="thu">30</td><td class="fri">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
</td></tr></table></body>
</html>
)r   r   r   é   é   é   é   )é   é   é   é   é	   é
   é   )é   é   é   é   é   é   é   )é   é   é   é   é   é   é   )é   é   é   é   é   é   r   )r   r   r   r   r   r   r	   )r
   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r    r!   r"   r#   r$   r%   )r	   r
   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r    r!   r"   r#   r$   )r%   r&   r'   r   r   r   r   )r"   r#   r$   r%   r&   r   r   )r   r   r   r   r   r	   r
   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r    r!   r"   r#   r$   r%   r&   )r'   r   r   r   r   r   r   )r   r	   r
   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r    r!   r"   r#   )r$   r%   r&   r   r   r   r   )r&   r'   r   r   r   r   r   )r   r   r	   r
   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r    r!   r"   )r#   r$   r%   r&   r   r   r   )r   r   r   r   r	   r
   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r    )r!   r"   r#   r$   r%   r&   r'   )r%   r&   r   r   r   r   r   )r#   r$   r%   r&   r'   r   r   )z>12/29/03 12/30/03 12/31/03 01/01/04 01/02/04 01/03/04 01/04/04z>01/05/04 01/06/04 01/07/04 01/08/04 01/09/04 01/10/04 01/11/04z>01/12/04 01/13/04 01/14/04 01/15/04 01/16/04 01/17/04 01/18/04z>01/19/04 01/20/04 01/21/04 01/22/04 01/23/04 01/24/04 01/25/04ú>01/26/04 01/27/04 01/28/04 01/29/04 01/30/04 01/31/04 02/01/04)r(   z>02/02/04 02/03/04 02/04/04 02/05/04 02/06/04 02/07/04 02/08/04z>02/09/04 02/10/04 02/11/04 02/12/04 02/13/04 02/14/04 02/15/04z>02/16/04 02/17/04 02/18/04 02/19/04 02/20/04 02/21/04 02/22/04z>02/23/04 02/24/04 02/25/04 02/26/04 02/27/04 02/28/04 02/29/04)z>03/01/04 03/02/04 03/03/04 03/04/04 03/05/04 03/06/04 03/07/04z>03/08/04 03/09/04 03/10/04 03/11/04 03/12/04 03/13/04 03/14/04z>03/15/04 03/16/04 03/17/04 03/18/04 03/19/04 03/20/04 03/21/04z>03/22/04 03/23/04 03/24/04 03/25/04 03/26/04 03/27/04 03/28/04ú>03/29/04 03/30/04 03/31/04 04/01/04 04/02/04 04/03/04 04/04/04)r)   z>04/05/04 04/06/04 04/07/04 04/08/04 04/09/04 04/10/04 04/11/04z>04/12/04 04/13/04 04/14/04 04/15/04 04/16/04 04/17/04 04/18/04z>04/19/04 04/20/04 04/21/04 04/22/04 04/23/04 04/24/04 04/25/04ú>04/26/04 04/27/04 04/28/04 04/29/04 04/30/04 05/01/04 05/02/04)r*   z>05/03/04 05/04/04 05/05/04 05/06/04 05/07/04 05/08/04 05/09/04z>05/10/04 05/11/04 05/12/04 05/13/04 05/14/04 05/15/04 05/16/04z>05/17/04 05/18/04 05/19/04 05/20/04 05/21/04 05/22/04 05/23/04z>05/24/04 05/25/04 05/26/04 05/27/04 05/28/04 05/29/04 05/30/04ú>05/31/04 06/01/04 06/02/04 06/03/04 06/04/04 06/05/04 06/06/04)r+   z>06/07/04 06/08/04 06/09/04 06/10/04 06/11/04 06/12/04 06/13/04z>06/14/04 06/15/04 06/16/04 06/17/04 06/18/04 06/19/04 06/20/04z>06/21/04 06/22/04 06/23/04 06/24/04 06/25/04 06/26/04 06/27/04ú>06/28/04 06/29/04 06/30/04 07/01/04 07/02/04 07/03/04 07/04/04)r,   z>07/05/04 07/06/04 07/07/04 07/08/04 07/09/04 07/10/04 07/11/04z>07/12/04 07/13/04 07/14/04 07/15/04 07/16/04 07/17/04 07/18/04z>07/19/04 07/20/04 07/21/04 07/22/04 07/23/04 07/24/04 07/25/04ú>07/26/04 07/27/04 07/28/04 07/29/04 07/30/04 07/31/04 08/01/04)r-   z>08/02/04 08/03/04 08/04/04 08/05/04 08/06/04 08/07/04 08/08/04z>08/09/04 08/10/04 08/11/04 08/12/04 08/13/04 08/14/04 08/15/04z>08/16/04 08/17/04 08/18/04 08/19/04 08/20/04 08/21/04 08/22/04z>08/23/04 08/24/04 08/25/04 08/26/04 08/27/04 08/28/04 08/29/04ú>08/30/04 08/31/04 09/01/04 09/02/04 09/03/04 09/04/04 09/05/04)r.   z>09/06/04 09/07/04 09/08/04 09/09/04 09/10/04 09/11/04 09/12/04z>09/13/04 09/14/04 09/15/04 09/16/04 09/17/04 09/18/04 09/19/04z>09/20/04 09/21/04 09/22/04 09/23/04 09/24/04 09/25/04 09/26/04ú>09/27/04 09/28/04 09/29/04 09/30/04 10/01/04 10/02/04 10/03/04)r/   z>10/04/04 10/05/04 10/06/04 10/07/04 10/08/04 10/09/04 10/10/04z>10/11/04 10/12/04 10/13/04 10/14/04 10/15/04 10/16/04 10/17/04z>10/18/04 10/19/04 10/20/04 10/21/04 10/22/04 10/23/04 10/24/04z>10/25/04 10/26/04 10/27/04 10/28/04 10/29/04 10/30/04 10/31/04)z>11/01/04 11/02/04 11/03/04 11/04/04 11/05/04 11/06/04 11/07/04z>11/08/04 11/09/04 11/10/04 11/11/04 11/12/04 11/13/04 11/14/04z>11/15/04 11/16/04 11/17/04 11/18/04 11/19/04 11/20/04 11/21/04z>11/22/04 11/23/04 11/24/04 11/25/04 11/26/04 11/27/04 11/28/04ú>11/29/04 11/30/04 12/01/04 12/02/04 12/03/04 12/04/04 12/05/04)r0   z>12/06/04 12/07/04 12/08/04 12/09/04 12/10/04 12/11/04 12/12/04z>12/13/04 12/14/04 12/15/04 12/16/04 12/17/04 12/18/04 12/19/04z>12/20/04 12/21/04 12/22/04 12/23/04 12/24/04 12/25/04 12/26/04z>12/27/04 12/28/04 12/29/04 12/30/04 12/31/04 01/01/05 01/02/05c                   @   sœ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%S )&ÚOutputTestCasec                 C   s:   dd„ }g }|j ddD ]}|rt||ƒs| |¡ q|S )Nc                 S   s   |   ¡  o|  ¡  S ©N)ÚisspaceÚisdigit)Úc© r6   ú(/usr/lib/python3.9/test/test_calendar.pyÚneitherspacenordigits  s    z?OutputTestCase.normalize_calendar.<locals>.neitherspacenordigitF)Úkeepends)Ú
splitlinesÚfilterÚappend)ÚselfÚsr8   ÚlinesÚliner6   r6   r7   Únormalize_calendarq  s    z!OutputTestCase.normalize_calendarc                 C   sL   t  ¡ }t ¡ }|pd|d< |jd|d}|  |tjf i |¤Ž |¡¡ d S )Núutf-8r   éÔ  )r   )	ÚcalendarÚHTMLCalendarÚdefault_formatÚcopyZformatyearpageÚassertEqualÚresult_2004_htmlÚformatÚencode)r=   ZreqÚresÚcalZformat_Úoutputr6   r6   r7   Úcheck_htmlcalendar_encoding}  s    þz*OutputTestCase.check_htmlcalendar_encodingc                 C   s@   |   |  t d¡¡|  t¡¡ |   |  t d¡¡|  t¡¡ d S ©NrC   r   )rH   rA   rD   Úresult_2004_textÚresult_0_text©r=   r6   r6   r7   Útest_output‡  s    þþzOutputTestCase.test_outputc                 C   s0   |   t ¡  d¡t¡ |   t ¡  d¡t¡ d S rP   )rH   rD   ÚTextCalendarÚ
formatyearrQ   rR   rS   r6   r6   r7   Útest_output_textcalendar‘  s    þþz'OutputTestCase.test_output_textcalendarc                 C   s   |   dd¡ d S )Nr   ©rO   rS   r6   r6   r7   Ú'test_output_htmlcalendar_encoding_ascii›  s    z6OutputTestCase.test_output_htmlcalendar_encoding_asciic                 C   s   |   dd¡ d S )NrB   rX   rS   r6   r6   r7   Ú&test_output_htmlcalendar_encoding_utf8ž  s    z5OutputTestCase.test_output_htmlcalendar_encoding_utf8c                 C   s   |   d t ¡ ¡ d S r2   )rO   ÚsysÚgetdefaultencodingrS   r6   r6   r7   Ú)test_output_htmlcalendar_encoding_default¡  s    z8OutputTestCase.test_output_htmlcalendar_encoding_defaultc                 C   s&   dd„ }|   |t ¡  d¡ƒt¡ d S )Nc                 S   s   dd„ | D ƒS )Nc                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s    g | ]}d   dd„ |D ƒ¡‘qS )ú c                 s   s.   | ]&}d   |j|jt|jƒdd… ¡V  qdS )z{:02d}/{:02d}/{}éþÿÿÿN)rJ   r   ÚdayÚstrr   ©Ú.0Údr6   r6   r7   Ú	<genexpr>¦  s   ÿÿziOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>.<listcomp>.<listcomp>.<genexpr>)Újoin)rc   Úzr6   r6   r7   Ú
<listcomp>¦  s   þ
ÿz_OutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>.<listcomp>.<listcomp>r6   )rc   Úyr6   r6   r7   rh   ¦  s   þþzTOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>.<listcomp>r6   )rc   Úxr6   r6   r7   rh   ¦  s   þþzIOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>r6   )rM   r6   r6   r7   Úshrink¥  s    þz5OutputTestCase.test_yeardatescalendar.<locals>.shrinkrC   )rH   rD   ÚCalendarZyeardatescalendarÚresult_2004_dates)r=   rk   r6   r6   r7   Útest_yeardatescalendar¤  s
    þz%OutputTestCase.test_yeardatescalendarc                 C   s   |   t ¡  d¡t¡ d S ©NrC   )rH   rD   rl   ZyeardayscalendarÚresult_2004_daysrS   r6   r6   r7   Útest_yeardayscalendar®  s    þz$OutputTestCase.test_yeardayscalendarc                 C   s   |   t ¡  d¡d¡ d S )Nr
   zMo Tu We Th Fr Sa Su©rH   rD   rU   ÚformatweekheaderrS   r6   r6   r7   Útest_formatweekheader_short´  s    þz*OutputTestCase.test_formatweekheader_shortc                 C   s   |   t ¡  d¡d¡ d S )Nr   zE  Monday   Tuesday  Wednesday  Thursday   Friday   Saturday   Sunday rr   rS   r6   r6   r7   Útest_formatweekheader_longº  s    þz)OutputTestCase.test_formatweekheader_longc                 C   s4   |   t ¡  dd¡t¡ |   t ¡  dd¡t¡ d S )NrC   r	   r   r
   )rH   rD   rU   ÚformatmonthÚresult_2004_01_textÚresult_0_02_textrS   r6   r6   r7   Útest_formatmonthÁ  s    þþzOutputTestCase.test_formatmonthc                 C   s    |   t ¡ jddddd¡ d S )NrC   r	   T©Zwithyearz8<tr><th colspan="7" class="month">January 2004</th></tr>©rH   rD   rE   ÚformatmonthnamerS   r6   r6   r7   Útest_formatmonthname_with_yearË  s    þz-OutputTestCase.test_formatmonthname_with_yearc                 C   s    |   t ¡ jddddd¡ d S )NrC   r	   Frz   z3<tr><th colspan="7" class="month">January</th></tr>r{   rS   r6   r6   r7   Ú!test_formatmonthname_without_yearÑ  s    þz0OutputTestCase.test_formatmonthname_without_yearc                 C   sT   t  ¡ 8}g d¢}t ¡  |d¡ |  | ¡ d¡ W d   ƒ n1 sF0    Y  d S )N))r	   r   )r
   r	   )r   r
   )r   r   )r   r   )r   r   )r   r   r	   z 1  2  3  4  5  6  7)r   Úcaptured_stdoutrD   rU   ÚprweekrH   Úgetvalue)r=   ÚoutÚweekr6   r6   r7   Útest_prweek×  s    
zOutputTestCase.test_prweekc                 C   sL   t  ¡ 0}t ¡  dd¡ |  | ¡ t¡ W d   ƒ n1 s>0    Y  d S )NrC   r	   )r   r   rD   rU   ZprmonthrH   r   rw   ©r=   r‚   r6   r6   r7   Útest_prmonthÝ  s    
zOutputTestCase.test_prmonthc                 C   sJ   t  ¡ .}t ¡  d¡ |  | ¡ t¡ W d   ƒ n1 s<0    Y  d S ro   )r   r   rD   rU   ZpryearrH   r   rQ   r…   r6   r6   r7   Útest_pryearâ  s    
zOutputTestCase.test_pryearc                 C   sT   t  ¡ 8}tjg d¢ddd |  | ¡  ¡ d¡ W d   ƒ n1 sF0    Y  d S )N)Ú1Ú2Ú3r   r	   )ZcolwidthZspacingz	1   2   3)r   r   rD   rJ   rH   r   Ústripr…   r6   r6   r7   Útest_formatç  s    
zOutputTestCase.test_formatN)Ú__name__Ú
__module__Ú__qualname__rA   rO   rT   rW   rY   rZ   r]   rn   rq   rt   ru   ry   r}   r~   r„   r†   r‡   rŒ   r6   r6   r6   r7   r1   p  s$   




r1   c                   @   sl   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚCalendarTestCasec                 C   sL   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )NiÐ  r	   éÑ  r   iÒ  iÓ  )rH   rD   ZisleaprS   r6   r6   r7   Útest_isleapí  s    zCalendarTestCase.test_isleapc                 C   s‚   |   ttjd¡ |   ttjd¡ |   ttjd¡ t ¡ }t tj¡ |  t ¡ tj¡ t tj¡ |  t ¡ tj¡ t |¡ d S )NZflabberéÿÿÿÿéÈ   )	ÚassertRaisesÚ	TypeErrorrD   ÚsetfirstweekdayÚ
ValueErrorÚfirstweekdayÚSUNDAYrH   ÚMONDAY)r=   Zorigr6   r6   r7   Útest_setfirstweekday÷  s    z%CalendarTestCase.test_setfirstweekdayc                 C   s<   |   tjd¡ t d¡ W d   ƒ n1 s.0    Y  d S )NZ123é{   )ÚassertRaisesRegexrD   ZIllegalWeekdayErrorr—   rS   r6   r6   r7   Útest_illegal_weekday_reported  s    z.CalendarTestCase.test_illegal_weekday_reportedc                 C   sD   |   ttjjd¡ |   ttjjd¡ |  tdd„ tjD ƒƒd¡ d S )Niöÿÿÿr   c                 S   s   g | ]}|‘qS r6   r6   rb   r6   r6   r7   rh   	  ó    z<CalendarTestCase.test_enumerate_weekdays.<locals>.<listcomp>r   )r•   Ú
IndexErrorrD   Úday_abbrÚ__getitem__Úday_namerH   ÚlenrS   r6   r6   r7   Útest_enumerate_weekdays  s    z(CalendarTestCase.test_enumerate_weekdaysc                 C   sr   dD ]h}t t|ƒ}|  t|ƒd¡ |  t|d d … ƒd¡ |  tt|ƒƒd¡ |  |d d d… tt|ƒƒ¡ qd S )N)r¤   r¢   r   r“   ©ÚgetattrrD   rH   r¥   ÚsetÚlistÚreversed©r=   ÚattrÚvaluer6   r6   r7   Ú	test_days  s    
zCalendarTestCase.test_daysc                 C   s‚   dD ]x}t t|ƒ}|  t|ƒd¡ |  t|d d … ƒd¡ |  |d d¡ |  tt|ƒƒd¡ |  |d d d… tt|ƒƒ¡ qd S )N)Z
month_nameZ
month_abbrr   r   Ú r“   r§   r¬   r6   r6   r7   Útest_months  s    
zCalendarTestCase.test_monthsc                 C   sð   t  ¡  ddd¡}z*t jdd}| dd¡}| ddd¡}W n tjyZ   t d¡‚Y n0 |  	|t
¡ |  	|t
¡ |  t|ƒd¡ |  t|ƒd¡ t jdd}| d¡}| dd¡}|  	|t
¡ |  	|t
¡ t  ¡  ddd¡}|  ||¡ d S )NéÚ  r   r°   )Úlocaler	   ú$cannot set the system default locale)rD   rU   r|   ZLocaleTextCalendarZformatweekdayr³   ÚErrorÚunittestZSkipTestZassertIsInstancera   rH   r¥   ZassertGreaterEqualZLocaleHTMLCalendar)r=   Zold_octoberrM   Zlocal_weekdayZlocal_monthZnew_octoberr6   r6   r7   Útest_locale_calendars   s$    
z&CalendarTestCase.test_locale_calendarsc                 C   s   t t ¡  tjd¡ƒ d S )Nr   )rª   rD   rl   Zitermonthdays3ÚdatetimeZMAXYEARrS   r6   r6   r7   Útest_itermonthdays37  s    z$CalendarTestCase.test_itermonthdays3c                 C   s@   t jdd}t| dd¡ƒ}|  |d d¡ |  |d d¡ d S )	Nr   ©r™   r‘   r
   r   )r‘   r
   r	   r   r“   )r‘   r
   r$   r
   )rD   rl   rª   Zitermonthdays4rH   )r=   rM   Údaysr6   r6   r7   Útest_itermonthdays4;  s    z$CalendarTestCase.test_itermonthdays4c                 C   s|   t dƒD ]<}t |¡}dD ](\}}t| ||¡ƒ}|  t|ƒd¡ qqtjdd}t| dd¡ƒ}|  |tt dd	ƒƒ¡ d S )
Nr   ©)r	   r	   )i'  r   )é#   é*   r   rº   r‘   r
   r	   r%   )ÚrangerD   rl   rª   ZitermonthdaysÚassertInr¥   rH   ©r=   r™   rM   ri   Úmr»   r6   r6   r7   Útest_itermonthdaysA  s    
z#CalendarTestCase.test_itermonthdaysc                 C   sj   t dƒD ]\}t |¡}dD ]H\}}t| ||¡ƒ}|  |d d |¡ |  |d d |d d ¡ qqd S )Nr   r½   r   r	   r“   )rÀ   rD   rl   rª   Zitermonthdays2rH   rÂ   r6   r6   r7   Útest_itermonthdays2M  s    
z$CalendarTestCase.test_itermonthdays2c                 C   sX   t tdƒƒ}tdƒD ]>}t |¡}t | ¡ ƒ}||d … |d |…  }|  ||¡ qd S )Nr   )rª   rÀ   rD   rl   ZiterweekdaysrH   )r=   Zweek0r™   rM   rƒ   Zexpectedr6   r6   r7   Útest_iterweekdaysV  s    
z"CalendarTestCase.test_iterweekdaysN)r   rŽ   r   r’   rœ   rŸ   r¦   r¯   r±   r·   r¹   r¼   rÄ   rÅ   rÆ   r6   r6   r6   r7   r   ì  s   

	r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚMonthCalendarTestCasec                 C   s   t  ¡ | _t  | j¡ d S r2   )rD   r™   Úoldfirstweekdayr—   rS   r6   r6   r7   ÚsetUp`  s    
zMonthCalendarTestCase.setUpc                 C   s   t  | j¡ d S r2   )rD   r—   rÈ   rS   r6   r6   r7   ÚtearDownd  s    zMonthCalendarTestCase.tearDownc                 C   sX   t  ||¡}|  t|ƒt|ƒ¡ tt|ƒƒD ]&}|  || tdd„ || D ƒƒ¡ q,d S )Nc                 s   s   | ]}|d kV  qdS )r   Nr6   )rc   r`   r6   r6   r7   re   k  r    z4MonthCalendarTestCase.check_weeks.<locals>.<genexpr>)rD   ZmonthcalendarrH   r¥   rÀ   Úsum)r=   r   r   ÚweeksrM   Úir6   r6   r7   Úcheck_weeksg  s    z!MonthCalendarTestCase.check_weeksN)r   rŽ   r   rÉ   rÊ   rÎ   r6   r6   r6   r7   rÇ   _  s   rÇ   c                   @   s*   e Zd ZejZdd„ Zdd„ Zdd„ ZdS )ÚMondayTestCasec                 C   sX   |   ddd¡ |   ddd¡ |   ddd¡ |   ddd	¡ |   d
dd¡ |   ddd¡ d S )NéÏ  r
   ©r   r   r   r   iÕ  ©r   r   r   r   r	   éÃ  ©r	   r   r   r   r   éÄ  ©r   r   r   r   r	   i´  ©r   r   r   r   r
   rC   ©r	   r   r   r   r   ©rÎ   rS   r6   r6   r7   Útest_februaryq  s    zMondayTestCase.test_februaryc                 C   sJ   |   ddd¡ |   ddd¡ |   ddd¡ |   ddd	¡ |   d
dd¡ d S )Ni  r   ©r   r   r   r   r
   i·  ©r   r   r   r   r   i™  ©r	   r   r   r   r   r	   éË  ©r
   r   r   r   r   iÊ  ©r   r   r   r   r   rÙ   rS   r6   r6   r7   Ú
test_april„  s
    zMondayTestCase.test_aprilc                 C   sX   |   ddd¡ |   ddd¡ |   ddd¡ |   ddd	¡ |   d
dd¡ |   ddd¡ d S )Ni¼  r   ©r   r   r   r   r   rÓ   ©r   r   r   r   r   i°  ©r	   r   r   r   r   r
   rÕ   ©r   r   r   r   r   éá  ©r   r   r   r   r   i  ©r
   r   r   r   r   r	   rÙ   rS   r6   r6   r7   Útest_december”  s    zMondayTestCase.test_decemberN)	r   rŽ   r   rD   r›   r™   rÚ   rá   ré   r6   r6   r6   r7   rÏ   n  s   rÏ   c                   @   s*   e Zd ZejZdd„ Zdd„ Zdd„ ZdS )ÚSundayTestCasec                 C   sX   |   ddd¡ |   ddd¡ |   ddd¡ |   ddd	¡ |   d
dd¡ |   ddd¡ d S )NiÙ  r
   rÑ   rÐ   rÒ   éÍ  rÔ   rC   rÖ   é¨  r×   i¬  rØ   rÙ   rS   r6   r6   r7   rÚ   «  s    zSundayTestCase.test_februaryc                 C   sJ   |   ddd¡ |   ddd¡ |   ddd¡ |   ddd	¡ |   d
dd¡ d S )Néƒ  r   rÛ   i~  rÜ   iž  rÝ   rì   rß   iu  rà   rÙ   rS   r6   r6   r7   rá   ¾  s
    zSundayTestCase.test_aprilc                 C   sX   |   ddd¡ |   ddd¡ |   ddd¡ |   ddd	¡ |   d
dd¡ |   ddd¡ d S )Ni   r   râ   i•  rã   rí   rä   iœ  rå   i‡  rç   rÞ   rè   rÙ   rS   r6   r6   r7   ré   Î  s    zSundayTestCase.test_decemberN)	r   rŽ   r   rD   rš   r™   rÚ   rá   ré   r6   r6   r6   r7   rê   ¨  s   rê   c                   @   s   e Zd Zg d¢Zdd„ ZdS )ÚTimegmTestCase)
r   r   éd   iè  i'  i † i@B iÒ–Ii ;=KiÁï
Lc                 C   s,   | j D ] }t |¡}|  |t |¡¡ qd S r2   )Ú
TIMESTAMPSÚtimeÚgmtimerH   rD   Ztimegm)r=   ZsecsÚtupler6   r6   r7   Útest_timegmä  s    

zTimegmTestCase.test_timegmN)r   rŽ   r   rð   rô   r6   r6   r6   r7   rî   á  s   rî   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚMonthRangeTestCasec                 C   s   |   t dd¡d¡ d S )NrC   r	   )r   r'   ©rH   rD   Ú
monthrangerS   r6   r6   r7   Útest_januaryê  s    zMonthRangeTestCase.test_januaryc                 C   s   |   t dd¡d¡ d S )NrC   r
   )r   r%   rö   rS   r6   r6   r7   Útest_february_leapî  s    z%MonthRangeTestCase.test_february_leapc                 C   s   |   t dd¡d¡ d S )Nr²   r
   )r   r$   rö   rS   r6   r6   r7   Útest_february_nonleapò  s    z(MonthRangeTestCase.test_february_nonleapc                 C   s   |   t dd¡d¡ d S )NrC   r   )r
   r'   rö   rS   r6   r6   r7   ré   ö  s    z MonthRangeTestCase.test_decemberc                 C   s<   |   tj¡ t dd¡ W d   ƒ n1 s.0    Y  d S rP   ©r•   rD   ÚIllegalMonthErrorr÷   rS   r6   r6   r7   Útest_zeroth_monthú  s    z$MonthRangeTestCase.test_zeroth_monthc                 C   s<   |   tj¡ t dd¡ W d   ƒ n1 s.0    Y  d S )NrC   r   rû   rS   r6   r6   r7   Útest_thirteenth_monthÿ  s    z(MonthRangeTestCase.test_thirteenth_monthc                 C   s>   |   tjd¡ t dd¡ W d   ƒ n1 s00    Y  d S )NZ65rC   éA   )rž   rD   rü   r÷   rS   r6   r6   r7   Útest_illegal_month_reported  s    z.MonthRangeTestCase.test_illegal_month_reportedN)
r   rŽ   r   rø   rù   rú   ré   rý   rþ   r   r6   r6   r6   r7   rõ   é  s   rõ   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚLeapdaysTestCasec                 C   s   |   t dd¡d¡ d S )Nr²   r   ©rH   rD   ZleapdaysrS   r6   r6   r7   Útest_no_range	  s    zLeapdaysTestCase.test_no_rangec                 C   s   |   t dd¡d¡ d S )Nr²   iÛ  r   r  rS   r6   r6   r7   Útest_no_leapdays  s    z!LeapdaysTestCase.test_no_leapdaysc                 C   s   |   t dd¡d¡ d S )Nr²   éÜ  r   r  rS   r6   r6   r7   Útest_no_leapdays_upper_boundary  s    z0LeapdaysTestCase.test_no_leapdays_upper_boundaryc                 C   s   |   t dd¡d¡ d S )Nr  iÝ  r	   r  rS   r6   r6   r7   Útest_one_leapday_lower_boundary  s    z0LeapdaysTestCase.test_one_leapday_lower_boundaryc                 C   s   |   t dd¡d¡ d S )Nrë   iä  r   r  rS   r6   r6   r7   Útest_several_leapyears_in_range  s    z0LeapdaysTestCase.test_several_leapyears_in_rangeN)r   rŽ   r   r  r  r  r  r  r6   r6   r6   r7   r    s
   r  c                 C   s   |   dtj¡ ¡ S )NÚ
)ÚreplaceÚosÚlineseprK   )r>   r6   r6   r7   Úconv  s    r  c                   @   s”   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚCommandLineTestCasec                 G   s   t ddg|¢R Ž d S )Nú-mrD   r	   )r   )r=   Úargsr6   r6   r7   Úrun_ok!  s    zCommandLineTestCase.run_okc                 G   s4   t ddg|¢R Ž \}}}|  d|¡ |  |d¡ d S )Nr  rD   ó   usage:r
   )r   rÁ   rH   )r=   r  ÚrcÚstdoutÚstderrr6   r6   r7   ÚassertFailure$  s    z!CommandLineTestCase.assertFailurec                 C   s2   |   d¡}|  d|¡ |  d|¡ |  d|¡ d S )Nz-hr  s   calendar.pys   --help)r  rÁ   ©r=   r  r6   r6   r7   Ú	test_help)  s    
zCommandLineTestCase.test_helpc                 C   s4   |   d¡ |   d¡ |   dd¡ |   dddd¡ d S )Nz-zÚspamÚ2004ú-tÚhtmlrˆ   )r  rS   r6   r6   r7   Útest_illegal_arguments/  s    

z*CommandLineTestCase.test_illegal_argumentsc                 C   sD   |   ¡ }tj ¡ j}|  d|  ¡ |¡ |  d|¡ |  d|¡ d S )Nz %ss   Januarys   Mo Tu We Th Fr Sa Su©r  r¸   Znowr   rÁ   rK   ©r=   r  r   r6   r6   r7   Útest_output_current_year5  s
    z,CommandLineTestCase.test_output_current_yearc                 C   s   |   d¡}|  |ttƒ¡ d S )Nr  )r  rH   r  rQ   r  r6   r6   r7   Útest_output_year<  s    
z$CommandLineTestCase.test_output_yearc                 C   s    |   dd¡}|  |ttƒ¡ d S )Nr  rˆ   )r  rH   r  rw   r  r6   r6   r7   Útest_output_month@  s    z%CommandLineTestCase.test_output_monthc                 C   s8   |   d¡ |   d¡ |  ddd¡}|  |t d¡¡ d S )Nz-eú
--encodingz	utf-16-ler  )r  r  rH   rQ   rK   r  r6   r6   r7   Útest_option_encodingD  s    

z(CommandLineTestCase.test_option_encodingc              
   C   sÎ   |   d¡ |   d¡ |   dd¡ t ¡ \}}|p2d}|p:d}zFt tj¡}z$t tj||f¡ W t tj|¡ nt tj|¡ 0 W n" tjtfy¤   |  d¡ Y n0 |  	d|d|d¡}|  
d |¡|¡ d S )	Nz-Lz--localeÚenÚCzUTF-8r´   r#  r  )r  r³   ÚgetdefaultlocaleÚ	getlocaleÚLC_TIMEÚ	setlocalerµ   r˜   ZskipTestr  rÁ   rK   )r=   ÚlangÚencZ	oldlocaler  r6   r6   r7   Útest_option_localeJ  s    

$z&CommandLineTestCase.test_option_localec                 C   s>   |   d¡ |   d¡ |   dd¡ |  ddd¡}|  d|¡ d S )Nz-wz--widthr  rŠ   r  s   Mon Tue Wed Thu Fri Sat Sun©r  r  rÁ   r  r6   r6   r7   Útest_option_width\  s
    

z%CommandLineTestCase.test_option_widthc                 C   sB   |   d¡ |   d¡ |   dd¡ |  ddd¡}|  tdƒ|¡ d S )Nz-lz--linesr  r‰   r  zDecember

Mo Tu We©r  r  rÁ   r  r  r6   r6   r7   Útest_option_linesc  s
    

z%CommandLineTestCase.test_option_linesc                 C   s>   |   d¡ |   d¡ |   dd¡ |  ddd¡}|  d|¡ d S )Nz-sz	--spacingr  Ú8r  s   Su        Mor.  r  r6   r6   r7   Útest_option_spacingj  s
    

z'CommandLineTestCase.test_option_spacingc                 C   sB   |   d¡ |   d¡ |   dd¡ |  ddd¡}|  tdƒ|¡ d S )Nr  z--monthr  z--monthsrˆ   r  z
Mo Tu We Th Fr Sa Su
r0  r  r6   r6   r7   Útest_option_monthsq  s
    

z&CommandLineTestCase.test_option_monthsc                 C   sp   |   d¡ |   d¡ |   dd¡ |  ddd¡}|  |ttƒ¡ |  ddd¡}|  |d d… d¡ |  d	|¡ d S )
Nr  ú--typer  Útextr  r  r   s   <?xml s    <title>Calendar for 2004</title>)r  r  rH   r  rQ   rÁ   r  r6   r6   r7   Útest_option_typex  s    

z$CommandLineTestCase.test_option_typec                 C   s<   |   dd¡}tj ¡ j}|  d|  ¡ |¡ |  d|¡ d S )Nr5  r  z<title>Calendar for %s</title>s3   <tr><th colspan="7" class="month">January</th></tr>r  r  r6   r6   r7   Útest_html_output_current_year‚  s    ÿÿz1CommandLineTestCase.test_html_output_current_yearc                 C   s4   |   ddddd¡}|  |tjf i t¤Ž d¡¡ d S )Nr  r  r#  r   r  )r  rH   rI   rJ   rF   rK   r  r6   r6   r7   Útest_html_output_year_encodingŠ  s    ÿz2CommandLineTestCase.test_html_output_year_encodingc                 C   s>   |   ddd¡ |   ddd¡ |  ddddd¡}|  d|¡ d S )Nr  r  z-cz--cssz
custom.cssr  s;   <link rel="stylesheet" type="text/css" href="custom.css" />r.  r  r6   r6   r7   Útest_html_output_year_css  s    ÿz-CommandLineTestCase.test_html_output_year_cssN)r   rŽ   r   r  r  r  r  r   r!  r"  r$  r-  r/  r1  r3  r4  r7  r8  r9  r:  r6   r6   r6   r7   r     s"   
r  c                   @   s   e Zd Zdd„ ZdS )ÚMiscTestCasec                 C   s   h d£}t j| t|d d S )N>   ZJanuaryrJ   ZformatstringÚmainZFebruaryrš   ZEPOCHZ	prevmonthZ	nextmonthZ	WEDNESDAYZFRIDAYZdifferent_localeZTHURSDAYZmdaysZmonthlenr›   ZSATURDAYrƒ   r€   ZTUESDAYr5   )Ú	blacklist)r   Zcheck__all__rD   )r=   r=  r6   r6   r7   Útest__all__˜  s    zMiscTestCase.test__all__N)r   rŽ   r   r>  r6   r6   r6   r7   r;  —  s   r;  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSubClassingCasec                 C   s   G dd„ dt jƒ}|ƒ | _d S )Nc                   @   s6   e Zd Zdd„ ejjD ƒZg d¢ZdZdZdZ	dZ
dS )	z0TestSubClassingCase.setUp.<locals>.CustomHTMLCalc                 S   s   g | ]}|d  ‘qS )z text-nowrapr6   )rc   Ústyler6   r6   r7   rh   ¦  r    z;TestSubClassingCase.setUp.<locals>.CustomHTMLCal.<listcomp>)ZredZblueZgreenZlilacZyellowZorangeZpinkztext-center month-headztext-center monthztext-italic zlead N)r   rŽ   r   rD   rE   Z
cssclassesÚcssclasses_weekday_headZcssclass_month_headZcssclass_monthÚcssclass_yearÚcssclass_year_headr6   r6   r6   r7   ÚCustomHTMLCal¥  s   ÿrD  )rD   rE   rM   )r=   rD  r6   r6   r7   rÉ   £  s    
zTestSubClassingCase.setUpc                 C   s   |   d| j dd¡¡ d S )Nzclass="text-center month-head"ræ   r   )rÁ   rM   r|   rS   r6   r6   r7   Útest_formatmonthname±  s    ÿz(TestSubClassingCase.test_formatmonthnamec                 C   s   |   d| j dd¡¡ d S )Nzclass="text-center month"ræ   r   )rÁ   rM   rv   rS   r6   r6   r7   ry   µ  s    ÿz$TestSubClassingCase.test_formatmonthc                 C   s*   | j  dd¡}|  d| j  |d ¡¡ d S )Nræ   r   zclass="wed text-nowrap"r   )rM   Zmonthdays2calendarrÁ   Z
formatweek)r=   rÌ   r6   r6   r7   Útest_formatweek¹  s    z#TestSubClassingCase.test_formatweekc                 C   s,   | j  ¡ }| j jD ]}|  d| |¡ qd S )Nz<th class="%s">)rM   rs   rA  rÁ   )r=   ÚheaderZcolorr6   r6   r7   Útest_formatweek_head½  s    
z(TestSubClassingCase.test_formatweek_headc                 C   s    |   d| jj | j d¡¡ d S )Nz=<table border="0" cellpadding="0" cellspacing="0" class="%s">ræ   )rÁ   rM   rB  rV   rS   r6   r6   r7   Útest_format_yearÂ  s    ÿ
þz$TestSubClassingCase.test_format_yearc                 C   s&   |   dd| jjdf | j d¡¡ d S )Nz,<tr><th colspan="%d" class="%s">%s</th></tr>r   ræ   )rÁ   rM   rC  rV   rS   r6   r6   r7   Útest_format_year_headÇ  s
    
ÿ
ÿz)TestSubClassingCase.test_format_year_headN)
r   rŽ   r   rÉ   rE  ry   rF  rH  rI  rJ  r6   r6   r6   r7   r?  ¡  s   r?  Ú__main__)$rD   r¶   Útestr   Ztest.support.script_helperr   r   rñ   r³   r[   r¸   r  rx   rR   rw   rQ   ÚdictrF   rI   rp   rm   ZTestCaser1   r   rÇ   rÏ   rê   rî   rõ   r  r  r  r;  r?  r   r<  r6   r6   r6   r7   Ú<module>   sú   
'
'~üüüöüûüõüûüõüüüöÐBöõõöÑÿA|s:9w
*
