§
    ¿j*4  ã                  ó   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlmZ ddlmZ ddlZddlmZ ddlmZ ddlmZmZmZ  e
j        d	¦  «        Zh d
£ZddddddœZ ej        d¬¦  «        d/d„¦   «         Z ej        d¬¦  «        d0d„¦   «         Zej        d1d„¦   «         Z  ej        d¬¦  «        d2d„¦   «         Z!d3d„Z"d4d „Z#d4d!„Z$d4d"„Z%d4d#„Z&d4d$„Z'd4d%„Z(d4d&„Z)d4d'„Z*d5d)„Z+d5d*„Z,d5d+„Z-d6d-„Z.d7d.„Z/dS )8zð
Unit Tests for FreeExile 30 Map Styles SQLite Database and Relational Service.
Verifies schema, pragmas, indices, foreign keys, CHECK constraints, 30 records,
contiguous biome codes, color hex integrity, and MapStyleService query methods.
é    )ÚannotationsN)ÚPath)Ú	Generator)Úinit_db©ÚMapStyleService)ÚMapStyleDefinitionÚMapStyleTileMappingÚMapStylePropDefinitionz^#[0-9a-fA-F]{6}$>   ÚHAM_MO_TA_QUAIÚHEM_NUI_COT_MACÚHU_KHONG_DI_BIENÚHOANG_DA_DA_NGOAIÚDAM_LAY_DOC_CHUONGÚTHAN_DIEN_PHE_TICHÚBLEACHED_BONE_CANYONÚSAVAGE_MANGROVE_SWAMPÚCRIMSON_BLOOD_FORESTÚOUTCAST_MINE_SHAFTSÚCORRUPTED_FIEND_RUINS)é   é   é   é   é   Úmodule)ÚscopeÚreturnr   c                 óx   — t          t          ¦  «                             ¦   «         j        j        j        dz  dz  S )z,Return canonical path to data/map_styles.db.Údatazmap_styles.db)r   Ú__file__ÚresolveÚparent© ó    ú6C:\Projects\FreeExile\tests\unit\test_map_styles_db.pyÚdb_pathr'   ,   s/   € õ •‰>Œ>×!Ò!Ñ#Ô#Ô*Ô1Ô8¸6ÑAÀOÑSÐSr%   r'   ú)Generator[sqlite3.Connection, None, None]c              #  ó<  K  — | j         } |¦   «         }|s£t          j        d| › �¦  «        dz   dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚dx}}t          j
        t          | ¦  «        ¦  «        }t          j        |_        |                     d¦  «         |V — |                     ¦   «          dS )z7Provide a read connection to seeded data/map_styles.db.z Database file does not exist at zC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}r'   ©Úpy0Úpy2Úpy4NzPRAGMA foreign_keys = ON;)ÚexistsÚ
@pytest_arÚ_format_assertmsgÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚsqlite3ÚconnectÚstrÚRowÚrow_factoryÚexecuteÚclose)r'   Ú@py_assert1Ú@py_assert3Ú@py_format5Úconns        r&   Údb_connrB   2   s  è è € ð Œ>ÐIˆ>ˆ>ÑÔÐIÐÐIÕIÔIÐIÀÐIÐIÑIÔIÐIÑIÐIÕIÔIÑIÔIÐIÐIÕIÔIˆ7ÑIÔIÐIÕIÔIˆ7ÑIÔIÐIÐIÕIÔIˆ>ÑIÔIÕIÔIÐÑIÔIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÝŒ?�3˜w™<œ<Ñ(Ô(€DÝ”{€DÔØ‡L‚LÐ,Ñ-Ô-Ð-Ø
€J€J€JØ‡J‚J�L„L€L€L€Lr%   c               #  óX   K  — t          d¦  «        } | V — |                      ¦   «          dS )z?Provide an isolated in-memory database with schema initialized.ú:memory:N)r   r=   )rA   s    r&   Útemp_test_dbrE   =   s/   è è € õ �:ÑÔ€DØ
€J€J€JØ‡J‚J�L„L€L€L€Lr%   r   c                ó"   — t          | ¬¦  «        S )z8Provide MapStyleService connected to data/map_styles.db.©r'   r   rG   s    r&   Úmap_servicerH   E   s   € õ  7Ð+Ñ+Ô+Ð+r%   ÚNonec                óž  — | j         } |¦   «         }|s¤t          j        d| › d�¦  «        dz   dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚dx}}| j	        } |¦   «         }|j
        }d}||k    }|såt          j        d|fd	||f¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }t          j        d¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}}dS )z?Verify that data/map_styles.db exists on disk and is non-empty.zFile z is missing.zD
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.is_file
}()
}r'   r*   Nr   ©ú>)z_%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.stat
}()
}.st_size
} > %(py9)s©r+   r,   r-   Úpy6Úpy9z!Database file is empty (0 bytes).z
>assert %(py11)sÚpy11)Úis_filer/   r0   r1   r2   r3   r4   r5   r6   ÚstatÚst_sizeÚ_call_reprcompare)	r'   r>   r?   r@   Ú@py_assert5Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12s	            r&   Ú'test_database_file_exists_and_non_emptyrZ   K   sú  € àŒ?Ð;ˆ?ˆ?ÑÔÐ;ÐÐ;Õ;Ô;Ð; gÐ;Ð;Ð;Ñ;Ô;Ð;Ñ;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;ˆ7Ñ;Ô;Ð;Õ;Ô;ˆ7Ñ;Ô;Ð;Ð;Õ;Ô;ˆ?Ñ;Ô;Õ;Ô;ÐÑ;Ô;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;ØŒ<ÐJˆ<ˆ<‰>Œ>ÐJˆ>Ô!ÐJ AÐJÐ! AÒ%ÐJÐJÐJÕJÔJÐJÐJÐJÐJÐ! AÐJÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJˆ7ÑJÔJÐJÕJÔJˆ7ÑJÔJÐJÐJÕJÔJˆ<ÑJÔJÕJÔJˆ>ÑJÔJÕJÔJÐ!ÑJÔJÕJÔJ AÑJÔJÐJÐJÑJÐJÕJÔJÐ'JÑJÔJÐJÑJÐJÐJÐJÑJÐJÕJÕJÔJÐJÑJÔJÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJr%   rB   úsqlite3.Connectionc                óê  — |                       ¦   «         }|                     d¦  «         d„ |                     ¦   «         D ¦   «         }h d£}|j        } ||¦  «        }|sždt	          j        |¦  «        t	          j        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        ndt	          j        |¦  «        dœz  }t          t	          j
        |¦  «        ¦  «        ‚dx}x}}|                     d¦  «         d	„ |                     ¦   «         D ¦   «         }h d
£}|j        } ||¦  «        }|sždt	          j        |¦  «        t	          j        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j        |¦  «        ndt	          j        |¦  «        dœz  }t          t	          j
        |¦  «        ¦  «        ‚dx}x}}dS )z-Verify master tables and query indices exist.z3SELECT name FROM sqlite_master WHERE type = 'table'c                ó   — h | ]
}|d          ’ŒS ©Únamer$   ©Ú.0Úrows     r&   ú	<setcomp>z:test_database_schema_tables_and_indices.<locals>.<setcomp>U   s   € Ð4Ð4Ð4˜cˆc�&ŒkÐ4Ð4Ð4r%   >   Ú
map_stylesÚmap_style_propsÚmap_style_tileszJassert %(py6)s
{%(py6)s = %(py3)s
{%(py3)s = %(py1)s.issubset
}(%(py4)s)
}Útables)Úpy1Úpy3r-   rN   Nz3SELECT name FROM sqlite_master WHERE type = 'index'c                ó   — h | ]
}|d          ’ŒS r^   r$   r`   s     r&   rc   z:test_database_schema_tables_and_indices.<locals>.<setcomp>Y   s   € Ð5Ð5Ð5˜sˆs�6Œ{Ð5Ð5Ð5r%   >   Úidx_map_styles_themeÚidx_map_style_props_styleÚidx_map_style_tiles_styleÚidx_map_styles_biome_codeÚindices)Úcursorr<   ÚfetchallÚissubsetr/   r4   r1   r2   r3   r5   r6   )rB   Úcurrg   Ú@py_assert0Ú@py_assert2rU   Ú@py_format7ro   s           r&   Ú'test_database_schema_tables_and_indicesrw   Q   s›  € à
�.Š.Ñ
Ô
€CØ‡K‚KÐEÑFÔFÐFØ4Ð4 S§\¢\¡^¤^Ð4Ñ4Ô4€FØ?Ð?Ð?ÐPÐ?ÔHÐPÐHÐHÈÑPÔPÐPÐPÐPÐPÕPÔPÐ?ÑPÔPÕPÔPÐHÑPÔPÐPÕPÔPÑPÔPÐPÐPÕPÔPÈÑPÔPÐPÕPÔPÈÑPÔPÐPÐPÕPÔPÐPÑPÔPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPà‡K‚KÐEÑFÔFÐFØ5Ð5 c§l¢l¡n¤nÐ5Ñ5Ô5€Gðð ð ð ð ô
 ðð ð ð
 ñô ð ð ð ð õ ô
 ðñ ô õ ô
 ðñ ô ð õ ô
 ñô ð ð õ ì
ˆwñô ð õ ô
 ˆwñô ð ð õ ô
 ðñ ô ð ð ñ ð õ õ ô
 ðñ ô ñ ô ð ð ð ð ð ð ð ð ð r%   c                ó„  — |                       ¦   «         }|                     d¦  «         |                     ¦   «         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}d	S )
z.Verify map_styles contains exactly 30 records.z&SELECT count(*) AS cnt FROM map_stylesÚcnté   ©ú==©z%(py1)s == %(py4)s©rh   r-   úassert %(py6)srN   N)rp   r<   Úfetchoner/   rT   r4   r5   r6   )rB   rs   rt   r?   ru   r@   rv   s          r&   Ú+test_map_styles_record_count_exactly_thirtyr�   b   sÛ   € à
�.Š.Ñ
Ô
€CØ‡K‚KÐ8Ñ9Ô9Ð9Ø�<Š<‰>Œ>˜%Ô Ð& BÐ&Ð  BÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð  BÐ&Ñ&Ô&Õ&Ô&Ð Ñ&Ô&Õ&Ô& BÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&r%   c           
     ó¼  — |                       ¦   «         }|                     d¦  «         d„ |                     ¦   «         D ¦   «         }d}d}t          ||¦  «        }t	          |¦  «        }||k    }|�s`t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nddt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndd	t          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nd	t          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        d
