o
    GXîhÌ  ã                   @   sF  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 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   ú</opt/python-3.10.19/usr/lib/python3.10/test/test_calendar.pyÚneitherspacenordigits  ó   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di |¤Ž |¡¡ d S )Núutf-8r   éÔ  )r   r6   )	Ú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 ©NrD   r   )rI   rB   rE   Ú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 rQ   )rI   rE   ÚTextCalendarÚ
formatyearrR   rS   rT   r6   r6   r7   Útest_output_textcalendar‘  s   þþz'OutputTestCase.test_output_textcalendarc                 C   ó   |   dd¡ d S )Nr   ©rP   rT   r6   r6   r7   Ú'test_output_htmlcalendar_encoding_ascii›  ó   z6OutputTestCase.test_output_htmlcalendar_encoding_asciic                 C   rY   )NrC   rZ   rT   r6   r6   r7   Ú&test_output_htmlcalendar_encoding_utf8ž  r\   z5OutputTestCase.test_output_htmlcalendar_encoding_utf8c                 C   s   |   d t ¡ ¡ d S r2   )rP   ÚsysÚgetdefaultencodingrT   r6   r6   r7   Ú)test_output_htmlcalendar_encoding_default¡  r9   z8OutputTestCase.test_output_htmlcalendar_encoding_defaultc                 C   s&   dd„ }|   |t ¡  d¡ƒt¡ d S )Nc                 S   s   dd„ | D ƒS )Nc                 S   ó   g | ]	}d d„ |D ƒ‘qS )c                 S   ra   )c                 S   s    g | ]}d   dd„ |D ƒ¡‘qS )ú c                 s   s0    | ]}d   |j|jt|jƒdd… ¡V  qdS )z{:02d}/{:02d}/{}éþÿÿÿN)rK   r   ÚdayÚstrr   ©Ú.0Údr6   r6   r7   Ú	<genexpr>¦  s   € ÿÿziOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>.<listcomp>.<listcomp>.<genexpr>)Újoin)rg   Úzr6   r6   r7   Ú
<listcomp>¦  s
    
þÿz_OutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>.<listcomp>.<listcomp>r6   )rg   Úyr6   r6   r7   rl   ¦  ó
    þ
þzTOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>.<listcomp>r6   )rg   Úxr6   r6   r7   rl   ¦  rn   zIOutputTestCase.test_yeardatescalendar.<locals>.shrink.<locals>.<listcomp>r6   )rN   r6   r6   r7   Úshrink¥  s   þz5OutputTestCase.test_yeardatescalendar.<locals>.shrinkrD   )rI   rE   ÚCalendarZyeardatescalendarÚresult_2004_dates)r>   rp   r6   r6   r7   Útest_yeardatescalendar¤  s
   þz%OutputTestCase.test_yeardatescalendarc                 C   s   |   t ¡  d¡t¡ d S ©NrD   )rI   rE   rq   ZyeardayscalendarÚresult_2004_daysrT   r6   r6   r7   Útest_yeardayscalendar®  ó   þz$OutputTestCase.test_yeardayscalendarc                 C   ó   |   t ¡  d¡d¡ d S )Nr
   zMo Tu We Th Fr Sa Su©rI   rE   rV   ÚformatweekheaderrT   r6   r6   r7   Útest_formatweekheader_short´  rw   z*OutputTestCase.test_formatweekheader_shortc                 C   rx   )Nr   zE  Monday   Tuesday  Wednesday  Thursday   Friday   Saturday   Sunday ry   rT   r6   r6   r7   Útest_formatweekheader_longº  rw   z)OutputTestCase.test_formatweekheader_longc                 C   s4   |   t ¡  dd¡t¡ |   t ¡  dd¡t¡ d S )NrD   r	   r   r
   )rI   rE   rV   ÚformatmonthÚresult_2004_01_textÚresult_0_02_textrT   r6   r6   r7   Útest_formatmonthÁ  s   þþzOutputTestCase.test_formatmonthc                 C   ó    |   t ¡ jddddd¡ d S )NrD   r	   T©Zwithyearz8<tr><th colspan="7" class="month">January 2004</th></tr>©rI   rE   rF   ÚformatmonthnamerT   r6   r6   r7   Útest_formatmonthname_with_yearË  ó   þz-OutputTestCase.test_formatmonthname_with_yearc                 C   r   )NrD   r	   Fr‚   z3<tr><th colspan="7" class="month">January</th></tr>rƒ   rT   r6   r6   r7   Ú!test_formatmonthname_without_yearÑ  r†   z0OutputTestCase.test_formatmonthname_without_yearc                 C   sV   t  ¡ }g d¢}t ¡  |d¡ |  | ¡ d¡ W d   ƒ d S 1 s$w   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_stdoutrE   rV   ÚprweekrI   Úgetvalue)r>   ÚoutÚweekr6   r6   r7   Útest_prweek×  s
   
