Ë
    íÆjÝ  ã                   ó¬  — d 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
Z
ddlmZ ddlZddlZdd„Zdeeef   defd„Zej,                  d„ «       Zd	„ Zej2                  j5                  d
g d¢«      d„ «       Zej2                  j5                  d
g d¢«      d„ «       Zd„ Zd„ Zej2                  j5                  dg d¢«      d„ «       Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$y)z-games_city: the city kit in OhMyGames builds.é    N)ÚSimpleNamespacec                 óB   — t        | |dddg t        ||d¬«      ||¬«	      S )NÚ )ÚviewÚsettingÚlook)	ÚtitleÚpitchÚgenreÚ	core_loopÚfirst_versionÚmoodÚworldÚlaneÚstage)ÚN)r	   r
   r   r   r   r   s         úJ/home/claude-agent/forge-build/forge-assets/omg/factory/test_games_city.pyÚ_cardr      s.   € Ü�5 ¨R¸2ÈRÐVXÜ˜$¨°bÔ9ÀÈEôSð Só    ÚfilesÚreturnc                 ó†  — t        j                  «       }t        j                  |d¬«      5 }| j	                  «       D ]O  \  }}t        j
                  |«      }t        |«      |_        |j                  |t        j                  |«      «       ŒQ 	 d d d «       |j                  «       S # 1 sw Y   |j                  «       S xY w)Nzw:gz)ÚfileobjÚmode)
ÚioÚBytesIOÚtarfileÚopenÚitemsÚTarInfoÚlenÚsizeÚaddfileÚgetvalue)r   ÚbufÚtfÚnameÚdataÚinfos         r   Ú_tarr*      s’   € Ü
�*‰*‹,€CÜ	�‰˜c¨Ô	/ð /°2ØŸ+™+›-ò 	/‰JˆD�$Ü—?‘? 4Ó(ˆDÜ˜D›	ˆDŒIØ�J‰J�tœRŸZ™Z¨Ó-Õ.ñ	/÷/ð
 �<‰<‹>Ð÷/ð
 �<‰<‹>Ðús   ¬A#B(Â(C c                 óF   — | dz  j                  t        dddœ«      «       | S )Núcitykit.tar.gzó   citys	   export {})úCITY.mdzgame.mjs)Úwrite_bytesr*   )Útmp_paths    r   Úassetsr1      s&   € àÐ Ñ ×-Ñ-¬d¸wÐT`Ñ3aÓ.bÔcØ€Or   c                 óŽ  — t        j                  | d   j                  dd«      d   «      }t        j                  t        j                  |«      ¬«      5 }|j                  «       D �ci c]=  }|j                  «       sŒ|j                  |j                  |«      j                  «       “Œ? c}cd d d «       S c c}w # 1 sw Y   y xY w)NÚurlú,é   )r   )Úbase64Ú	b64decodeÚsplitr   r   r   r   Ú
getmembersÚisfiler'   ÚextractfileÚread)Úattr(   r&   Úms       r   Ú_membersr?   #   s˜   € Ü×Ñ˜C ™J×,Ñ,¨S°!Ó4°QÑ7Ó8€DÜ	�‰œbŸj™j¨Ó.Ô	/ð Y°2Ø:<¿-¹-»/ÖX°QÈQÏXÉXÍZ�—‘˜Ÿ™ qÓ)×.Ñ.Ó0Ñ0ÒX÷Yñ YùÚX÷Yð Yús$   ÁB;Á(B6Á>,B6Â*B;Â6B;Â;Cztitle,pitch)	)z
Grand Heatz,An open world crime game in the style of GTA)zDowntown Hustlez%Run deals through the downtown blocks)ÚGanglandz%Gangsters fight over the city streets)z
Mafia Milez.A mafia family rules the streets of a big city)z
Taxi Nightz2Drive a taxi driver's route through the metropolis)ÚSkylinez0Chase rivals between the skyscrapers of New York)zHarbour Lightsz%Hong Kong nights, neon signs and rain)z
Heist TownzA heist across the city blocks)z	Cop Chasez'A police chase through the city streetsc                 óÄ  — t         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t        j                  |«      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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}x}}y )NÚcity©ú==)zw%(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.city_kind
}(%(py7)s
{%(py7)s = %(py3)s(%(py4)s, %(py5)s)
})
} == %(py12)sÚgcr   r	   r
   ©Úpy0Úpy2Úpy3Úpy4Úpy5Úpy7Úpy9Úpy12úassert %(py14)sÚpy14©rF   Ú	city_kindr   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation©	r	   r
   Ú@py_assert1Ú@py_assert6Ú@py_assert8Ú@py_assert11Ú@py_assert10Ú@py_format13Ú@py_format15s	            r   Útest_city_words_name_a_cityrd   )   s  € ô �<‰<Ð6œ˜e UÓ+Ð6‰<Ð+Ó,Ð6°Ð6Ð,°Ñ6×6×6Ö6Ð,°×6×6×6×6×6Ñ6Œ2×6×6Ó6Œ2×6×6Ô6ˆ<×6×6×6×6×6Ð6œ×6×6Ó6œ×6×6×6×6×6Ò6˜e×6×6Ó6˜e×6×6×6×6×6Ò6 U×6×6Ó6 U×6×6Ô6Ð+×6×6Ò6Ð,×6×6Ò6°×6×6×6×6×6×6×6Ð6r   ))zMedieval Marketz.A medieval town with a tavern and a blacksmith)zFishing Villagez(A fishing village in Brittany, GTA style)zRacing Weekz7Drift a rally car around a racing circuit in a downtown)z
