Пример #1
0
    def requirement(self, req):
        """Write out one requirement."""
        self.__fd.write("%% REQ '%s'\n" % req.id)

        self.__fd.write(
            "\%s{%s}\label{%s}\n\\textbf{Description:} %s\n"
            % (
                self.level_names[self.__level + 1],
                req.get_value("Name").get_content(),
                latex2.__strescape(req.id),
                req.get_value("Description").get_content(),
            )
        )

        if req.is_val_av_and_not_null("Rationale"):
            self.__fd.write("\n\\textbf{Rationale:} %s\n" % req.get_value("Rationale").get_content())

        if req.is_val_av_and_not_null("Note"):
            self.__fd.write("\n\\textbf{Note:} %s\n" % req.get_value("Note").get_content())

        # Only output the depends on when there are fields for output.
        if len(req.incoming) > 0:
            # Create links to the corresponding labels.
            self.__fd.write("\n\\textbf{Depends on:} ")
            self.__fd.write(
                ", ".join(
                    [
                        "\\ref{%s} \\nameref{%s}" % (latex2.__strescape(d.id), latex2.__strescape(d.id))
                        for d in sorted(req.incoming, key=lambda r: r.id)
                    ]
                )
            )
            self.__fd.write("\n")

        if len(req.outgoing) > 0:
            # Create links to the corresponding dependency nodes.
            self.__fd.write("\n\\textbf{Solved by:} ")
            # No comma at the end.
            self.__fd.write(
                ", ".join(
                    [
                        "\\ref{%s} \\nameref{%s}" % (latex2.__strescape(d.id), latex2.__strescape(d.id))
                        for d in sorted(req.outgoing, key=lambda r: r.id)
                    ]
                )
            )
            self.__fd.write("\n")

        if self.__ce3set != None:
            cnstrt = self.__ce3set.get(req.get_id())
            if cnstrt != None and cnstrt.len() > 0:
                self.__fd.write("\n\\textbf{Constraints:} ")
                cstrs = []
                for key, val in sorted(cnstrt.get_values().iteritems()):
                    refid = latex2.__strescape(key)
                    refctr = "\\ref{CONSTRAINT%s} \\nameref{CONSTRAINT%s}" % (refid, refid)
                    description = val.description()
                    if description != None:
                        refctr += " [" + description + "] "
                    cstrs.append(refctr)

                self.__fd.write(", ".join(cstrs))
                self.__fd.write("\n")

        testcases = req.get_value_default("Test Cases")
        if testcases != None:
            self.__fd.write("\n\\textbf{Test Cases:} ")
            tcout = []
            for testcase in testcases:
                refid = latex2.__strescape(testcase)
                refctr = "\\ref{TESTCASE%s} \\nameref{TESTCASE%s}" % (refid, refid)
                tcout.append(refctr)

            self.__fd.write(", ".join(tcout))
            self.__fd.write("\n")

        status = req.get_value("Status").get_output_string()
        # HACK: Remove annoying parenthesis
        status = status.split("(")[0]

        clstr = req.get_value("Class").get_output_string()
        rtype = Requirement.get_type_as_str(req.get_value("Type"))

        self.__fd.write("\n\\textbf{Status:} %s" % status)