œz  }dd|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}x}x}x}}t          |¦  «        }
t          |
¦  «        }d}||k    }|�sMt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nddt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        nddt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |
¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}
x}x}}dS )zJVerify biome_code ranges 1 to 30 with no duplicates and no missing values.z9SELECT biome_code FROM map_styles ORDER BY biome_code ASCc                ó   — g | ]
}|d          ‘ŒS ©Ú
biome_coder$   r`   s     r&   ú
<listcomp>zBtest_biome_code_contiguous_range_one_to_thirty.<locals>.<listcomp>m   s   € Ð9Ð9Ð9 3ˆS�ÔÐ9Ð9Ð9r%   r   é   r{   )zY%(py0)s == %(py11)s
{%(py11)s = %(py2)s(%(py9)s
{%(py9)s = %(py3)s(%(py5)s, %(py7)s)
})
}ÚcodesÚlistÚrange)r+   r,   ri   Úpy5Úpy7rO   rP   zassert %(py13)sÚpy13Nrz   )zN%(py6)s
{%(py6)s = %(py0)s(%(py4)s
{%(py4)s = %(py1)s(%(py2)s)
})
} == %(py9)sÚlenÚset)r+   rh   r,   r-   rN   rO   úassert %(py11)srP   )rp   r<   rq   rŠ   r‰   r/   rT   r1   r2   r3   r4   r5   r6   r�   rŽ   )rB   rs   rˆ   Ú@py_assert4Ú@py_assert6rV   Ú@py_assert10r>   rY   Ú@py_format14r?   rU   rW   rX   s                 r&   Ú.test_biome_code_contiguous_range_one_to_thirtyr•   i   sM  € à
�.Š.Ñ
Ô
€CØ‡K‚KÐKÑLÔLÐLØ9Ð9¨#¯,ª,©.¬.Ð9Ñ9Ô9€EØ Ð& "Ð&�˜q "™œÐ&•D˜Ñ&Ô&Ð&ˆ5Ð&Ò&Ð&Ð&Ñ&Õ&Ô&Ð&Ð&Ð&Ð&ˆ5Ð&Ð&Ñ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&ˆ5Ñ&Ô&Ð&Õ&Ô&ˆ5Ñ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&•DÑ&Ô&Ð&Õ&Ô&•DÑ&Ô&Ð&Ð&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&�Ñ&Ô&Ð&Õ&Ô&�Ñ&Ô&Ð&Ð&Õ&Ô&˜qÑ&Ô&Õ&Ô& "Ñ&Ô&Õ&Ô&˜Ñ&Ô&Õ&Ô&Ð&Ñ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ý�5‰zŒzÐ �3ˆz‰?Œ?Ð ˜bÐ ˆ?˜bÒ Ð Ð Ñ Õ Ô Ð Ð Ð Ð ˆ?˜bÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �3Ñ Ô Ð Õ Ô �3Ñ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �sÑ Ô Ð Õ Ô �sÑ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �5Ñ Ô Ð Õ Ô �5Ñ Ô Ð Ð Õ Ô ˆzÑ Ô Õ Ô ˆ?Ñ Ô Õ Ô ˜bÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð r%   c                ó   — |                       ¦   «         }|                     d¦  «         |                     ¦   «         }t          |¦  «        }d}||k    }|sòt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd	|iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}x}}|D �]+}g }	|d         }|}
|r|d         }|j        }d} ||¦  «        }|}
|
s×ddt	          j	        |¦  «        iz  }|	                     |¦  «         |rgdt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }|	                     |¦  «         t	          j        |	d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
x}	x}x}x}x}}g }	|d         }|}
|r2|d         }|j        } |¦   «         }t          |¦  «        }d}||k    }|}
|
�sQddt	          j	        |¦  «        iz  }|	                     |¦  «         |rát	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }|	                     |¦  «         t	          j        |	d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
x}	x}x}x}x}x}x}}g }	|d         }|}
|r2|d         }|j        } |¦   «         }t          |¦  «        }d}||k    }|}
|
�sQddt	          j	        |¦  «        iz  }|	                     |¦  «         |rát	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }|	                     |¦  «         t	          j        |	d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
x}	x}x}x}x}x}x}}|d         }
|
t           v }|s¦t	          j        d|fd|
t           f¦  «        t	          j	        |
¦  «        d t          j        ¦   «         v st	          j        t           ¦  «        rt	          j	        t           ¦  «        nd d!œz  }d"d#|iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
}g }	|d$         }|}
|r2|d$         }|j        } |¦   «         }t          |¦  «        }d}||k    }|}
|
�sQddt	          j	        |¦  «        iz  }|	                     |¦  «         |rát	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }|	                     |¦  «         t	          j        |	d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
x}	x}x}x}x}x}x}}g }	|d%         }|}
|r2|d%         }|j        } |¦   «         }t          |¦  «        }d}||k    }|}
|
�sQddt	          j	        |¦  «        iz  }|	                     |¦  «         |rát	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }|	                     |¦  «         t	          j        |	d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
x}	x}x}x}x}x}x}}g }	|d&         }|}
|r2|d&         }|j        } |¦   «         }t          |¦  «        }d}||k    }|}
|
�sQddt	          j	        |¦  «        iz  }|	                     |¦  «         |rát	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }|	                     |¦  «         t	          j        |	d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
x}	x}x}x}x}x}x}}d'D �]ã}||         }d
}||u}	|	s¸t	          j        d(|	fd)||f¦  «        d*t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd*t	          j	        |¦  «        d+œz  }t	          j        d,|› d-|d         › �¦  «        d.z   d#|iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}	}t$          j        }	 |	|¦  «        }|s÷t	          j        d/|› d0|› d-|d         › �¦  «        d1z   d2t          j        ¦   «         v st	          j        t$          ¦  «        rt	          j	        t$          ¦  «        nd2t	          j	        |	¦  «        d*t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd*t	          j	        |¦  «        d3œz  }t          t	          j        |¦  «        ¦  «        ‚d
x}	}�Œåd4}
|d5         }|
|k    }d6}||k    }|r|s�t	          j        d7||fd8|
||f¦  «        t	          j	        |
¦  «        t	          j	        |¦  «        t	          j	        |¦  «        d9œz  } d:d;| iz  }!t          t	          j        |!¦  «        ¦  «        ‚d
x}
x}x}x}}|d<         }
d4}|
|k    }|slt	          j        d|fd=|
|f¦  «        t	          j	        |
¦  «        t	          j	        |¦  «        d>œz  }"d?d@|"iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
x}}|dA         }
d}|
|k    }|slt	          j        dB|fdC|
|f¦  «        t	          j	        |
¦  «        t	          j	        |¦  «        d>œz  }"d?d@|"iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
x}}|dD         }
d6}|
|k    }|slt	          j        dB|fdC|
|f¦  «        t	          j	        |
¦  «        t	          j	        |¦  «        d>œz  }"d?d@|"iz  }t          t	          j        |¦  «        ¦  «        ‚d
x}
x}}�Œ-d
S )EzDVerify non-empty strings and valid color formats for all 30 records.zSELECT * FROM map_stylesrz   r{   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)srŽ   Úrows©r+   rh   ri   rN   úassert %(py8)sÚpy8NÚstyle_idÚSTY_z%(py3)sri   zH%(py12)s
{%(py12)s = %(py8)s
{%(py8)s = %(py6)s.startswith
}(%(py10)s)
})rN   r›   Úpy10Úpy12r   zassert %(py15)sÚpy15Úname_virK   )zf%(py13)s
{%(py13)s = %(py5)s(%(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py7)s.strip
}()
})
} > %(py16)s)r‹   rŒ   rO   rP   r�   Úpy16z%(py18)sÚpy18zassert %(py21)sÚpy21Úname_enÚtheme_category©Úin©z%(py1)s in %(py3)sÚVALID_THEMES©rh   ri   úassert %(py5)sr‹   Útheme_category_nameÚ	asset_dirÚmonster_family)Úfloor_color_hexÚwall_color_hexÚpath_color_hexÚliquid_color_hexÚambient_light_hex©úis not©z%(py0)s is not %(py3)sÚval©r+   ri   zMissing z for ú
>assert %(py5)szInvalid HEX color 'z' in zI
>assert %(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.match
}(%(py3)s)
}ÚHEX_COLOR_REGEX)r+   r,   ri   r‹   ç        Úfog_densityç      ð?©ú<=rÀ   ©z%(py1)s <= %(py5)sú%(py5)s <= %(py7)s©rh   r‹   rŒ   úassert %(py9)srO   Úmovement_modifier)z%(py1)s > %(py4)sr~   r   rN   Úhazard_damage©ú>=©z%(py1)s >= %(py4)sÚhazard_slow_factor)rp   r<   rq   rŽ   r/   rT   r1   r2   r3   r4   r5   r6   Ú
startswithÚappendÚ_format_boolopÚstriprª   r0   r»   Úmatch)#rB   rs   r˜   ru   rU   r‘   rv   Ú@py_format9Úrr>   rt   rW   Ú@py_assert9Ú@py_assert11Ú@py_format4Ú@py_format13r”   Ú@py_format16r’   rV   r“   Ú@py_assert12Ú@py_assert15Ú@py_assert14Ú@py_format17Ú@py_format19Ú@py_format20Ú@py_format22Ú@py_format6Úcolr¸   r?   Ú@py_format8rX   r@   s#                                      r&   Ú*test_required_columns_and_non_empty_valuesrá   r   s>  € à
�.Š.Ñ
Ô
€CØ‡K‚KÐ*Ñ+Ô+Ð+Ø�<Š<‰>Œ>€DÝˆt‰9Œ9Ð˜Ðˆ9˜Š?ÐÐÐÕÔÐÐÐÐˆ9˜ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆtÑÔÐÕÔˆtÑÔÐÐÕÔˆ9ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐàð .ñ .ˆØAÐAˆq�Œ}ÐAˆ}ÐAˆ}ÐA  :¤ÐA Ô!9ÐA¸&ÐAÐ!9Ð!9¸&Ñ!AÔ!AÐAÐ!AÐAÐAÐAÐAÐAÕAÔAˆ}ÑAÔAÐAÑAÐAÐA×AÒAÐAÑAÔAÐAˆ}ÐAÐAÕAÔA ÑAÔAÕAÔAÐ!9ÑAÔAÕAÔA¸&ÑAÔAÕAÔAÐ!AÑAÔAÐAÐAÑAÐAÐA×AÒAÐAÑAÔAÐAÕAÔAÐAÐAÑAÔAÐAÑAÐAÐAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAØ=Ð=ˆq�Œ|Ð=ˆ|Ð=ˆ|Ð= A i¤LÐ= LÔ$6Ð=Ð$6Ð$6Ñ$8Ô$8Ð=¥Ð$8Ñ 9Ô 9Ð=¸AÐ=Ð 9¸AÒ =Ð=Ð=Ð=Ð=Ñ=Ð=Ð=Õ=Ô=ˆ|Ñ=Ô=Ð=Ñ=Ð=Ð=×=Ò=Ð=Ñ=Ô=Ð=ˆ|Ð=Õ=Ô=Ð=Ð=Ð=Ð=Ð 9¸AÐ=Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=¥Ñ=Ô=Ð=Õ=Ô=¥Ñ=Ô=Ð=Ð=Õ=Ô= LÑ=Ô=Õ=Ô=Ð$6Ñ=Ô=Õ=Ô=Ð$8Ñ=Ô=Õ=Ô=Ð 9Ñ=Ô=Õ=Ô=¸AÑ=Ô=Ð=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Ð=×=Ò=Ð=Ñ=Ô=Ð=Õ=Ô=Ð=Ð=Ñ=Ô=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ø=Ð=ˆq�Œ|Ð=ˆ|Ð=ˆ|Ð= A i¤LÐ= LÔ$6Ð=Ð$6Ð$6Ñ$8Ô$8Ð=¥Ð$8Ñ 9Ô 9Ð=¸AÐ=Ð 9¸AÒ =Ð=Ð=Ð=Ð=Ñ=Ð=Ð=Õ=Ô=ˆ|Ñ=Ô=Ð=Ñ=Ð=Ð=×=Ò=Ð=Ñ=Ô=Ð=ˆ|Ð=Õ=Ô=Ð=Ð=Ð=Ð=Ð 9¸AÐ=Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=¥Ñ=Ô=Ð=Õ=Ô=¥Ñ=Ô=Ð=Ð=Õ=Ô= LÑ=Ô=Õ=Ô=Ð$6Ñ=Ô=Õ=Ô=Ð$8Ñ=Ô=Õ=Ô=Ð 9Ñ=Ô=Õ=Ô=¸AÑ=Ô=Ð=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Ð=×=Ò=Ð=Ñ=Ô=Ð=Õ=Ô=Ð=Ð=Ñ=Ô=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=ØÐ!Ô"Ð2Ð"¥lÐ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð"¥lÐ2Ñ2Ô2Õ2Ô2Ð"Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2¥lÑ2Ô2Ð2Õ2Ô2¥lÑ2Ô2Ð2Ð2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2ØUÐUˆqÐ&Ô'ÐUÐ'ÐUÐ'ÐU°Ð2GÔ0HÐUÐ0HÔ0NÐUÐ0NÐ0NÑ0PÔ0PÐU­CÐ0PÑ,QÔ,QÐUÐTUÐUÐ,QÐTUÒ,UÐUÐUÐUÐUÑUÐUÐUÕUÔUÐ'ÑUÔUÐUÑUÐUÐU×UÒUÐUÑUÔUÐUÐ'ÐUÕUÔUÐUÐUÐUÐUÐ,QÐTUÐUÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔU­CÑUÔUÐUÕUÔU­CÑUÔUÐUÐUÕUÔUÐ0HÑUÔUÕUÔUÐ0NÑUÔUÕUÔUÐ0PÑUÔUÕUÔUÐ,QÑUÔUÕUÔUÐTUÑUÔUÐUÐUÑUÐUÐUÐUÐUÐUÑUÐUÐU×UÒUÐUÑUÔUÐUÕUÔUÐUÐUÑUÔUÐUÑUÐUÐUÐUÐUÐUÑUÐUÕUÕUÔUÐUÑUÔUÑUÔUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUØAÐAˆq�Œ~ÐAˆ~ÐAˆ~ÐA a¨¤nÐA nÔ&:ÐAÐ&:Ð&:Ñ&<Ô&<ÐA¥#Ð&<Ñ"=Ô"=ÐAÀÐAÐ"=ÀÒ"AÐAÐAÐAÐAÑAÐAÐAÕAÔAˆ~ÑAÔAÐAÑAÐAÐA×AÒAÐAÑAÔAÐAˆ~ÐAÕAÔAÐAÐAÐAÐAÐ"=ÀÐAÑAÔAÐAÕAÔAÑAÔAÐAÐAÕAÔA¥#ÑAÔAÐAÕAÔA¥#ÑAÔAÐAÐAÕAÔA nÑAÔAÕAÔAÐ&:ÑAÔAÕAÔAÐ&<ÑAÔAÕAÔAÐ"=ÑAÔAÕAÔAÀÑAÔAÐAÐAÑAÐAÐAÐAÐAÐAÑAÐAÐA×AÒAÐAÑAÔAÐAÕAÔAÐAÐAÑAÔAÐAÑAÐAÐAÐAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAÐAØKÐKˆqÐ!Ô"ÐKÐ"ÐKÐ"ÐK¨1Ð-=Ô+>ÐKÐ+>Ô+DÐKÐ+DÐ+DÑ+FÔ+FÐK¥sÐ+FÑ'GÔ'GÐKÈ!ÐKÐ'GÈ!Ò'KÐKÐKÐKÐKÑKÐKÐKÕKÔKÐ"ÑKÔKÐKÑKÐKÐK×KÒKÐKÑKÔKÐKÐ"ÐKÕKÔKÐKÐKÐKÐKÐ'GÈ!ÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔK¥sÑKÔKÐKÕKÔK¥sÑKÔKÐKÐKÕKÔKÐ+>ÑKÔKÕKÔKÐ+DÑKÔKÕKÔKÐ+FÑKÔKÕKÔKÐ'GÑKÔKÕKÔKÈ!ÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÐK×KÒKÐKÑKÔKÐKÕKÔKÐKÐKÑKÔKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKð tð 	iñ 	iˆCØ�C”&ˆCØ"ÐH�3˜d�?ÐHÐHÐHÕHÔHÐHÐHÐHÐH�3˜dÐHÑHÔHÐHÕHÔHÑHÔHÐHÐHÕHÔH�3ÑHÔHÐHÕHÔH�3ÑHÔHÐHÐHÕHÔH˜dÑHÔHÐHÐHÑHÐHÕHÔHÐ$H¨sÐ$HÐ$H¸¸:¼Ð$HÐ$HÑHÔHÐHÑHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÝ"Ô(ÐhÐ(Ð(¨Ñ-Ô-ÐhÐ-ÐhÕhÔhÐ/hÀSÐ/hÐ/hÈsÐ/hÐ/hÐYZÐ[eÔYfÐ/hÐ/hÑhÔhÐhÑhÐhÕhÔhÑhÔhÐhÐhÕhÔh•?ÑhÔhÐhÕhÔh•?ÑhÔhÐhÐhÕhÔhÐ(ÑhÔhÐhÕhÔhÑhÔhÐhÐhÕhÔh¨ÑhÔhÐhÕhÔh¨ÑhÔhÐhÐhÕhÔhÐ-ÑhÔhÐhÐhÑhÐhÕhÕhÔhÐhÑhÔhÑhÔhÐhÐhÐhÐhÐhÑhàÐ-�a˜Ô&Ð-ˆsÐ&Ò-Ð-¨#Ð-Ð&¨#Ò-Ð-Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð-ˆsÐ&¨#Ð-Ñ-Ô-Õ-Ô-ˆsÑ-Ô-Õ-Ô-Ð&Ñ-Ô-Õ-Ô-¨#Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÐ$Ô%Ð+¨Ð+Ð%¨Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð%¨Ð+Ñ+Ô+Õ+Ô+Ð%Ñ+Ô+Õ+Ô+¨Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø�Ô!Ð& QÐ&Ð! QÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð! QÐ&Ñ&Ô&Õ&Ô&Ð!Ñ&Ô&Õ&Ô& QÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÐ%Ô&Ð-¨#Ð-Ð&¨#Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð&¨#Ð-Ñ-Ô-Õ-Ô-Ð&Ñ-Ô-Õ-Ô-¨#Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ñ-ð%.ð .r%   c           	     óX  — |                       ¦   «         }|                     d¦  «         d„ |                     ¦   «         D ¦   «         }|j        } |¦   «         }t	          |¦  «        }|t
          k    }|�sRt          j        d|fd|t
          f¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        t
          ¦  «        rt          j        t
          ¦  «        nddœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}|                     ¦   «         D ]Å\  }	}
d}|
|k    }|s²t          j        d|fd|
|f¦  «        dt          j	        ¦   «         v st          j
        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        dœz  }t          j        d|	› d|
› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}ŒÆdS )z9Verify all 6 categories exist with exactly 5 styles each.zNSELECT theme_category, count(*) AS cnt FROM map_styles GROUP BY theme_categoryc                ó,   — i | ]}|d          |d         “ŒS )r¦   ry   r$   r`   s     r&   ú
<dictcomp>zCtest_theme_category_distribution_five_per_theme.<locals>.<dictcomp>’   s$   € ÐHÐHÐH°#ˆCÐ Ô! 3 u¤:ÐHÐHÐHr%   r{   )za%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.keys
}()
})
} == %(py9)sr�   Údistrª   )r+   rh   ri   r‹   rŒ   rO   r�   rP   Nr   )z%(py0)s == %(py3)sÚcountr¹   zTheme z expected 5 styles, found rº   r‹   )rp   r<   rq   Úkeysr�   rª   r/   rT   r1   r2   r3   r4   r5   r6   Úitemsr0   )rB   rs   rå   ru   r‘   r’   rV   rX   rY   Úthemeræ   r>   rÔ   rÞ   s                 r&   Ú/test_theme_category_distribution_five_per_themerê   Ž   sÉ  € à
�.Š.Ñ
Ô
€CØ‡K‚KÐ`ÑaÔaÐaØHÐH¸¿º¹¼ÐHÑHÔH€DØŒyÐ+ˆyˆy‰{Œ{Ð+�3ˆ{ÑÔÐ+Ð�|Ò+Ð+Ð+Ñ+Õ+Ô+Ð+Ð+Ð+Ð+Ð�|Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+�3Ñ+Ô+Ð+Õ+Ô+�3Ñ+Ô+Ð+Ð+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆtÑ+Ô+Ð+Õ+Ô+ˆtÑ+Ô+Ð+Ð+Õ+Ô+ˆyÑ+Ô+Õ+Ô+ˆ{Ñ+Ô+Õ+Ô+ÐÑ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+�|Ñ+Ô+Ð+Õ+Ô+�|Ñ+Ô+Ð+Ð+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØŸ
š
™œð Mð M‰ˆˆuØÐLˆu˜ŠzÐLÐLÐLÕLÔLÐLÐLÐLÐLˆu˜ÐLÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔLˆuÑLÔLÐLÕLÔLˆuÑLÔLÐLÐLÕLÔL˜ÑLÔLÐLÐLÑLÐLÕLÔLÐL EÐLÐLÀUÐLÐLÑLÔLÐLÑLÐLÐLÐLÑLÐLÕLÕLÔLÐLÑLÔLÑLÔLÐLÐLÐLÐLÐLÐLðMð Mr%   c           	     óà  — |                       ¦   «         }|                     d¦  «         |                     ¦   «         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|                     d
¦  «         |                     ¦   «         D ]®}|d         }d}||k    }|s”t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          j	        d|d         › d|d         › d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}Œ¯|                     d¦  «         |                     ¦   «         D �]«}d}|d         }	||	k    }d}
|	|
k    }|r|s�t          j        d||fd||	|
f¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}x}	}
|d         }|j
        }d}	 ||	¦  «        }
|
ssdt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}	}
|d         }|j
        }d}	 ||	¦  «        }
|
ssdt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}	}
t          j        }|d         } ||¦  «        }|s¨d d!t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd!t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d"œz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}�Œ­d	S )#zKVerify 600 tile mappings (20 per style) with valid filenames and fallbacks.z+SELECT count(*) AS cnt FROM map_style_tilesry   iX  r{   r}   r~   r   rN   NzGSELECT style_id, count(*) AS cnt FROM map_style_tiles GROUP BY style_idé   zStyle rœ   z has z tile mappings, expected 20ú
>assert %(py6)sz&SELECT * FROM map_style_tiles LIMIT 20r   Útile_type_idé   r¿   rÁ   rÃ   rÄ   rO   Útexture_filenameú.pngúJassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.endswith
}(%(py5)s)
}©rh   ri   r‹   rŒ   Únormal_filenameÚbase_color_fallbackzGassert %(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.match
}(%(py4)s)
}r»   )r+   r,   r-   rN   )rp   r<   r€   r/   rT   r4   r5   r6   rq   r0   Úendswithr»   rÏ   r1   r2   r3   )rB   rs   rt   r?   ru   r@   rv   rb   rÑ   r‘   r’   rà   rX   r>   rU   s                  r&   Ú"test_tile_mappings_table_integrityr÷   ˜   s  € à
�.Š.Ñ
Ô
€CØ‡K‚KÐ=Ñ>Ô>Ð>Ø�<Š<‰>Œ>˜%Ô Ð' CÐ'Ð  CÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð  CÐ'Ñ'Ô'Õ'Ô'Ð Ñ'Ô'Õ'Ô' CÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'à‡K‚KÐYÑZÔZÐZØ�|Š|‰~Œ~ð hð hˆØ�5ŒzÐg˜RÐgˆz˜RÒÐgÐgÐgÕgÔgÐgÐgÐgÐgˆz˜RÐgÑgÔgÕgÔgˆzÑgÔgÕgÔg˜RÑgÔgÐgÐgÑgÐgÕgÔgÐ!g¨#¨j¬/Ð!gÐ!gÀÀEÄ
Ð!gÐ!gÐ!gÑgÔgÐgÑgÐgÐgÐgÑgÐgÕgÕgÔgÐgÑgÔgÑgÔgÐgÐgÐgÐgÐgÐgÐgÐgà‡K‚KÐ8Ñ9Ô9Ð9Ø�\Š\‰^Œ^ð ?ñ ?ˆØÐ+�A�nÔ%Ð+ˆqÐ%Ò+Ð+¨Ð+Ð%¨Ò+Ð+Ð+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð+ˆqÐ%¨Ð+Ñ+Ô+Õ+Ô+ˆqÑ+Ô+Õ+Ô+Ð%Ñ+Ô+Õ+Ô+¨Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØÐ#Ô$Ð5Ð$Ô-Ð5¨fÐ5Ð-Ð-¨fÑ5Ô5Ð5Ð5Ð5Ð5Õ5Ô5Ð$Ñ5Ô5Õ5Ô5Ð-Ñ5Ô5Õ5Ô5¨fÑ5Ô5Õ5Ô5Ð5Ñ5Ô5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØÐ"Ô#Ð4Ð#Ô,Ð4¨VÐ4Ð,Ð,¨VÑ4Ô4Ð4Ð4Ð4Ð4Õ4Ô4Ð#Ñ4Ô4Õ4Ô4Ð,Ñ4Ô4Õ4Ô4¨VÑ4Ô4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ÝÔ$Ð> QÐ'<Ô%=Ð>Ð$Ð$Ð%=Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>�Ñ>Ô>Ð>Õ>Ô>�Ñ>Ô>Ð>Ð>Õ>Ô>Ð$Ñ>Ô>Õ>Ô>Ð%=Ñ>Ô>Õ>Ô>Ð>Ñ>Ô>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ñ>ð	?ð ?r%   c           	     ó4  — |                       ¦   «         }|                     d¦  «         |                     ¦   «         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}}|                     d
¦  «         h d£}|                     ¦   «         D �])}d}|d         }	||	k     }d}
|	|
k    }|r|s�t          j        d||fd||	|
f¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}x}	}
|d         }||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}}g }|d         }d}||k    }	|	}|	r|d         }d}||k    }|}|�st          j        d|	fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }d d!|iz  }|                     |¦  «         |	r`t          j        d|fd"||f¦  «        t          j        |¦  «        t          j        |¦  «        d#œz  }d$d%|iz  }|                     |¦  «         t          j        |d&¦  «        i z  }d'd(|iz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}x}	x}x}x}}|d)         }|j        }d*}	 ||	¦  «        }
|
ssd+t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        d,œz  }t          t          j        |¦  «        ¦  «        ‚d	x}x}x}	}
�Œ+d	S )-zFVerify decorative props integrity, valid weights, and placement rules.z+SELECT count(*) AS cnt FROM map_style_propsry   éZ   rÇ   rÉ   r~   r   rN   NzSELECT * FROM map_style_props>   ÚDEAD_ENDÚ	ANY_FLOORÚ	PATH_SIDEÚ
FLOOR_EDGEÚWALL_ADJACENTÚARENA_PERIMETERr¼   Úspawn_weightr¾   )ú<rÀ   )z%(py1)s < %(py5)srÂ   rÃ   rÄ   rO   Úplacement_ruler§   r©   Úallowed_rulesr«   r¬   r‹   Úfootprint_wr   Úfootprint_h)z%(py3)s >= %(py6)s)ri   rN   z%(py8)sr›   )z%(py11)s >= %(py14)s)rP   Úpy14z%(py16)sr¢   r   zassert %(py19)sÚpy19Úsprite_pathrñ   rò   ró   )rp   r<   r€   r/   rT   r4   r5   r6   rq   r1   r2   r3   rÌ   rÍ   rö   )rB   rs   rt   r?   ru   r@   rv   r  Úpr‘   r’   rà   rX   rÔ   rÞ   r>   rU   r“   Ú@py_assert13r×   rÐ   Ú@py_format15rÚ   Ú@py_format18rÜ   s                            r&   Útest_props_table_integrityr  ª   s  € à
�.Š.Ñ
Ô
€CØ‡K‚KÐ=Ñ>Ô>Ð>Ø�<Š<‰>Œ>˜%Ô Ð& BÐ&Ð  BÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð  BÐ&Ñ&Ô&Õ&Ô&Ð Ñ&Ô&Õ&Ô& BÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&à‡K‚KÐ/Ñ0Ô0Ð0ØlÐlÐl€MØ�\Š\‰^Œ^ð 1ñ 1ˆØÐ-�Q�~Ô&Ð-ˆsÐ&Ò-Ð-¨#Ð-Ð&¨#Ò-Ð-Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð-ˆsÐ&¨#Ð-Ñ-Ô-Õ-Ô-ˆsÑ-Ô-Õ-Ô-Ð&Ñ-Ô-Õ-Ô-¨#Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÐ!Ô"Ð3Ð" mÐ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð" mÐ3Ñ3Ô3Õ3Ô3Ð"Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3 mÑ3Ô3Ð3Õ3Ô3 mÑ3Ô3Ð3Ð3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ø>Ð>ˆq�ÔÐ> 1Ð>Ð 1Ò$Ð>Ð>Ð>Ð>Ð>¨¨=Ô)9Ð>¸QÐ>Ð)9¸QÒ)>Ð>Ð>Ð>Ð>Ñ>Õ>Ô>Ð>Ð>Ð>Ð>Ð 1Ð>Ñ>Ô>Õ>Ô>ÐÑ>Ô>Õ>Ô> 1Ñ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Ð>×>Ò>Ð>Ñ>Ô>Ð>Ð>Ð>Õ>Ô>Ð>Ð>Ð>Ð>Ð)9¸QÐ>Ñ>Ô>Õ>Ô>Ð)9Ñ>Ô>Õ>Ô>¸QÑ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Ð>×>Ò>Ð>Ñ>Ô>Ð>Õ>Ô>Ð>Ð>Ñ>Ô>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ø�ÔÐ0ÐÔ(Ð0¨Ð0Ð(Ð(¨Ñ0Ô0Ð0Ð0Ð0Ð0Õ0Ô0ÐÑ0Ô0Õ0Ô0Ð(Ñ0Ô0Õ0Ô0¨Ñ0Ô0Õ0Ô0Ð0Ñ0Ô0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ñ0ð	1ð 1r%   c                óÔ  — |                       ¦   «         }|                     d¦  «         |                     ¦   «         }t          |¦  «        }d}||k    }|�s
t	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t          ¦  «        rt	          j	        t          ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dœz  }t	          j
        d|› �¦  «        d	z   d