"ýzOutputTestCase.test_prweekc                 C   sN   t  ¡ }t ¡  dd¡ |  | ¡ t¡ W d   ƒ d S 1 s w   Y  d S )NrD   r	   )r   rˆ   rE   rV   ZprmonthrI   rŠ   r~   ©r>   r‹   r6   r6   r7   Útest_prmonthÝ  s   
"þzOutputTestCase.test_prmonthc                 C   sL   t  ¡ }t ¡  d¡ |  | ¡ t¡ W d   ƒ d S 1 sw   Y  d S rt   )r   rˆ   rE   rV   ZpryearrI   rŠ   rR   rŽ   r6   r6   r7   Útest_pryearâ  s   
"þzOutputTestCase.test_pryearc                 C   sV   t  ¡ }tjg d¢ddd |  | ¡  ¡ d¡ W d   ƒ d S 1 s$w   Y  d S )N)Ú1Ú2Ú3r   r	   )ZcolwidthZspacingz	1   2   3)r   rˆ   rE   rK   rI   rŠ   ÚstriprŽ   r6   r6   r7   Útest_formatç  s   
"þzOutputTestCase.test_formatN)Ú__name__Ú
__module__Ú__qualname__rB   rP   rU   rX   r[   r]   r`   rs   rv   r{   r|   r€   r…   r‡   r   r   r   r•   r6   r6   r6   r7   r1   p  s&    




r1   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S ) ÚCalendarTestCasec                 C   sL   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )NiÐ  r	   éÑ  r   iÒ  iÓ  )rI   rE   ZisleaprT   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Ú	TypeErrorrE   ÚsetfirstweekdayÚ
ValueErrorÚfirstweekdayÚSUNDAYrI   ÚMONDAY)r>   Zorigr6   r6   r7   Útest_setfirstweekday÷  s   z%CalendarTestCase.test_setfirstweekdayc                 C   s>   |   tjd¡ t d¡ W d   ƒ d S 1 sw   Y  d S )NZ123é{   )ÚassertRaisesRegexrE   ZIllegalWeekdayErrorr    rT   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   rf   r6   r6   r7   rl   	  s    z<CalendarTestCase.test_enumerate_weekdays.<locals>.<listcomp>r   )rž   Ú
IndexErrorrE   Úday_abbrÚ__getitem__Úday_namerI   ÚlenrT   r6   r6   r7   Útest_enumerate_weekdays  s    z(CalendarTestCase.test_enumerate_weekdaysc                 C   sr   dD ]4}t t|ƒ}|  t|ƒd¡ |  t|d d … ƒd¡ |  tt|ƒƒd¡ |  |d d d… tt|ƒƒ¡ qd S )N)r¬   rª   r   rœ   ©ÚgetattrrE   rI   r­   ÚsetÚlistÚreversed©r>   ÚattrÚvaluer6   r6   r7   Ú	test_days  s   
 ùzCalendarTestCase.test_daysc                 C   s‚   dD ]<}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y+   t d¡‚w |  	|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)rE   rV   r„   ÚLocaleTextCalendarÚformatweekdayr¼   ÚErrorÚunittestÚSkipTestZassertIsInstancere   rI   r­   ZassertGreaterEqualÚLocaleHTMLCalendar)r>   Zold_octoberrN   Úlocal_weekdayÚlocal_monthZnew_octoberr6   r6   r7   Útest_locale_calendars   s&   
þ
z&CalendarTestCase.test_locale_calendarsc                 C   sº   zOt jdd}|  | dd¡d¡ |  | dd¡d¡ |  | dd¡d	¡ |  | dd
¡d¡ |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ W d S  tjy\   t d¡‚w )NÚen_USr»   r   r	   ÚMr
   ZMor   ZMonr   z Mon r   z  Mon   r   z	  Monday r   z
  Monday  zcannot set the en_US locale)rE   r¾   rI   r¿   r¼   rÀ   rÁ   rÂ   )r>   rN   r6   r6   r7   Ú"test_locale_calendar_formatweekday7  s   
ÿz3CalendarTestCase.test_locale_calendar_formatweekdayc                 C   sj   zt jdd}| ddd¡}W n tjy   t d¡‚w |  d|¡ d|_| ddd¡}|  d|¡ d S )	Nr¸   r»   rº   r   r½   zclass="month"útext-center monthúclass="text-center month")	rE   rÃ   r„   r¼   rÀ   rÁ   rÂ   ÚassertInÚcssclass_month_head)r>   rN   rÅ   r6   r6   r7   Ú5test_locale_html_calendar_custom_css_class_month_nameH  s   
þzFCalendarTestCase.test_locale_html_calendar_custom_css_class_month_namec                 C   sf   zt jdd}| d¡}W n tjy   t d¡‚w |  d|¡ g d¢|_| d¡}|  d|¡ d S )Nr¸   r»   r   r½   zclass="sun")Zmon2Ztue2Zwed2Zthu2Zfri2Zsat2Zsun2zclass="sun2")	rE   rÃ   r¿   r¼   rÀ   rÁ   rÂ   rÌ   Úcssclasses_weekday_head)r>   rN   rÄ   r6   r6   r7   Ú2test_locale_html_calendar_custom_css_class_weekdayT  s   
þ

zCCalendarTestCase.test_locale_html_calendar_custom_css_class_weekdayc                 C   s   t t ¡  tjd¡ƒ d S )Nr   )r²   rE   rq   Zitermonthdays3ÚdatetimeZMAXYEARrT   r6   r6   r7   Útest_itermonthdays3`  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
   )rE   rq   r²   Zitermonthdays4rI   )r>   rN   Údaysr6   r6   r7   Útest_itermonthdays4d  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%   )ÚrangerE   rq   r²   ZitermonthdaysrÌ   r­   rI   ©r>   r¢   rN   rm   ÚmrÔ   r6   r6   r7   Útest_itermonthdaysj  s   