Grand Prixz*A grand prix racing track through the city)zCity Builderz,Lay out roads and zone a city-builder tycoon)z
Chess CityzA board game of city chess)zSpace Gangsz-Gangsters in space, with aliens and asteroids)z
Side Heistz"A 2d side-scroll heist in the city)ÚDriverz"Drive a car across the countryside)zCop Quizz(A police quiz with questions and answers)zKingdom Hearts Fanz a kingdom hearts style adventurec                 óÂ  — t         j                  }t        | |«      } ||«      }d }||u }|�s¨t        j                  d|fd||f«      dt        j                  «       v st        j                  t         «      rt        j                  t         «      ndt        j                  |«      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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}x}}y )
N©Úis)zw%(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.city_kind
}(%(py7)s
{%(py7)s = %(py3)s(%(py4)s, %(py5)s)
})
} is %(py12)srF   r   r	   r
   rG   rP   rQ   rR   r\   s	            r   Ú#test_false_positives_are_not_citiesri   8   s  € ô �<‰<Ð4œ˜e UÓ+Ð4‰<Ð+Ó,Ð4°Ð4Ð,°Ð4×4×4Ö4Ð,°×4×4×4×4×4Ñ4Œ2×4×4Ó4Œ2×4×4Ô4ˆ<×4×4×4×4×4Ð4œ×4×4Ó4œ×4×4×4×4×4Ò4˜e×4×4Ó4˜e×4×4×4×4×4Ò4 U×4×4Ó4 U×4×4Ô4Ð+×4×4Ò4Ð,×4×4Ò4°×4×4×4×4×4×4×4Ð4r   c                  ó  — t         j                  } d}d}t        ||«      } | |«      }d }||u }|�sNt        j                  d|fd||f«      dt        j                  «       v st        j                  t         «      rt        j                  t         «      ndt        j                  | «      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        t        j                  |«      «      ‚d x} x}x}x}x}x}}y )
