@ -12,36 +12,637 @@ module.exports.tests.interface = function(test, common) {
} ) ;
} ;
module . exports . tests . valid = function ( test , common ) {
var valid _keys = [ 'localadmin' , 'locality' , 'neighbourhood' , 'county' , 'region_a' , 'region' , 'country' , 'country_a' ] ;
var default _schema = {
local : [ 'localadmin' , 'locality' , 'neighbourhood' , 'county' , 'region' ] ,
regional : [ 'country' ]
} ;
var isValid = function ( keys , schema ) {
test ( 'valid key/object (' + keys + ')' , function ( t ) {
if ( keys === 'default' ) {
t . deepEqual ( schema , default _schema , 'valid default schema' ) ;
} else {
t . equal ( alpha3 . hasOwnProperty ( keys ) , true , 'valid key' ) ;
}
t . equal ( typeof schema , 'object' , 'valid object' ) ;
t . notEqual ( Object . getOwnPropertyNames ( schema ) . length , 0 , 'object not empty' ) ;
for ( var levels in schema ) {
t . equal ( Object . prototype . toString . call ( schema [ levels ] ) , '[object Array]' , levels + ' is an array' ) ;
for ( var i = 0 ; i < schema [ levels ] . length ; i ++ ) {
var key = schema [ levels ] [ i ] ;
t . notEqual ( valid _keys . indexOf ( key ) , - 1 , key + ' is valid' ) ;
}
}
t . end ( ) ;
} ) ;
} ;
for ( var keys in schemas ) {
isValid ( keys , schemas [ keys ] ) ;
}
module . exports . tests . supported _countries = function ( test , common ) {
test ( 'support countries' , function ( t ) {
var supported _countries = Object . keys ( schemas ) ;
t . notEquals ( supported _countries . indexOf ( 'USA' ) , - 1 ) ;
t . notEquals ( supported _countries . indexOf ( 'GBR' ) , - 1 ) ;
t . notEquals ( supported _countries . indexOf ( 'SGP' ) , - 1 ) ;
t . notEquals ( supported _countries . indexOf ( 'SWE' ) , - 1 ) ;
t . notEquals ( supported _countries . indexOf ( 'default' ) , - 1 ) ;
t . equals ( supported _countries . length , 5 ) ;
t . equals ( Object . keys ( schemas . USA ) . length , 3 ) ;
t . equals ( Object . keys ( schemas . GBR ) . length , 2 ) ;
t . equals ( Object . keys ( schemas . SGP ) . length , 2 ) ;
t . equals ( Object . keys ( schemas . SWE ) . length , 2 ) ;
t . equals ( Object . keys ( schemas . default ) . length , 2 ) ;
t . end ( ) ;
} ) ;
} ;
module . exports . tests . usa = function ( test , common ) {
test ( 'USA.local should use localadmin value over locality, neighbourhood, and county' , function ( t ) {
var record = {
localadmin : 'localadmin value' ,
locality : 'locality value' ,
neighbourhood : 'neighbourhood value' ,
county : 'county value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'localadmin value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'USA.local should use locality value over neighbourhood and county when no localadmin' , function ( t ) {
var record = {
locality : 'locality value' ,
neighbourhood : 'neighbourhood value' ,
county : 'county value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'locality value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'USA.local should use neighbourhood value over county when no localadmin or locality' , function ( t ) {
var record = {
neighbourhood : 'neighbourhood value' ,
county : 'county value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'neighbourhood value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'USA.local should use county value when no localadmin, locality, or neighbourhood' , function ( t ) {
var record = {
county : 'county value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'county value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'USA.local should not modify labelParts if none of localadmin, locality, neighbourhood, or county is available' , function ( t ) {
var record = { } ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'USA.regional should use region when layer=region and region is available' , function ( t ) {
var record = {
layer : 'region' ,
region : 'region name' ,
region _a : 'region_a name'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'region name' ] ) ;
t . end ( ) ;
} ) ;
test ( 'USA.regional should use region_a when layer=region and region is unavailable' , function ( t ) {
var record = {
layer : 'region' ,
region _a : 'region_a name'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'region_a name' ] ) ;
t . end ( ) ;
} ) ;
test ( 'USA.regional should use region_a when layer!=region and both region and region_a are available' , function ( t ) {
var record = {
layer : 'not region' ,
region : 'region name' ,
region _a : 'region_a name'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'region_a name' ] ) ;
t . end ( ) ;
} ) ;
test ( 'USA.regional should use region when layer!=region and region_a is unavailable' , function ( t ) {
var record = {
layer : 'region' ,
region : 'region name' ,
region _a : 'region_a name'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'region name' ] , 'region should have been appended' ) ;
t . end ( ) ;
} ) ;
test ( 'USA.regional should not append anything when neither region nor region_a are available' , function ( t ) {
var record = {
layer : 'region' ,
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' ] , 'no USA.region should have appended' ) ;
t . end ( ) ;
} ) ;
test ( 'USA.country should append country_a when available' , function ( t ) {
var record = {
country _a : 'country_a name' ,
country : 'country name'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . country ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'country_a name' ] , 'country_a should have appended' ) ;
t . end ( ) ;
} ) ;
test ( 'USA.country should not append anything when country_a is unavailable' , function ( t ) {
var record = {
country : 'country name'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . USA . country ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' ] , 'no USA.country should have appended' ) ;
t . end ( ) ;
} ) ;
} ;
module . exports . tests . gbr = function ( test , common ) {
test ( 'GBR.local should use neighbourhood value over county, localadmin, locality, region' , function ( t ) {
var record = {
neighbourhood : 'neighbourhood value' ,
county : 'county value' ,
localadmin : 'localadmin value' ,
locality : 'locality value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'neighbourhood value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'GBR.local should use county value over county, localadmin, locality, region' , function ( t ) {
var record = {
county : 'county value' ,
localadmin : 'localadmin value' ,
locality : 'locality value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'county value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'GBR.local should use localadmin value over locality, region' , function ( t ) {
var record = {
localadmin : 'localadmin value' ,
locality : 'locality value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'localadmin value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'GBR.local should use locality value over region' , function ( t ) {
var record = {
locality : 'locality value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'locality value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'GBR.local should use region value when nothing else is available' , function ( t ) {
var record = {
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'region value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'GBR.local should not append anything when none of neighbourhood, county, localadmin, locality, region are available' , function ( t ) {
var record = { } ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'GBR.regional should use county over country and region' , function ( t ) {
var record = {
county : 'county value' ,
country : 'country value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'county value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'GBR.regional should use country over region' , function ( t ) {
var record = {
country : 'country value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'country value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'GBR.regional should use region when county and country aren not available' , function ( t ) {
var record = {
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'region value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'GBR.regional should not append anything when none of county, country, or region are available' , function ( t ) {
var record = { } ;
var labelParts = [ 'initial value' ] ;
var f = schemas . GBR . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' ] ) ;
t . end ( ) ;
} ) ;
} ;
module . exports . tests . sgp = function ( test , common ) {
test ( 'SGP.local should use neighbourhood value over region, county, localadmin, locality' , function ( t ) {
var record = {
neighbourhood : 'neighbourhood value' ,
county : 'county value' ,
localadmin : 'localadmin value' ,
locality : 'locality value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'neighbourhood value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.local should use region value over county, localadmin, locality' , function ( t ) {
var record = {
county : 'county value' ,
localadmin : 'localadmin value' ,
locality : 'locality value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'region value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.local should use county value over localadmin, locality' , function ( t ) {
var record = {
localadmin : 'localadmin value' ,
locality : 'locality value' ,
county : 'county value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'county value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.local should use localadmin value over locality' , function ( t ) {
var record = {
localadmin : 'localadmin value' ,
locality : 'locality value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'localadmin value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.local should use locality value when nothing else is available' , function ( t ) {
var record = {
locality : 'locality value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'locality value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.local should not append anything when none of neighbourhood, region, county, localadmin, locality are available' , function ( t ) {
var record = { } ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.regional should use county over country and region' , function ( t ) {
var record = {
county : 'county value' ,
country : 'country value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'county value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.regional should use country over region' , function ( t ) {
var record = {
country : 'country value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'country value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.regional should use region when county and country aren not available' , function ( t ) {
var record = {
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'region value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.regional should not append anything when none of county, country, or region are available' , function ( t ) {
var record = { } ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' ] ) ;
t . end ( ) ;
} ) ;
} ;
module . exports . tests . swe = function ( test , common ) {
test ( 'SWE.local should use neighbourhood value over region, county, localadmin, locality' , function ( t ) {
var record = {
neighbourhood : 'neighbourhood value' ,
county : 'county value' ,
localadmin : 'localadmin value' ,
locality : 'locality value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SWE . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'neighbourhood value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SWE.local should use region value over county, localadmin, locality' , function ( t ) {
var record = {
county : 'county value' ,
localadmin : 'localadmin value' ,
locality : 'locality value' ,
region : 'region value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SWE . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'region value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SWE.local should use county value over localadmin, locality' , function ( t ) {
var record = {
localadmin : 'localadmin value' ,
locality : 'locality value' ,
county : 'county value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SWE . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'county value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SWE.local should use localadmin value over locality' , function ( t ) {
var record = {
localadmin : 'localadmin value' ,
locality : 'locality value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SWE . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'localadmin value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SWE.local should use locality value when nothing else is available' , function ( t ) {
var record = {
locality : 'locality value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SWE . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'locality value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SWE.local should not append anything when none of neighbourhood, region, county, localadmin, locality are available' , function ( t ) {
var record = { } ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SWE . local ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.regional should use country when available' , function ( t ) {
var record = {
country : 'country value' ,
country _a : 'country_a value' ,
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' , 'country value' ] ) ;
t . end ( ) ;
} ) ;
test ( 'SGP.regional should not append anything when country is not available' , function ( t ) {
var record = {
country _a : 'country_a value'
} ;
var labelParts = [ 'initial value' ] ;
var f = schemas . SGP . regional ;
t . deepEqual ( f ( record , labelParts ) , [ 'initial value' ] ) ;
t . end ( ) ;
} ) ;
} ;
module . exports . all = function ( tape , common ) {