þz#CalendarTestCase.test_itermonthdaysc                 C   sj   t dƒD ].}t |¡}dD ]$\}}t| ||¡ƒ}|  |d d |¡ |  |d d |d d ¡ qqd S )Nr   rÖ   r   r	   rœ   )rÙ   rE   rq   r²   Zitermonthdays2rI   rÚ   r6   r6   r7   Útest_itermonthdays2v  s   
ýýz$CalendarTestCase.test_itermonthdays2c                 C   sX   t tdƒƒ}tdƒD ]}t |¡}t | ¡ ƒ}||d … |d |…  }|  ||¡ q
d S )Nr   )r²   rÙ   rE   rq   ZiterweekdaysrI   )r>   Zweek0r¢   rN   rŒ   Zexpectedr6   r6   r7   Útest_iterweekdays  s   
üz"CalendarTestCase.test_iterweekdaysN)r–   r—   r˜   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   )rE   r¢   Úoldfirstweekdayr    rT   r6   r6   r7   ÚsetUp‰  s   
zMonthCalendarTestCase.setUpc                 C   s   t  | j¡ d S r2   )rE   r    rà   rT   r6   r6   r7   ÚtearDown  r\   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   )rg   rd   r6   r6   r7   ri   ”  s   € z4MonthCalendarTestCase.check_weeks.<locals>.<genexpr>)rE   ZmonthcalendarrI   r­   rÙ   Úsum)r>   r   r   ÚweeksrN   Úir6   r6   r7   Úcheck_weeks  s
   $ÿz!MonthCalendarTestCase.check_weeksN)r–   r—   r˜   rá   râ   ræ   r6   r6   r6   r7   rß   ˆ  s    rß   c                   @   ó*   e Zd ZejZdd„ Zdd„ Zdd„ ZdS )ÚMondayTestCasec                 C   óX   |   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
   rD   ©r	   r   r   r   r   ©ræ   rT   r6   r6   r7   Útest_februaryš  ó   zMondayTestCase.test_februaryc                 C   óJ   |   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ó   rT   r6   r6   r7   Ú
