json.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /**
  2. * 测试 JSON 文件的完整性
  3. * @Author https://github.com/modood
  4. * @DateTime 2016-10-10 11:24
  5. */
  6. /* eslint no-labels: ["error", { "allowLoop": true }] */
  7. const assert = require('assert')
  8. const chinaDivision = require('..')
  9. const provinces = chinaDivision.provinces
  10. const cities = chinaDivision.cities
  11. const areas = chinaDivision.areas
  12. const streets = chinaDivision.streets
  13. const pc = chinaDivision.pc
  14. const pcC = chinaDivision.pcC
  15. const pca = chinaDivision.pca
  16. const pcaC = chinaDivision.pcaC
  17. const pcas = chinaDivision.pcas
  18. const pcasC = chinaDivision.pcasC
  19. describe('中华人民共和国行政区划:', () => {
  20. it('省份数据', () => {
  21. const i = findElem(provinces, 'code', '11')
  22. assert(i !== -1)
  23. assert.equal(provinces[i].name, '北京市')
  24. })
  25. it('城市数据', () => {
  26. const i = findElem(cities, 'code', '1401')
  27. assert(i !== -1)
  28. assert.equal(cities[i].name, '太原市')
  29. assert.equal(cities[i].parent_code, '14')
  30. })
  31. it('区县数据', () => {
  32. const i = findElem(areas, 'code', '120110')
  33. assert(i !== -1)
  34. assert.equal(areas[i].name, '东丽区')
  35. assert.equal(areas[i].parent_code, '1201')
  36. })
  37. it('乡镇数据', () => {
  38. const i = findElem(streets, 'code', '441881124')
  39. assert(i !== -1)
  40. assert.equal(streets[i].name, '波罗镇')
  41. assert.equal(streets[i].parent_code, '441881')
  42. })
  43. it('“省份、城市” 二级联动数据', () => {
  44. assert.ok(pc['浙江省'].indexOf('杭州市') !== -1)
  45. for (const p in pc) {
  46. if (['台湾省', '香港特别行政区', '澳门特别行政区'].indexOf(p) === -1 &&
  47. pc[p].length === 0) throw new Error(`数据:pc.json,${p}的城市列表为空!`)
  48. }
  49. let ok = false
  50. const t = [
  51. { code: '13', name: '河北省' },
  52. { code: '1303', name: '秦皇岛市' }
  53. ]
  54. loop:
  55. for (let i = 0; i < pcC.length; i++) {
  56. const p = pcC[i]
  57. if (['台湾省', '香港特别行政区', '澳门特别行政区'].indexOf(p.name) === -1 &&
  58. p.childs.length === 0) throw new Error(`数据:pc-code.json,${p.name}的城市列表为空!`)
  59. if (p.code === t[0].code && p.name === t[0].name) {
  60. for (let j = 0; j < p.childs.length; j++) {
  61. const c = p.childs[j]
  62. if (c.code === t[1].code && c.name === t[1].name) {
  63. ok = true
  64. break loop
  65. }
  66. }
  67. }
  68. }
  69. if (!ok) throw new Error(`数据:pc-code.json,${t[0].name}${t[1].name}找不到!`)
  70. })
  71. it('“省份、城市、区县” 三级联动数据', () => {
  72. assert.ok(pca['云南省']['丽江市'].indexOf('古城区') !== -1)
  73. assert.ok(pca['海南省']['三沙市'].indexOf('南沙群岛') !== -1)
  74. assert.ok(pca['广东省']['中山市'].indexOf('横栏镇') !== -1)
  75. assert.ok(pca['广东省']['东莞市'].indexOf('常平镇') !== -1)
  76. assert.ok(pca['海南省']['儋州市'].indexOf('那大镇') !== -1)
  77. assert.ok(pca['甘肃省']['嘉峪关市'].indexOf('文殊镇') !== -1)
  78. for (const p in pca) {
  79. for (const c in pca[p]) {
  80. if (pca[p][c].length === 0) throw new Error(`数据:pca.json,${p}${c}的区县列表为空!`)
  81. }
  82. }
  83. let ok = false
  84. const t = [
  85. { code: '14', name: '山西省' },
  86. { code: '1405', name: '晋城市' },
  87. { code: '140524', name: '陵川县' }
  88. ]
  89. loop:
  90. for (let i = 0; i < pcaC.length; i++) {
  91. const p = pcaC[i]
  92. if (p.code === t[0].code && p.name === t[0].name) {
  93. for (let j = 0; j < p.childs.length; j++) {
  94. const c = p.childs[j]
  95. if (c.childs.length === 0) throw new Error(`数据:pca-code.json,${p.name}${c.name}的区县列表为空!`)
  96. if (c.code === t[1].code && c.name === t[1].name) {
  97. for (let k = 0; k < c.childs.length; k++) {
  98. const a = c.childs[k]
  99. if (a.code === t[2].code && a.name === t[2].name) {
  100. ok = true
  101. break loop
  102. }
  103. }
  104. }
  105. }
  106. }
  107. }
  108. if (!ok) throw new Error(`数据:pca-code.json,${t[0].anem}${t[1].name}${t[2].name}找不到!`)
  109. })
  110. it('“省份、城市、区县、乡镇” 四级联动数据', () => {
  111. assert.ok(pcas['广西壮族自治区']['玉林市']['容县'].indexOf('石头镇') !== -1)
  112. assert.ok(pcas['陕西省']['汉中市']['汉台区'].indexOf('七里街道') !== -1)
  113. assert.ok(pcas['海南省']['三沙市']['南沙群岛'].indexOf('永暑岛') !== -1)
  114. assert.ok(pcas['广东省']['中山市']['中山市'].indexOf('横栏镇') !== -1)
  115. assert.ok(pcas['广东省']['东莞市']['东莞市'].indexOf('常平镇') !== -1)
  116. assert.ok(pcas['海南省']['儋州市']['儋州市'].indexOf('那大镇') !== -1)
  117. assert.ok(pcas['甘肃省']['嘉峪关市']['嘉峪关市'].indexOf('文殊镇') !== -1)
  118. assert.ok(pcas['福建省']['泉州市']['金门县'].indexOf('金门县') !== -1)
  119. for (const p in pcas) {
  120. for (const c in pcas[p]) {
  121. for (const a in pcas[p][c]) {
  122. if (pcas[p][c][a].length === 0) throw new Error(`数据:pcas.json,${p}${c}${a}的乡镇列表为空!`)
  123. }
  124. }
  125. }
  126. let ok = false
  127. const t = [
  128. { code: '21', name: '辽宁省' },
  129. { code: '2102', name: '大连市' },
  130. { code: '210211', name: '甘井子区' },
  131. { code: '210211007', name: '泡崖街道' }
  132. ]
  133. loop:
  134. for (let i = 0; i < pcasC.length; i++) {
  135. const p = pcasC[i]
  136. if (p.code === t[0].code && p.name === t[0].name) {
  137. for (let j = 0; j < p.childs.length; j++) {
  138. const c = p.childs[j]
  139. if (c.code === t[1].code && c.name === t[1].name) {
  140. for (let k = 0; k < c.childs.length; k++) {
  141. const a = c.childs[k]
  142. if (a.childs.length === 0) throw new Error(`数据:pcas-code.json,${p.name}${c.name}${a.name}的乡镇列表为空!`)
  143. if (a.code === t[2].code && a.name === t[2].name) {
  144. for (let l = 0; l < a.childs.length; l++) {
  145. const s = a.childs[l]
  146. if (s.code === t[3].code && s.name === t[3].name) {
  147. ok = true
  148. break loop
  149. }
  150. }
  151. }
  152. }
  153. }
  154. }
  155. }
  156. }
  157. if (!ok) throw new Error(`数据:pcas-code.json,${t[0].anem}${t[1].name}${t[2].name}${t[3].name} 找不到!`)
  158. })
  159. it('“某省、某市、某县、某镇” 不存在', () => {
  160. assert.throws(() => pcas['某省']['某市']['某县'].indexOf('某镇') !== -1)
  161. })
  162. })
  163. function findElem (arrayToSearch, attr, val) {
  164. for (let i = 0; i < arrayToSearch.length; i++) {
  165. if (arrayToSearch[i][attr] === val) {
  166. return i
  167. }
  168. }
  169. return -1
  170. }