示例#1
0
    def testPackageManager_import(self):
        # PackageManager.import_ imports symbol to symbol container of the specific package.

        # The package_name argument is omitted,
        # the method imports symbol to PackageManager.current_package.symbol_container.

        # IMPORT is interned to PakageManager.package_container['COMMON-LISP-USER'].
        PackageManager.intern(symbol_designator=String('IMPORT'), package_designator=String('COMMON-LISP-USER'))
        # Add value to the variable space.
        PackageManager.package_container['COMMON-LISP-USER'].env['VARIABLE']['IMPORT'] = String('VALUE')

        PackageManager.import_(symbol_designator=Symbol('COMMON-LISP-USER::IMPORT'))
        symbol, status = PackageManager.find_symbol(symbol_designator=String('IMPORT'))

        self.assertTrue(symbol is Symbol('IMPORT'))
        self.assertTrue(status is Keyword(':INTERNAL'))
        self.assertTrue(PackageManager.current_package.env['VARIABLE']['IMPORT'] is String('VALUE'))

        # The package_designator argument is supplied to the specified package.

        # IMPORT-WITH-PACKAGE is interned to COMMON-LISP package.
        PackageManager.intern(symbol_designator=String('IMPORT-WITH-PACKAGE'), package_designator=String('COMMON-LISP'))
        # Add value to the variable space.
        PackageManager.package_container['COMMON-LISP'].env['VARIABLE']['IMPORT-WITH-PACKAGE'] = String('VALUE')

        PackageManager.import_(symbol_designator=Symbol('COMMON-LISP::IMPORT-WITH-PACKAGE'), package_designator=Symbol('COMMON-LISP-USER'))
        symbol, status = PackageManager.find_symbol(symbol_designator=String('IMPORT-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER'))

        self.assertTrue(symbol is Symbol('IMPORT-WITH-PACKAGE'))
        self.assertTrue(status is Keyword(':INTERNAL'))
        self.assertTrue(PackageManager.package_container['COMMON-LISP-USER'].env['VARIABLE']['IMPORT-WITH-PACKAGE'] is String('VALUE'))
示例#2
0
    def testPackageManager_find_symbol(self):
        # PackageManager.find_symbol returns symbol represented by symbol_designator and status.

        # The package_designator argument is omitted,
        # PackageManager.current_package.symbol_container is checked.
        # FIND-SYMBOL is interned to PackageManager.current_package in advance.
        PackageManager.intern(symbol_designator=String('FIND-SYMBOL'))
        symbol, status = PackageManager.find_symbol(symbol_designator=String('FIND-SYMBOL'))

        self.assertTrue(symbol is Symbol('FIND-SYMBOL'))
        self.assertTrue(status, Keyword(':INTERNAL'))

        # If symbol_designator dose not exist in PackageManager.current_package,
        # it must return Null object as symbol and status.
        symbol, status = PackageManager.find_symbol(symbol_designator=String('FIND-SYMBOL-NOT-EXIST'))

        self.assertTrue(symbol is Null())
        self.assertTrue(status is Null())

        # The package_designator argument is supplied to the specified package.
        # FIND-SYMBOL-WITH-PACKAGE is interned to COMMON-LISP-USER package in advance.
        PackageManager.intern(symbol_designator=String('FIND-SYMBOL-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER'))
        symbol, status = PackageManager.find_symbol(symbol_designator=String('FIND-SYMBOL-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER'))

        self.assertTrue(symbol is Symbol('FIND-SYMBOL-WITH-PACKAGE'))
        self.assertTrue(status is Keyword(':INTERNAL'))

        # If symbol_designator dose not exist in the specified package,
        # it must return Null object as symbol and status.
        symbol, status = PackageManager.find_symbol(symbol_designator=String('FIND-SYMBOL-WITH-PACKAGE-NOT-EXIST'), package_designator=String('COMMON-LISP-USER'))

        self.assertTrue(symbol is Null())
        self.assertTrue(status is Null())
示例#3
0
    def __call__(self, forms, var_env, func_env, macro_env):
        """Behavior of FindSymbolSystemFunction.
        """
        args = self.eval_forms(forms, var_env, func_env, macro_env)

        symbol_designator = args.car
        package_designator = args.cdr.car

        if package_designator is Null():
            return PackageManager.find_symbol(symbol_designator=symbol_designator)
        else:
            return PackageManager.find_symbol(symbol_designator=symbol_designator, package_designator=package_designator)