Пример #2
0
    def requirement(self, req):
        '''Write out one requirement.'''
        self.__fd.write("%% REQ '%s'\n" % req.id)

        self.__fd.write(
            "\%s{%s}\label{%s}\n\\textbf{Description:} %s\n" %
            (self.level_names[self.__level + 1],
             req.get_value("Name").get_content(), latex2.__strescape(
                 req.id), req.get_value("Description").get_content()))

        if req.is_val_av_and_not_null("Rationale"):
            self.__fd.write("\n\\textbf{Rationale:} %s\n" %
                            req.get_value("Rationale").get_content())

        if req.is_val_av_and_not_null("Note"):
            self.__fd.write("\n\\textbf{Note:} %s\n" %
                            req.get_value("Note").get_content())

        # Only output the depends on when there are fields for output.
        if len(req.incoming) > 0:
            # Create links to the corresponding labels.
            self.__fd.write("\n\\textbf{Depends on:} ")
            self.__fd.write(", ".join([
                "\\ref{%s} \\nameref{%s}" %
                (latex2.__strescape(d.id), latex2.__strescape(d.id))
                for d in sorted(req.incoming, key=lambda r: r.id)
            ]))
            self.__fd.write("\n")

        if len(req.outgoing) > 0:
            # Create links to the corresponding dependency nodes.
            self.__fd.write("\n\\textbf{Solved by:} ")
            # No comma at the end.
            self.__fd.write(", ".join([
                "\\ref{%s} \\nameref{%s}" %
                (latex2.__strescape(d.id), latex2.__strescape(d.id))
                for d in sorted(req.outgoing, key=lambda r: r.id)
            ]))
            self.__fd.write("\n")

        if self.__ce3set != None:
            cnstrt = self.__ce3set.get(req.get_id())
            if cnstrt != None and cnstrt.len() > 0:
                self.__fd.write("\n\\textbf{Constraints:} ")
                cstrs = []
                for key, val in sorted(cnstrt.get_values().iteritems()):
                    refid = latex2.__strescape(key)
                    refctr = "\\ref{CONSTRAINT%s} \\nameref{CONSTRAINT%s}" \
                           % (refid, refid)
                    description = val.description()
                    if description != None:
                        refctr += " [" + description + "] "
                    cstrs.append(refctr)

                self.__fd.write(", ".join(cstrs))
                self.__fd.write("\n")

        testcases = req.get_value_default("Test Cases")
        if testcases != None:
            self.__fd.write("\n\\textbf{Test Cases:} ")
            tcout = []
            for testcase in testcases:
                refid = latex2.__strescape(testcase)
                refctr = "\\ref{TESTCASE%s} \\nameref{TESTCASE%s}" \
                               % (refid, refid)
                tcout.append(refctr)

            self.__fd.write(", ".join(tcout))
            self.__fd.write("\n")

        status = req.get_value("Status").get_output_string()
        # HACK: Remove annoying parenthesis
        status = status.split('(')[0]

        clstr = req.get_value("Class").get_output_string()
        rtype = Requirement.get_type_as_str(req.get_value("Type"))

        self.__fd.write("\n\\textbf{Status:} %s" % status)
