tiny-safe-mod 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/stringex-2.8.6/Gemfile +51 -0
- data/stringex-2.8.6/MIT-LICENSE +20 -0
- data/stringex-2.8.6/README.md +162 -0
- data/stringex-2.8.6/Rakefile +57 -0
- data/stringex-2.8.6/VERSION +1 -0
- data/stringex-2.8.6/init.rb +3 -0
- data/stringex-2.8.6/lib/stringex/acts_as_url/adapter/active_record.rb +23 -0
- data/stringex-2.8.6/lib/stringex/acts_as_url/adapter/base.rb +240 -0
- data/stringex-2.8.6/lib/stringex/acts_as_url/adapter/data_mapper.rb +61 -0
- data/stringex-2.8.6/lib/stringex/acts_as_url/adapter/mongoid.rb +37 -0
- data/stringex-2.8.6/lib/stringex/acts_as_url/adapter.rb +26 -0
- data/stringex-2.8.6/lib/stringex/acts_as_url.rb +107 -0
- data/stringex-2.8.6/lib/stringex/configuration/acts_as_url.rb +50 -0
- data/stringex-2.8.6/lib/stringex/configuration/base.rb +58 -0
- data/stringex-2.8.6/lib/stringex/configuration/configurator.rb +25 -0
- data/stringex-2.8.6/lib/stringex/configuration/string_extensions.rb +20 -0
- data/stringex-2.8.6/lib/stringex/configuration.rb +4 -0
- data/stringex-2.8.6/lib/stringex/configuration_lite.rb +3 -0
- data/stringex-2.8.6/lib/stringex/core_ext.rb +10 -0
- data/stringex-2.8.6/lib/stringex/localization/backend/base.rb +13 -0
- data/stringex-2.8.6/lib/stringex/localization/backend/i18n.rb +86 -0
- data/stringex-2.8.6/lib/stringex/localization/backend/internal.rb +47 -0
- data/stringex-2.8.6/lib/stringex/localization/conversion_expressions.rb +154 -0
- data/stringex-2.8.6/lib/stringex/localization/converter.rb +129 -0
- data/stringex-2.8.6/lib/stringex/localization/default_conversions.rb +89 -0
- data/stringex-2.8.6/lib/stringex/localization.rb +112 -0
- data/stringex-2.8.6/lib/stringex/rails/railtie.rb +10 -0
- data/stringex-2.8.6/lib/stringex/string_extensions.rb +228 -0
- data/stringex-2.8.6/lib/stringex/unidecoder.rb +82 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x00.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x01.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x02.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x03.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x04.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x05.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x06.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x07.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x09.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x0a.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x0b.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x0c.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x0d.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x0e.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x0f.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x10.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x11.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x12.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x13.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x14.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x15.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x16.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x17.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x18.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x1e.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x1f.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x20.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x21.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x22.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x23.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x24.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x25.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x26.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x27.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x28.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x2e.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x2f.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x30.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x31.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x32.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x33.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x4d.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x4e.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x4f.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x50.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x51.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x52.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x53.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x54.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x55.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x56.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x57.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x58.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x59.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x5a.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x5b.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x5c.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x5d.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x5e.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x5f.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x60.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x61.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x62.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x63.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x64.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x65.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x66.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x67.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x68.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x69.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x6a.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x6b.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x6c.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x6d.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x6e.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x6f.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x70.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x71.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x72.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x73.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x74.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x75.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x76.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x77.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x78.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x79.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x7a.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x7b.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x7c.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x7d.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x7e.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x7f.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x80.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x81.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x82.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x83.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x84.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x85.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x86.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x87.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x88.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x89.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x8a.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x8b.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x8c.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x8d.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x8e.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x8f.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x90.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x91.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x92.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x93.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x94.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x95.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x96.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x97.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x98.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x99.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x9a.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x9b.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x9c.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x9d.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x9e.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/x9f.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xa0.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xa1.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xa2.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xa3.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xa4.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xac.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xad.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xae.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xaf.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb0.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb1.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb2.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb3.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb4.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb5.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb6.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb7.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb8.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xb9.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xba.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xbb.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xbc.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xbd.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xbe.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xbf.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc0.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc1.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc2.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc3.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc4.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc5.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc6.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc7.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc8.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xc9.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xca.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xcb.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xcc.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xcd.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xce.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xcf.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xd0.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xd1.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xd2.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xd3.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xd4.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xd5.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xd6.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xd7.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xf9.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xfa.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xfb.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xfc.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xfd.yml +256 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xfe.yml +257 -0
- data/stringex-2.8.6/lib/stringex/unidecoder_data/xff.yml +257 -0
- data/stringex-2.8.6/lib/stringex/version.rb +8 -0
- data/stringex-2.8.6/lib/stringex.rb +17 -0
- data/stringex-2.8.6/lib/stringex_lite.rb +15 -0
- data/stringex-2.8.6/locales/da.yml +76 -0
- data/stringex-2.8.6/locales/de.yml +77 -0
- data/stringex-2.8.6/locales/en.yml +69 -0
- data/stringex-2.8.6/locales/fr.yml +72 -0
- data/stringex-2.8.6/locales/nb.yml +76 -0
- data/stringex-2.8.6/locales/nl.yml +69 -0
- data/stringex-2.8.6/locales/no.yml +76 -0
- data/stringex-2.8.6/locales/pl.yml +88 -0
- data/stringex-2.8.6/locales/pt-BR.yml +69 -0
- data/stringex-2.8.6/locales/ru.yml +69 -0
- data/stringex-2.8.6/locales/sv.yml +76 -0
- data/stringex-2.8.6/stringex.gemspec +290 -0
- data/stringex-2.8.6/test/performance/localization_performance_test.rb +24 -0
- data/stringex-2.8.6/test/test_helper.rb +2 -0
- data/stringex-2.8.6/test/unit/acts_as_url/adapter/activerecord.rb +71 -0
- data/stringex-2.8.6/test/unit/acts_as_url/adapter/datamapper.rb +83 -0
- data/stringex-2.8.6/test/unit/acts_as_url/adapter/mongoid.rb +82 -0
- data/stringex-2.8.6/test/unit/acts_as_url_configuration_test.rb +51 -0
- data/stringex-2.8.6/test/unit/acts_as_url_integration_test.rb +425 -0
- data/stringex-2.8.6/test/unit/localization/da_test.rb +118 -0
- data/stringex-2.8.6/test/unit/localization/de_test.rb +118 -0
- data/stringex-2.8.6/test/unit/localization/default_test.rb +115 -0
- data/stringex-2.8.6/test/unit/localization/en_test.rb +118 -0
- data/stringex-2.8.6/test/unit/localization/fr_test.rb +118 -0
- data/stringex-2.8.6/test/unit/localization/nl_test.rb +118 -0
- data/stringex-2.8.6/test/unit/localization/pl_test.rb +118 -0
- data/stringex-2.8.6/test/unit/localization/pt_br_test.rb +118 -0
- data/stringex-2.8.6/test/unit/localization/ru_test.rb +130 -0
- data/stringex-2.8.6/test/unit/localization/sv_test.rb +118 -0
- data/stringex-2.8.6/test/unit/localization_18n_failure_test.rb +40 -0
- data/stringex-2.8.6/test/unit/localization_test.rb +162 -0
- data/stringex-2.8.6/test/unit/string_extensions_configuration_test.rb +17 -0
- data/stringex-2.8.6/test/unit/string_extensions_test.rb +321 -0
- data/stringex-2.8.6/test/unit/unicode_point_suite/basic_greek_test.rb +113 -0
- data/stringex-2.8.6/test/unit/unicode_point_suite/basic_latin_test.rb +144 -0
- data/stringex-2.8.6/test/unit/unicode_point_suite/codepoint_test_helper.rb +32 -0
- data/stringex-2.8.6/test/unit/unidecoder/bad_localization.yml +1 -0
- data/stringex-2.8.6/test/unit/unidecoder/localization.yml +4 -0
- data/stringex-2.8.6/test/unit/unidecoder_test.rb +104 -0
- data/stringex-2.8.6/test/unit/version_test.rb +12 -0
- data/tiny-safe-mod.gemspec +11 -0
- metadata +293 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require "test_helper"
|
|
4
|
+
require "stringex"
|
|
5
|
+
|
|
6
|
+
if RUBY_VERSION.to_f < 1.9
|
|
7
|
+
$KCODE = "U"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Try loading RedCloth but it's okay if it's not there
|
|
11
|
+
begin
|
|
12
|
+
gem 'RedCloth'
|
|
13
|
+
rescue LoadError
|
|
14
|
+
puts
|
|
15
|
+
puts ">> Could not load RedCloth. String#to_html was not tested."
|
|
16
|
+
puts ">> Please gem install RedCloth if you'd like to use this functionality."
|
|
17
|
+
puts
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class StringExtensionsTest < Test::Unit::TestCase
|
|
21
|
+
def setup
|
|
22
|
+
Stringex::Localization.reset!
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_to_url
|
|
26
|
+
{
|
|
27
|
+
"<p>This has 100% too much <em>formatting</em></p>" =>
|
|
28
|
+
"this-has-100-percent-too-much-formatting",
|
|
29
|
+
"Tea & crumpets & <strong>crêpes</strong> for me!" =>
|
|
30
|
+
"tea-and-crumpets-and-crepes-for-me",
|
|
31
|
+
"The Suspense... Is... Killing Me" =>
|
|
32
|
+
"the-suspense-dot-dot-dot-is-dot-dot-dot-killing-me",
|
|
33
|
+
"How to use attr_accessible and attr_protected" =>
|
|
34
|
+
"how-to-use-attr-accessible-and-attr-protected",
|
|
35
|
+
"I'm just making sure there's nothing wrong with things!" =>
|
|
36
|
+
"im-just-making-sure-theres-nothing-wrong-with-things",
|
|
37
|
+
"foo = bar and bar=foo" =>
|
|
38
|
+
"foo-equals-bar-and-bar-equals-foo",
|
|
39
|
+
"Period.period" =>
|
|
40
|
+
"period-dot-period",
|
|
41
|
+
"Will…This Work?" =>
|
|
42
|
+
"will-dot-dot-dot-this-work",
|
|
43
|
+
"We check the D.N.A for matches" =>
|
|
44
|
+
"we-check-the-dna-for-matches",
|
|
45
|
+
"We check the D.N.A. for matches" =>
|
|
46
|
+
"we-check-the-dna-for-matches",
|
|
47
|
+
"Go to the Y.M.C.America" =>
|
|
48
|
+
"go-to-the-ymcamerica",
|
|
49
|
+
"He shops at J.C. Penney" =>
|
|
50
|
+
"he-shops-at-jc-penney",
|
|
51
|
+
"¼ pound with cheese" =>
|
|
52
|
+
"one-fourth-pound-with-cheese",
|
|
53
|
+
"Will's Ferrel" =>
|
|
54
|
+
"wills-ferrel",
|
|
55
|
+
"Капитал" =>
|
|
56
|
+
"kapital",
|
|
57
|
+
"Ελλάδα" =>
|
|
58
|
+
"ellada",
|
|
59
|
+
"中文" =>
|
|
60
|
+
"zhong-wen",
|
|
61
|
+
"Paul Cézanne" =>
|
|
62
|
+
"paul-cezanne",
|
|
63
|
+
"21'17ʼ51" =>
|
|
64
|
+
"21-17-51",
|
|
65
|
+
"ITCZ÷1 (21°17ʼ51.78”N / 89°35ʼ28.18”O / 26-04-08 / 09:00 am)" =>
|
|
66
|
+
"itcz-divided-by-1-21-degrees-17-51-dot-78-n-slash-89-degrees-35-28-dot-18-o-slash-26-04-08-slash-09-00-am",
|
|
67
|
+
"/" =>
|
|
68
|
+
"slash",
|
|
69
|
+
"私はガラスを食べられます。それは私を傷つけません。" =>
|
|
70
|
+
"si-hagarasuwoshi-beraremasu-sorehasi-woshang-tukemasen",
|
|
71
|
+
"ǝ is a magical string" =>
|
|
72
|
+
"at-is-a-magical-string",
|
|
73
|
+
"either | or" =>
|
|
74
|
+
"either-or",
|
|
75
|
+
"La Maison d`Uliva" =>
|
|
76
|
+
"la-maison-duliva",
|
|
77
|
+
"カッページ・テラスに日系カフェ&バー、店内にDJブースも - シンガポール経済新聞" =>
|
|
78
|
+
"katupeziterasuniri-xi-kahue-and-ba-dian-nei-nidjbusumo-singaporujing-ji-xin-wen",
|
|
79
|
+
"AVアンプ、ホームシアターシステム、スピーカーシステム等" =>
|
|
80
|
+
"avanpu-homusiatasisutemu-supikasisutemudeng",
|
|
81
|
+
"У лукоморья дуб зеленый" =>
|
|
82
|
+
"u-lukomoria-dub-zielienyi",
|
|
83
|
+
"Here are some {braces}" =>
|
|
84
|
+
"here-are-some-braces",
|
|
85
|
+
"$1,000" =>
|
|
86
|
+
"1000-dollars",
|
|
87
|
+
"«zut alors»" =>
|
|
88
|
+
"zut-alors",
|
|
89
|
+
"Rabbits aren't real" =>
|
|
90
|
+
"rabbits-arent-real",
|
|
91
|
+
"R$ isn't R" =>
|
|
92
|
+
"reais-isnt-r",
|
|
93
|
+
"Last Friday Night (T.G.I.F.)" =>
|
|
94
|
+
"last-friday-night-tgif",
|
|
95
|
+
"foo` bar" =>
|
|
96
|
+
"foo-bar",
|
|
97
|
+
"foo~ bar" =>
|
|
98
|
+
"foo-bar"
|
|
99
|
+
}.each do |html, plain|
|
|
100
|
+
assert_equal plain, html.to_url
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_to_url_with_danish_characters
|
|
105
|
+
Stringex::Localization.locale = :da
|
|
106
|
+
assert_equal "roedgroed-med-floede", "Rødgrød med fløde".to_url
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def test_to_url_with_excludes
|
|
110
|
+
assert_equal "So Fucking Special", "So Fucking Special".to_url(:exclude => "So Fucking Special")
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_to_url_without_forcing_downcase
|
|
114
|
+
assert_equal "I-have-CAPS", "I have CAPS".to_url(:force_downcase => false)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def test_to_url_with_limit
|
|
118
|
+
assert_equal "I am much too long".to_url(:limit => 13), "i-am-much-too"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_to_url_with_alternate_whitespace_replacement
|
|
122
|
+
assert_equal "under_scores", "Under Scores".to_url(:replace_whitespace_with => "_")
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_to_url_with_alternate_whitespace_replacement_and_with_limit_and_with_truncate_words_disabled
|
|
126
|
+
assert_equal "i_am_much", "I am much too long".to_url(:replace_whitespace_with => "_", :limit => 12, :truncate_words => false)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def test_remove_formatting
|
|
130
|
+
{
|
|
131
|
+
"<p>This has 100% too much <em>formatting</em></p>" =>
|
|
132
|
+
"This has 100 percent too much formatting",
|
|
133
|
+
"Tea & crumpets & <strong>crêpes</strong> for me!" =>
|
|
134
|
+
"Tea and crumpets and crepes for me"
|
|
135
|
+
}.each do |html, plain|
|
|
136
|
+
assert_equal plain, html.remove_formatting
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def test_strip_html_tags
|
|
141
|
+
{
|
|
142
|
+
"<h1><em>This</em> is good but <strong>that</strong> is better</h1>" =>
|
|
143
|
+
"This is good but that is better",
|
|
144
|
+
"<p>This is invalid XHTML but valid HTML, right?" =>
|
|
145
|
+
"This is invalid XHTML but valid HTML, right?",
|
|
146
|
+
"<p class='foo'>Everything goes!</p>" => "Everything goes!",
|
|
147
|
+
"<ol>This is completely invalid and just plain wrong</p>" =>
|
|
148
|
+
"This is completely invalid and just plain wrong"
|
|
149
|
+
}.each do |html, plain|
|
|
150
|
+
assert_equal plain, html.strip_html_tags
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def test_convert_accented_html_entities
|
|
155
|
+
{
|
|
156
|
+
"å" => "a",
|
|
157
|
+
"è" => "e",
|
|
158
|
+
"î" => "i",
|
|
159
|
+
"Ø" => "O",
|
|
160
|
+
"ü" => "u",
|
|
161
|
+
"Ñ" => "N",
|
|
162
|
+
"ç" => "c"
|
|
163
|
+
}.each do |entitied, plain|
|
|
164
|
+
assert_equal plain, entitied.convert_accented_html_entities
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def test_localized_vulgar_fractions_conversion
|
|
169
|
+
Stringex::Localization.backend = :internal
|
|
170
|
+
Stringex::Localization.store_translations :da, :vulgar_fractions, {
|
|
171
|
+
:one_fourth => "en fjerdedel",
|
|
172
|
+
:half => "en halv"
|
|
173
|
+
}
|
|
174
|
+
Stringex::Localization.locale = :da
|
|
175
|
+
|
|
176
|
+
{
|
|
177
|
+
"¼" => "en fjerdedel",
|
|
178
|
+
"½" => "en halv"
|
|
179
|
+
}.each do |entitied, plain|
|
|
180
|
+
assert_equal plain, entitied.convert_vulgar_fractions
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def test_localized_html_entities_conversion
|
|
185
|
+
Stringex::Localization.backend = :internal
|
|
186
|
+
Stringex::Localization.store_translations :de, :html_entities, {
|
|
187
|
+
:amp => "und",
|
|
188
|
+
:ellipsis => " prik prik prik",
|
|
189
|
+
:frac14 => "en fjerdedel"
|
|
190
|
+
}
|
|
191
|
+
Stringex::Localization.locale = :de
|
|
192
|
+
|
|
193
|
+
{
|
|
194
|
+
"Tea & Sympathy" => "Tea und Sympathy",
|
|
195
|
+
"To be continued…" => "To be continued prik prik prik",
|
|
196
|
+
"Det var til ¼ af prisen" => "Det var til en fjerdedel af prisen"
|
|
197
|
+
}.each do |entitied, plain|
|
|
198
|
+
assert_equal plain, entitied.convert_miscellaneous_html_entities
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def test_convert_smart_punctuation
|
|
203
|
+
{
|
|
204
|
+
"“smart quotes”" => '"smart quotes"',
|
|
205
|
+
"‘dumb quotes’" => "'dumb quotes'",
|
|
206
|
+
"I love you, but…" => "I love you, but...",
|
|
207
|
+
}.each do |smart, plain|
|
|
208
|
+
assert_equal plain, smart.convert_smart_punctuation
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def test_localized_character_conversions
|
|
213
|
+
Stringex::Localization.backend = :internal
|
|
214
|
+
Stringex::Localization.store_translations :de, :characters, {
|
|
215
|
+
"and" => "und",
|
|
216
|
+
:percent => "procent"
|
|
217
|
+
}
|
|
218
|
+
Stringex::Localization.locale = :de
|
|
219
|
+
|
|
220
|
+
{
|
|
221
|
+
"ich & dich" => "ich und dich",
|
|
222
|
+
"det var 100% godt" => "det var 100 procent godt"
|
|
223
|
+
}.each do |misc, plain|
|
|
224
|
+
assert_equal plain, misc.convert_miscellaneous_characters
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def test_replace_whitespace
|
|
229
|
+
{
|
|
230
|
+
"this has too much space" => "this has too much space",
|
|
231
|
+
"\t\tThis is merely formatted with superfluous whitespace\n" =>
|
|
232
|
+
" This is merely formatted with superfluous whitespace "
|
|
233
|
+
}.each do |whitespaced, plain|
|
|
234
|
+
assert_equal plain, whitespaced.replace_whitespace
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
assert_equal "now-with-more-hyphens", "now with more hyphens".replace_whitespace("-")
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def test_collapse
|
|
241
|
+
{
|
|
242
|
+
"too much space" => "too much space",
|
|
243
|
+
" at the beginning" => "at the beginning"
|
|
244
|
+
}.each do |uncollapsed, plain|
|
|
245
|
+
assert_equal plain, uncollapsed.collapse
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
assert_equal "now-with-hyphens", "----now---------with-hyphens--------".collapse("-")
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
def test_empty_translations
|
|
252
|
+
Stringex::Localization.backend = :internal
|
|
253
|
+
Stringex::Localization.store_translations :de, :characters, {
|
|
254
|
+
:star => "",
|
|
255
|
+
:percent => "prozent"
|
|
256
|
+
}
|
|
257
|
+
Stringex::Localization.locale = :de
|
|
258
|
+
|
|
259
|
+
assert_equal "foobar ist 100 prozent gut", "foo*bar ist 100% gut".convert_miscellaneous_characters
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def test_overriding_to_ascii_allows_utf8_urls
|
|
263
|
+
String.class_eval do
|
|
264
|
+
alias :old_to_ascii :to_ascii
|
|
265
|
+
|
|
266
|
+
def to_ascii
|
|
267
|
+
self
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
{
|
|
272
|
+
"مصدر أمني: مجهولون يطلقون «خرطوش» على متظاهرين بمترو عزبة النخل وإصابة 16" =>
|
|
273
|
+
"مصدر-أمني-مجهولون-يطلقون-«خرطوش»-على-متظاهرين-بمترو-عزبة-النخل-وإصابة-16",
|
|
274
|
+
"c'est ça" =>
|
|
275
|
+
"cest-ça",
|
|
276
|
+
"la muñeca" =>
|
|
277
|
+
"la-muñeca"
|
|
278
|
+
}.each do |original, converted|
|
|
279
|
+
assert_equal converted, original.to_url
|
|
280
|
+
end
|
|
281
|
+
ensure
|
|
282
|
+
String.class_eval do
|
|
283
|
+
remove_method :to_ascii
|
|
284
|
+
|
|
285
|
+
def to_ascii
|
|
286
|
+
old_to_ascii
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def test_remove_nonreadable_characters
|
|
292
|
+
cases = { "Jörg Immendor\u0014. Les théâtres" => "jorg-immendor-les-theatres",
|
|
293
|
+
}
|
|
294
|
+
cases.each do |plain, converted|
|
|
295
|
+
assert_equal converted, plain.to_url
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
if defined?(RedCloth)
|
|
300
|
+
def test_to_html
|
|
301
|
+
{
|
|
302
|
+
"h1. A Solution" => "<h1>A Solution</h1>",
|
|
303
|
+
"I hated wrapping textilize around a string.\n\nIt always felt dirty." =>
|
|
304
|
+
"<p>I hated wrapping textilize around a string.</p>\n<p>It always felt dirty.</p>",
|
|
305
|
+
"I think _this_ is awesome" => "<p>I think <em>this</em> is awesome</p>",
|
|
306
|
+
"Um... _*really*_, man" => "<p>Um… <em><strong>really</strong></em>, man</p>"
|
|
307
|
+
}.each do |plain, html|
|
|
308
|
+
assert_equal html, plain.to_html
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def test_to_html_lite
|
|
313
|
+
{
|
|
314
|
+
"I have no pee on me" => "I have no pee on me",
|
|
315
|
+
"But I _do_ get Textile!" => "But I <em>do</em> get Textile!"
|
|
316
|
+
}.each do |plain, html|
|
|
317
|
+
assert_equal html, plain.to_html(:lite)
|
|
318
|
+
end
|
|
319
|
+
end
|
|
320
|
+
end
|
|
321
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require "test/unit"
|
|
4
|
+
require "stringex"
|
|
5
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "codepoint_test_helper.rb")
|
|
6
|
+
include CodepointTestHelper
|
|
7
|
+
|
|
8
|
+
class BasicGreekTest < Test::Unit::TestCase
|
|
9
|
+
# This test suite is just regression test and debugging
|
|
10
|
+
# to better transliterate the Basic Latin Unicode codepoints
|
|
11
|
+
#
|
|
12
|
+
# http://unicode.org/charts/
|
|
13
|
+
# http://unicode.org/charts/PDF/U0000.pdf
|
|
14
|
+
|
|
15
|
+
# NOTE: I can't figure out how to test control characters.
|
|
16
|
+
# Get weird results trying to pack them to unicode.
|
|
17
|
+
|
|
18
|
+
def test_greek_letters
|
|
19
|
+
{
|
|
20
|
+
"Α" => "A",
|
|
21
|
+
"Ά" => "A",
|
|
22
|
+
"Β" => "B",
|
|
23
|
+
"Γ" => "G",
|
|
24
|
+
"Δ" => "D",
|
|
25
|
+
"Ε" => "E",
|
|
26
|
+
"Έ" => "E",
|
|
27
|
+
"Ζ" => "Z",
|
|
28
|
+
"Η" => "H",
|
|
29
|
+
"Θ" => "Th",
|
|
30
|
+
"Ι" => "I",
|
|
31
|
+
"Ί" => "I",
|
|
32
|
+
"Ϊ" => "I",
|
|
33
|
+
"Κ" => "K",
|
|
34
|
+
"Λ" => "L",
|
|
35
|
+
"Μ" => "M",
|
|
36
|
+
"Ν" => "N",
|
|
37
|
+
"Ξ" => "Ks",
|
|
38
|
+
"Ο" => "O",
|
|
39
|
+
"Ό" => "O",
|
|
40
|
+
"Π" => "P",
|
|
41
|
+
"Ρ" => "R",
|
|
42
|
+
"Σ" => "S",
|
|
43
|
+
"Τ" => "T",
|
|
44
|
+
"Υ" => "Y",
|
|
45
|
+
"Ϋ" => "Y",
|
|
46
|
+
"Ύ" => "Y",
|
|
47
|
+
"Φ" => "Ph",
|
|
48
|
+
"Χ" => "X",
|
|
49
|
+
"Ψ" => "Ps",
|
|
50
|
+
"Ω" => "O",
|
|
51
|
+
"Ώ" => "O",
|
|
52
|
+
"α" => "a",
|
|
53
|
+
"ά" => "a",
|
|
54
|
+
"β" => "b",
|
|
55
|
+
"γ" => "g",
|
|
56
|
+
"δ" => "d",
|
|
57
|
+
"ε" => "e",
|
|
58
|
+
"έ" => "e",
|
|
59
|
+
"ζ" => "z",
|
|
60
|
+
"η" => "i",
|
|
61
|
+
"ή" => "i",
|
|
62
|
+
"θ" => "th",
|
|
63
|
+
"ι" => "i",
|
|
64
|
+
"ί" => "i",
|
|
65
|
+
"ϊ" => "i",
|
|
66
|
+
"ΐ" => "i",
|
|
67
|
+
"κ" => "k",
|
|
68
|
+
"λ" => "l",
|
|
69
|
+
"μ" => "m",
|
|
70
|
+
"ν" => "n",
|
|
71
|
+
"ξ" => "ks",
|
|
72
|
+
"ο" => "o",
|
|
73
|
+
"ό" => "o",
|
|
74
|
+
"π" => "p",
|
|
75
|
+
"ρ" => "r",
|
|
76
|
+
"σ" => "s",
|
|
77
|
+
"ς" => "s",
|
|
78
|
+
"τ" => "t",
|
|
79
|
+
"υ" => "u",
|
|
80
|
+
"ύ" => "u",
|
|
81
|
+
"ϋ" => "u",
|
|
82
|
+
"ΰ" => "u",
|
|
83
|
+
"φ" => "ph",
|
|
84
|
+
"χ" => "x",
|
|
85
|
+
"ψ" => "ps",
|
|
86
|
+
"ω" => "o",
|
|
87
|
+
"ώ" => "o"
|
|
88
|
+
}.each do |letter, ascii|
|
|
89
|
+
assert_equal letter.to_ascii, ascii
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def test_greek_words
|
|
95
|
+
{
|
|
96
|
+
"Καλημέρα" => "Kalimera",
|
|
97
|
+
"Προϊόν" => "Proion",
|
|
98
|
+
"Θαλασσογραφία" => "Thalassographia",
|
|
99
|
+
"Να μας πάρεις μακριά" => "Na mas pareis makria",
|
|
100
|
+
"να μας πας στα πέρα μέρη" => "na mas pas sta pera meri",
|
|
101
|
+
"φύσα θάλασσα πλατιά" => "phusa thalassa platia",
|
|
102
|
+
"φύσα αγέρι φύσα αγέρι" => "phusa ageri phusa ageri",
|
|
103
|
+
"Αν θέλεις να λέγεσαι άνθρωπος" => "An theleis na legesai anthropos",
|
|
104
|
+
"δεν θα πάψεις ούτε στιγμή ν΄αγωνίζεσαι για την ειρήνη και" => "den tha papseis oute stigmi nagonizesai gia tin eirini kai",
|
|
105
|
+
"για το δίκαιο." => "gia to dikaio.",
|
|
106
|
+
"Θα βγείς στους δρόμους, θα φωνάξεις, τα χείλια σου θα" => "Tha bgeis stous dromous, tha phonakseis, ta xeilia sou tha",
|
|
107
|
+
"ματώσουν απ΄τις φωνές" => "matosoun aptis phones",
|
|
108
|
+
"το πρόσωπό σου θα ματώσει από τις σφαίρες – μα ούτε βήμα πίσω." => "to prosopo sou tha matosei apo tis sphaires -- ma oute bima piso.",
|
|
109
|
+
}.each do |letter, ascii|
|
|
110
|
+
assert_equal letter.to_ascii, ascii
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
require "test/unit"
|
|
4
|
+
require "stringex"
|
|
5
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "codepoint_test_helper.rb")
|
|
6
|
+
include CodepointTestHelper
|
|
7
|
+
|
|
8
|
+
class BasicLatinTest < Test::Unit::TestCase
|
|
9
|
+
# This test suite is just regression test and debugging
|
|
10
|
+
# to better transliterate the Basic Latin Unicode codepoints
|
|
11
|
+
#
|
|
12
|
+
# http://unicode.org/charts/
|
|
13
|
+
# http://unicode.org/charts/PDF/U0000.pdf
|
|
14
|
+
|
|
15
|
+
# NOTE: I can't figure out how to test control characters.
|
|
16
|
+
# Get weird results trying to pack them to unicode.
|
|
17
|
+
|
|
18
|
+
def test_spaces
|
|
19
|
+
assert_equal_encoded " ", %w{0020 00a0}
|
|
20
|
+
assert_equal_encoded "", %w{200b 2060}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_exclamation_marks
|
|
24
|
+
assert_equal_encoded "!", %w{0021 2762}
|
|
25
|
+
assert_equal_encoded "!!", "203c"
|
|
26
|
+
assert_equal_encoded "", "00a1"
|
|
27
|
+
assert_equal_encoded "?!", "203d"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_quotation_marks
|
|
31
|
+
assert_equal_encoded "\"", %w{0022 02ba 2033 3003}
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_apostrophes
|
|
35
|
+
assert_equal_encoded "'", %w{0027 02b9 02bc 02c8 2032}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_asterisks
|
|
39
|
+
assert_equal_encoded "*", %w{002a 066d 204e 2217 26b9 2731}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_commas
|
|
43
|
+
assert_equal_encoded ",", %w{002c 060c}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_periods
|
|
47
|
+
assert_equal_encoded ".", %w{002e 06d4}
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_hyphens
|
|
51
|
+
assert_equal_encoded "-", %w{002d 2010 2011 2012 2212}
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_endash
|
|
55
|
+
assert_equal_encoded "--", %w{2013 2015}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_emdash
|
|
59
|
+
assert_equal_encoded "---", %w{2014}
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_dotleader
|
|
63
|
+
assert_equal_encoded "..", %w{2025}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_ellipsis
|
|
67
|
+
assert_equal_encoded "...", %w{2026}
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_slashes
|
|
71
|
+
assert_equal_encoded "/", %w{002f 2044 2215}
|
|
72
|
+
assert_equal_encoded "\\", %w{005c 2216}
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_colons
|
|
76
|
+
assert_equal_encoded ":", %w{003a 2236}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_semicolons
|
|
80
|
+
assert_equal_encoded ";", %w{003b 061b}
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_less_thans
|
|
84
|
+
assert_equal_encoded "<", %w{003c 2039 2329 27e8 3008}
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_equals
|
|
88
|
+
assert_equal_encoded "=", "003d"
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def test_greater_thans
|
|
92
|
+
assert_equal_encoded ">", %w{003e 203a 232a 27e9 3009}
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_question_marks
|
|
96
|
+
assert_equal_encoded "?", %w{003f 061f}
|
|
97
|
+
assert_equal_encoded "", "00bf"
|
|
98
|
+
assert_equal_encoded "?!", %w{203d 2048}
|
|
99
|
+
assert_equal_encoded "!?", "2049"
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_circumflexes
|
|
103
|
+
assert_equal_encoded "^", %w{005e 2038 2303}
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def test_underscores
|
|
107
|
+
assert_equal_encoded "_", %w{005f 02cd 2017}
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def test_grave_accents
|
|
111
|
+
assert_equal_encoded "'", %w{02cb 2035}
|
|
112
|
+
# Ascii grave accent should remain as ascii!
|
|
113
|
+
assert_equal_encoded "`", "0060"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def test_bars
|
|
117
|
+
assert_equal_encoded "|", %w{007c 2223 2758}
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_tildes
|
|
121
|
+
assert_equal_encoded "~", %w{007e 02dc 2053 223c ff5e}
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_related_letters
|
|
125
|
+
{
|
|
126
|
+
"B" => "212c",
|
|
127
|
+
"C" => %w{2102 212d},
|
|
128
|
+
"E" => %w{2107 2130},
|
|
129
|
+
"F" => "2131",
|
|
130
|
+
"H" => %w{210b 210c 210d},
|
|
131
|
+
"I" => %w{0130 0406 04c0 2110 2111 2160},
|
|
132
|
+
"K" => "212a",
|
|
133
|
+
"L" => "2112",
|
|
134
|
+
"M" => "2133",
|
|
135
|
+
"N" => "2115",
|
|
136
|
+
"P" => "2119",
|
|
137
|
+
"Q" => "211a",
|
|
138
|
+
"R" => %w{211b 211c 211d},
|
|
139
|
+
"Z" => %w{2124 2128}
|
|
140
|
+
}.each do |expected, encode_mes|
|
|
141
|
+
assert_equal_encoded expected, encode_mes
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
# 100% shorthand
|
|
4
|
+
module CodepointTestHelper
|
|
5
|
+
def assert_equal_encoded(expected, encode_mes)
|
|
6
|
+
# Killing a duck because Ruby 1.9 doesn't mix Enumerable into String
|
|
7
|
+
encode_mes = [encode_mes] if encode_mes.is_a?(String)
|
|
8
|
+
encode_mes.each do |encode_me|
|
|
9
|
+
encoded = encode(encode_me)
|
|
10
|
+
actual = encoded.to_ascii
|
|
11
|
+
if expected == actual
|
|
12
|
+
# Let's not retest it
|
|
13
|
+
assert true
|
|
14
|
+
else
|
|
15
|
+
message = "<#{expected.inspect}> expected but was\n<#{actual.inspect}>\n"
|
|
16
|
+
message << " defined in #{Stringex::Unidecoder.in_yaml_file(encoded)}"
|
|
17
|
+
reporting_class = defined?(Test::Unit::AssertionFailedError) ?
|
|
18
|
+
Test::Unit::AssertionFailedError : ActiveSupport::TestCase::Assertion
|
|
19
|
+
raise reporting_class.new(message)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
def encode(codepoint)
|
|
26
|
+
Stringex::Unidecoder.encode(codepoint)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def which_yaml(codepoint)
|
|
30
|
+
Stringex::Unidecoder.in_yaml_file(encode(codepoint))
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Anything not correct
|