class TestImporterAndroid(unittest.TestCase):

    def _load_resources(self, language,  load_resources_method):
        """
        Use AndroidImporter object and load resources from XML files.
        It calls load_resources_method on an AndroidImporter object,
        passing language and parsed XML tree. Param load_resources_method
        is one of:
        
        * AndroidImporter._load_strings
        * AndroidImporter._load_string_arrays
        * AndroidImporter._load_quantity_strings
        
        Return a dictionary mapping language codes to resource arrays.
        """
        
        imp = AndroidImporter()
        xml_file_path = self.config.resource_file_path(language)
        xml_file = open(xml_file_path)
        xml_tree = etree.parse(xml_file)
        if load_resources_method == AndroidImporter._load_strings:
            return imp._load_strings(language, xml_tree)
        elif load_resources_method == AndroidImporter._load_string_arrays:
            return imp._load_string_arrays(language, xml_tree)
        elif load_resources_method == AndroidImporter._load_quantity_strings:
            return imp._load_quantity_strings(language, xml_tree)
        else:
            self.fail("This method is not allowed: %s" % load_resources_method)
    
    def setUp(self):
        """
        Initialize configuration data used in all other tests.
        """
        # load project config
        self.config = Config(reference.project_root_path, False, reference.config_file_path)
        # check if root directory exists
        self.assertTrue( os.path.isdir( self.config.root ) )
        # check if all XML files exist
        for language in self.config.languages:
            filename = self.config.resource_file_path(language)
            self.assertTrue( os.path.isfile(filename) )
    
    def testLoadResourcesHelperFunctionWorks(self):
        for language in self.config.languages:
            strings = self._load_resources(language,  AndroidImporter._load_strings)
            arrays = self._load_resources(language,  AndroidImporter._load_string_arrays)
            quantity = self._load_resources( language,  AndroidImporter._load_quantity_strings)
            self.assertTrue( len(strings) > 0 )
            self.assertTrue( len(arrays) > 0 )
            self.assertTrue( len(quantity) > 0 )
    
    def testLoadsAllStringsForAllLanguages(self):
        for language in self.config.languages:
            strings = self._load_resources( language,  AndroidImporter._load_strings )
            self.assertEqual( len(strings), reference.string_count[language] )
    
    def testLoadsAllStringArraysForAllLanguages(self):
        for language in self.config.languages:
            arrays = self._load_resources( language,  AndroidImporter._load_string_arrays )
            self.assertEqual( len(arrays),  reference.string_array_count[language] )
            
    def testLoadsAllQuantityStringsForAllLanguages(self):
        for language in self.config.languages:
            arrays = self._load_resources( language,  AndroidImporter._load_quantity_strings )
            self.assertEqual( len(arrays),  reference.quantity_strings_count[language] )
Esempio n. 2
0
class TestImporterAndroid(unittest.TestCase):
    def _load_resources(self, language, load_resources_method):
        """
        Use AndroidImporter object and load resources from XML files.
        It calls load_resources_method on an AndroidImporter object,
        passing language and parsed XML tree. Param load_resources_method
        is one of:
        
        * AndroidImporter._load_strings
        * AndroidImporter._load_string_arrays
        * AndroidImporter._load_quantity_strings
        
        Return a dictionary mapping language codes to resource arrays.
        """

        imp = AndroidImporter()
        xml_file_path = self.config.resource_file_path(language)
        xml_file = open(xml_file_path)
        xml_tree = etree.parse(xml_file)
        if load_resources_method == AndroidImporter._load_strings:
            return imp._load_strings(language, xml_tree)
        elif load_resources_method == AndroidImporter._load_string_arrays:
            return imp._load_string_arrays(language, xml_tree)
        elif load_resources_method == AndroidImporter._load_quantity_strings:
            return imp._load_quantity_strings(language, xml_tree)
        else:
            self.fail("This method is not allowed: %s" % load_resources_method)

    def setUp(self):
        """
        Initialize configuration data used in all other tests.
        """
        # load project config
        self.config = Config(reference.project_root_path, False,
                             reference.config_file_path)
        # check if root directory exists
        self.assertTrue(os.path.isdir(self.config.root))
        # check if all XML files exist
        for language in self.config.languages:
            filename = self.config.resource_file_path(language)
            self.assertTrue(os.path.isfile(filename))

    def testLoadResourcesHelperFunctionWorks(self):
        for language in self.config.languages:
            strings = self._load_resources(language,
                                           AndroidImporter._load_strings)
            arrays = self._load_resources(language,
                                          AndroidImporter._load_string_arrays)
            quantity = self._load_resources(
                language, AndroidImporter._load_quantity_strings)
            self.assertTrue(len(strings) > 0)
            self.assertTrue(len(arrays) > 0)
            self.assertTrue(len(quantity) > 0)

    def testLoadsAllStringsForAllLanguages(self):
        for language in self.config.languages:
            strings = self._load_resources(language,
                                           AndroidImporter._load_strings)
            self.assertEqual(len(strings), reference.string_count[language])

    def testLoadsAllStringArraysForAllLanguages(self):
        for language in self.config.languages:
            arrays = self._load_resources(language,
                                          AndroidImporter._load_string_arrays)
            self.assertEqual(len(arrays),
                             reference.string_array_count[language])

    def testLoadsAllQuantityStringsForAllLanguages(self):
        for language in self.config.languages:
            arrays = self._load_resources(
                language, AndroidImporter._load_quantity_strings)
            self.assertEqual(len(arrays),
                             reference.quantity_strings_count[language])
Esempio n. 3
0
    string_arrays = sheet.get_string_arrays()
    quantity_strings = sheet.get_quantity_strings()
    
    Log.print( 'Project root:  %s' % config.root )
    Log.print( 'Generator:     %s' % config.generator )
    Log.print( 'Loader:        %s' % loader )
    Log.print( 'Languages:     %s' % ', '.join(config.languages) )
    Log.print( 'ID key:        %s' % key_id)
    Log.print( 'Sorted by key: %s' % config.sorted)
    Log.print( 'Generating language resources...' )

    generator = Factory.create_generator(config.generator)
    generator.sorted = config.sorted
    generator.add_resources(strings)
    generator.add_resources(string_arrays)
    generator.add_resources(quantity_strings)

    # for each language create a platform-specific generator and
    # generate resource files
    for language in config.languages:
        generator.generate(language)
        generator.write( config.resource_file_path(language) )
        if config.verbose:
            params = (language, config.resource_file_path(language), len(strings), len(string_arrays), len(quantity_strings) )
            Log.print(' * Language %s, file: %s, %s strings, %s arrays, %s plurals' % params)

# Very generic error handling
except MstException as e:
    print("ERROR: %s" % e)
    exit(1)