示例#4
0
    def testPackageManager_use_package(self):
        # PackageManager.use_package inherited symbol in package_designator_to_use.

        # The package_designator argument is omitted,
        # symbol is inherited, and interned to PackageManager.current_package.symbol_container.
        # USE-PACKAGE-INTERNAL and USE-PACKAGE-EXTERNAL are interned to COMMON-LISP-USER.
        PackageManager.intern(symbol_designator=String('USE-PACKAGE-INTERNAL'), package_designator=String('COMMON-LISP-USER'))
        PackageManager.intern(symbol_designator=String('USE-PACKAGE-EXTERNAL'), package_designator=String('COMMON-LISP-USER'))

        # Only status of USE-PACKAGE-EXTERNAL is changed to :EXTERNAL.
        PackageManager.export(symbol_designator=Symbol('USE-PACKAGE-EXTERNAL'), package_designator=Symbol('COMMON-LISP-USER'))

        PackageManager.use_package(package_designator_to_use=Symbol('COMMON-LISP-USER'))

        # When status is :EXTERNAL, the symbol is inherited.
        symbol, status = PackageManager.find_symbol(symbol_designator=String('USE-PACKAGE-EXTERNAL'))
        self.assertTrue(symbol is Symbol('USE-PACKAGE-EXTERNAL'))
        self.assertTrue(status is Keyword(':INHERITED'))

        # When statis is not :EXTERNAL, the symbol is not inherited.
        symbol, status = PackageManager.find_symbol(symbol_designator=String('USE-PACKAGE-INTERNAL'))
        self.assertTrue(symbol is Null())
        self.assertTrue(status is Null())

        # The package_designator argument is supplied to the specified package.
        # USE-PACKAGE-INTERNAL-WITH-PACKAGE and USE-PACKAGE-EXTERNAL-WITH-PACKAGE are interned to COMMON-LISP.
        PackageManager.intern(String('USE-PACKAGE-INTERNAL-WITH-PACKAGE'))
        PackageManager.intern(String('USE-PACKAGE-EXTERNAL-WITH-PACKAGE'))

        # Only status of USE-PACKAGE-EXTERNAL-WITH-PACKAGE is changed to :EXTERNAL.
        PackageManager.export(Symbol('USE-PACKAGE-EXTERNAL-WITH-PACKAGE'))

        PackageManager.use_package(package_designator_to_use=Symbol('COMMON-LISP'), package_designator=Symbol('COMMON-LISP-USER'))

        # When status is :EXTERNAL, the symbol is inherited.
        symbol, status = PackageManager.find_symbol(symbol_designator=String('USE-PACKAGE-EXTERNAL-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER'))
        self.assertTrue(symbol is Symbol('USE-PACKAGE-EXTERNAL-WITH-PACKAGE'))
        self.assertTrue(status is Keyword(':INHERITED'))

        # When statis is not :EXTERNAL, the symbol is not inherited.
        symbol, status = PackageManager.find_symbol(symbol_designator=String('USE-PACKAGE-INTERNAL-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER'))
        self.assertTrue(symbol is Null())
        self.assertTrue(status is Null())
示例#5
0
    def testPackageManager_export(self):
        # PackageManager.export changes symbol status in symbol container to :EXTERNAL.

        # The package_designator argument is omitted,
        # status in PackageManager.current_package.symbol_container is changed.
        # EXPORT is interned to PackageManager.current_package in advance.
        PackageManager.intern(symbol_designator=String('EXPORT'))
        PackageManager.export(symbol_designator=Symbol('EXPORT'))
        symbol, status = PackageManager.find_symbol(symbol_designator=String('EXPORT'))

        self.assertTrue(symbol is Symbol('EXPORT'))
        self.assertTrue(status is Keyword(':EXTERNAL'))

        # The package_designator argument is supplied to the specified package.
        # EXPORT-WITH-PACKAGE is interned to COMMON-LISP-USER pacakge in advance.
        PackageManager.intern(symbol_designator=String('EXPORT-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER'))
        PackageManager.export(symbol_designator=Symbol('EXPORT-WITH-PACKAGE'), package_designator=Symbol('COMMON-LISP-USER'))
        symbol, status = PackageManager.find_symbol(symbol_designator=String('EXPORT-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER'))

        self.assertTrue(symbol is Symbol('EXPORT-WITH-PACKAGE'))
        self.assertTrue(status is Keyword(':EXTERNAL'))