NÚWalledz1a walled medieval city with knights and gangstersrg   )zy%(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.city_kind
}(%(py9)s
{%(py9)s = %(py3)s(%(py5)s, %(py7)s)
})
} is %(py14)srF   r   )rH   rI   rJ   rL   rM   rN   Úpy11rQ   zassert %(py16)sÚpy16rR   )	r]   Ú@py_assert4r^   r_   ra   Ú@py_assert13Ú@py_assert12rc   Ú@py_format17s	            r   Ú'test_medieval_or_breton_is_never_a_cityrr   I   sé   € ä�<‰<Ðe˜hÐeÐ([Ðeœ˜hÐ([Ó\Ðe‰<Ð\Ó]ÐeÐaeÐeÐ]ÐaeÐe×e×eÖeÐ]Ðae×e×e×e×e×eÑeŒ2×e×eÓeŒ2×e×eÔeˆ<×e×e×e×e×eÐeœ×e×eÓeœ×e×eÔe˜h×e×eÒeÐ([×e×eÒeÐ\×e×eÒeÐ]×e×eÒeÐae×e×e×e×e×e×e×eÔer   c                  óR  — t         j                  } d}d}t        ||«      }d} | ||«      }d}||k(  }|�sbt        j                  d|fd||f«      dt        j                  «       v st        j                  t         «      rt        j                  t         «      ndt        j                  | «      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      d	œ	z  }d
d|iz  }	t        t        j                  |	«      «      ‚d x} x}x}x}x}x}x}}y )Nz
Quiet Gameza walkza gta style open cityrC   rD   )zƒ%(py13)s
{%(py13)s = %(py2)s
{%(py2)s = %(py0)s.city_kind
}(%(py9)s
{%(py9)s = %(py3)s(%(py5)s, %(py7)s)
}, %(py11)s)
} == %(py16)srF   r   )	rH   rI   rJ   rL   rM   rN   rl   Úpy13rm   úassert %(py18)sÚpy18rR   )
r]   rn   r^   r_   ra   rp   Ú@py_assert15Ú@py_assert14rq   Ú@py_format19s
             r   Útest_prompt_counts_as_wordsrz   N   sû   € Ü�<‰<ÐY˜lÐY¨HÐYœ˜l¨HÓ5ÐYÐ7NÐY‰<Ð5Ð7NÓOÐYÐSYÐYÐOÐSYÑY×Y×YÖYÐOÐSY×Y×Y×Y×Y×YÑYŒ2×Y×YÓYŒ2×Y×YÔYˆ<×Y×Y×Y×Y×YÐYœ×Y×YÓYœ×Y×YÔY˜l×Y×YÒY¨H×Y×YÒYÐ5×Y×YÒYÐ7N×Y×YÒYÐO×Y×YÒYÐSY×Y×Y×Y×Y×Y×Y×YÖYr   zstage,view,lane,fits))ÚnoneÚthirdÚcustomT)ÚroomÚfirstr}   F)r{   Útopr}   T)Úboardr|   r}   F)r{   Úsider}   F)r{   r|   ÚquickFc                 óþ  — t         j                  }d}d}t        ||| ||¬«      } ||«      }||u }	|	�s>t        j                  d|	fd||f«      dt        j                  «       v st        j                  t         «      rt        j                  t         «      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      dt        j                  «       v st        j                  | «      rt        j                  | «      ndd	t        j                  «       v st        j                  |«      rt        j                  |«      nd	d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      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}x}x}x}x}}	y )NÚGTAúan open city)r   r   r   rg   )z§%(py14)s
{%(py14)s = %(py2)s
{%(py2)s = %(py0)s.city_fits
}(%(py12)s
{%(py12)s = %(py3)s(%(py5)s, %(py7)s, stage=%(py8)s, view=%(py9)s, lane=%(py10)s)
})
} is %(py16)srF   r   r   r   r   Úfits)rH   rI   rJ   rL   rM   Úpy8rN   Úpy10rO   rQ   rm   ru   rv   )rF   Ú	city_fitsr   rT   rU   rV   rW   rX   rY   rZ   r[   )r   r   r   r‡   r]   rn   r^   r`   ro   rw   rq   ry   s               r   Útest_fits_follows_the_town_ruler‹   R   s]  € ô �<‰<Ð`˜eÐ` ^Ð`œ˜e ^¸5ÀtÐRVÔWÐ`‰<ÐWÓXÐ`ÐXÐ\`Ð`×`×`Ö`ÐXÐ\`×`×`×`×`×`Ñ`Œ2×`×`Ó`Œ2×`×`Ô`ˆ<×`×`×`×`×`Ð`œ×`×`Ó`œ×`×`Ô`˜e×`×`Ò` ^×`×`×`×`×`Ð`¸5×`×`Ó`¸5×`×`×`×`×`Ò`Àt×`×`Ó`Àt×`×`×`×`×`Ò`ÐRV×`×`Ó`ÐRV×`×`Ô`ÐW×`×`Ò`ÐX×`×`×`×`×`Ð`Ð\`×`×`Ó`Ð\`×`×`×`×`×`×`×`Ô`r   c                 óp  — t         j                  }d}d}d}t        |||¬«      }d}d} ||||| «      }d }	||	u }
|
�sËt        j                  d|
fd||	f«      d	t        j                  «       v st        j                  t         «      rt        j                  t         «      nd	t        j                  |«      d
t        j                  «       v st        j                  t        «      rt        j                  t        «      nd
t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      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}x}x}x}x}x}x}x}
}	t         j                  }d}d}d}t        |||¬«      }d}d} ||||| «      }d }	||	u }
|
�sËt        j                  d|
fd||	f«      d	t        j                  «       v st        j                  t         «      rt        j                  t         «      nd	t        j                  |«      d
t        j                  «       v st        j                  t        «      rt        j                  t        «      nd
t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      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}x}x}x}x}x}x}x}
}	y )Nr…   r†   r‚   )r   r   r   rg   )z®%(py18)s
{%(py18)s = %(py2)s
{%(py2)s = %(py0)s.city_attachments
}(%(py11)s
{%(py11)s = %(py3)s(%(py5)s, %(py7)s, view=%(py9)s)
}, %(py13)s, %(py15)s, %(py16)s)
} is %(py21)srF   r   r1   )rH   rI   rJ   rL   rM   rN   rl   rt   Úpy15rm   rv   Úpy21zassert %(py23)sÚpy23r�   )r   )z¯%(py18)s
{%(py18)s = %(py2)s
{%(py2)s = %(py0)s.city_attachments
}(%(py11)s
{%(py11)s = %(py3)s(%(py5)s, %(py7)s, stage=%(py9)s)
}, %(py13)s, %(py15)s, %(py16)s)
} is %(py21)s©rF   Úcity_attachmentsr   rT   rU   rV   rW   rX   rY   rZ   r[   )r1   r]   rn   r^   r_   ra   rp   rx   Ú@py_assert17Ú@py_assert20Ú@py_assert19Ú@py_format22Ú@py_format24s                r   Ú$test_board_and_side_view_get_no_cityr—   ^   sŒ  € Ü×ÑÐ` UÐ`¨NÐ`ÀÐ`œu U¨NÀÔHÐ`È!Ð`ÈRÐ`ÑÐHÈ!ÈRÐQWÓXÐ`Ð\`Ð`ÐXÐ\`Ð`×`×`Ö`ÐXÐ\`×`×`×`×`×`Ñ`Œ2×`×`Ó`Œ2×`×`Ô`Ð×`×`×`×`×`Ð`œu×`×`Ó`œu×`×`Ô` U×`×`Ò`¨N×`×`Ò`À×`×`Ò`ÐH×`×`Ò`È!×`×`Ò`ÈR×`×`×`×`×`Ð`ÐQW×`×`Ó`ÐQW×`×`Ô`ÐX×`×`Ò`Ð\`×`×`×`×`×`×`×`×`Ñ`Ü×ÑÐb UÐb¨NÐbÀ'Ðbœu U¨NÀ'ÔJÐbÈAÐbÈrÐbÑÐJÈAÈrÐSYÓZÐbÐ^bÐbÐZÐ^bÐb×b×bÖbÐZÐ^b×b×b×b×b×bÑbŒ2×b×bÓbŒ2×b×bÔbÐ×b×b×b×b×bÐbœu×b×bÓbœu×b×bÔb U×b×bÒb¨N×b×bÒbÀ'×b×bÒbÐJ×b×bÒbÈA×b×bÒbÈr×b×b×b×b×bÐbÐSY×b×bÓbÐSY×b×bÔbÐZ×b×bÒbÐ^b×b×b×b×b×b×b×b×bÒbr   c                 óŽ
  — t        j                  t        dd«      dd| «      \  }}}|D �cg c]  }|d   ‘Œ	 }}dg}||k(  }|slt        j                  d|fd||f«      t        j
                  |«      t        j
                  |«      d	œz  }d
