Util: sort_statuses(): add test where crazy-structured statuses are input. Failing...
Util: split_with_entities(): now it is more permissive to erroneous entities input. They should be just ignored. Test failing..
StatusStorage: Add test_storage_crazy_statuses() test to SQLite, Memory and AEDelayed. Crazy statuses should be rejected at least on "insert" phase.
t/Main_PSGI_View: response_statuses(): it should render even crazy statuses in HTML without croaking or warning.
t/Filter_Twitter: add test in which crazy statuses are given to the filter.
Add BusyBird::SafeData.
Util: sort_statuses(): use SafeData to access status fields. Pass t/Util_sort_statuses.t
Util: split_with_entities(): use SafeData to access indices. Pass t/Util_split_with_entities.t
t/testlib/StatusStorage/CrazyStatus: add $opts param to test_storage_crazy_statuses() method. It's not used for now, though.
StatusStorage::Memory: put_statuses(): now it inspects the structures of the input statuses and croaks if it finds something wrong.
t/testlib/CrazyStatus: add crazy statuses with 'retweeted_status' field.
Main::PSGI::View: now Text::Xslate warn/error messages are logged by BusyBird::Log.
status.tx, View: make status rendering more robust by passing a SafeData status to status.tx. Besides, wrap invocations of config-given builders with try {} block.
View: on second thought, it would be helpful to report errors from user-defined builders. Revised View so that it would report as many errors from builders as possible.
Main: make default status_permalink_builder more robust with SafeData.
Main: rewrite attached_image_urls_builder with SafeData. This is more compact.
StatusStorage::Memory: avoid autovivification, again.
View: explicitly catch exceptions from builders and report them.
Filter::Twitter: now it accepts crazy statuses.