source: EcnlProtoTool/trunk/mruby-1.3.0/mrbgems/mruby-string-ext/test/string.rb@ 331

Last change on this file since 331 was 331, checked in by coas-nagasima, 6 years ago

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 15.9 KB
Line 
1##
2# String(Ext) Test
3
4UTF8STRING = ("\343\201\202".size == 1)
5
6assert('String.try_convert') do
7 assert_nil String.try_convert(nil)
8 assert_nil String.try_convert(:foo)
9 assert_equal "", String.try_convert("")
10 assert_equal "1,2,3", String.try_convert("1,2,3")
11end
12
13assert('String#getbyte') do
14 str1 = "hello"
15 bytes1 = [104, 101, 108, 108, 111]
16 assert_equal bytes1[0], str1.getbyte(0)
17 assert_equal bytes1[-1], str1.getbyte(-1)
18 assert_equal bytes1[6], str1.getbyte(6)
19
20 str2 = "\xFF"
21 bytes2 = [0xFF]
22 assert_equal bytes2[0], str2.getbyte(0)
23end
24
25assert('String#setbyte') do
26 str1 = "hello"
27 h = "H".getbyte(0)
28 str1.setbyte(0, h)
29 assert_equal(h, str1.getbyte(0))
30 assert_equal("Hello", str1)
31end
32
33assert("String#setbyte raises IndexError if arg conversion resizes String") do
34 $s = "01234\n"
35 class Tmp
36 def to_i
37 $s.chomp! ''
38 95
39 end
40 end
41 tmp = Tmp.new
42 assert_raise(IndexError) { $s.setbyte(5, tmp) }
43end
44
45assert('String#byteslice') do
46 str1 = "hello"
47 assert_equal("e", str1.byteslice(1))
48 assert_equal("o", str1.byteslice(-1))
49 assert_equal("ell", str1.byteslice(1..3))
50 assert_equal("el", str1.byteslice(1...3))
51end
52
53assert('String#dump') do
54 ("\1" * 100).dump # should not raise an exception - regress #1210
55 "\0".inspect == "\"\\000\"" and
56 "foo".dump == "\"foo\""
57end
58
59assert('String#strip') do
60 s = " abc "
61 "".strip == "" and " \t\r\n\f\v".strip == "" and
62 "\0a\0".strip == "\0a" and
63 "abc".strip == "abc" and
64 " abc".strip == "abc" and
65 "abc ".strip == "abc" and
66 " abc ".strip == "abc" and
67 s == " abc "
68end
69
70assert('String#lstrip') do
71 s = " abc "
72 s.lstrip
73 "".lstrip == "" and " \t\r\n\f\v".lstrip == "" and
74 "\0a\0".lstrip == "\0a\0" and
75 "abc".lstrip == "abc" and
76 " abc".lstrip == "abc" and
77 "abc ".lstrip == "abc " and
78 " abc ".lstrip == "abc " and
79 s == " abc "
80end
81
82assert('String#rstrip') do
83 s = " abc "
84 s.rstrip
85 "".rstrip == "" and " \t\r\n\f\v".rstrip == "" and
86 "\0a\0".rstrip == "\0a" and
87 "abc".rstrip == "abc" and
88 " abc".rstrip == " abc" and
89 "abc ".rstrip == "abc" and
90 " abc ".rstrip == " abc" and
91 s == " abc "
92end
93
94assert('String#strip!') do
95 s = " abc "
96 t = "abc"
97 s.strip! == "abc" and s == "abc" and t.strip! == nil
98end
99
100assert('String#lstrip!') do
101 s = " abc "
102 t = "abc "
103 s.lstrip! == "abc " and s == "abc " and t.lstrip! == nil
104end
105
106assert('String#rstrip!') do
107 s = " abc "
108 t = " abc"
109 s.rstrip! == " abc" and s == " abc" and t.rstrip! == nil
110end
111
112assert('String#swapcase') do
113 assert_equal "hELLO", "Hello".swapcase
114 assert_equal "CyBeR_pUnK11", "cYbEr_PuNk11".swapcase
115end
116
117assert('String#swapcase!') do
118 s = "Hello"
119 t = s.clone
120 t.swapcase!
121 assert_equal s.swapcase, t
122end
123
124assert('String#concat') do
125 assert_equal "Hello World!", "Hello " << "World" << 33
126 assert_equal "Hello World!", "Hello ".concat("World").concat(33)
127
128 o = Object.new
129 def o.to_str
130 "to_str"
131 end
132 assert_equal "hi to_str", "hi " << o
133
134 assert_raise(TypeError) { "".concat(Object.new) }
135end
136
137assert('String#casecmp') do
138 assert_equal 1, "abcdef".casecmp("abcde")
139 assert_equal 0, "aBcDeF".casecmp("abcdef")
140 assert_equal(-1, "abcdef".casecmp("abcdefg"))
141 assert_equal 0, "abcdef".casecmp("ABCDEF")
142 o = Object.new
143 def o.to_str
144 "ABCDEF"
145 end
146 assert_equal 0, "abcdef".casecmp(o)
147end
148
149assert('String#start_with?') do
150 assert_true "hello".start_with?("heaven", "hell")
151 assert_true !"hello".start_with?("heaven", "paradise")
152 assert_true !"h".start_with?("heaven", "hell")
153 assert_raise TypeError do "hello".start_with?(true) end
154end
155
156assert('String#end_with?') do
157 assert_true "string".end_with?("ing", "mng")
158 assert_true !"string".end_with?("str", "tri")
159 assert_true !"ng".end_with?("ing", "mng")
160 assert_raise TypeError do "hello".end_with?(true) end
161end
162
163assert('String#partition') do
164 assert_equal ["a", "x", "axa"], "axaxa".partition("x")
165 assert_equal ["aaaaa", "", ""], "aaaaa".partition("x")
166 assert_equal ["", "", "aaaaa"], "aaaaa".partition("")
167 assert_equal ["", "a", "aaaa"], "aaaaa".partition("a")
168 assert_equal ["aaaa", "b", ""], "aaaab".partition("b")
169 assert_equal ["", "b", "aaaa"], "baaaa".partition("b")
170 assert_equal ["", "", ""], "".partition("a")
171end
172
173assert('String#rpartition') do
174 assert_equal ["axa", "x", "a"], "axaxa".rpartition("x")
175 assert_equal ["", "", "aaaaa"], "aaaaa".rpartition("x")
176 assert_equal ["aaaaa", "", ""], "aaaaa".rpartition("")
177 assert_equal ["aaaa", "a", ""], "aaaaa".rpartition("a")
178 assert_equal ["aaaa", "b", ""], "aaaab".rpartition("b")
179 assert_equal ["", "b", "aaaa"], "baaaa".rpartition("b")
180 assert_equal ["", "", ""], "".rpartition("a")
181end
182
183assert('String#hex') do
184 assert_equal 16, "10".hex
185 assert_equal 255, "ff".hex
186 assert_equal 16, "0x10".hex
187 assert_equal (-16), "-0x10".hex
188 assert_equal 0, "xyz".hex
189 assert_equal 16, "10z".hex
190 assert_equal 16, "1_0".hex
191 assert_equal 0, "".hex
192end
193
194assert('String#oct') do
195 assert_equal 8, "10".oct
196 assert_equal 7, "7".oct
197 assert_equal 0, "8".oct
198 assert_equal 0, "9".oct
199 assert_equal 0, "xyz".oct
200 assert_equal 8, "10z".oct
201 assert_equal 8, "1_0".oct
202 assert_equal 8, "010".oct
203 assert_equal (-8), "-10".oct
204end
205
206assert('String#chr') do
207 assert_equal "a", "abcde".chr
208 # test Fixnum#chr as well
209 assert_equal "a", 97.chr
210end
211
212assert('String#lines') do
213 assert_equal ["Hel\n", "lo\n", "World!"], "Hel\nlo\nWorld!".lines
214 assert_equal ["Hel\n", "lo\n", "World!\n"], "Hel\nlo\nWorld!\n".lines
215 assert_equal ["\n", "\n", "\n"], "\n\n\n".lines
216 assert_equal [], "".lines
217end
218
219assert('String#clear') do
220 # embed string
221 s = "foo"
222 assert_equal("", s.clear)
223 assert_equal("", s)
224
225 # not embed string and not shared string
226 s = "foo" * 100
227 a = s
228 assert_equal("", s.clear)
229 assert_equal("", s)
230 assert_equal("", a)
231
232 # shared string
233 s = "foo" * 100
234 a = s[10, 90] # create shared string
235 assert_equal("", s.clear) # clear
236 assert_equal("", s) # s is cleared
237 assert_not_equal("", a) # a should not be affected
238end
239
240assert('String#slice!') do
241 a = "AooBar"
242 b = a.dup
243 assert_equal "A", a.slice!(0)
244 assert_equal "AooBar", b
245
246 a = "FooBar"
247 assert_equal "r", a.slice!(-1)
248 assert_equal "FooBa", a
249
250 a = "FooBar"
251 assert_nil a.slice!(6)
252 assert_nil a.slice!(-7)
253 assert_equal "FooBar", a
254
255 a = "FooBar"
256 assert_equal "Foo", a.slice!(0, 3)
257 assert_equal "Bar", a
258
259 a = "FooBar"
260 assert_equal "Bar", a.slice!(-3, 3)
261 assert_equal "Foo", a
262
263 a = "FooBar"
264 assert_equal "", a.slice!(6, 2)
265 assert_equal "FooBar", a
266
267 a = "FooBar"
268 assert_nil a.slice!(-7,10)
269 assert_equal "FooBar", a
270
271 a = "FooBar"
272 assert_equal "Foo", a.slice!(0..2)
273 assert_equal "Bar", a
274
275 a = "FooBar"
276 assert_equal "Bar", a.slice!(-3..-1)
277 assert_equal "Foo", a
278
279 a = "FooBar"
280 assert_equal "", a.slice!(6..2)
281 assert_equal "FooBar", a
282
283 a = "FooBar"
284 assert_nil a.slice!(-10..-7)
285 assert_equal "FooBar", a
286
287 a = "FooBar"
288 assert_equal "Foo", a.slice!("Foo")
289 assert_equal "Bar", a
290
291 a = "FooBar"
292 assert_nil a.slice!("xyzzy")
293 assert_equal "FooBar", a
294
295 assert_raise(ArgumentError) { "foo".slice! }
296end
297
298assert('String#succ') do
299 assert_equal "", "".succ
300 assert_equal "1", "0".succ
301 assert_equal "10", "9".succ
302 assert_equal "01", "00".succ
303 assert_equal "a1", "a0".succ
304 assert_equal "A1", "A0".succ
305 assert_equal "10", "09".succ
306 assert_equal "b0", "a9".succ
307 assert_equal "B0", "A9".succ
308
309 assert_equal "b", "a".succ
310 assert_equal "aa", "z".succ
311 assert_equal "ab", "aa".succ
312 assert_equal "Ab", "Aa".succ
313 assert_equal "0b", "0a".succ
314 assert_equal "ba", "az".succ
315 assert_equal "Ba", "Az".succ
316 assert_equal "1a", "0z".succ
317
318 assert_equal "B", "A".succ
319 assert_equal "AA", "Z".succ
320 assert_equal "AB", "AA".succ
321 assert_equal "aB", "aA".succ
322 assert_equal "0B", "0A".succ
323 assert_equal "BA", "AZ".succ
324 assert_equal "bA", "aZ".succ
325 assert_equal "1A", "0Z".succ
326
327 assert_equal ".", "-".succ
328 assert_equal "\x01\x00", "\xff".succ
329 assert_equal "-b", "-a".succ
330 assert_equal "-aa", "-z".succ
331 assert_equal "-a-b-", "-a-a-".succ
332 assert_equal "-b-", "-a-".succ
333 assert_equal "-aa-", "-z-".succ
334 assert_equal "あb", "あa".succ
335 assert_equal "あba", "あaz".succ
336
337 a = ""; a.succ!
338 assert_equal "", a
339 a = "0"; a.succ!
340 assert_equal "1", a
341 a = "9"; a.succ!
342 assert_equal "10", a
343 a = "00"; a.succ!
344 assert_equal "01", a
345 a = "a0"; a.succ!
346 assert_equal "a1", a
347 a = "A0"; a.succ!
348 assert_equal "A1", a
349 a = "09"; a.succ!
350 assert_equal "10", a
351 a = "a9"; a.succ!
352 assert_equal "b0", a
353 a = "A9"; a.succ!
354 assert_equal "B0", a
355
356 a = "a"; a.succ!
357 assert_equal "b", a
358 a = "z"; a.succ!
359 assert_equal "aa", a
360 a = "aa"; a.succ!
361 assert_equal "ab", a
362 a = "Aa"; a.succ!
363 assert_equal "Ab", a
364 a = "0a"; a.succ!
365 assert_equal "0b", a
366 a = "az"; a.succ!
367 assert_equal "ba", a
368 a = "Az"; a.succ!
369 assert_equal "Ba", a
370 a = "0z"; a.succ!
371 assert_equal "1a", a
372
373 a = "A"; a.succ!
374 assert_equal "B", a
375 a = "Z"; a.succ!
376 assert_equal "AA", a
377 a = "AA"; a.succ!
378 assert_equal "AB", a
379 a = "aA"; a.succ!
380 assert_equal "aB", a
381 a = "0A"; a.succ!
382 assert_equal "0B", a
383 a = "AZ"; a.succ!
384 assert_equal "BA", a
385 a = "aZ"; a.succ!
386 assert_equal "bA", a
387 a = "0Z"; a.succ!
388 assert_equal "1A", a
389
390 a = "-"; a.succ!
391 assert_equal ".", a
392 a = "\xff"; a.succ!
393 assert_equal "\x01\x00", a
394 a = "-a"; a.succ!
395 assert_equal "-b", a
396 a = "-z"; a.succ!
397 assert_equal "-aa", a
398 a = "-a-a-"; a.succ!
399 assert_equal "-a-b-", a
400 a = "-a-"; a.succ!
401 assert_equal "-b-", a
402 a = "-z-"; a.succ!
403 assert_equal "-aa-", a
404 a = "あb"; a.succ!
405 assert_equal "あc", a
406 a = "あaz"; a.succ!
407 assert_equal "あba", a
408end
409
410assert('String#next') do
411 assert_equal "01", "00".next
412
413 a = "00"; a.next!
414 assert_equal "01", a
415end
416
417assert('String#insert') do
418 assert_equal "Xabcd", "abcd".insert(0, 'X')
419 assert_equal "abcXd", "abcd".insert(3, 'X')
420 assert_equal "abcdX", "abcd".insert(4, 'X')
421 assert_equal "abXcd", "abcd".insert(-3, 'X')
422 assert_equal "abcdX", "abcd".insert(-1, 'X')
423 assert_raise(IndexError) { "abcd".insert(5, 'X') }
424 assert_raise(IndexError) { "abcd".insert(-6, 'X') }
425
426 a = "abcd"
427 a.insert(0, 'X')
428 assert_equal "Xabcd", a
429end
430
431assert('String#prepend') do
432 a = "world"
433 assert_equal "hello world", a.prepend("hello ")
434 assert_equal "hello world", a
435end
436
437assert('String#ljust') do
438 assert_equal "hello", "hello".ljust(4)
439 assert_equal "hello ", "hello".ljust(20)
440 assert_equal 20, "hello".ljust(20).length
441 assert_equal "hello123412341234123", "hello".ljust(20, '1234')
442 assert_equal "hello", "hello".ljust(-3)
443end
444
445assert('String#rjust') do
446 assert_equal "hello", "hello".rjust(4)
447 assert_equal " hello", "hello".rjust(20)
448 assert_equal 20, "hello".rjust(20).length
449 assert_equal "123412341234123hello", "hello".rjust(20, '1234')
450 assert_equal "hello", "hello".rjust(-3)
451end
452
453if UTF8STRING
454 assert('String#ljust with UTF8') do
455 assert_equal "helloん ", "helloん".ljust(20)
456 assert_equal "helloó ", "helloó".ljust(34)
457 assert_equal 34, "helloó".ljust(34).length
458 assert_equal "helloんんんんんんんんんんんんんん", "hello".ljust(19, 'ん')
459 assert_equal "helloんんんんんんんんんんんんんんん", "hello".ljust(20, 'ん')
460 end
461
462 assert('String#rjust with UTF8') do
463 assert_equal " helloん", "helloん".rjust(20)
464 assert_equal " helloó", "helloó".rjust(34)
465 # assert_equal 34, "helloó".rjust(34).length
466 assert_equal "んんんんんんんんんんんんんんhello", "hello".rjust(19, 'ん')
467 assert_equal "んんんんんんんんんんんんんんんhello", "hello".rjust(20, 'ん')
468 end
469
470 assert('UTF8 byte counting') do
471 ret = ' '
472 ret[-6..-1] = "helloó"
473 assert_equal 34, ret.length
474 end
475end
476
477assert('String#ljust should not change string') do
478 a = "hello"
479 a.ljust(20)
480 assert_equal "hello", a
481end
482
483assert('String#rjust should not change string') do
484 a = "hello"
485 a.rjust(20)
486 assert_equal "hello", a
487end
488
489assert('String#ljust should raise on zero width padding') do
490 assert_raise(ArgumentError) { "foo".ljust(10, '') }
491end
492
493assert('String#rjust should raise on zero width padding') do
494 assert_raise(ArgumentError) { "foo".rjust(10, '') }
495end
496
497assert('String#upto') do
498 assert_equal %w(a8 a9 b0 b1 b2 b3 b4 b5 b6), "a8".upto("b6").to_a
499 assert_equal ["9", "10", "11"], "9".upto("11").to_a
500 assert_equal [], "25".upto("5").to_a
501 assert_equal ["07", "08", "09", "10", "11"], "07".upto("11").to_a
502
503if UTF8STRING
504 assert_equal ["あ", "ぃ", "い", "ぅ", "う", "ぇ", "え", "ぉ", "お"], "あ".upto("お").to_a
505end
506
507 assert_equal ["9", ":", ";", "<", "=", ">", "?", "@", "A"], "9".upto("A").to_a
508
509 a = "aa"
510 start = "aa"
511 count = 0
512 assert_equal("aa", a.upto("zz") {|s|
513 assert_equal(start, s)
514 start.succ!
515 count += 1
516 })
517 assert_equal(676, count)
518
519 a = "a"
520 start = "a"
521 count = 0
522 assert_equal("a", a.upto("a") {|s|
523 assert_equal(start, s)
524 start.succ!
525 count += 1
526 })
527 assert_equal(1, count)
528
529 a = "a"
530 start = "a"
531 count = 0
532 assert_equal("a", a.upto("b", true) {|s|
533 assert_equal(start, s)
534 start.succ!
535 count += 1
536 })
537 assert_equal(1, count)
538
539 a = "0"
540 start = "0"
541 count = 0
542 assert_equal("0", a.upto("0") {|s|
543 assert_equal(start, s)
544 start.succ!
545 count += 1
546 })
547 assert_equal(1, count)
548
549 a = "0"
550 start = "0"
551 count = 0
552 assert_equal("0", a.upto("-1") {|s|
553 assert_equal(start, s)
554 start.succ!
555 count += 1
556 })
557 assert_equal(0, count)
558
559 a = "-1"
560 start = "-1"
561 count = 0
562 assert_equal("-1", a.upto("-2") {|s|
563 assert_equal(start, s)
564 start.succ!
565 count += 1
566 })
567 assert_equal(2, count)
568
569 assert_raise(TypeError) { "a".upto(:c) {} }
570end
571
572assert('String#ord') do
573 got = "hello!".split('').map {|x| x.ord}
574 expect = [104, 101, 108, 108, 111, 33]
575 unless UTF8STRING
576 got << "\xff".ord
577 expect << 0xff
578 end
579 assert_equal expect, got
580end
581
582assert('String#ord(UTF-8)') do
583 got = "こんにちは世界!".split('').map {|x| x.ord}
584 expect = [0x3053,0x3093,0x306b,0x3061,0x306f,0x4e16,0x754c,0x21]
585 assert_equal expect, got
586end if UTF8STRING
587
588assert('String#chr') do
589 assert_equal "h", "hello!".chr
590end
591assert('String#chr(UTF-8)') do
592 assert_equal "こ", "こんにちは世界!".chr
593end if UTF8STRING
594
595assert('String#chars') do
596 expect = ["h", "e", "l", "l", "o", "!"]
597 assert_equal expect, "hello!".chars
598 s = ""
599 "hello!".chars do |x|
600 s += x
601 end
602 assert_equal "hello!", s
603end
604
605assert('String#chars(UTF-8)') do
606 expect = ['こ', 'ん', 'に', 'ち', 'は', '世', '界', '!']
607 assert_equal expect, "こんにちは世界!".chars
608 s = ""
609 "こんにちは世界!".chars do |x|
610 s += x
611 end
612 assert_equal "こんにちは世界!", s
613end if UTF8STRING
614
615assert('String#each_char') do
616 s = ""
617 "hello!".each_char do |x|
618 s += x
619 end
620 assert_equal "hello!", s
621end
622
623assert('String#each_char(UTF-8)') do
624 s = ""
625 "こんにちは世界!".each_char do |x|
626 s += x
627 end
628 assert_equal "こんにちは世界!", s
629end if UTF8STRING
630
631assert('String#codepoints') do
632 expect = [104, 101, 108, 108, 111, 33]
633 assert_equal expect, "hello!".codepoints
634 cp = []
635 "hello!".codepoints do |x|
636 cp << x
637 end
638 assert_equal expect, cp
639end
640
641assert('String#codepoints(UTF-8)') do
642 expect = [12371, 12435, 12395, 12385, 12399, 19990, 30028, 33]
643 assert_equal expect, "こんにちは世界!".codepoints
644 cp = []
645 "こんにちは世界!".codepoints do |x|
646 cp << x
647 end
648 assert_equal expect, cp
649end if UTF8STRING
650
651assert('String#each_codepoint') do
652 expect = [104, 101, 108, 108, 111, 33]
653 cp = []
654 "hello!".each_codepoint do |x|
655 cp << x
656 end
657 assert_equal expect, cp
658end
659
660assert('String#each_codepoint(UTF-8)') do
661 expect = [12371, 12435, 12395, 12385, 12399, 19990, 30028, 33]
662 cp = []
663 "こんにちは世界!".each_codepoint do |x|
664 cp << x
665 end
666 assert_equal expect, cp
667end if UTF8STRING
Note: See TracBrowser for help on using the repository browser.