d|iz  }	t        t        j                  |	«      «      ‚d x}x}}g }
d}||v }|}|rd}||v}|}|�sXt        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  }|
j                  |«       |rŒ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  }|
j                  |«       t        j                  |
d«      i z  }dd|iz  }t        t        j                  |«      «      ‚d x}x}
x}x}x}}t        |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}}g }
|d   }d}||k(  }|}|rQ|d    }t        j                  }d}| |z  }|j                   } |«       } ||«      }|j"                  } |«       }||k(  }|}|�st        j                  d|fd!||f«      t        j
                  |«      t        j
                  |«      d"œz  }	d#d$|	iz  }|
j                  |«       |�rat        j                  dfd%f«      t        j
                  |«      d&t        j                  «       v st        j                  t        «      rt        j
                  t        «      nd&t        j
                  «      d't        j                  «       v st        j                  | «      rt        j
                  | «      nd't        j
                  «      t        j
                  «      t        j
                  «      t        j
                  «      t        j
                  «      t        j
                  |«      d(œ
z  } d)d*| iz  }!|
j                  |!«       t        j                  |
d«      i z  }"d+d,|"iz  }#t        t        j                  |#«      «      ‚d x}x}
x}x}x}x}x}x}x}x}x}x}x}x}}y c c}w )-Nr…   r†   é   r   Úfilenamer,   rD   )z%(py1)s == %(py4)s)Úpy1rK   zassert %(py6)sÚpy6Úatt3Úatt4©Úin©z%(py3)s in %(py5)sÚcontract©rJ   rL   ú%(py7)srM   ©únot in)z%(py10)s not in %(py12)s©r‰   rO   ú%(py14)srQ   r   úassert %(py17)sÚpy17r.   r-   ÚkindrC   Úsha)z%(py3)s == %(py6)s)rJ   rœ   z%(py8)srˆ   )zÕ%(py11)s == %(py29)s
{%(py29)s = %(py27)s
{%(py27)s = %(py25)s
{%(py25)s = %(py15)s
{%(py15)s = %(py13)s.sha256
}(%(py23)s
{%(py23)s = %(py21)s
{%(py21)s = (%(py16)s / %(py18)s).read_bytes
}()
})
}.hexdigest
}()
}Úhashlibr1   )
rl   rt   r�   rm   rv   rŽ   r�   Úpy25Úpy27Úpy29z%(py31)sÚpy31zassert %(py34)sÚpy34)rF   r‘   r   rT   rU   rY   rZ   r[   rV   rW   rX   ÚappendÚ_format_boolopr?   r­   Úsha256Ú
read_bytesÚ	hexdigest)$r1   Úattsr¢   ÚmetaÚaÚ@py_assert0Ú@py_assert3Ú@py_assert2Ú@py_format5Ú@py_format7r]   rn   Ú@py_assert9r`   Ú@py_format6Ú@py_format8rb   rc   Ú@py_format16Ú@py_format18Ú@py_assert5ra   rx   r’   r”   r“   Ú@py_assert22Ú@py_assert24Ú@py_assert26Ú@py_assert28rp   Ú@py_format9Ú@py_format30Ú@py_format32Ú@py_format33Ú@py_format35s$                                       r   Ú.test_city_attachment_is_code_only_and_numberedrÏ   c   s:  € Ü×.Ñ.¬u°U¸NÓ/KÈQÐPRÐTZÓ[Ñ€Dˆ(�DØ#'Ö(˜aˆAˆj‹MÐ(Ð>Ð(Ð-=Ð,>Ð>Ð(Ð,>Ñ>×>×>Õ>Ð(Ð,>×>×>Ó>Ð(×>×>Ò>Ð,>×>×>×>×>×>×>Ó>Ù8ˆ6Ð8ˆ6�XÐÔ8 &Ð8 &°Ð"8×8×8×8Ð8ˆ6�X×8×8Ó8ˆ6×8×8×8×8×8Ð8�X×8×8Ó8�X×8×8×8×8×8×8×8 &°×8×8Ó8 &×8×8×8×8×8Ð8°×8×8Ó8°×8×8×8×8×8×8×8×8×8×8×8×8×8Ô8Ü�D˜‘GÓ˜YÑ'Ð2¨7Ð2Ð'¨7Ñ2×2×2Õ2Ð'¨7×2×2Ó2Ð'×2×2Ò2¨7×2×2×2×2×2×2Ó2Ùyˆ4�‰<Ðy˜6Ðyˆ<˜6Ñ!Ôy d¨5¡kÐy´W·^±^ÐyÐN^ÐyÀVÐN^ÑE^ÐyÐE^×DjÑDjÐyÑDjÓDlÐy±^ÐDlÓ5mÐyÐ5m×5wÑ5wÐyÑ5wÓ5yÐy kÐ5yÑ&y×y×y×yÐyˆ<˜6×y×yÓyˆ<×y×yÒy˜6×y×y×y×y×y×yÖy kÐ5y×y×yÓy k×y×y×y×y×yÐy´W×y×yÓy´W×y×yÔy°^×y×y×y×y×yÐyÀV×y×yÓyÀV×y×yÔyÐN^×y×yÒyÐDj×y×yÒyÐDl×y×yÒyÐ5m×y×yÒyÐ5w×y×yÒyÐ5y×y×y×y×y×y×y×y×y×y×y×y×y×y×y×yÕyùò )s   «Uc                 óp  — t        j                  t        dd«      dd| «      \  }}}dD ]æ  }||v }|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                  |«      rt        j                  |«      nd	d
œz  }t        j                  |«      dz   d|iz  }t        t        j                  |«      «      ‚d }Œè 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}}y )Nr…   r†   r   r   )zsrc/lib/cityr.   Ú
createCityzsrc/lib/city/game.mjsÚspawnÚ	collidersz
carPoses()zNever draw buildings or roadsrŸ   )z%(py0)s in %(py2)sÚneedler¢   )rH   rI   z
>assert %(py4)srK   z$Player vehicles come from the Garager¥   )z%(py1)s not in %(py3)s)r›   rJ   zassert %(py5)srL   )rF   r‘   r   rT   rU   rV   rW   rX   rY   Ú_format_assertmsgrZ   r[   )r1   Ú_r¢   rÔ   r]   Ú@py_format3r¾   r»   r½   Ú@py_format4rÁ   s              r   Ú*test_contract_names_the_files_and_the_lawsrÙ   k   s  € Ü×(Ñ(¬¨u°nÓ)EÀqÈ"ÈfÓU�N€A€x�ð4ò *ˆà˜Ð!×)×)Õ)ˆv˜×)×)×)×)×)Ñ)ˆv×)×)Ó)ˆv×)×)×)×)×)Ò)˜×)×)Ó)˜×)×)×)Ñ) 6×)×)×)×)×)Õ)ð*ð 2ÐAÐ1¸ÐA×A×AÕAÐ1¸×A×AÓAÐ1×A×A×A×A×AÐA¸×A×AÓA¸×A×A×A×A×A×AÔAr   c                 óJ  — t        j                  t        dd«      dd| d¬«      \  }}}g }d}||v }|}|rd}||v }|}|�sXt        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  }
|j                  |
«       |rŒ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  }|j                  |«       t        j                  |d«      i z  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}x}}y )Nr…   r†   r   r   T)Úgaragez!vehicles come from the Garage kitÚcreateVehiclerŸ   r¡   r¢   r£   r¤   rM   )z%(py10)s in %(py12)sr§   r¨   rQ   r©   rª   )rF   r‘   r   rT   rU   rY   rV   rW   rX   r³   r´   rZ   r[   )r1   rÖ   r¢   r]   r½   rn   r»   rÀ   r`   rÁ   rÂ   rb   rc   rÃ   rÄ   s                  r   Ú4test_garage_attached_brings_the_cars_from_the_garagerÝ   s   sõ   € Ü×(Ñ(¬¨u°nÓ)EÀqÈ"ÈfÐ]aÔb�N€A€x�ÙZÐ.ÐZÐ.°(Ð:ÔZ¸ÐZ¸ÐRZÐ?Z×Z×Z×ZÐZÐ.°(×Z×ZÓZÐ.×Z×Z×Z×Z×ZÐZ°(×Z×ZÓZ°(×Z×Z×Z×Z×Z×Z×Z¸ÐRZ×Z×ZÓZ¸×Z×Z×Z×Z×ZÐZÐRZ×Z×ZÓZÐRZ×Z×Z×Z×Z×Z×Z×Z×Z×Z×Z×Z×Z×ZÕZr   c                 ó  — t         j                  }d}d}t        ||«      }d}d} ||||| «      }d }||u }	|	�s·t        j                  d|	fd||f«      dt        j                  «       v st        j                  t         «      rt        j                  t         «      ndt        j                  |«      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	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}x}x}x}x}x}x}	}y )Nr…   r†   r   r   rg   )zž%(py16)s
{%(py16)s = %(py2)s
{%(py2)s = %(py0)s.city_attachments
}(%(py9)s
{%(py9)s = %(py3)s(%(py5)s, %(py7)s)
}, %(py11)s, %(py13)s, %(py14)s)
} is %(py19)srF   r   r0   )rH   rI   rJ   rL   rM   rN   rl   rt   rQ   rm   Úpy19zassert %(py21)srŽ   r�   )r0   r]   rn   r^   r_   ra   rp   rw   Ú@py_assert18r’   Ú@py_format20r•   s               r   Útest_missing_tar_means_no_cityrâ   x   s2  € Ü×ÑÐU UÐU¨NÐUœu U¨NÓ;ÐU¸QÐUÀÐUÑÐ;¸QÀÀHÓMÐUÐQUÐUÐMÐQUÐU×U×UÖUÐMÐQU×U×U×U×U×UÑUŒ2×U×UÓUŒ2×U×UÔUÐ×U×U×U×U×UÐUœu×U×UÓUœu×U×UÔU U×U×UÒU¨N×U×UÒUÐ;×U×UÒU¸Q×U×UÒUÀ×U×U×U×U×UÐUÀH×U×UÓUÀH×U×UÔUÐM×U×UÒUÐQU×U×U×U×U×U×U×U×UÐUr   )r   r{   r|   r}   r   )%Ú__doc__ÚbuiltinsrV   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterT   r6   r­   r   r   Útypesr   r   ÚpytestÚ
games_cityrF   r   ÚdictÚstrÚbytesr*   Úfixturer1   r?   ÚmarkÚparametrizerd   ri   rr   rz   r‹   r—   rÏ   rÙ   rÝ   râ   © r   r   ú<module>rò      s  ðÙ 3ç  „ ƒÛ Û 	Û Ý &ã ã óSð
��S˜%�ZÑ ð  Uó ð ‡�ñó ðò
Yð ‡�×Ñ˜ò 
)ó 
ñ7ó
ð7ð ‡�×Ñ˜ò )ó ñ5óð5òfò
Zð ‡�×ÑÐ/ò 2ó ñaóðaòcò
zòBò[ó
Vr   