12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- # -*- coding: utf-8 -*-
- require 'helper'
- module SQLite3
- class TestCollation < SQLite3::TestCase
- class Comparator
- attr_reader :calls
- def initialize
- @calls = []
- end
- def compare left, right
- @calls << [left, right]
- left <=> right
- end
- end
- def setup
- @db = SQLite3::Database.new(':memory:')
- @create = "create table ex(id int, data string)"
- @db.execute(@create);
- [ [1, 'hello'], [2, 'world'] ].each do |vals|
- @db.execute('insert into ex (id, data) VALUES (?, ?)', vals)
- end
- end
- def test_custom_collation
- comparator = Comparator.new
- @db.collation 'foo', comparator
- assert_equal comparator, @db.collations['foo']
- @db.execute('select data from ex order by 1 collate foo')
- assert_equal 1, comparator.calls.length
- end
- def test_remove_collation
- comparator = Comparator.new
- @db.collation 'foo', comparator
- @db.collation 'foo', nil
- assert_nil @db.collations['foo']
- assert_raises(SQLite3::SQLException) do
- @db.execute('select data from ex order by 1 collate foo')
- end
- end
- if RUBY_VERSION >= '1.9.1'
- def test_encoding
- comparator = Comparator.new
- @db.collation 'foo', comparator
- @db.execute('select data from ex order by 1 collate foo')
- a, b = *comparator.calls.first
- assert_equal Encoding.find('UTF-8'), a.encoding
- assert_equal Encoding.find('UTF-8'), b.encoding
- end
- def test_encoding_default_internal
- warn_before = $-w
- $-w = false
- before_enc = Encoding.default_internal
- Encoding.default_internal = 'EUC-JP'
- comparator = Comparator.new
- @db.collation 'foo', comparator
- @db.execute('select data from ex order by 1 collate foo')
- a, b = *comparator.calls.first
- assert_equal Encoding.find('EUC-JP'), a.encoding
- assert_equal Encoding.find('EUC-JP'), b.encoding
- ensure
- Encoding.default_internal = before_enc
- $-w = warn_before
- end
- end
- end
- end
|