| 1 | # test_ktai_db.rb - Unit test for KtaiDB |
|---|
| 2 | # |
|---|
| 3 | # Author:: MIZOGUCHI Coji <mizoguchi.coji at gmail.com> |
|---|
| 4 | # License:: Distributes under the same terms as Ruby |
|---|
| 5 | # |
|---|
| 6 | # $Id$ |
|---|
| 7 | # |
|---|
| 8 | require 'test/unit' |
|---|
| 9 | require 'config/common.rb' |
|---|
| 10 | require 'ssb/ktai_db.rb' |
|---|
| 11 | require 'nkf' |
|---|
| 12 | |
|---|
| 13 | class KtaiDB_Test < Test::Unit::TestCase |
|---|
| 14 | TEST_DATA = <<EOL |
|---|
| 15 | MobilePhoneList [2007-11-27 11:06:58] By http://ke-tai.org/ |
|---|
| 16 | "連番","メーカ名","機種名","機種略名","ユーザエージェント","タイプ1","タイプ2","ブラウザ幅(x)","ブラウザ高さ(y)","表示カラー数","ブラウザキャッシュ","GIF","JPG","PNG","Flash","Flashバージョン","Flashワークメモリ","Javaアプリ","BREW","HTML","SSL","ログイン","クッキー","備考","更新日" |
|---|
| 17 | "1000010","DoCoMo","D501i","D501i","DoCoMo/1.0/D501i","mova","1.0","96","72","2","5","1","0","0","0","0","0","0","0","1","0","0","0","","2007-09-27 23:05:25" |
|---|
| 18 | "1000020","DoCoMo","F501i","F501i","DoCoMo/1.0/F501i","mova","1.0","112","84","2","5","1","0","0","0","0","0","0","0","1","0","0","0","","2007-09-27 23:04:52" |
|---|
| 19 | "1000030","DoCoMo","N501i","N501i","DoCoMo/1.0/N501i","mova","1.0","118","128","2","5","1","1","0","0","0","0","0","0","1","0","0","0","","2007-10-26 12:47:36" |
|---|
| 20 | "1000040","DoCoMo","P501i","P501i","DoCoMo/1.0/P501i","mova","1.0","96","120","2","5","1","0","0","0","0","0","0","0","1","0","0","0","","2007-09-10 21:52:34" |
|---|
| 21 | "1000050","DoCoMo","D502i","D502i","DoCoMo/1.0/D502i","mova","2.0","96","90","256","5","1","0","0","0","0","0","0","0","1","0","0","0","","2007-09-10 21:52:49" |
|---|
| 22 | "1000060","DoCoMo","F502i","F502i","DoCoMo/1.0/F502i","mova","2.0","96","91","256","5","1","0","0","0","0","0","0","0","1","0","0","0","","2007-09-11 22:06:44" |
|---|
| 23 | "1000070","DoCoMo","N502i","N502i","DoCoMo/1.0/N502i","mova","2.0","118","128","4","5","1","0","0","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 24 | "1000080","DoCoMo","P502i","P502i","DoCoMo/1.0/P502i","mova","2.0","96","117","4","5","1","0","0","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 25 | "1000090","DoCoMo","NM502i","NM502i","DoCoMo/1.0/NM502i","mova","2.0","111","106","2","5","1","0","0","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 26 | "1000100","DoCoMo","SO502i","SO502i","DoCoMo/1.0/SO502i","mova","2.0","120","120","4","5","1","0","0","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 27 | "2000010","au","C201H","HI01/HI02","UP.Browser/3.01-HI01/HI02 UP.Link/3.2.1.2","WAP1.0","3","120","51","2","1.4","0","0","0","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 28 | "2000020","au","C202DE","DN01","UP.Browser/3.02-DN01 UP.Link/3.2.1.2","WAP1.0","3","108","39","2","1.4","0","0","0","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 29 | "2000030","au","C301T","TS11","UP.Browser/3.04-TS11 UP.Link/3.4.4","WAP1.0","3","120","84","2","1.4","0","0","0","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 30 | "2000040","au","C302H","HI11","UP.Browser/3.04-HI11 UP.Link/3.4.4","WAP1.0","3","120","75","2","1.4","0","0","0","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 31 | "2000050","au","C303CA","CA11","UP.Browser/3.04-CA11 UP.Link/3.4.4","WAP1.0","3","120","91","2","1.4","0","0","0","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 32 | "2000060","au","C304SA","SY11","UP.Browser/3.04-SY11 UP.Link/3.4.4","WAP1.0","3","128","96","2","1.4","0","0","0","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 33 | "2000070","au","C305S","SM11","UP.Browser/3.04-SN11 UP.Link/3.4.4","WAP1.0","3","120","98","2","1.4","0","0","0","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 34 | "2000080","au","C307K","KC11","UP.Browser/3.04-KC11 UP.Link/3.4.4","WAP1.0","3","121","90","2","1.4","0","0","0","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 35 | "2000090","au","C308P","MA11/MA12","UP.Browser/3.04-MA11/MA12 UP.Link/3.4.4","WAP1.0","3","122","78","2","1.4","0","0","0","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 36 | "2000100","au","C309H","HI12","UP.Browser/3.04-HI12 UP.Link/3.4.4","WAP1.0","3","120","112","256","7.5","0","0","1","0","0","0","0","0","0","1","1","1","","2007-09-08 17:45:39" |
|---|
| 37 | "3000010","Vodafone","J-SH02","J-SH02","J-PHONE/2.0/J-SH02","C2","","96","84","256","6","0","0","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 38 | "3000020","Vodafone","J-DN02","J-DN02","J-PHONE/2.0/J-DN02","C2","","116","122","4","6","0","0","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 39 | "3000030","Vodafone","J-P02","J-P02","J-PHONE/2.0/J-P02","C2","","96","89","4","6","0","0","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 40 | "3000040","Vodafone","J-SA02","J-SA02","J-PHONE/2.0/J-SA02","C2","","96","76","256","6","0","0","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 41 | "3000050","Vodafone","J-SH03","J-SH03","J-PHONE/2.0/J-SH03","C2","","96","104","256","6","0","0","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 42 | "3000060","Vodafone","J-T04","J-T04","J-PHONE/2.0/J-T04","C2","","96","90","256","6","0","0","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 43 | "3000070","Vodafone","J-P03","J-P03","J-PHONE/2.0/J-P03","C2","","96","95","256","6","0","0","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 44 | "3000080","Vodafone","J-K03S","J-K03S","J-PHONE/3.0/J-K03","C3","","120","110","256","6","0","1","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 45 | "3000090","Vodafone","J-K03","J-K03","J-PHONE/3.0/J-K03","C3","","120","110","256","6","0","1","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 46 | "3000100","Vodafone","J-D03S","J-D03S","J-PHONE/3.0/J-D03","C3","","120","117","256","6","0","1","1","0","0","0","0","0","1","0","0","0","","2007-09-08 17:45:39" |
|---|
| 47 | EOL |
|---|
| 48 | |
|---|
| 49 | def setup |
|---|
| 50 | File.open('test.csv', 'w') do |tmp| |
|---|
| 51 | tmp.write NKF::nkf('-s --windows', TEST_DATA) |
|---|
| 52 | end |
|---|
| 53 | @ktai_db = SSB::KtaiDB.new(true, 'test.csv') |
|---|
| 54 | end |
|---|
| 55 | |
|---|
| 56 | def teardown |
|---|
| 57 | File.unlink('test.csv') |
|---|
| 58 | end |
|---|
| 59 | |
|---|
| 60 | def test_default_size_will_30 |
|---|
| 61 | assert_equal(@ktai_db.size, 30) |
|---|
| 62 | end |
|---|
| 63 | |
|---|
| 64 | def test_simple_search |
|---|
| 65 | ret = @ktai_db.search(:carrier => 'DoCoMo') |
|---|
| 66 | assert_equal(ret.size, 10) |
|---|
| 67 | |
|---|
| 68 | ret = @ktai_db.search(:carrier => 'au') |
|---|
| 69 | assert_equal(ret.size, 10) |
|---|
| 70 | ret = @ktai_db.search(:carrier => 'KDDI') |
|---|
| 71 | assert_equal(ret.size, 10) |
|---|
| 72 | ret = @ktai_db.search(:carrier => 'Tu-ka') |
|---|
| 73 | assert_equal(ret.size, 10) |
|---|
| 74 | |
|---|
| 75 | ret = @ktai_db.search(:carrier => 'SoftBank') |
|---|
| 76 | assert_equal(ret.size, 10) |
|---|
| 77 | ret = @ktai_db.search(:carrier => 'Vodafone') |
|---|
| 78 | assert_equal(ret.size, 10) |
|---|
| 79 | ret = @ktai_db.search(:carrier => 'ThirdForce') |
|---|
| 80 | assert_equal(ret.size, 10) |
|---|
| 81 | |
|---|
| 82 | ret = @ktai_db.search(:carrier => 'DoCoMo', :name => 'N') # N501i N502i NM502i |
|---|
| 83 | assert_equal(ret.size, 3) |
|---|
| 84 | assert_equal(ret[0][:name], 'N501i') |
|---|
| 85 | assert_equal(ret[1][:name], 'N502i') |
|---|
| 86 | assert_equal(ret[2][:name], 'NM502i') |
|---|
| 87 | |
|---|
| 88 | ret = @ktai_db.search(:name => 'N') # N501i N502i NM502i |
|---|
| 89 | assert_equal(ret.size, 3) |
|---|
| 90 | assert_equal(ret[0][:name], 'N501i') |
|---|
| 91 | assert_equal(ret[1][:name], 'N502i') |
|---|
| 92 | assert_equal(ret[2][:name], 'NM502i') |
|---|
| 93 | |
|---|
| 94 | ret = @ktai_db.search(:carrier => 'DoCoMo', :name => 'N5') # N501i N502i |
|---|
| 95 | assert_equal(ret.size, 2) |
|---|
| 96 | assert_equal(ret[0][:name], 'N501i') |
|---|
| 97 | assert_equal(ret[1][:name], 'N502i') |
|---|
| 98 | |
|---|
| 99 | ret = @ktai_db.search(:carrier => 'DoCoMo', :name => 'NM') # NM502i |
|---|
| 100 | assert_equal(ret.size, 1) |
|---|
| 101 | assert_equal(ret[0][:name], 'NM502i') |
|---|
| 102 | end |
|---|
| 103 | |
|---|
| 104 | # useragentで検索するとき、完全一致のときは1件だけ |
|---|
| 105 | def test_search_by_useragent_fullmatch |
|---|
| 106 | ret = @ktai_db.search(:useragent => 'UP.Browser/3.04-HI11 UP.Link/3.4.4') |
|---|
| 107 | assert_equal(ret.size, 1) |
|---|
| 108 | assert_equal(ret[0][:name], 'C302H') |
|---|
| 109 | end |
|---|
| 110 | |
|---|
| 111 | # useragentで検索は前方からの部分一致でok |
|---|
| 112 | def test_search_by_useragent_partmatch |
|---|
| 113 | ret = @ktai_db.search(:useragent => 'UP.Browser/3.04') |
|---|
| 114 | assert_equal(ret.size, 8) |
|---|
| 115 | assert_equal(ret[0][:name], 'C301T') |
|---|
| 116 | assert_equal(ret[7][:name], 'C309H') |
|---|
| 117 | end |
|---|
| 118 | end |
|---|
| 119 | |
|---|