test_april­  ó
   zMondayTestCase.test_aprilc                 C   ré   )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ó   rT   r6   r6   r7   Útest_december½  rõ   zMondayTestCase.test_decemberN)	r–   r—   r˜   rE   r¤   r¢   rô   rý   r  r6   r6   r6   r7   rè   —  ó
    rè   c                   @   rç   )ÚSundayTestCasec                 C   ré   )NiÙ  r
   rë   rê   rì   éÍ  rî   rD   rð   é¨  rñ   i¬  rò   ró   rT   r6   r6   r7   rô   Ô  rõ   zSundayTestCase.test_februaryc                 C   rö   )Néƒ  r   r÷   i~  rø   iž  rù   r
  rû   iu  rü   ró   rT   r6   r6   r7   rý   ç  rþ   zSundayTestCase.test_aprilc                 C   ré   )Ni   r   rÿ   i•  r   r  r  iœ  r  i‡  r  rú   r  ró   rT   r6   r6   r7   r  ÷  rõ   zSundayTestCase.test_decemberN)	r–   r—   r˜   rE   r£   r¢   rô   rý   r  r6   r6   r6   r7   r  Ñ  r  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ÚgmtimerI   rE   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                   @   óD   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   ó   |   t dd¡d¡ d S )NrD   r	   )r   r'   ©rI   rE   Ú
monthrangerT   r6   r6   r7   Útest_january  ó   zMonthRangeTestCase.test_januaryc                 C   r  )NrD   r
   )r   r%   r  rT   r6   r6   r7   Útest_february_leap  r  z%MonthRangeTestCase.test_february_leapc                 C   r  )Nrº   r
   )r   r$   r  rT   r6   r6   r7   Útest_february_nonleap  r  z(MonthRangeTestCase.test_february_nonleapc                 C   r  )NrD   r   )r
   r'   r  rT   r6   r6   r7   r    r  z MonthRangeTestCase.test_decemberc                 C   ó>   |   tj¡ t dd¡ W d   ƒ d S 1 sw   Y  d S rQ   ©rž   rE   ÚIllegalMonthErrorr  rT   r6   r6   r7   Útest_zeroth_month#  ó   "ÿz$MonthRangeTestCase.test_zeroth_monthc                 C   r  )NrD   r   r  rT   r6   r6   r7   Útest_thirteenth_month(  r   z(MonthRangeTestCase.test_thirteenth_monthc                 C   s@   |   tjd¡ t dd¡ W d   ƒ d S 1 sw   Y  d S )NZ65rD   éA   )r§   rE   r  r  rT   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   ©rI   rE   ZleapdaysrT   r6   r6   r7   Útest_no_range2  r  zLeapdaysTestCase.test_no_rangec                 C   r  )Nrº   iÛ  r   r%  rT   r6   r6   r7   Útest_no_leapdays6  r  z!LeapdaysTestCase.test_no_leapdaysc                 C   r  )Nrº   éÜ  r   r%  rT   r6   r6   r7   Útest_no_leapdays_upper_boundary:  r  z0LeapdaysTestCase.test_no_leapdays_upper_boundaryc                 C   r  )Nr(  iÝ  r	   r%  rT   r6   r6   r7   Útest_one_leapday_lower_boundary>  r  z0LeapdaysTestCase.test_one_leapday_lower_boundaryc                 C   r  )Nr	  iä  r   r%  rT   r6   r6   r7   Útest_several_leapyears_in_rangeB  s   z0LeapdaysTestCase.test_several_leapyears_in_rangeN)r–   r—   r˜   r&  r'  r)  r*  r+  r6   r6   r6   r7   r$  1  s    r$  c                 C   s   |   dtj¡ ¡ S )NÚ
)ÚreplaceÚosÚlineseprL   )r?   r6   r6   r7   ÚconvF  s   r0  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ú-mrE   r	   )r   )r>   Úargsr6   r6   r7   Úrun_okJ  s   zCommandLineTestCase.run_okc                 G   s4   t ddg|¢R Ž \}}}|  d|¡ |  |d¡ d S )Nr2  rE   ó   usage:r
   )r   rÌ   rI   )r>   r3  ÚrcÚstdoutÚstderrr6   r6   r7   ÚassertFailureM  s   z!CommandLineTestCase.assertFailurec                 C   s2   |   d¡}|  d|¡ |  d|¡ |  d|¡ d S )Nz-hr5  s   calendar.pys   --help)r4  rÌ   ©r>   r7  r6   r6   r7   Ú	test_helpR  s   
