summaryrefslogtreecommitdiff
path: root/test/-ext-/string/test_normalize.rb
blob: 8c11bfe3d424a68baa4443eea3b70628c0978bca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# frozen_string_literal: false
require 'test/unit'
require "-test-/string"
require "tempfile"

class Test_StringNormalize < Test::Unit::TestCase
=begin
  def test_normalize_all
    exclude = [
      #0x340, 0x341, 0x343, 0x344
    ]
    (0x0080..0xFFFD).each do |n|
      next if 0xD800 <= n && n <= 0xDFFF
      next if exclude.include? n
      code = n.to_s(16)
      Tempfile.create("#{code}-#{n.chr(Encoding::UTF_8)}-") do |tempfile|
        ary = Dir.glob(File.expand_path("../#{code}-*", tempfile.path))
        assert_equal 1, ary.size
        result = ary[0]
        rn = result[/\/\h+-(.+?)-/, 1]
        #assert_equal tempfile.path, result, "#{rn.dump} is not U+#{n.to_s(16)}"
        r2 = Bug::String.new(result ).normalize_ospath
        rn2 = r2[/\/\h+-(.+?)-/, 1]
        if tempfile.path == result
          if tempfile.path == r2
          else
            puts "U+#{n.to_s(16)} shouldn't be r2#{rn2.dump}"
          end
        else
          if tempfile.path == r2
            # puts "U+#{n.to_s(16)} shouldn't be r#{rn.dump}"
          elsif result == r2
            puts "U+#{n.to_s(16)} shouldn't be #{rn.dump}"
          else
            puts "U+#{n.to_s(16)} shouldn't be r#{rn.dump} r2#{rn2.dump}"
          end
        end
      end
    end
  end
=end

  def test_normalize
    %[
      \u304C \u304B\u3099
      \u3077 \u3075\u309A
      \u308F\u3099 \u308F\u3099
      \u30F4 \u30A6\u3099
      \u30DD \u30DB\u309A
      \u30AB\u303A \u30AB\u303A
      \u00C1 A\u0301
      B\u030A B\u030A
      \u0386 \u0391\u0301
      \u03D3 \u03D2\u0301
      \u0401 \u0415\u0308
      \u2260 =\u0338
      \u{c548} \u{110b}\u{1161}\u{11ab}
    ].scan(/(\S+)\s+(\S+)/) do |expected, src|
      result = Bug::String.new(src).normalize_ospath
      assert_equal expected, result,
        "#{expected.dump} is expected but #{src.dump}"
    end
  end

  def test_not_normalize_kc
    %[
      \u2460
      \u2162
      \u3349
      \u33A1
      \u337B
      \u2116
      \u33CD
      \u2121
      \u32A4
      \u3231
    ].split.each do |src|
      result = Bug::String.new(src).normalize_ospath
      assert_equal src, result,
        "#{src.dump} is expected not to be normalized, but #{result.dump}"
    end
  end

  def test_dont_normalize_hfsplus
    %[
      \u2190\u0338
      \u219A
      \u212B
      \uF90A
      \uF9F4
      \uF961 \uF9DB
      \uF96F \uF3AA
      \uF915 \uF95C \uF9BF
      \uFA0C
      \uFA10
      \uFA19
      \uFA26
    ].split.each do |src|
      result = Bug::String.new(src).normalize_ospath
      assert_equal src, result,
        "#{src.dump} is expected not to be normalized, but #{result.dump}"
    end
  end

  def test_invalid_sequence
    assert_separately(%w[-r-test-/string], <<-'end;')
      assert_equal("\u{fffd}", Bug::String.new("\xff").normalize_ospath)
    end;
  end
end if Bug::String.method_defined?(:normalize_ospath)