Пример #3
0
    def requirement(self, req):
        '''Write out one requirement.'''
        self.__fd.write("%% REQ '%s'\n" % req.get_name())

        self.__fd.write("\%s{%s}\label{%s}\n\\textbf{Description:} %s\n"
                 % (self.level_names[self.__level + 1],
                    req.get_requirement().get_value("Name").get_content(),
                    latex2.__strescape(req.get_name()),
                    req.get_requirement().get_value("Description").get_content()))

        if req.get_requirement().is_val_av_and_not_null("Rationale"):
            self.__fd.write("\n\\textbf{Rationale:} %s\n"
                     % req.get_requirement().get_value("Rationale").get_content())

        if req.get_requirement().is_val_av_and_not_null("Note"):
            self.__fd.write("\n\\textbf{Note:} %s\n"
                     % req.get_requirement().get_value("Note").get_content())

        # Only output the depends on when there are fields for output.
        if req.get_outgoing_cnt() > 0:
            # Create links to the corresponding labels.
            self.__fd.write("\n\\textbf{Depends on:} ")
            self.__fd.write(", ".join(["\\ref{%s} \\nameref{%s}" %
                                (latex2.__strescape(d.get_name()),
                                 latex2.__strescape(d.get_name()))
                                for d in sorted(req.get_iter_outgoing(),
                                                key=lambda r: r.get_name())]))
            self.__fd.write("\n")

        if req.get_incoming_cnt() > 0:
            # Create links to the corresponding dependency nodes.
            self.__fd.write("\n\\textbf{Solved by:} ")
            # No comma at the end.
            self.__fd.write(", ".join(["\\ref{%s} \\nameref{%s}" %
                                (latex2.__strescape(d.get_name()),
                                 latex2.__strescape(d.get_name()))
                                for d in sorted(req.get_iter_incoming(),
                                                key=lambda r: r.get_name())]))
            self.__fd.write("\n")

        tracer.debug("Output constraints")
        if self.__ce3set != None:
            cnstrt = self.__ce3set.get(req.get_name())
            tracer.debug("Constraints are available [%s]" % cnstrt)
            tracer.debug("Check constraint header output [%s]" %
                         cnstrt.len())
            if cnstrt != None and cnstrt.len() > 0:
                tracer.debug("Output constraint header")
                self.__fd.write("\n\\textbf{Constraints:} ")
                cstrs = []
                for key, val in sorted(cnstrt.get_values().iteritems()):
                    refid = latex2.__strescape(key)
                    tracer.debug("Output constraint [%s]" % refid)
                    refctr = "\\ref{CONSTRAINT%s} \\nameref{CONSTRAINT%s}" \
                           % (refid, refid)
                    description = val.description()
                    if description != None:
                        refctr += " [" + description + "] "
                    cstrs.append(refctr)
                    # Also put a reference (for later use) in the 
                    # constraints to requirements ref.
                    self.__add_constraint_req_ref(refid, 
                            req.get_requirement().get_id())

                self.__fd.write(", ".join(cstrs))
                self.__fd.write("\n")

        testcases = req.get_requirement().get_value_default("Test Cases")
        if testcases != None:
            self.__fd.write("\n\\textbf{Test Cases:} ")
            tcout = []
            for testcase in testcases:
                refid = latex2.__strescape(testcase)
                refctr = "\\ref{TESTCASE%s} \\nameref{TESTCASE%s}" \
                               % (refid, refid)
                tcout.append(refctr)

            self.__fd.write(", ".join(tcout))
            self.__fd.write("\n")

        status = req.get_requirement().get_value("Status").get_output_string()
        clstr = req.get_requirement().get_value("Class").get_output_string()
        rtype = Requirement.get_type_as_str(req.get_requirement().get_value("Type"))

        self.__fd.write("\n\\par\n{\small \\begin{center}"
                        "\\begin{tabular}{rlrlrl}\n")

        # Put mostly three things in a line.
        i = 0
        for rattr in self._config.get_value("req_attributes"):
            if rattr == "Id":
                self.__fd.write("\\textbf{Id:} & %s " % req.get_name())
            elif rattr == "Priority":
                self.__fd.write("\\textbf{Priority:} & %4.2f "
                         % (req.get_requirement().get_value("Priority") * 10))
            elif rattr == "Owner":
                self.__fd.write("\\textbf{Owner:} & %s" %
                                req.get_requirement().get_value("Owner"))
            elif rattr == "Invented on":
                self.__fd.write("\\textbf{Invented on:} & %s "
                         % req.get_requirement().get_value("Invented on").strftime("%Y-%m-%d"))
            elif rattr == "Invented by":
                self.__fd.write("\\textbf{Invented by:} & %s "
                         % req.get_requirement().get_value("Invented by"))
            elif rattr == "Status":
                self.__fd.write("\\textbf{Status:} & %s " % status)
            elif rattr == "Class":
                self.__fd.write("\\textbf{Class:} & %s " % clstr)
            elif rattr == "Type":
                self.__fd.write("\\textbf{Type:} & %s " % rtype)
            else:
                # This only happens when a wrong configuration is supllied.
                raise RMTException(85, "Wrong latex2 output configuration "
                                   "supplied: unknown tag [%s]" % rattr)
            i += 1
            if i == 3:
                i = 0
                self.__fd.write("\\\ \n")
            else:
                self.__fd.write(" & ")
        while i < 2:
            self.__fd.write("& & ")
            i += 1

        self.__fd.write("\end{tabular}\end{center} }\n\n")