def testAssignFirstIds(self):
    input = u'''<?xml version="1.0" encoding="UTF-8"?>
<grit latest_public_release="2" source_lang_id="en-US" current_release="3" base_dir=".">
  <release seq="3">
    <messages>
      <message name="IDS_TEST" desc="test">
        test
      </message>
    </messages>
  </release>
</grit>'''
    pseudo_file = StringIO.StringIO(input)
    root = grd_reader.Parse(pseudo_file, '.')
    root.AssignFirstIds("../../chrome/app/generated_resources.grd", None)
    messages_node = root.children[0].children[0]
    self.failUnless(isinstance(messages_node, empty.MessagesNode))
    self.failUnless(messages_node.attrs["first_id"] !=
        empty.MessagesNode().DefaultAttributes()["first_id"])
    def doTestAssignFirstIds(self, first_ids_path):
        input = u'''<?xml version="1.0" encoding="UTF-8"?>
<grit latest_public_release="2" source_lang_id="en-US" current_release="3"
      base_dir="." first_ids_file="%s">
  <release seq="3">
    <messages>
      <message name="IDS_TEST" desc="test">
        test
      </message>
    </messages>
  </release>
</grit>''' % first_ids_path
        pseudo_file = StringIO.StringIO(input)
        grit_root_dir = os.path.join(
            os.path.abspath(os.path.dirname(__file__)), '..')
        fake_input_path = os.path.join(
            grit_root_dir, "grit/testdata/chrome/app/generated_resources.grd")
        root = grd_reader.Parse(pseudo_file, os.path.split(fake_input_path)[0])
        root.AssignFirstIds(fake_input_path, {})
        messages_node = root.children[0].children[0]
        self.failUnless(isinstance(messages_node, empty.MessagesNode))
        self.failUnless(messages_node.attrs["first_id"] !=
                        empty.MessagesNode().DefaultAttributes()["first_id"])
示例#3
0
    def Load(self,
             filename,
             params={},
             output_file_name=None,
             extra_languages=None):
        self.filename_base = os.path.splitext(output_file_name
                                              or os.path.basename(filename))[0]
        self.orig_filename_base = os.path.splitext(
            os.path.basename(filename))[0]
        self.filedir = os.path.dirname(filename)
        self.resources = self.__load_resource(filename,
                                              params,
                                              extra_languages=extra_languages)
        #self.all_source_files.add(filename)
        file_list = ScanDir(self.filedir)
        for x in file_list:
            #print >>sys.stderr, "Adding", x, ":", x[0], x.startswith(".")
            if x.startswith("."):
                raise Exception(x)
        self.all_source_files.update(file_list)
        self.active_source_files.update(file_list)

        self["grit"] = dict(self.resources["resources"].attrs)

        if "outputs" in self.resources["nodes"]["internals"]:
            new_top = empty.OutputsNode()
            new_top.name = "outputs"
            _seq, old_top = self.resources["nodes"]["internals"]["outputs"][0]
            new_top.attrs = dict(old_top.attrs)

            for old_node in iter_gritnode(old_top, io.OutputNode):
                if (self.orig_filename_base != self.filename_base and
                        old_node.attrs.get("type", None) == "data_package"):
                    old_node.attrs["filename"] = old_node.attrs[
                        "filename"].replace(self.orig_filename_base + "_",
                                            self.filename_base + "_")
                #if self.orig_filename_base == "components_google_chrome_strings":
                #  print >>sys.stderr, old_node.attrs["filename"]

                new_top.AddChild(old_node)
                old_node.parent = new_top
            self["outputs"] = new_top

        if "translations" in self.resources["nodes"]["internals"]:
            new_top = empty.TranslationsNode()
            new_top.name = "translations"
            _seq, old_top = self.resources["nodes"]["internals"][
                "translations"][0]
            new_top.attrs = dict(old_top.attrs)

            for old_node in iter_gritnode(old_top, io.FileNode):
                new_node = io.FileNode()
                new_node.name = "file"
                new_node.attrs = dict(old_node.attrs)
                if "path" in new_node.attrs:
                    self.all_source_files.add(new_node.attrs["path"].replace(
                        "\\", "/"))
                    new_node.attrs["path"] = os.path.join(
                        os.getcwd(),
                        old_node.ToRealPath(old_node.GetInputPath()))
                new_top.AddChild(new_node)
                new_node.parent = new_top
            self["translations"] = new_top

        if "release" in self.resources["nodes"]["internals"]:
            new_release = misc.ReleaseNode()
            new_release.name = "release"
            _seq, old_top = self.resources["nodes"]["internals"]["release"][0]
            new_release.attrs = dict(old_top.attrs)
            self["release"] = new_release

        if "includes" in self.resources["nodes"]["internals"]:
            _seq, old_top = self.resources["nodes"]["internals"]["includes"][0]
            if self.keep_sequence:
                new_top = old_top
                self.__remove_part_nodes(new_top)
            else:
                new_top = empty.IncludesNode()
                new_top.name = "includes"
                new_top.attrs = dict(old_top.attrs)
            self["includes"] = new_top
            self["include-files"] = {}

            for _seq, old_node in sorted([
                    x for x in self.resources["nodes"].itervalues()
                    if isinstance(x, tuple)
                    and isinstance(x[1], include.IncludeNode)
            ]):
                new_node = include.IncludeNode()
                new_node.name = "include"
                new_node.attrs = dict(old_node.attrs)
                if "file" in new_node.attrs:
                    old_file = new_node.attrs["file"].replace("\\", "/")
                    new_node.attrs["file"] = old_file
                    self._AddFile(old_file)

                self["include-files"][new_node.attrs["name"]] = (_seq,
                                                                 new_node)

        if "messages" in self.resources["nodes"]["internals"]:
            _seq, old_top = self.resources["nodes"]["internals"]["messages"][0]
            if self.keep_sequence:
                new_top = old_top
                self.__remove_part_nodes(new_top)
            else:
                new_top = empty.MessagesNode()
                new_top.name = "messages"
                new_top.attrs = dict(old_top.attrs)
            self["messages"] = new_top
            self["message-entries"] = {}

            for _seq, old_node in sorted([
                    x for x in self.resources["nodes"].itervalues()
                    if isinstance(x, tuple)
                    and isinstance(x[1], message.MessageNode)
            ]):
                #if old_node.GetCliques():
                #  print old_node.GetCliques()[0].MessageForLanguage("no").GetPresentableContent()
                self["message-entries"][old_node.attrs["name"]] = (_seq,
                                                                   old_node)

        if "structures" in self.resources["nodes"]["internals"]:
            _seq, old_top = self.resources["nodes"]["internals"]["structures"][
                0]
            if self.keep_sequence:
                new_top = old_top
                self.__remove_part_nodes(new_top)
            else:
                new_top = empty.StructuresNode()
                new_top.name = "structures"
                new_top.attrs = dict(old_top.attrs)
            self["structures"] = new_top
            self["structure-entries"] = {}

            for _seq, old_node in sorted([
                    x for x in self.resources["nodes"].itervalues()
                    if isinstance(x, tuple)
                    and isinstance(x[1], structure.StructureNode)
            ]):
                if self.keep_sequence:
                    new_node = old_node
                else:
                    new_node = structure.StructureNode()
                    new_node.name = "structure"
                    new_node.attrs = dict(old_node.attrs)
                if "file" in new_node.attrs:
                    old_file = new_node.attrs["file"].replace("\\", "/")
                    new_node.attrs["file"] = old_file
                    self._AddFile(old_file)

                self["structure-entries"][new_node.attrs["name"]] = (_seq,
                                                                     new_node)