2 Test for legacy tokenizer.
6 from nominatim.tokenizer import legacy_tokenizer
7 from nominatim.db import properties
8 from nominatim.errors import UsageError
11 def test_config(def_config, tmp_path):
12 def_config.project_dir = tmp_path / 'project'
13 def_config.project_dir.mkdir()
15 module_dir = tmp_path / 'module_src'
17 (module_dir / 'nominatim.so').write_text('TEST nomiantim.so')
19 def_config.lib_dir.module = module_dir
25 def tokenizer_factory(dsn, tmp_path, monkeypatch):
28 return legacy_tokenizer.create(dsn, tmp_path / 'tokenizer')
33 def tokenizer_setup(tokenizer_factory, test_config, property_table, monkeypatch):
34 monkeypatch.setattr(legacy_tokenizer, '_check_module' , lambda m, c: None)
35 tok = tokenizer_factory()
36 tok.init_new_db(test_config)
39 def test_init_new(tokenizer_factory, test_config, property_table, monkeypatch, temp_db_conn):
40 monkeypatch.setenv('NOMINATIM_TERM_NORMALIZATION', 'xxvv')
41 monkeypatch.setattr(legacy_tokenizer, '_check_module' , lambda m, c: None)
43 tok = tokenizer_factory()
44 tok.init_new_db(test_config)
46 assert properties.get_property(temp_db_conn, legacy_tokenizer.DBCFG_NORMALIZATION) == 'xxvv'
48 outfile = test_config.project_dir / 'module' / 'nominatim.so'
50 assert outfile.exists()
51 assert outfile.read_text() == 'TEST nomiantim.so'
52 assert outfile.stat().st_mode == 33261
55 def test_init_module_load_failed(tokenizer_factory, test_config, property_table, monkeypatch, temp_db_conn):
56 tok = tokenizer_factory()
58 with pytest.raises(UsageError):
59 tok.init_new_db(test_config)
62 def test_init_module_custom(tokenizer_factory, test_config, property_table,
63 monkeypatch, tmp_path):
64 module_dir = (tmp_path / 'custom').resolve()
66 (module_dir/ 'nominatim.so').write_text('CUSTOM nomiantim.so')
68 monkeypatch.setenv('NOMINATIM_DATABASE_MODULE_PATH', str(module_dir))
69 monkeypatch.setattr(legacy_tokenizer, '_check_module' , lambda m, c: None)
71 tok = tokenizer_factory()
72 tok.init_new_db(test_config)
74 assert not (test_config.project_dir / 'module').exists()
77 def test_init_from_project(tokenizer_setup, tokenizer_factory):
78 tok = tokenizer_factory()
80 tok.init_from_project()
82 assert tok.normalization is not None