|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}dS )zHVerify that foreign keys pass with zero violations on existing database.zPRAGMA foreign_key_checkr   r{   r—   rŽ   Ú
violationsr™   zForeign key check failed: z
>assert %(py8)sr›   N)rp   r<   rq   rŽ   r/   rT   r1   r2   r3   r4   r0   r5   r6   )rB   rs   r  ru   rU   r‘   rv   rÐ   s           r&   Ú"test_foreign_key_pragmas_and_checkr  ¹   sl  € à
�.Š.Ñ
Ô
€CØ‡K‚KÐ*Ñ+Ô+Ð+Ø—’‘”€JÝˆz‰?Œ?ÐJ˜aÐJˆ?˜aÒÐJÐJÑJÕJÔJÐJÐJÐJÐJˆ?˜aÐJÑJÔJÐJÕJÔJÑJÔJÐJÐJÕJÔJ�3ÑJÔJÐJÕJÔJ�3ÑJÔJÐJÐJÐJÕJÔJÑJÔJÐJÐJÕJÔJˆzÑJÔJÐJÕJÔJˆzÑJÔJÐJÐJÕJÔJˆ?ÑJÔJÕJÔJ˜aÑJÔJÐJÐJÑJÐJÕJÔJÐ!J¸jÐ!JÐ!JÑJÔJÐJÑJÐJÐJÐJÑJÐJÕJÕJÔJÐJÑJÔJÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÐJr%   rE   c                ó\  — |                       ¦   «         }t          j        t          j        ¦  «        5  |                     d¦  «         ddd¦  «         n# 1 swxY w Y   t          j        t          j        ¦  «        5  |                     d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zEVerify inserting orphan rows into child tables raises IntegrityError.z¼INSERT INTO map_style_tiles (style_id, tile_type_id, tile_type_name, texture_filename, normal_filename, base_color_fallback) VALUES ('STY_INVALID', 1, 'FLOOR', 'f.png', 'n.png', '#333333')NzÍINSERT INTO map_style_props (prop_id, style_id, prop_name_vi, prop_name_en, sprite_key, sprite_path, spawn_weight, placement_rule) VALUES ('p_test', 'STY_INVALID', 'P', 'P', 'k', 'p.png', 0.5, 'ANY_FLOOR')©rp   ÚpytestÚraisesr7   ÚIntegrityErrorr<   ©rE   rs   s     r&   Ú!test_foreign_key_orphan_rejectionr  Á   s,  € à
×
Ò
Ñ
Ô
€Cå	Œ•wÔ-Ñ	.Ô	.ð 
ð 
Ø�Šðtñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
Œ•wÔ-Ñ	.Ô	.ð 
ð 
Ø�ŠðDñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
ó#   ³AÁAÁAÁ>B!Â!B%Â(B%c                óÒ  — |                       ¦   «         }|                     d¦  «         |                     d¦  «         |                     d¦  «         |                      ¦   «          |                     d¦  «         |                      ¦   «          |                     d¦  «         |                     ¦   «         d         }d}||k    }|slt	          j        d|fd	||f¦  «        t	          j        |¦  «        t	          j        |¦  «        d
œz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|                     d¦  «         |                     ¦   «         d         }d}||k    }|slt	          j        d|fd	||f¦  «        t	          j        |¦  «        t	          j        |¦  «        d
œz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}dS )zHVerify deleting a parent style cascades and deletes its tiles and props.ax  INSERT INTO map_styles (style_id, biome_code, name_vi, name_en, theme_category, theme_category_name, description, floor_color_hex, wall_color_hex, path_color_hex, liquid_color_hex, ambient_light_hex, asset_dir, monster_family) VALUES ('STY_CASCADE_TEST', 199, 'Vi', 'En', 'HOANG_DA_DA_NGOAI', 'T', 'D', '#111111', '#222222', '#333333', '#444444', '#555555', 'dir', 'monsters')zÁINSERT INTO map_style_tiles (style_id, tile_type_id, tile_type_name, texture_filename, normal_filename, base_color_fallback) VALUES ('STY_CASCADE_TEST', 1, 'FLOOR', 'f.png', 'n.png', '#111111')zØINSERT INTO map_style_props (prop_id, style_id, prop_name_vi, prop_name_en, sprite_key, sprite_path, spawn_weight, placement_rule) VALUES ('prop_cascade', 'STY_CASCADE_TEST', 'P', 'P', 'k', 'p.png', 0.5, 'ANY_FLOOR')z:DELETE FROM map_styles WHERE style_id = 'STY_CASCADE_TEST'zOSELECT count(*) AS cnt FROM map_style_tiles WHERE style_id = 'STY_CASCADE_TEST'ry   r   r{   r}   r~   r   rN   NzOSELECT count(*) AS cnt FROM map_style_props WHERE style_id = 'STY_CASCADE_TEST')	rp   r<   Úcommitr€   r/   rT   r4   r5   r6   )rE   rs   rt   r?   ru   r@   rv   s          r&   Ú!test_foreign_key_cascade_deletionr  Ó   s2  € à
×
Ò
Ñ
Ô
€CØ‡K‚Kð	Tñô ð ð ‡K‚Kð	uñô ð ð ‡K‚Kð	Kñô ð ð ×ÒÑÔÐà‡K‚KÐLÑMÔMÐMØ×ÒÑÔÐà‡K‚KÐaÑbÔbÐbØ�<Š<‰>Œ>˜%Ô Ð% AÐ%Ð  AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð  AÐ%Ñ%Ô%Õ%Ô%Ð Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø‡K‚KÐaÑbÔbÐbØ�<Š<‰>Œ>˜%Ô Ð% AÐ%Ð  AÒ%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%Ð  AÐ%Ñ%Ô%Õ%Ô%Ð Ñ%Ô%Õ%Ô% AÑ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%r%   c                ó\  — |                       ¦   «         }t          j        t          j        ¦  «        5  |                     d¦  «         ddd¦  «         n# 1 swxY w Y   t          j        t          j        ¦  «        5  |                     d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zIVerify CHECK constraints on biome_code, theme_category, fog_density, etc.a[  INSERT INTO map_styles (style_id, biome_code, name_vi, name_en, theme_category, theme_category_name, description, floor_color_hex, wall_color_hex, path_color_hex, liquid_color_hex, ambient_light_hex, asset_dir, monster_family) VALUES ('STY_BAD_BIOME', 0, 'Vi', 'En', 'HOANG_DA_DA_NGOAI', 'T', 'D', '#111', '#222', '#333', '#444', '#555', 'a', 'm')NaY  INSERT INTO map_styles (style_id, biome_code, name_vi, name_en, theme_category, theme_category_name, description, floor_color_hex, wall_color_hex, path_color_hex, liquid_color_hex, ambient_light_hex, asset_dir, monster_family) VALUES ('STY_BAD_THEME', 150, 'Vi', 'En', 'INVALID_THEME', 'T', 'D', '#111', '#222', '#333', '#444', '#555', 'a', 'm')r  r  s     r&   Ú!test_check_constraints_rejectionsr  ð   s.  € à
×
Ò
Ñ
Ô
€Cõ 
Œ•wÔ-Ñ	.Ô	.ð 
ð 
Ø�ŠðGñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
Œ•wÔ-Ñ	.Ô	.ð 
ð 
Ø�ŠðEñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
r  rH   c                ó”*  — |                       d¦  «        }d}||u}|s—t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|j	        }d	}||k    }|sªt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j
        }d}||k    }|sªt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }|j        }d}	||	k    }