zCommandLineTestCase.test_helpc                 C   s4   |   d¡ |   d¡ |   dd¡ |   dddd¡ d S )Nz-zÚspamÚ2004ú-tÚhtmlr‘   )r9  rT   r6   r6   r7   Útest_illegal_argumentsX  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©r4  rÑ   Znowr   rÌ   rL   ©r>   r7  r   r6   r6   r7   Útest_output_current_year^  s
   z,CommandLineTestCase.test_output_current_yearc                 C   s   |   d¡}|  |ttƒ¡ d S )Nr=  )r4  rI   r0  rR   r:  r6   r6   r7   Útest_output_yeare  s   
z$CommandLineTestCase.test_output_yearc                 C   s    |   dd¡}|  |ttƒ¡ d S )Nr=  r‘   )r4  rI   r0  r~   r:  r6   r6   r7   Útest_output_monthi  s   z%CommandLineTestCase.test_output_monthc                 C   s8   |   d¡ |   d¡ |  ddd¡}|  |t d¡¡ d S )Nz-eú
--encodingz	utf-16-ler=  )r9  r4  rI   rR   rL   r:  r6   r6   r7   Útest_option_encodingm  s   

z(CommandLineTestCase.test_option_encodingc              
   C   sÎ   |   d¡ |   d¡ |   dd¡ t ¡ \}}|pd}|pd}z#t tj¡}zt tj||f¡ W t tj|¡ nt tj|¡ w W n tjtfyR   |  d¡ Y nw |  	d|d|d¡}|  
d |¡|¡ d S )	Nz-Lz--localeÚenÚCzUTF-8r½   rF  r=  )r9  r¼   ÚgetdefaultlocaleÚ	getlocaleÚLC_TIMEÚ	setlocalerÀ   r¡   ZskipTestr4  rÌ   rL   )r>   ÚlangÚencZ	oldlocaler7  r6   r6   r7   Útest_option_locales  s    

$ÿz&CommandLineTestCase.test_option_localec                 C   ó>   |   d¡ |   d¡ |   dd¡ |  ddd¡}|  d|¡ d S )Nz-wz--widthr<  r“   r=  s   Mon Tue Wed Thu Fri Sat Sun©r9  r4  rÌ   r:  r6   r6   r7   Útest_option_width…  ó
   

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©r9  r4  rÌ   r0  r:  r6   r6   r7   Útest_option_linesŒ  ó
   

z%CommandLineTestCase.test_option_linesc                 C   rQ  )Nz-sz	--spacingr<  Ú8r=  s   Su        MorR  r:  r6   r6   r7   Útest_option_spacing“  rT  z'CommandLineTestCase.test_option_spacingc                 C   sB   |   d¡ |   d¡ |   dd¡ |  ddd¡}|  tdƒ|¡ d S )Nr2  z--monthr<  z--monthsr‘   r=  z
Mo Tu We Th Fr Sa Su
rU  r:  r6   r6   r7   Útest_option_monthsš  rW  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>)r9  r4  rI   r0  rR   rÌ   r:  r6   r6   r7   Útest_option_type¡  s   

