|
5 | 5 | RSpec.describe Mysql2::Error do
|
6 | 6 | let(:client) { Mysql2::Client.new(DatabaseCredentials['root']) }
|
7 | 7 |
|
8 |
| - let :error do |
| 8 | + let(:error) do |
9 | 9 | begin
|
10 | 10 | client.query("HAHAHA")
|
11 | 11 | rescue Mysql2::Error => e
|
12 | 12 | error = e
|
13 |
| - ensure |
14 |
| - client.close |
15 | 13 | end
|
16 | 14 |
|
17 | 15 | error
|
|
27 | 25 | end
|
28 | 26 |
|
29 | 27 | context 'encoding' do
|
30 |
| - let :error do |
31 |
| - client = Mysql2::Client.new(DatabaseCredentials['root']) |
| 28 | + let(:valid_utf8) { '造字' } |
| 29 | + let(:error) do |
32 | 30 | begin
|
33 |
| - client.query("\xE9\x80\xA0\xE5\xAD\x97") |
| 31 | + client.query(valid_utf8) |
34 | 32 | rescue Mysql2::Error => e
|
35 |
| - error = e |
36 |
| - ensure |
37 |
| - client.close |
| 33 | + e |
38 | 34 | end
|
39 |
| - |
40 |
| - error |
41 | 35 | end
|
42 | 36 |
|
43 |
| - let :bad_err do |
44 |
| - client = Mysql2::Client.new(DatabaseCredentials['root']) |
| 37 | + let(:invalid_utf8) { "\xE5\xC6\x7D\x1F" } |
| 38 | + let(:bad_err) do |
45 | 39 | begin
|
46 |
| - client.query("\xE5\xC6\x7D\x1F") |
| 40 | + client.query(invalid_utf8) |
47 | 41 | rescue Mysql2::Error => e
|
48 |
| - error = e |
49 |
| - ensure |
50 |
| - client.close |
| 42 | + e |
51 | 43 | end
|
| 44 | + end |
| 45 | + |
| 46 | + before do |
| 47 | + pending('String#encoding is not defined') unless String.public_method_defined?(:encoding) |
52 | 48 |
|
53 |
| - error |
| 49 | + # sanity check |
| 50 | + expect(valid_utf8.encoding).to eql(Encoding::UTF_8) |
| 51 | + expect(valid_utf8).to be_valid_encoding |
| 52 | + |
| 53 | + expect(invalid_utf8.encoding).to eql(Encoding::UTF_8) |
| 54 | + expect(invalid_utf8).to_not be_valid_encoding |
54 | 55 | end
|
55 | 56 |
|
56 | 57 | it "returns error messages as UTF-8 by default" do
|
57 |
| - pending('String#encoding is not defined') unless String.public_method_defined?(:encoding) |
58 | 58 | with_internal_encoding nil do
|
59 | 59 | expect(error.message.encoding).to eql(Encoding::UTF_8)
|
60 | 60 | error.message.valid_encoding?
|
|
67 | 67 | end
|
68 | 68 |
|
69 | 69 | it "returns sql state as ASCII" do
|
70 |
| - pending('String#encoding is not defined') unless String.public_method_defined?(:encoding) |
71 | 70 | expect(error.sql_state.encoding).to eql(Encoding::US_ASCII)
|
72 | 71 | error.sql_state.valid_encoding?
|
73 | 72 | end
|
74 | 73 |
|
75 | 74 | it "returns error messages and sql state in Encoding.default_internal if set" do
|
76 |
| - pending('String#encoding is not defined') unless String.public_method_defined?(:encoding) |
77 | 75 | with_internal_encoding 'UTF-16LE' do
|
78 | 76 | expect(error.message.encoding).to eql(Encoding.default_internal)
|
79 | 77 | error.message.valid_encoding?
|
|
0 commit comments