|
s½t          j        d
|
fd||	f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
}	t                               ¦   «         D �]â\  }}|                       |¦  «        }d}||u}|s°t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          j        d|› d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|j	        }||k    }|søt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }t          j        d|› d|› d|j	        › �¦  «        d z   d!|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}�Œä| j         }d"} ||¦  «        }
d}|
|u }|sÐt          j        d#|fd$|
|f¦  «        d%t          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd%t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        t          j        |¦  «        d&œz  }d'd(|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
x}}t!          d)d*¦  «        D �]»}|                      |¦  «        }d}||u}|s¯t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          j        d+|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|j	        }||k    }|sÕt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }d,d!|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}�Œ½| j        }d-} ||¦  «        }
d}|
|u }|sÐt          j        d#|fd.|
|f¦  «        d%t          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd%t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        t          j        |¦  «        d&œz  }d'd(|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
x}}| j        }d*} ||¦  «        }
d}|
|u }|sÐt          j        d#|fd.|
|f¦  «        d%t          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd%t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        t          j        |¦  «        d&œz  }d'd(|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
x}}| j        }d)}| }
 ||
¦  «        }	d}|	|u }|sÐt          j        d#|fd/|	|f¦  «        d%t          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd%t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |¦  «        d0œz  }d1d2|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
x}	x}}|                      ¦   «         }t'          |¦  «        }d3}
||
k    }|sòt          j        d
|fd4||
f¦  «        d5t          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        nd5d6t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd6t          j        |¦  «        t          j        |
¦  «        d7œz  }d8d9|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}
d:„ |D ¦   «         }d)}
d*}t!          |
|¦  «        }t)          |¦  «        }||k    }|�s5t          j        d
|fd;||f¦  «        t          j        |¦  «        d<t          j        ¦   «         v st          j        t(          ¦  «        rt          j        t(          ¦  «        nd<d=t          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        nd=t          j        |
¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d>œz  }d?d@|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}
x}x}}|                      d¦  «        }t'          |¦  «        }dA}
||
k    }|sòt          j        d
|fd4||
f¦  «        d5t          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        nd5dBt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndBt          j        |¦  «        t          j        |
¦  «        d7œz  }d8d9|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}
dC„ |D ¦   «         }t-          |¦  «        }|s•dDdEt          j        ¦   «         v st          j        t,          ¦  «        rt          j        t,          ¦  «        ndEt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚dx}}|                      dd)¦  «        }d}||u}|s—t          j        d|fd||f¦  «        dFt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndFt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|j        }d)}||k    }|sªt          j        d
|fdG||f¦  «        dFt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndFt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|j        }dH}||k    }|sªt          j        d
|fdI||f¦  «        dFt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndFt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}|                      d¦  «        }t'          |¦  «        }dJ}
||
k    }|sòt          j        dK|fdL||
f¦  «        d5t          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        nd5dMt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndMt          j        |¦  «        t          j        |
¦  «        d7œz  }d8d9|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}
dN„ |D ¦   «         }t-          |¦  «        }|s•dDdEt          j        ¦   «         v st          j        t,          ¦  «        rt          j        t,          ¦  «        ndEt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚dx}}| j        }d} ||¦  «        }	t'          |	¦  «        }t'          |¦  «        }||k    } | �s±t          j        d
| fdO||f¦  «        d5t          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        nd5d%t          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd%t          j        |¦  «        t          j        |¦  «        t          j        |	¦  «        t          j        |¦  «        d5t          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        nd5dMt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndMt          j        |¦  «        dPœ	z  }dQdR|iz  }!t          t          j        |!¦  «        ¦  «        ‚dx}x}x}	x}x} }dS )SzMVerify MapStyleService query methods for style, code, list, tiles, and props.ÚSTY_01_HOANG_MANG_CO_LONrµ   r·   Ús1r¹   r¬   r‹   é   r{   )z2%(py2)s
{%(py2)s = %(py0)s.biome_code
} == %(py5)s)r+   r,   r‹   zassert %(py7)srŒ   u   Hoang MÃ£ng Cá»• Lá»™)z/%(py2)s
{%(py2)s = %(py0)s.name_vi
} == %(py5)sz#3d3730)zJ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.palette
}.floor
} == %(py7)s)r+   r,   r-   rŒ   rÄ   rO   Úsz*Failed to retrieve style by legacy alias 'ú'rº   )z2%(py2)s
{%(py2)s = %(py0)s.biome_code
} == %(py4)sÚcoder*   zAlias z expected code z, got rí   rN   ÚUNKNOWN_STYLE_XYZ)Úis)zO%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_style
}(%(py4)s)
} is %(py9)srH   rM   r�   rP   r   r‡   z'Failed to retrieve style by biome code r   r   )zW%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_style_by_code
}(%(py4)s)
} is %(py9)s)zY%(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.get_style_by_code
}(-%(py4)s)
} is %(py10)s)r+   r,   r-   rŒ   rž   úassert %(py12)srŸ   rz   r—   rŽ   Ú
all_stylesr™   rš   r›   c                ó   — g | ]	}|j         ‘Œ
S r$   r„   )ra   r"  s     r&   r†   z2test_map_style_service_queries.<locals>.<listcomp>&  s   € Ð-Ð-Ð-˜QˆAŒLÐ-Ð-Ð-r%   )z[%(py1)s == %(py12)s
{%(py12)s = %(py3)s(%(py10)s
{%(py10)s = %(py4)s(%(py6)s, %(py8)s)
})
}r‰   rŠ   )rh   ri   r-   rN   r›   rž   rŸ   zassert %(py14)sr  rì   Útilesc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S ©N)Ú
isinstancer
   )ra   Úts     r&   ú	<genexpr>z1test_map_style_service_queries.<locals>.<genexpr>+  s-   è è € ÐAÐA°a�z˜!Õ0Ñ1Ô1ÐAÐAÐAÐAÐAÐAr%   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}ÚallÚ