z$CommandLineTestCase.test_option_typec                 C   s<   |   dd¡}tj ¡ j}|  d|  ¡ |¡ |  d|¡ d S )Nr[  r?  z<title>Calendar for %s</title>s3   <tr><th colspan="7" class="month">January</th></tr>rA  rB  r6   r6   r7   Útest_html_output_current_year«  s   ÿÿz1CommandLineTestCase.test_html_output_current_yearc                 C   s4   |   ddddd¡}|  |tjdi t¤Ž d¡¡ d S )Nr>  r?  rF  r   r=  r6   )r4  rI   rJ   rK   rG   rL   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" />rR  r:  r6   r6   r7   Útest_html_output_year_css¸  s   ÿz-CommandLineTestCase.test_html_output_year_cssN)r–   r—   r˜   r4  r9  r;  r@  rC  rD  rE  rG  rP  rS  rV  rY  rZ  r]  r^  r_  r`  r6   r6   r6   r7   r1  I  s$    
r1  c                   @   s   e Zd Zdd„ ZdS )ÚMiscTestCasec                 C   s   h d£}t j| t|d d S )N>   r‰   ZmdaysZEPOCHrK   ZFebruaryZmonthlenZ	nextmonthZdifferent_localeZJanuaryZformatstringÚmainZ	prevmonthrŒ   r5   )Únot_exported)r   Zcheck__all__rE   )r>   rc  r6   r6   r7   Útest__all__Á  s   zMiscTestCase.test__all__N)r–   r—   r˜   rd  r6   r6   r6   r7   ra  À  s    ra  c                   @   r  )Ú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   )rg   Ústyler6   r6   r7   rl   Î  s    z;TestSubClassingCase.setUp.<locals>.CustomHTMLCal.<listcomp>)ZredZblueZgreenZlilacZyellowZorangeZpinkztext-center month-headrÊ   ztext-italic zlead N)r–   r—   r˜   rE   rF   Z
cssclassesrÏ   rÍ   Zcssclass_monthÚcssclass_yearÚcssclass_year_headr6   r6   r6   r7   ÚCustomHTMLCalÍ  s    ÿri  )rE   rF   rN   )r>   ri  r6   r6   r7   rá   Ë  s   
zTestSubClassingCase.setUpc                 C   ó   |   d| j dd¡¡ d S )Nzclass="text-center month-head"r  r   )rÌ   rN   r„   rT   r6   r6   r7   Útest_formatmonthnameÙ  ó   ÿz(TestSubClassingCase.test_formatmonthnamec                 C   rj  )NrË   r  r   )rÌ   rN   r}   rT   r6   r6   r7   r€   Ý  rl  z$TestSubClassingCase.test_formatmonthc                 C   s*   | j  dd¡}|  d| j  |d ¡¡ d S )Nr  r   zclass="wed text-nowrap"r   )rN   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">)rN   rz   rÏ   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Ì   rN   rg  rW   rT   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Ì   rN   rh  rW   rT   r6   r6   r7   Útest_format_year_headï  s
   
ÿ
ÿz)TestSubClassingCase.test_format_year_headN)
r–   r—   r˜   rá   rk  r€   rm  ro  rp  rq  r6   r6   r6   r7   re  É  s    re  Ú__main__)$rE   rÁ   Útestr   Ztest.support.script_helperr   r   r  r¼   r^   rÑ   r.  r   rS   r~   rR   ÚdictrG   rJ   ru   rr   ZTestCaser1   r™   rß   rè   r  r  r  r$  r0  r1  ra  re  r–   rb  r6   r6   r6   r7   Ú<module>   s    
'
'~üüüöüûüõüûüõüüüöÐBöõõöÑÿA| :9w	
*ÿ