diff --git a/MANIFEST.in b/MANIFEST.in
index cd0aa79aa3..15940c4500 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -23,8 +23,8 @@ include trytond/res/tryton.cfg
include trytond/res/*.xml
include trytond/res/view/*.xml
include trytond/res/locale/*.po
-include trytond/test/tryton.cfg
-include trytond/test/*.xml
+include trytond/tests/tryton.cfg
+include trytond/tests/*.xml
include trytond/webdav/tryton.cfg
include trytond/webdav/*.xml
include trytond/webdav/view/*.xml
diff --git a/setup.py b/setup.py
index dfb43a3b44..68dc4e74a1 100644
--- a/setup.py
+++ b/setup.py
@@ -31,7 +31,7 @@ setup(name=PACKAGE,
'trytond.ir.ui': ['*.xml', '*.rng', '*.rnc'],
'trytond.res': ['tryton.cfg', '*.xml', 'view/*.xml', 'locale/*.po'],
'trytond.webdav': ['tryton.cfg', '*.xml', 'view/*.xml', 'locale/*.po'],
- 'trytond.test': ['tryton.cfg', '*.xml'],
+ 'trytond.tests': ['tryton.cfg', '*.xml'],
},
scripts=['bin/trytond'],
classifiers=[
diff --git a/trytond/ir/module/module.xml b/trytond/ir/module/module.xml
index e93f3042fa..33a716a58f 100644
--- a/trytond/ir/module/module.xml
+++ b/trytond/ir/module/module.xml
@@ -18,7 +18,7 @@ this repository contains the full copyright notices and license terms. -->
Modules
ir.action.act_window
ir.module.module
- [('name', '!=', 'test')]
+ [('name', '!=', 'tests')]
diff --git a/trytond/modules/__init__.py b/trytond/modules/__init__.py
index 0530527af1..7bcf65ab2d 100644
--- a/trytond/modules/__init__.py
+++ b/trytond/modules/__init__.py
@@ -196,7 +196,7 @@ def create_graph(module_list):
def is_module_to_install(module):
for kind in ('init', 'update'):
- if 'all' in CONFIG[kind] and module != 'test':
+ if 'all' in CONFIG[kind] and module != 'tests':
return True
elif module in CONFIG[kind]:
return True
@@ -302,7 +302,7 @@ def get_module_list():
module_list.add('ir')
module_list.add('res')
module_list.add('webdav')
- module_list.add('test')
+ module_list.add('tests')
return list(module_list)
@@ -316,15 +316,15 @@ def register_classes():
trytond.res.register()
import trytond.webdav
trytond.webdav.register()
- import trytond.test
- trytond.test.register()
+ import trytond.tests
+ trytond.tests.register()
logger = logging.getLogger('modules')
for package in create_graph(get_module_list())[0]:
module = package.name
logger.info('%s:registering classes' % module)
- if module in ('ir', 'res', 'webdav', 'test'):
+ if module in ('ir', 'res', 'webdav', 'tests'):
MODULES.append(module)
continue
@@ -375,7 +375,7 @@ def load_modules(database_name, pool, update=False, lang=None):
where=(ir_module.name == 'workflow')))
if 'all' in CONFIG['init']:
cursor.execute(*ir_module.select(ir_module.name,
- where=(ir_module.name != 'test')))
+ where=(ir_module.name != 'tests')))
else:
cursor.execute(*ir_module.select(ir_module.name,
where=ir_module.state.in_(('installed', 'to install',
diff --git a/trytond/test/__init__.py b/trytond/test/__init__.py
deleted file mode 100644
index 64eee42c1b..0000000000
--- a/trytond/test/__init__.py
+++ /dev/null
@@ -1,138 +0,0 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
-from ..pool import Pool
-from .test import *
-from .model import *
-from .mptt import *
-from .import_data import *
-from .export_data import *
-from .trigger import *
-from .access import *
-from .wizard import *
-from .workflow import *
-from .copy import *
-
-
-def register():
- Pool.register(
- Boolean,
- BooleanDefault,
- Integer,
- IntegerDefault,
- IntegerRequired,
- Float,
- FloatDefault,
- FloatRequired,
- FloatDigits,
- Numeric,
- NumericDefault,
- NumericRequired,
- NumericDigits,
- Char,
- CharDefault,
- CharRequired,
- CharSize,
- CharTranslate,
- Text,
- TextDefault,
- TextRequired,
- TextSize,
- TextTranslate,
- Sha,
- ShaDefault,
- ShaRequired,
- Date,
- DateDefault,
- DateRequired,
- DateTime,
- DateTimeDefault,
- DateTimeRequired,
- DateTimeFormat,
- Time,
- TimeDefault,
- TimeRequired,
- TimeFormat,
- One2One,
- One2OneTarget,
- One2OneRelation,
- One2OneRequired,
- One2OneRequiredRelation,
- One2OneDomain,
- One2OneDomainRelation,
- One2Many,
- One2ManyTarget,
- One2ManyRequired,
- One2ManyRequiredTarget,
- One2ManyReference,
- One2ManyReferenceTarget,
- One2ManySize,
- One2ManySizeTarget,
- One2ManySizePYSON,
- One2ManySizePYSONTarget,
- Many2Many,
- Many2ManyTarget,
- Many2ManyRelation,
- Many2ManyRequired,
- Many2ManyRequiredTarget,
- Many2ManyRequiredRelation,
- Many2ManyReference,
- Many2ManyReferenceTarget,
- Many2ManyReferenceRelation,
- Many2ManySize,
- Many2ManySizeTarget,
- Many2ManySizeRelation,
- Reference,
- ReferenceTarget,
- ReferenceRequired,
- Property,
- Selection,
- SelectionRequired,
- Dict,
- DictDefault,
- DictRequired,
- Binary,
- BinaryDefault,
- BinaryRequired,
- Singleton,
- URLObject,
- ModelSQLRequiredField,
- MPTT,
- ImportDataBoolean,
- ImportDataInteger,
- ImportDataIntegerRequired,
- ImportDataFloat,
- ImportDataFloatRequired,
- ImportDataNumeric,
- ImportDataNumericRequired,
- ImportDataChar,
- ImportDataText,
- ImportDataSha,
- ImportDataDate,
- ImportDataDateTime,
- ImportDataSelection,
- ImportDataMany2OneTarget,
- ImportDataMany2One,
- ImportDataMany2ManyTarget,
- ImportDataMany2Many,
- ImportDataMany2ManyRelation,
- ImportDataOne2Many,
- ImportDataOne2ManyTarget,
- ImportDataReferenceSelection,
- ImportDataReference,
- ExportDataTarget,
- ExportData,
- ExportDataTarget2,
- ExportDataRelation,
- Triggered,
- TriggerAction,
- TestAccess,
- TestWizardStart,
- WorkflowedModel,
- CopyOne2Many,
- CopyOne2ManyTarget,
- CopyOne2ManyReference,
- CopyOne2ManyReferenceTarget,
- module='test', type_='model')
- Pool.register(
- TestWizard,
- module='test', type_='wizard')
diff --git a/trytond/tests/__init__.py b/trytond/tests/__init__.py
index e512da1d05..54a1335bf2 100644
--- a/trytond/tests/__init__.py
+++ b/trytond/tests/__init__.py
@@ -1,4 +1,144 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
-from .test_tryton import all_suite as suite
+from ..pool import Pool
+from .test import *
+from .model import *
+from .mptt import *
+from .import_data import *
+from .export_data import *
+from .trigger import *
+from .access import *
+from .wizard import *
+from .workflow import *
+from .copy_ import *
+
+
+def register():
+ Pool.register(
+ Boolean,
+ BooleanDefault,
+ Integer,
+ IntegerDefault,
+ IntegerRequired,
+ Float,
+ FloatDefault,
+ FloatRequired,
+ FloatDigits,
+ Numeric,
+ NumericDefault,
+ NumericRequired,
+ NumericDigits,
+ Char,
+ CharDefault,
+ CharRequired,
+ CharSize,
+ CharTranslate,
+ Text,
+ TextDefault,
+ TextRequired,
+ TextSize,
+ TextTranslate,
+ Sha,
+ ShaDefault,
+ ShaRequired,
+ Date,
+ DateDefault,
+ DateRequired,
+ DateTime,
+ DateTimeDefault,
+ DateTimeRequired,
+ DateTimeFormat,
+ Time,
+ TimeDefault,
+ TimeRequired,
+ TimeFormat,
+ One2One,
+ One2OneTarget,
+ One2OneRelation,
+ One2OneRequired,
+ One2OneRequiredRelation,
+ One2OneDomain,
+ One2OneDomainRelation,
+ One2Many,
+ One2ManyTarget,
+ One2ManyRequired,
+ One2ManyRequiredTarget,
+ One2ManyReference,
+ One2ManyReferenceTarget,
+ One2ManySize,
+ One2ManySizeTarget,
+ One2ManySizePYSON,
+ One2ManySizePYSONTarget,
+ Many2Many,
+ Many2ManyTarget,
+ Many2ManyRelation,
+ Many2ManyRequired,
+ Many2ManyRequiredTarget,
+ Many2ManyRequiredRelation,
+ Many2ManyReference,
+ Many2ManyReferenceTarget,
+ Many2ManyReferenceRelation,
+ Many2ManySize,
+ Many2ManySizeTarget,
+ Many2ManySizeRelation,
+ Reference,
+ ReferenceTarget,
+ ReferenceRequired,
+ Property,
+ Selection,
+ SelectionRequired,
+ Dict,
+ DictDefault,
+ DictRequired,
+ Binary,
+ BinaryDefault,
+ BinaryRequired,
+ Singleton,
+ URLObject,
+ ModelSQLRequiredField,
+ MPTT,
+ ImportDataBoolean,
+ ImportDataInteger,
+ ImportDataIntegerRequired,
+ ImportDataFloat,
+ ImportDataFloatRequired,
+ ImportDataNumeric,
+ ImportDataNumericRequired,
+ ImportDataChar,
+ ImportDataText,
+ ImportDataSha,
+ ImportDataDate,
+ ImportDataDateTime,
+ ImportDataSelection,
+ ImportDataMany2OneTarget,
+ ImportDataMany2One,
+ ImportDataMany2ManyTarget,
+ ImportDataMany2Many,
+ ImportDataMany2ManyRelation,
+ ImportDataOne2Many,
+ ImportDataOne2ManyTarget,
+ ImportDataReferenceSelection,
+ ImportDataReference,
+ ExportDataTarget,
+ ExportData,
+ ExportDataTarget2,
+ ExportDataRelation,
+ Triggered,
+ TriggerAction,
+ TestAccess,
+ TestWizardStart,
+ WorkflowedModel,
+ CopyOne2Many,
+ CopyOne2ManyTarget,
+ CopyOne2ManyReference,
+ CopyOne2ManyReferenceTarget,
+ module='tests', type_='model')
+ Pool.register(
+ TestWizard,
+ module='tests', type_='wizard')
+
+
+def suite():
+ from .test_tryton import all_suite
+ return all_suite()
diff --git a/trytond/test/access.py b/trytond/tests/access.py
similarity index 100%
rename from trytond/test/access.py
rename to trytond/tests/access.py
diff --git a/trytond/test/copy.py b/trytond/tests/copy_.py
similarity index 100%
rename from trytond/test/copy.py
rename to trytond/tests/copy_.py
diff --git a/trytond/test/export_data.py b/trytond/tests/export_data.py
similarity index 100%
rename from trytond/test/export_data.py
rename to trytond/tests/export_data.py
diff --git a/trytond/test/import_data.py b/trytond/tests/import_data.py
similarity index 100%
rename from trytond/test/import_data.py
rename to trytond/tests/import_data.py
diff --git a/trytond/test/import_data.xml b/trytond/tests/import_data.xml
similarity index 100%
rename from trytond/test/import_data.xml
rename to trytond/tests/import_data.xml
diff --git a/trytond/test/model.py b/trytond/tests/model.py
similarity index 100%
rename from trytond/test/model.py
rename to trytond/tests/model.py
diff --git a/trytond/test/mptt.py b/trytond/tests/mptt.py
similarity index 100%
rename from trytond/test/mptt.py
rename to trytond/tests/mptt.py
diff --git a/trytond/test/sequence.xml b/trytond/tests/sequence.xml
similarity index 100%
rename from trytond/test/sequence.xml
rename to trytond/tests/sequence.xml
diff --git a/trytond/test/test.py b/trytond/tests/test.py
similarity index 100%
rename from trytond/test/test.py
rename to trytond/tests/test.py
diff --git a/trytond/tests/test_access.py b/trytond/tests/test_access.py
index 5f77ba30c7..5efe63fe9c 100644
--- a/trytond/tests/test_access.py
+++ b/trytond/tests/test_access.py
@@ -14,7 +14,7 @@ class ModelAccessTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.model_access = POOL.get('ir.model.access')
self.test_access = POOL.get('test.access')
self.model = POOL.get('ir.model')
@@ -359,7 +359,7 @@ class ModelFieldAccessTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.field_access = POOL.get('ir.model.field.access')
self.test_access = POOL.get('test.access')
self.field = POOL.get('ir.model.field')
diff --git a/trytond/tests/test_copy.py b/trytond/tests/test_copy.py
index e6cc8e94f4..164d5c6f69 100644
--- a/trytond/tests/test_copy.py
+++ b/trytond/tests/test_copy.py
@@ -14,7 +14,7 @@ class CopyTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.one2many = POOL.get('test.copy.one2many')
self.one2many_target = POOL.get('test.copy.one2many.target')
self.one2many_reference = POOL.get('test.copy.one2many_reference')
diff --git a/trytond/tests/test_exportdata.py b/trytond/tests/test_exportdata.py
index e88b9df4b9..6b9efbf41f 100644
--- a/trytond/tests/test_exportdata.py
+++ b/trytond/tests/test_exportdata.py
@@ -24,7 +24,7 @@ class ExportDataTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.export_data = POOL.get('test.export_data')
self.export_data_target = POOL.get('test.export_data.target')
self.export_data_relation = POOL.get('test.export_data.relation')
diff --git a/trytond/tests/test_fields.py b/trytond/tests/test_fields.py
index 6bac0f4ef2..cb538917ac 100644
--- a/trytond/tests/test_fields.py
+++ b/trytond/tests/test_fields.py
@@ -24,7 +24,7 @@ class FieldsTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.boolean = POOL.get('test.boolean')
self.boolean_default = POOL.get('test.boolean_default')
diff --git a/trytond/tests/test_importdata.py b/trytond/tests/test_importdata.py
index 7bf7686145..a3dc7616af 100644
--- a/trytond/tests/test_importdata.py
+++ b/trytond/tests/test_importdata.py
@@ -14,7 +14,7 @@ class ImportDataTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.boolean = POOL.get('test.import_data.boolean')
self.integer = POOL.get('test.import_data.integer')
self.integer_required = POOL.get('test.import_data.integer_required')
@@ -376,7 +376,7 @@ class ImportDataTestCase(unittest.TestCase):
[['Test']]), (1, 0, 0, 0))
self.assertEqual(self.many2one.import_data(['many2one:id'],
- [['test.import_data_many2one_target_test']]), (1, 0, 0, 0))
+ [['tests.import_data_many2one_target_test']]), (1, 0, 0, 0))
self.assertEqual(self.many2one.import_data(['many2one'],
[['']]), (1, 0, 0, 0))
@@ -394,7 +394,7 @@ class ImportDataTestCase(unittest.TestCase):
[['foo']])[0], -1)
self.assertEqual(self.many2one.import_data(['many2one:id'],
- [['test.foo']])[0], -1)
+ [['tests.foo']])[0], -1)
transaction.cursor.rollback()
@@ -408,14 +408,14 @@ class ImportDataTestCase(unittest.TestCase):
[['Test 1']]), (1, 0, 0, 0))
self.assertEqual(self.many2many.import_data(['many2many:id'],
- [['test.import_data_many2many_target_test1']]), (1, 0, 0, 0))
+ [['tests.import_data_many2many_target_test1']]), (1, 0, 0, 0))
self.assertEqual(self.many2many.import_data(['many2many'],
[['Test 1,Test 2']]), (1, 0, 0, 0))
self.assertEqual(self.many2many.import_data(['many2many:id'],
- [['test.import_data_many2many_target_test1,'
- 'test.import_data_many2many_target_test2']]),
+ [['tests.import_data_many2many_target_test1,'
+ 'tests.import_data_many2many_target_test2']]),
(1, 0, 0, 0))
self.assertEqual(self.many2many.import_data(['many2many'],
@@ -485,7 +485,7 @@ class ImportDataTestCase(unittest.TestCase):
self.assertEqual(self.reference.import_data(['reference:id'],
[['test.import_data.reference.selection,'
- 'test.import_data_reference_selection_test']]),
+ 'tests.import_data_reference_selection_test']]),
(1, 0, 0, 0))
reference, = self.reference.search([])
self.assertEqual(reference.reference.__name__,
diff --git a/trytond/tests/test_mixins.py b/trytond/tests/test_mixins.py
index 2bae2251bf..be6ecf255b 100644
--- a/trytond/tests/test_mixins.py
+++ b/trytond/tests/test_mixins.py
@@ -16,7 +16,7 @@ class UrlTestCase(unittest.TestCase):
"Test URL generation"
def setUp(self):
- install_module('test')
+ install_module('tests')
self.urlmodel = POOL.get('test.urlobject')
self.urlwizard = POOL.get('test.test_wizard', type='wizard')
self.hostname = HOSTNAME
diff --git a/trytond/tests/test_modelsingleton.py b/trytond/tests/test_modelsingleton.py
index 915bb3748d..667183da50 100644
--- a/trytond/tests/test_modelsingleton.py
+++ b/trytond/tests/test_modelsingleton.py
@@ -15,7 +15,7 @@ class ModelSingletonTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.singleton = POOL.get('test.singleton')
def test0010read(self):
diff --git a/trytond/tests/test_modelsql.py b/trytond/tests/test_modelsql.py
index 2419a6094d..4cbf169e47 100644
--- a/trytond/tests/test_modelsql.py
+++ b/trytond/tests/test_modelsql.py
@@ -18,7 +18,7 @@ class ModelSQLTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.modelsql = POOL.get('test.modelsql')
def test0010required_field_missing(self):
diff --git a/trytond/tests/test_mptt.py b/trytond/tests/test_mptt.py
index a15a2211d1..faff5a3f8e 100644
--- a/trytond/tests/test_mptt.py
+++ b/trytond/tests/test_mptt.py
@@ -15,7 +15,7 @@ class MPTTTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.mptt = POOL.get('test.mptt')
def CheckTree(self, parent_id=None, left=-1, right=sys.maxint):
diff --git a/trytond/tests/test_sequence.py b/trytond/tests/test_sequence.py
index c942506cb0..0e3b870312 100644
--- a/trytond/tests/test_sequence.py
+++ b/trytond/tests/test_sequence.py
@@ -15,7 +15,7 @@ class SequenceTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.sequence = POOL.get('ir.sequence')
def test0010incremental(self):
diff --git a/trytond/tests/test_transaction.py b/trytond/tests/test_transaction.py
index 4d78affd93..6928a98475 100644
--- a/trytond/tests/test_transaction.py
+++ b/trytond/tests/test_transaction.py
@@ -34,7 +34,7 @@ class TransactionTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
def test0010nonexistdb(self):
'''
diff --git a/trytond/tests/test_trigger.py b/trytond/tests/test_trigger.py
index 0b9df95e77..c54aa4cf4b 100644
--- a/trytond/tests/test_trigger.py
+++ b/trytond/tests/test_trigger.py
@@ -27,7 +27,7 @@ except ImportError:
yield tuple(pool[i] for i in indices)
from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT, \
install_module
-from trytond.test.trigger import TRIGGER_LOGS
+from trytond.tests.trigger import TRIGGER_LOGS
from trytond.transaction import Transaction
@@ -37,7 +37,7 @@ class TriggerTestCase(unittest.TestCase):
'''
def setUp(self):
- install_module('test')
+ install_module('tests')
self.triggered = POOL.get('test.triggered')
self.trigger = POOL.get('ir.trigger')
self.trigger_log = POOL.get('ir.trigger.log')
diff --git a/trytond/tests/test_wizard.py b/trytond/tests/test_wizard.py
index a191698787..43207c21ef 100644
--- a/trytond/tests/test_wizard.py
+++ b/trytond/tests/test_wizard.py
@@ -9,7 +9,7 @@ from trytond.transaction import Transaction
class WizardTestCase(unittest.TestCase):
def setUp(self):
- install_module('test')
+ install_module('tests')
self.wizard = POOL.get('test.test_wizard', type='wizard')
self.session = POOL.get('ir.session.wizard')
self.group = POOL.get('res.group')
diff --git a/trytond/tests/test_workflow.py b/trytond/tests/test_workflow.py
index 7d11a23663..cf564cb148 100644
--- a/trytond/tests/test_workflow.py
+++ b/trytond/tests/test_workflow.py
@@ -11,7 +11,7 @@ from trytond.tests.test_tryton import (POOL, DB_NAME, USER, CONTEXT,
class WorkflowTestCase(unittest.TestCase):
def setUp(self):
- install_module('test')
+ install_module('tests')
self.workflow = POOL.get('test.workflowed')
# TODO add test for Workflow.transition
diff --git a/trytond/test/trigger.py b/trytond/tests/trigger.py
similarity index 100%
rename from trytond/test/trigger.py
rename to trytond/tests/trigger.py
diff --git a/trytond/test/tryton.cfg b/trytond/tests/tryton.cfg
similarity index 100%
rename from trytond/test/tryton.cfg
rename to trytond/tests/tryton.cfg
diff --git a/trytond/test/wizard.py b/trytond/tests/wizard.py
similarity index 96%
rename from trytond/test/wizard.py
rename to trytond/tests/wizard.py
index 929a44f4ad..5ba54851fc 100644
--- a/trytond/test/wizard.py
+++ b/trytond/tests/wizard.py
@@ -26,7 +26,7 @@ class TestWizard(Wizard):
'Test Wizard'
__name__ = 'test.test_wizard'
start = StateView('test.test_wizard.start',
- 'test.test_wizard_start_view_form', [
+ 'tests.test_wizard_start_view_form', [
Button('Cancel', 'end', 'tryton-cancel'),
Button('Next', 'next_', 'tryton-next', default=True),
])
diff --git a/trytond/test/wizard.xml b/trytond/tests/wizard.xml
similarity index 100%
rename from trytond/test/wizard.xml
rename to trytond/tests/wizard.xml
diff --git a/trytond/test/workflow.py b/trytond/tests/workflow.py
similarity index 100%
rename from trytond/test/workflow.py
rename to trytond/tests/workflow.py
diff --git a/trytond/test/workflow.xml b/trytond/tests/workflow.xml
similarity index 100%
rename from trytond/test/workflow.xml
rename to trytond/tests/workflow.xml
diff --git a/trytond/tools/misc.py b/trytond/tools/misc.py
index e22d50f6ae..fbaab914a2 100644
--- a/trytond/tools/misc.py
+++ b/trytond/tools/misc.py
@@ -110,7 +110,7 @@ def file_open(name, mode="r", subdir='modules'):
and (name.startswith('ir' + os.sep)
or name.startswith('res' + os.sep)
or name.startswith('webdav' + os.sep)
- or name.startswith('test' + os.sep))):
+ or name.startswith('tests' + os.sep))):
name = os.path.join(root_path, name)
else:
name = os.path.join(root_path, subdir, name)