tile_floor)z1%(py2)s
{%(py2)s = %(py0)s.tile_code
} == %(py5)sÚFLOOR)z6%(py2)s
{%(py2)s = %(py0)s.tile_type_name
} == %(py5)sr   rÇ   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚpropsc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r,  )r-  r   )ra   r	  s     r&   r/  z1test_map_style_service_queries.<locals>.<genexpr>5  s-   è è € ÐDÐD¸�z˜!Õ3Ñ4Ô4ÐDÐDÐDÐDÐDÐDr%   )z�%(py9)s
{%(py9)s = %(py0)s(%(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.list_props
}(%(py5)s)
})
} == %(py14)s
{%(py14)s = %(py11)s(%(py12)s)
})	r+   rh   ri   r‹   rŒ   rO   rP   rŸ   r  zassert %(py16)sr¢   )Ú	get_styler/   rT   r1   r2   r3   r4   r5   r6   r…   r¡   ÚpaletteÚfloorÚLEGACY_ALIASESrè   r0   rŠ   Úget_style_by_codeÚlist_stylesrŽ   r‰   Úget_tiles_for_styler0  Úget_tile_mappingÚ	tile_codeÚtile_type_nameÚget_props_for_styleÚ
list_props)"rH   r   ru   r>   rÔ   rÞ   r‘   r?   rà   r’   rU   rX   r$  Úaliasr"  r@   rv   rV   rW   rY   rÒ   Ú@py_format11rÕ   r(  rÐ   rt   rÓ   r  r*  r1  r3  r
  r“   rÚ   s"                                     r&   Útest_map_style_service_queriesrC    s‰  € ð 
×	Ò	Ð8Ñ	9Ô	9€BØÐˆ2�Tˆ>ÐÐÐÕÔÐÐÐÐˆ2�TÐÑÔÐÕÔÑÔÐÐÕÔˆ2ÑÔÐÕÔˆ2ÑÔÐÐÕÔ�TÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØŒ=Ð˜AÐˆ=˜AÒÐÐÐÕÔÐÐÐÐˆ=˜AÐÑÔÐÕÔÑÔÐÐÕÔˆ2ÑÔÐÕÔˆ2ÑÔÐÐÕÔˆ=ÑÔÕÔ˜AÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØŒ:Ð0Ð0Ð0ˆ:Ð0Ò0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0ˆ:Ð0Ð0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0ˆ2Ñ0Ô0Ð0Õ0Ô0ˆ2Ñ0Ô0Ð0Ð0Õ0Ô0ˆ:Ñ0Ô0Õ0Ô0Ð0Ñ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØŒ:Ð(ˆ:ÔÐ(˜yÐ(Ð˜yÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð˜yÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(ˆ2Ñ(Ô(Ð(Õ(Ô(ˆ2Ñ(Ô(Ð(Ð(Õ(Ô(ˆ:Ñ(Ô(Õ(Ô(ÐÑ(Ô(Õ(Ô(˜yÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(õ &×+Ò+Ñ-Ô-ð _ñ _‰ˆˆeØ×!Ò! %Ñ(Ô(ˆØÐSˆq˜ˆ}ÐSÐSÐSÕSÔSÐSÐSÐSÐSˆq˜ÐSÑSÔSÐSÕSÔSÑSÔSÐSÐSÕSÔSˆqÑSÔSÐSÕSÔSˆqÑSÔSÐSÐSÕSÔS˜ÑSÔSÐSÐSÑSÐSÕSÔSÐSÈ5ÐSÐSÐSÑSÔSÐSÑSÐSÐSÐSÑSÐSÕSÕSÔSÐSÑSÔSÑSÔSÐSÐSÐSÐSÐSØŒ|Ð^ˆ|˜tÒ#Ð^Ð^Ð^Õ^Ô^Ð^Ð^Ð^Ð^ˆ|˜tÐ^Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^ˆqÑ^Ô^Ð^Õ^Ô^ˆqÑ^Ô^Ð^Ð^Õ^Ô^ˆ|Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^˜tÑ^Ô^Ð^Õ^Ô^˜tÑ^Ô^Ð^Ð^Ð^Ð^Ñ^Ð^Õ^Ô^Ð%^¨eÐ%^Ð%^ÀDÐ%^Ð%^ÐPQÔP\Ð%^Ð%^Ñ^Ô^Ð^Ñ^Ð^Ð^Ð^Ñ^Ð^Õ^Õ^Ô^Ð^Ñ^Ô^Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ñ^ð Ô Ð=Ð!4Ð=Ð Ð Ð!4Ñ5Ô5Ð=¸Ð=Ð5¸Ð=Ð=Ð=Ð=Õ=Ô=Ð=Ð=Ð=Ð=Ð5¸Ð=Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=ˆ;Ñ=Ô=Ð=Õ=Ô=ˆ;Ñ=Ô=Ð=Ð=Õ=Ô=Ð Ñ=Ô=Õ=Ô=Ð!4Ñ=Ô=Õ=Ô=Ð5Ñ=Ô=Õ=Ô=¸Ñ=Ô=Ð=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=õ �a˜‘”ð $ñ $ˆØ×)Ò)¨$Ñ/Ô/ˆØÐNˆq˜ˆ}ÐNÐNÐNÕNÔNÐNÐNÐNÐNˆq˜ÐNÑNÔNÐNÕNÔNÑNÔNÐNÐNÕNÔNˆqÑNÔNÐNÕNÔNˆqÑNÔNÐNÐNÕNÔN˜ÑNÔNÐNÐNÑNÐNÕNÔNÐNÈÐNÐNÑNÔNÐNÑNÐNÐNÐNÑNÐNÕNÕNÔNÐNÑNÔNÑNÔNÐNÐNÐNÐNÐNØŒ|Ð#ˆ|˜tÒ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ|˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#ˆqÑ#Ô#Ð#Õ#Ô#ˆqÑ#Ô#Ð#Ð#Õ#Ô#ˆ|Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#˜tÑ#Ô#Ð#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ñ#àÔ(Ð3¨Ð3Ð(Ð(¨Ñ+Ô+Ð3¨tÐ3Ð+¨tÐ3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð+¨tÐ3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆ;Ñ3Ô3Ð3Õ3Ô3ˆ;Ñ3Ô3Ð3Ð3Õ3Ô3Ð(Ñ3Ô3Õ3Ô3¨Ñ3Ô3Õ3Ô3Ð+Ñ3Ô3Õ3Ô3¨tÑ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØÔ(Ð4¨Ð4Ð(Ð(¨Ñ,Ô,Ð4°Ð4Ð,°Ð4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð,°Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ˆ;Ñ4Ô4Ð4Õ4Ô4ˆ;Ñ4Ô4Ð4Ð4Õ4Ô4Ð(Ñ4Ô4Õ4Ô4¨Ñ4Ô4Õ4Ô4Ð,Ñ4Ô4Õ4Ô4°Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØÔ(Ð4¨!Ð4¨!¨Ð4Ð(Ð(¨Ñ,Ô,Ð4°Ð4Ð,°Ð4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð,°Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ˆ;Ñ4Ô4Ð4Õ4Ô4ˆ;Ñ4Ô4Ð4Ð4Õ4Ô4Ð(Ñ4Ô4Õ4Ô4¨!Ñ4Ô4Õ4Ô4Ð,Ñ4Ô4Õ4Ô4°Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ð ×(Ò(Ñ*Ô*€JÝˆz‰?Œ?Ð ˜bÐ ˆ?˜bÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆ?˜bÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �3Ñ Ô Ð Õ Ô �3Ñ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆzÑ Ô Ð Õ Ô ˆzÑ Ô Ð Ð Õ Ô ˆ?Ñ Ô Õ Ô ˜bÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ø-Ð- *Ð-Ñ-Ô-ÐC¸AÐC¸rÐCµe¸A¸r±l´lÐCµ°lÑ1CÔ1CÐCÐ-Ð1CÒCÐCÐCÑCÕCÔCÐCÐCÐCÐCÐ-Ð1CÐCÑCÔCÕCÔCÐ-ÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCµÑCÔCÐCÕCÔCµÑCÔCÐCÐCÐCÕCÔCÑCÔCÐCÐCÕCÔCµeÑCÔCÐCÕCÔCµeÑCÔCÐCÐCÕCÔC¸AÑCÔCÕCÔC¸rÑCÔCÕCÔC°lÑCÔCÕCÔCÐ1CÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCð ×+Ò+Ð,EÑFÔF€EÝˆu‰:Œ:Ð˜Ðˆ:˜ÒÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔˆ:ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØAÐA¸5ÐAÑAÔAÐA�3ÐAÑAÔAÐAÐAÐAÐAÐAÕAÔAÑAÔAÐAÐAÕAÔA�3ÑAÔAÐAÕAÔA�3ÑAÔAÐAÐAÕAÔAÐAÑAÔAÕAÔAÐAÑAÔAÐAÐAÑAÐAÕAÕAÔAÐAÑAÔAÑAÔAÐAÐAÐAÐAÐAà×-Ò-Ð.GÈÑKÔK€JØ!Ð!ˆ:˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ:˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ:Ñ!Ô!Ð!Õ!Ô!ˆ:Ñ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!ØÔÐ$ 1Ð$Ð 1Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð 1Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ:Ñ$Ô$Ð$Õ$Ô$ˆ:Ñ$Ô$Ð$Ð$Õ$Ô$ÐÑ$Ô$Õ$Ô$ 1Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÔ$Ð/¨Ð/Ð$¨Ò/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð$¨Ð/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆ:Ñ/Ô/Ð/Õ/Ô/ˆ:Ñ/Ô/Ð/Ð/Õ/Ô/Ð$Ñ/Ô/Õ/Ô/¨Ñ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð ×+Ò+Ð,EÑFÔF€EÝˆu‰:Œ:Ð˜Ðˆ:˜Š?ÐÐÐÕÔÐÐÐÐˆ:˜ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆuÑÔÐÕÔˆuÑÔÐÐÕÔˆ:ÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØDÐD¸eÐDÑDÔDÐD�3ÐDÑDÔDÐDÐDÐDÐDÐDÕDÔDÑDÔDÐDÐDÕDÔD�3ÑDÔDÐDÕDÔD�3ÑDÔDÐDÐDÕDÔDÐDÑDÔDÕDÔDÐDÑDÔDÐDÐDÑDÐDÕDÕDÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDØÔ%ÐOÐ&?ÐOÐ%Ð%Ð&?Ñ@Ô@ÐO�3Ð@ÑAÔAÐOÅSÈÁZÄZÐOÐAÀZÒOÐOÐOÑOÕOÔOÐOÐOÐOÐOÐAÀZÐOÑOÔOÐOÕOÔOÑOÔOÐOÐOÕOÔO�3ÑOÔOÐOÕOÔO�3ÑOÔOÐOÐOÐOÕOÔOÑOÔOÐOÐOÕOÔOˆ{ÑOÔOÐOÕOÔOˆ{ÑOÔOÐOÐOÕOÔOÐ%ÑOÔOÕOÔOÐ&?ÑOÔOÕOÔOÐ@ÑOÔOÕOÔOÐAÑOÔOÐOÕOÔOÑOÔOÐOÐOÕOÔOÅSÑOÔOÐOÕOÔOÅSÑOÔOÐOÐOÐOÕOÔOÑOÔOÐOÐOÕOÔOÈÑOÔOÐOÕOÔOÈÑOÔOÐOÐOÕOÔOÀZÑOÔOÐOÐOÑOÐOÐOÐOÐOÐOÑOÐOÕOÕOÔOÐOÑOÔOÑOÔOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOÐOr%   c            	     óÔ  — t          d¬¦  «        } | j        } |¦   «         }t          |¦  «        }d}||k    }|�st          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}}| j        }d}	 ||	¦  «        }
d}|
|u}|sÐt          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        ndt          j        |¦  «        t          j        |	¦  «        t          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}	x}
x}}|                      ¦   «          dS )zRVerify MapStyleService initialized with :memory: automatically seeds and operates.rD   rG   rz   r{   )zi%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.list_styles
}()
})
} == %(py10)srŽ   Úmem_service)r+   rh   ri   r‹   rŒ   rž   r'  rŸ   Nr   rµ   )z[%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_style_by_code
}(%(py4)s)
} is not %(py9)srM   r�   rP   )r   r:  rŽ   r/   rT   r1   r2   r3   r4   r5   r6   r9  r=   )rE  ru   r‘   r’   rÒ   rV   rB  rÕ   r>   r?   rU   rW   rX   rY   s                 r&   Ú)test_map_style_service_in_memory_instancerF  9  s¬  € å!¨*Ð5Ñ5Ô5€KØÔ&Ð/Ð&Ð&Ñ(Ô(Ð/�3Ð(Ñ)Ô)Ð/¨RÐ/Ð)¨RÒ/Ð/Ð/Ñ/Õ/Ô/Ð/Ð/Ð/Ð/Ð)¨RÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�3Ñ/Ô/Ð/Õ/Ô/�3Ñ/Ô/Ð/Ð/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/ˆ{Ñ/Ô/Ð/Õ/Ô/ˆ{Ñ/Ô/Ð/Ð/Õ/Ô/Ð&Ñ/Ô/Õ/Ô/Ð(Ñ/Ô/Õ/Ô/Ð)Ñ/Ô/Õ/Ô/¨RÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ØÔ(Ð7¨Ð7Ð(Ð(¨Ñ+Ô+Ð7°4Ð7Ð+°4Ð7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð+°4Ð7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7ˆ;Ñ7Ô7Ð7Õ7Ô7ˆ;Ñ7Ô7Ð7Ð7Õ7Ô7Ð(Ñ7Ô7Õ7Ô7¨Ñ7Ô7Õ7Ô7Ð+Ñ7Ô7Õ7Ô7°4Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø×ÒÑÔÐÐÐr%   )r   r   )r'   r   r   r(   )r   r(   )r'   r   r   r   )r'   r   r   rI   )rB   r[   r   rI   )rE   r[   r   rI   )rH   r   r   rI   )r   rI   )0Ú__doc__Ú
__future__r   Úbuiltinsr1   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter/   ÚosÚrer7   Úpathlibr   Útypingr   r  Úserver.world.map_style_schemar   Úserver.world.map_style_servicer   Úserver.world.map_style_typesr	   r
   r   Úcompiler»   rª   r8  Úfixturer'   rB   rE   rH   rZ   rw   r�   r•   rá   rê   r÷   r  r  r  r  r  rC  rF  r$   r%   r&   ú<module>rV     s  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € €	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð �"”*Ð1Ñ2Ô2€ðð ð €ð ØØØØðð €ð €„�hÐÑÔðTð Tð Tñ  ÔðTð
 €„�hÐÑÔðð ð ñ  Ôðð „ðð ð ñ „ðð €„�hÐÑÔð,ð ,ð ,ñ  Ôð,ð
Kð Kð Kð Kðð ð ð ð"'ð 'ð 'ð 'ð!ð !ð !ð !ð.ð .ð .ð .ð8Mð Mð Mð Mð?ð ?ð ?ð ?ð$1ð 1ð 1ð 1ðKð Kð Kð Kð
ð 
ð 
ð 
ð$&ð &ð &ð &ð:
ð 
ð 
ð 
ð./Pð /Pð /Pð /Pðdð ð ð ð ð r%   