├── .gitignore ├── src ├── types.ts ├── cli.ts ├── suffix-rules.ts ├── index.ts └── exceptions.ts ├── .prettierrc.js ├── types.flow.js ├── index.html ├── tsconfig.json ├── .github └── workflows │ └── npm-publish.yml ├── package.json ├── README.md └── tests └── test.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | .vercel 4 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export enum Preposition { 2 | I = 'i', 3 | PÅ = 'på', 4 | } 5 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | semi: false, 3 | singleQuote: true, 4 | trailingComma: 'all' 5 | } 6 | -------------------------------------------------------------------------------- /types.flow.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | declare module 'preposisjon' { 3 | declare module.exports: (place: string) => 'i' | 'på' 4 | } 5 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Preposisjon 4 | 5 | 6 |

Preposisjon

7 | 8 | curl https://preposisjon.no/api?place=voss 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/cli.ts: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | import preposisjon from './index' 3 | 4 | if (process.argv.length >= 3) { 5 | for (let i = 2; i < process.argv.length; i++) { 6 | console.log(preposisjon(process.argv[i])) 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["es2020"], 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "target": "es2019", 7 | "strict": true, 8 | "outDir": "lib", 9 | "esModuleInterop": true, 10 | "declaration": true 11 | }, 12 | "include": [ 13 | "src/**/*", "types.d.ts", 14 | ], 15 | } 16 | -------------------------------------------------------------------------------- /.github/workflows/npm-publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | release: 5 | types: [created] 6 | 7 | jobs: 8 | publish-npm: 9 | runs-on: ubuntu-latest 10 | permissions: 11 | contents: read 12 | id-token: write 13 | steps: 14 | - uses: actions/checkout@v4 15 | - uses: actions/setup-node@v4 16 | with: 17 | node-version: 20 18 | registry-url: https://registry.npmjs.org/ 19 | - run: npm ci 20 | - run: npm publish --provenance 21 | env: 22 | NODE_AUTH_TOKEN: ${{secrets.npm_token}} 23 | -------------------------------------------------------------------------------- /src/suffix-rules.ts: -------------------------------------------------------------------------------- 1 | export const paaSuffixes = [ 2 | 'berg', 3 | 'berget', 4 | 'eggi', 5 | 'eggen', 6 | 'fjell', 7 | 'fjellet', 8 | 'gata', 9 | 'gaten', 10 | 'haug', 11 | 'haugen', 12 | 'kam', 13 | 'kammen', 14 | 'nes', 15 | 'neset', 16 | 'nosi', 17 | 'nut', 18 | 'nuten', 19 | 'plass', 20 | 'plassen', 21 | 'usta', 22 | 'usti', 23 | 'sete', 24 | 'seter', 25 | 'stein', 26 | 'steinan', 27 | 'steinen', 28 | 'stul', 29 | 'stulen', 30 | 'støl', 31 | 'stølen', 32 | 'sæte', 33 | 'sæter', 34 | 'sætra', 35 | 'såta', 36 | 'toppen', 37 | 'tun', 38 | 'tunet', 39 | 'øy', 40 | 'øya', 41 | 'øyene', 42 | 'ås', 43 | 'åsen', 44 | ] 45 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { paaExceptions, iExceptions } from './exceptions' 2 | import { paaSuffixes } from './suffix-rules' 3 | import { Preposition } from './types' 4 | 5 | function preposisjon(place: string): Preposition { 6 | if (typeof place !== 'string') { 7 | throw new TypeError( 8 | 'preposisjon expected its argument to be a string, but received ' + 9 | typeof place, 10 | ) 11 | } 12 | 13 | const p = place.toLowerCase().trim() 14 | 15 | // Check exceptions 16 | if (paaExceptions.has(p)) { 17 | return Preposition.PÅ 18 | } 19 | 20 | if (iExceptions.has(p)) { 21 | return Preposition.I 22 | } 23 | 24 | // Check suffix rules 25 | if (paaSuffixes.some((suffix) => p.endsWith(suffix))) { 26 | return Preposition.PÅ 27 | } 28 | 29 | return Preposition.I 30 | } 31 | 32 | export default preposisjon 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "preposisjon", 3 | "version": "1.2.1", 4 | "description": "Finn riktig preposisjon", 5 | "main": "./lib/index.js", 6 | "scripts": { 7 | "lint": "prettier src --check", 8 | "test": "mocha -r ts-node/register tests/test.ts --ui tdd", 9 | "build": "rm -rf lib && tsc", 10 | "prepublish": "npm test && npm run build" 11 | }, 12 | "bin": { 13 | "preposisjon": "lib/cli.js" 14 | }, 15 | "files": [ 16 | "lib", 17 | "types.flow.js" 18 | ], 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/draperunner/preposisjon.git" 22 | }, 23 | "author": "Mats Byrkjeland ", 24 | "license": "MIT", 25 | "types": "./lib/index.d.ts", 26 | "husky": { 27 | "hooks": { 28 | "pre-commit": "npm test && npm run lint" 29 | } 30 | }, 31 | "devDependencies": { 32 | "@types/mocha": "^10.0.10", 33 | "@types/node": "^22.19.1", 34 | "eslint": "^9.39.1", 35 | "husky": "^9.1.7", 36 | "mocha": "^11.7.5", 37 | "prettier": "^3.6.2", 38 | "ts-node": "^10.9.2", 39 | "typescript": "^5.9.3" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # preposisjon 2 | Er det "i" eller "på" framfor namnet? Det har du sikkert lurt på ofte. No kan du la denne pakken lure for deg. 3 | 4 | ## Installer 5 | ```bash 6 | npm install --save preposisjon 7 | ``` 8 | 9 | ## Bruk 10 | Importer først. 11 | 12 | ```javascript 13 | const preposisjon = require('preposisjon') 14 | ``` 15 | eller 16 | ```javascript 17 | import preposisjon from 'preposisjon' 18 | ``` 19 | 20 | Kall funksjonen med stadsnamn for å få tilhøyrande preposisjon. Til dømes: 21 | 22 | ```javascript 23 | const voss = `Eg er ${preposisjon('Voss')} Voss!` 24 | console.log(voss) // Eg er på Voss! 25 | ``` 26 | 27 | Funksjonen returnerer anten `'i'` eller `'på'`. `'på'` blir returnert dersom det finst reglar som tilseier at `'på'` er riktig preposisjon. Viss ikkje det er tilfellet, vil `'i'` bli returnert. 28 | 29 | ### CLI 30 | 31 | Du kan også bruke `preposisjon` frå kommandolinja. 32 | 33 | ``` 34 | npm i -g preposisjon 35 | ``` 36 | 37 | ``` 38 | > preposisjon Voss 39 | på 40 | ``` 41 | 42 | ## Bidra 43 | Pull requests er meir enn velkomne! Berre hugs å køyre `npm test` først ;) 44 | 45 | ## Typar 46 | 47 | Typar for både TypeScript og Flow er inkludert. TypeScript skal fungere ut av boksen. For Flow, pass på at libdef-fila er inkludert i din flowconfig: 48 | 49 | ``` 50 | [libs] 51 | node_modules/preposisjon/lib/types.flow.js 52 | ``` 53 | -------------------------------------------------------------------------------- /src/exceptions.ts: -------------------------------------------------------------------------------- 1 | export const paaExceptions = new Set([ 2 | 'agder', 3 | 'akkerhaugen', 4 | 'alstahaug', 5 | 'askim', 6 | 'asorene', 7 | 'bagn', 8 | 'bahamas', 9 | 'bali', 10 | 'barbados', 11 | 'bardufoss', 12 | 'berkåk', 13 | 'bermuda', 14 | 'billingstad', 15 | 'biri', 16 | 'bjørkelangen', 17 | 'blindern', 18 | 'bokn', 19 | 'borneo', 20 | 'bornholm', 21 | 'bryne', 22 | 'byrkjelo', 23 | 'bømlo', 24 | 'cuba', 25 | 'dodekanesene', 26 | 'dokka', 27 | 'dombås', 28 | 'dominica', 29 | 'dovre', 30 | 'dønna', 31 | 'eidsvoll', 32 | 'eina', 33 | 'elverum', 34 | 'evje', 35 | 'falster', 36 | 'fannrem', 37 | 'fauske', 38 | 'fedje', 39 | 'figgjo', 40 | 'fiji', 41 | 'filippinene', 42 | 'finse', 43 | 'fitjar', 44 | 'flesland', 45 | 'flisa', 46 | 'fokstua', 47 | 'fosen', 48 | 'frans josefs land', 49 | 'frosta', 50 | 'frøya', 51 | 'fuerteventura', 52 | 'furuset', 53 | 'fyn', 54 | 'geilo', 55 | 'giske', 56 | 'gjøvik', 57 | 'gol', 58 | 'gotland', 59 | 'gran', 60 | 'gran canaria', 61 | 'grenada', 62 | 'greåker', 63 | 'grip', 64 | 'grua', 65 | 'grue finnskog', 66 | 'grønland', 67 | 'gvarv', 68 | 'hadeland', 69 | 'halsa', 70 | 'hamar', 71 | 'haram', 72 | 'hareid', 73 | 'hawaii', 74 | 'hebridene', 75 | 'hedmarken', 76 | 'helgeland', 77 | 'hermansverk', 78 | 'hinna', 79 | 'hitra', 80 | 'hovden', 81 | 'hvaler', 82 | 'hønefoss', 83 | 'island', 84 | 'jamaica', 85 | 'java', 86 | 'jeløya', 87 | 'jersey', 88 | 'jessheim', 89 | 'jevnaker', 90 | 'jylland', 91 | 'jæren', 92 | 'jørpeland', 93 | 'kapp verde', 94 | 'kios', 95 | 'kløfta', 96 | 'kolbotn', 97 | 'kongsvinger', 98 | 'koppang', 99 | 'korsika', 100 | 'kos', 101 | 'kreta', 102 | 'kvikne', 103 | 'kykladene', 104 | 'kyrksæterøra', 105 | 'kypros', 106 | 'kårstø', 107 | 'lade', 108 | 'laksevåg', 109 | 'langeland', 110 | 'lanzarote', 111 | 'leira', 112 | 'lena', 113 | 'lesja', 114 | 'levanger', 115 | 'lillehammer', 116 | 'lindås', 117 | 'lisleby', 118 | 'lista', 119 | 'lolland', 120 | 'lunner', 121 | 'lyngør', 122 | 'lørenskog', 123 | 'madagaskar', 124 | 'madeira', 125 | 'madla', 126 | 'majorstua', 127 | 'maldivene', 128 | 'mallorca', 129 | 'malta', 130 | 'mauritius', 131 | 'melhus', 132 | 'meråker', 133 | 'minnesund', 134 | 'mo', 135 | 'mo i rana', 136 | 'modum', 137 | 'moi', 138 | 'molde', 139 | 'momarken', 140 | 'mongstad', 141 | 'moster', 142 | 'mysen', 143 | 'møhlenpris', 144 | 'møre', 145 | 'namdalseid', 146 | 'nesbyen', 147 | 'nesna', 148 | 'nesodden', 149 | 'newfoundland', 150 | 'new-zealand', 151 | 'nordfjordeid', 152 | 'nordkapp', 153 | 'nordmøre', 154 | 'novaja semlja', 155 | 'notodden', 156 | 'ny-caledonia', 157 | 'ny-guinea', 158 | 'ny-zealand', 159 | 'nærbø', 160 | 'oppdal', 161 | 'oppegård', 162 | 'orkanger', 163 | 'os', 164 | 'otta', 165 | 'puerto rico', 166 | 'raufoss', 167 | 'rauland', 168 | 'rena', 169 | 'réunion', 170 | 'rhodos', 171 | 'ringebu', 172 | 'ringerike', 173 | 'ringsaker', 174 | 'rjukan', 175 | 'roa', 176 | 'rodos', 177 | 'rognan', 178 | 'romerike', 179 | 'runde', 180 | 'rygge', 181 | 'røros', 182 | 'røst', 183 | 'saltholm', 184 | 'samoa', 185 | 'sandane', 186 | 'sardinia', 187 | 'sel', 188 | 'selje', 189 | 'senja', 190 | 'seychellene', 191 | 'shetland', 192 | 'sjælland', 193 | 'ski', 194 | 'skjetten', 195 | 'slemdal', 196 | 'slemmestad', 197 | 'smøla', 198 | 'snåsa', 199 | 'sokna', 200 | 'sola', 201 | 'sollihøgda', 202 | 'sortland', 203 | 'sotra', 204 | 'spikkestad', 205 | 'spitsbergen', 206 | 'sri lanka', 207 | 'stabekk', 208 | 'stad', 209 | 'stange', 210 | 'steinkjer', 211 | 'stord', 212 | 'storhaug', 213 | 'stovner', 214 | 'stranda', 215 | 'strømmen', 216 | 'støren', 217 | 'sula', 218 | 'sumatra', 219 | 'sunndalsøra', 220 | 'sunnmøre', 221 | 'svalbard', 222 | 'sætre', 223 | 'tahiti', 224 | 'taiwan', 225 | 'tasmania', 226 | 'tenerife', 227 | 'time', 228 | 'tingvoll', 229 | 'tjøme', 230 | 'tofte', 231 | 'tolga', 232 | 'tonga', 233 | 'toten', 234 | 'tranby', 235 | 'tretten', 236 | 'trinidad', 237 | 'træna', 238 | 'tune', 239 | 'tveito', 240 | 'tynset', 241 | 'ulefoss', 242 | 'ustaoset', 243 | 'utsira', 244 | 'varhaug', 245 | 'vega', 246 | 'vennesla', 247 | 'vestfossen', 248 | 'vest-samoa', 249 | 'vigra', 250 | 'vigrestad', 251 | 'vikna', 252 | 'vinstra', 253 | 'voss', 254 | 'våland', 255 | 'öland', 256 | 'ørje', 257 | 'ørlandet', 258 | 'øst-timor', 259 | 'ål', 260 | 'åland', 261 | 'ålgård', 262 | 'åmot', 263 | 'årdalstangen', 264 | 'ås', 265 | ]) 266 | 267 | export const iExceptions = new Set([ 268 | 'brunlanes', 269 | 'kirkenes', 270 | 'måløy', 271 | 'onsøy', 272 | 'sandnes', 273 | 'tønsberg', 274 | 'ulstein', 275 | 'vikøy', 276 | ]) 277 | -------------------------------------------------------------------------------- /tests/test.ts: -------------------------------------------------------------------------------- 1 | import assert from 'assert' 2 | import preposisjon from '../src/index' 3 | 4 | suite('preposisjon', function () { 5 | const paaTests = [ 6 | 'Voss', 7 | 'voss', 8 | ' voss ', 9 | 'Åland', 10 | 'Sortland', 11 | 'Aksnes', 12 | 'Nesttun', 13 | 'Cuba', 14 | 'agder', 15 | 'akkerhaugen', 16 | 'alstahaug', 17 | 'andenes', 18 | 'askim', 19 | 'asorene', 20 | 'bagn', 21 | 'bahamas', 22 | 'bali', 23 | 'barbados', 24 | 'bardufoss', 25 | 'berkåk', 26 | 'bermuda', 27 | 'billingstad', 28 | 'biri', 29 | 'bjørkelangen', 30 | 'blindern', 31 | 'bokn', 32 | 'borneo', 33 | 'bornholm', 34 | 'bryne', 35 | 'byrkjelo', 36 | 'bømlo', 37 | 'cuba', 38 | 'dodekanesene', 39 | 'dokka', 40 | 'dombås', 41 | 'dominica', 42 | 'dovre', 43 | 'dønna', 44 | 'eidsvoll', 45 | 'eina', 46 | 'elverum', 47 | 'evje', 48 | 'fagernes', 49 | 'falster', 50 | 'fannrem', 51 | 'fauske', 52 | 'fedje', 53 | 'figgjo', 54 | 'fiji', 55 | 'filippinene', 56 | 'finnsnes', 57 | 'finse', 58 | 'fitjar', 59 | 'flesland', 60 | 'flisa', 61 | 'fokstua', 62 | 'fosen', 63 | 'frans josefs land', 64 | 'frosta', 65 | 'frøya', 66 | 'fuerteventura', 67 | 'furuset', 68 | 'fyn', 69 | 'færøyene', 70 | 'geilo', 71 | 'giske', 72 | 'gjøvik', 73 | 'gol', 74 | 'gotland', 75 | 'gran', 76 | 'gran canaria', 77 | 'grenada', 78 | 'greåker', 79 | 'grip', 80 | 'grua', 81 | 'grue finnskog', 82 | 'grønland', 83 | 'gvarv', 84 | 'hadeland', 85 | 'haganes', 86 | 'halsa', 87 | 'hamar', 88 | 'haram', 89 | 'hareid', 90 | 'hawaii', 91 | 'hebridene', 92 | 'hedmarken', 93 | 'helgeland', 94 | 'hermansverk', 95 | 'hinna', 96 | 'hitra', 97 | 'hovden', 98 | 'hvaler', 99 | 'hønefoss', 100 | 'island', 101 | 'jamaica', 102 | 'java', 103 | 'jeløya', 104 | 'jersey', 105 | 'jessheim', 106 | 'jevnaker', 107 | 'jylland', 108 | 'jæren', 109 | 'jørpeland', 110 | 'kanariøyene', 111 | 'kapp verde', 112 | 'kios', 113 | 'kløfta', 114 | 'kolbotn', 115 | 'kongsberg', 116 | 'kongsvinger', 117 | 'koppang', 118 | 'korsika', 119 | 'kos', 120 | 'kreta', 121 | 'kråkerøy', 122 | 'kvikne', 123 | 'kykladene', 124 | 'kyrksæterøra', 125 | 'kypros', 126 | 'kårstø', 127 | 'lade', 128 | 'laksevåg', 129 | 'langeland', 130 | 'lanzarote', 131 | 'leira', 132 | 'lena', 133 | 'lesja', 134 | 'levanger', 135 | 'lillehammer', 136 | 'lindesnes', 137 | 'lindås', 138 | 'lisleby', 139 | 'lista', 140 | 'lolland', 141 | 'lunner', 142 | 'lyngør', 143 | 'lørenskog', 144 | 'madagaskar', 145 | 'madeira', 146 | 'madla', 147 | 'majorstua', 148 | 'maldivene', 149 | 'mallorca', 150 | 'malta', 151 | 'marshalløyene', 152 | 'mauritius', 153 | 'melhus', 154 | 'meråker', 155 | 'minnesund', 156 | 'mo', 157 | 'mo i rana', 158 | 'modum', 159 | 'moi', 160 | 'molde', 161 | 'momarken', 162 | 'mongstad', 163 | 'moster', 164 | 'mysen', 165 | 'møhlenpris', 166 | 'møre', 167 | 'namdalseid', 168 | 'nesbyen', 169 | 'nesna', 170 | 'nesodden', 171 | 'newfoundland', 172 | 'new-zealand', 173 | 'nordfjordeid', 174 | 'nordkapp', 175 | 'nordmøre', 176 | 'novaja semlja', 177 | 'notodden', 178 | 'ny-caledonia', 179 | 'ny-guinea', 180 | 'ny-zealand', 181 | 'nærbø', 182 | 'oppdal', 183 | 'oppegård', 184 | 'orkanger', 185 | 'orknøyene', 186 | 'os', 187 | 'otta', 188 | 'puerto rico', 189 | 'randaberg', 190 | 'raufoss', 191 | 'rauland', 192 | 'rena', 193 | 'réunion', 194 | 'rhodos', 195 | 'ringebu', 196 | 'ringerike', 197 | 'ringsaker', 198 | 'rjukan', 199 | 'roa', 200 | 'rodos', 201 | 'rognan', 202 | 'romerike', 203 | 'runde', 204 | 'rygge', 205 | 'røros', 206 | 'røst', 207 | 'saltholm', 208 | 'samoa', 209 | 'sandane', 210 | 'sardinia', 211 | 'sel', 212 | 'selje', 213 | 'senja', 214 | 'seychellene', 215 | 'shetland', 216 | 'sjælland', 217 | 'skarnes', 218 | 'ski', 219 | 'skjetten', 220 | 'slemdal', 221 | 'slemmestad', 222 | 'smøla', 223 | 'snåsa', 224 | 'sokna', 225 | 'sola', 226 | 'sollihøgda', 227 | 'sortland', 228 | 'sotra', 229 | 'spikkestad', 230 | 'spitsbergen', 231 | 'sri lanka', 232 | 'stabekk', 233 | 'stad', 234 | 'stange', 235 | 'alstein', 236 | 'steinan', 237 | 'steinkjer', 238 | 'stokmarknes', 239 | 'stord', 240 | 'storhaug', 241 | 'stovner', 242 | 'stranda', 243 | 'strømmen', 244 | 'støren', 245 | 'sula', 246 | 'sumatra', 247 | 'sunndalsøra', 248 | 'sunnmøre', 249 | 'svalbard', 250 | 'sætre', 251 | 'tahiti', 252 | 'taiwan', 253 | 'tasmania', 254 | 'tenerife', 255 | 'time', 256 | 'tingvoll', 257 | 'tjøme', 258 | 'tofte', 259 | 'tolga', 260 | 'tonga', 261 | 'toten', 262 | 'tranby', 263 | 'tretten', 264 | 'trinidad', 265 | 'træna', 266 | 'tune', 267 | 'tveito', 268 | 'tynset', 269 | 'tysnes', 270 | 'ulefoss', 271 | 'ustaoset', 272 | 'utsira', 273 | 'utstein', 274 | 'varhaug', 275 | 'vega', 276 | 'vennesla', 277 | 'vestfossen', 278 | 'vestnes', 279 | 'vest-samoa', 280 | 'vigra', 281 | 'vigrestad', 282 | 'vikna', 283 | 'vinstra', 284 | 'voss', 285 | 'våland', 286 | 'værnes', 287 | 'öland', 288 | 'ørje', 289 | 'ørlandet', 290 | 'øst-timor', 291 | 'ål', 292 | 'åland', 293 | 'ålgård', 294 | 'åmot', 295 | 'åndalsnes', 296 | 'årdalstangen', 297 | 'årnes', 298 | 'ås', 299 | ] 300 | 301 | const iTests = [ 302 | 'Oslo', 303 | 'Drammen', 304 | 'Parkveien', 305 | 'New York', 306 | 'Tyskland', 307 | 'Indonesia', 308 | 'Irland', 309 | 'Japan', 310 | 'Lillestrøm', 311 | 'Lofoten', 312 | 'Storbritannia', 313 | 'Andesfjellene', 314 | 'Asia', 315 | 'Bergen', 316 | 'Drøbak', 317 | 'Finnmark', 318 | 'Hamar kommune', 319 | 'Nord-Norge', 320 | 'New York', 321 | 'Rondane', 322 | 'Setesdalen', 323 | 'Sør-Spania', 324 | 'Trøndelag', 325 | 'Tyskland', 326 | 'Vladivostok', 327 | 'Askvoll', 328 | 'Austevoll', 329 | 'Balestrand', 330 | 'Brunlanes', 331 | 'Bud', 332 | 'Børsa', 333 | 'Etne', 334 | 'Førde', 335 | 'Grue', 336 | 'Gudvangen', 337 | 'Hammerfest', 338 | 'Helgeroa', 339 | 'Hokksund', 340 | 'Hol', 341 | 'Hole', 342 | 'Hov', 343 | 'Hurum', 344 | 'Hvittingfoss', 345 | 'Kirkenes', 346 | 'Klæbu', 347 | 'Krokstadelva', 348 | 'Land', 349 | 'Lom', 350 | 'Moss', 351 | 'Måløy', 352 | 'Namsos', 353 | 'Onsøy', 354 | 'Portør', 355 | 'Rennebu', 356 | 'Rosendal', 357 | 'Rælingen', 358 | 'Salhus', 359 | 'Sandnes', 360 | 'Selbu', 361 | 'Skjåk', 362 | 'Skrova', 363 | 'Solbergelva', 364 | 'Steigen', 365 | 'Tromsø', 366 | 'Tønsberg', 367 | 'Ulstein', 368 | 'Vadsø', 369 | 'Vardø', 370 | 'Vikøy', 371 | 'Vågå', 372 | 'Øystese', 373 | ] 374 | 375 | paaTests.forEach(function (t) { 376 | test('it should return "på" for "' + t + '"', function () { 377 | assert.equal(preposisjon(t), 'på') 378 | }) 379 | }) 380 | 381 | iTests.forEach(function (t) { 382 | test('it should return "i" for "' + t + '"', function () { 383 | assert.equal(preposisjon(t), 'i') 384 | }) 385 | }) 386 | }) 387 | --------------------------------------------------------------------------------