def test_neg_point_to_self(self): "'Solved by' points to same requirement" mstderr = StringIO.StringIO() init_logger(mstderr) config = TestConfig() reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, None, None) reqset.add_node(RequirementDNode(req1)) req2 = Requirement('''Name: B Type: requirement Solved by: B''', 'B', None, None, None) reqset.add_node(RequirementDNode(req2)) config.set_solved_by() rdep = RDepSolvedBy(config) status = rdep.rewrite(reqset) self.assertFalse(status) lstderr = hide_lineno(hide_timestamp(mstderr.getvalue())) tear_down_log_handler() result_expected = "===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;" \ "__resolve_solved_by_one_req;===SOURCELINENO===; 75:B:'Solved by' " \ "points to the requirement itself\n" self.assertEquals(result_expected, lstderr)
def rmttest_neg_01(self): "LaTeX output: check invalid tag in topic" tcfg = TestConfig() tcfg.set_output_cfg() tvcs = TestVCS(tcfg) tfile = tvcs.get_tfile1() topic = Topic(None, u"TName", tvcs, None, tfile, None) topic.t = [RecordEntry(u"CompleteleOther", u"My content"), ] rset = RequirementSet(tcfg) ttopic_set = TestTopicSet(rset) mconfig = self.__def_mconfig req_proc = latex2(mconfig) try: req_proc.topic_set_pre(ttopic_set) topic.execute(req_proc, "") assert False except RMTException: pass req_proc.topic_set_post(ttopic_set)
def __init__(self): tc = TestConfig() tc.set_value('input.txtfile.whatsoever.max_line_length', 80) tm = TMods() tm.tagtypes = {"mytag": {"keyA": TMods()}} BaseRMObject.__init__(self, u"mytag", u"", u"MRid", tm, tc, u"tobjs", None)
def test_positive_01(self): "Two node one edge digraph B -> A" config = TestConfig() imod = InputModules("..", config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_node(RequirementDNode(req1)) req2 = Requirement('''Name: B Type: requirement Depends on: A''', 'B', None, imod, config) reqset.add_node(RequirementDNode(req2)) config.set_depends_on() rdep = RDepDependsOn(config) rdep.rewrite(reqset) assert (reqset.get_requirement("A").get_incoming_as_named_list() == []) assert (reqset.get_requirement("A").get_outgoing_as_named_list() == [ "B" ]) assert (reqset.get_requirement("B").get_incoming_as_named_list() == [ "A" ]) assert (reqset.get_requirement("B").get_outgoing_as_named_list() == [])
def rmttest_def_req(self): "LaTeX output: compare output to defined value" exp_value = r""" \paragraph{my name} \hypertarget{TestReq}{TestReq} \label{TestReq} my desc \textbf{Rationale:} \textbf{Note:} \par{\small \begin{center} \begin{tabular}{rlrlrl} Id: & TestReq & Priority: & & Owner: & \\ Invented on: & & Invented by: & & Status: & finished (meiner, 2011-04-15, 4 h) \\ Class: & implementable \end{tabular}\end{center} } """ # noqa tcfg = TestConfig() tcfg.set_output_cfg() mconfig = self.__def_mconfig mconfig['req_attributes'] = ["Status", "Class", "DoesNotExists"] req_proc = latex2(mconfig) req = Requirement(None, u"TestReq", None, None, None) req.values = {} req.values[u"Name"] = RecordEntry(u"Name", u"my name") req.values[u"Type"] = RequirementType.requirement req.values[u"Description"] = RecordEntry(u"Description", u"my desc") req.values[u"Status"] = RequirementStatusFinished( None, u"rid", u"finished:meiner:2011-04-15:4h") req.values[u"Class"] = ClassTypeImplementable() ce3set = CE3Set() ce3 = CE3() ce3set.insert(u"TestReq", ce3) ''' This is here for future? use. rset = RequirementSet(tcfg) ttopic_set = TestTopicSet(rset) ''' req_text = req_proc._get_requirement(req) try: assert req_text == exp_value except AssertionError: import difflib diff = difflib.ndiff(req_text.splitlines(True), exp_value.splitlines(True)) print(''.join(diff)) raise Exception("The template is not equal to it's expected value")
def rmttest_neg_point_to_self(self): "'Solved by' points to same requirement" mstderr = StringIO() init_logger(mstderr) config = TestConfig() reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, None, None) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement Solved by: B''', 'B', None, None, None) reqset.add_requirement(req2) config.set_solved_by() rdep = RDepSolvedBy(config) status = rdep.rewrite(reqset) assert not status lstderr = hide_volatile(mstderr.getvalue()) tear_down_log_handler() result_expected \ = "===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;" \ "__resolve_solved_by_one_req_deps;===LINENO===; " \ "75:B:'Solved by' points to the requirement itself\n" assert result_expected == lstderr
def rmttest_positive_02(self): "Three node one edge digraph B -> A, C -> A and C -> B" config = TestConfig() imod = InputModules(config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement Depends on: A''', 'B', None, imod, config) reqset.add_requirement(req2) config.set_depends_on() req3 = Requirement('''Name: C Type: requirement Depends on: A B''', 'C', None, imod, config) reqset.add_requirement(req3) config.set_depends_on() rdep = RDepDependsOn(config) rdep.rewrite(reqset) assert [] == reqset.get_requirement("A").incoming_as_named_list() # There are two possible valid results assert reqset.get_requirement("A").outgoing_as_named_list() \ in [["C", "B"], ["B", "C"]] assert ["A"] == reqset.get_requirement("B").incoming_as_named_list() assert ["C"] == reqset.get_requirement("B").outgoing_as_named_list() assert ["A", "B"] == reqset.get_requirement( "C").incoming_as_named_list() assert [] == reqset.get_requirement("C").outgoing_as_named_list()
def rmttest_neg_01(self): "LaTeX output: check invalid tag in topic" tcfg = TestConfig() tcfg.set_output_cfg() tvcs = TestVCS(tcfg) tfile = tvcs.get_tfile1() topic = Topic(None, u"TName", tvcs, None, tfile, None) topic.t = [ RecordEntry(u"CompleteleOther", u"My content"), ] rset = RequirementSet(tcfg) ttopic_set = TestTopicSet(rset) mconfig = self.__def_mconfig req_proc = latex2(mconfig) try: req_proc.topic_set_pre(ttopic_set) topic.execute(req_proc, "") assert False except RMTException: pass req_proc.topic_set_post(ttopic_set)
def test_positive_02(self): "Three node one edge digraph B -> A, C -> A and C -> B" config = TestConfig() imod = InputModules("..", config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_node(RequirementDNode(req1)) req2 = Requirement('''Name: B Type: requirement Depends on: A''', 'B', None, imod, config) reqset.add_node(RequirementDNode(req2)) config.set_depends_on() req3 = Requirement('''Name: C Type: requirement Depends on: A B''', 'C', None, imod, config) reqset.add_node(RequirementDNode(req3)) config.set_depends_on() rdep = RDepDependsOn(config) rdep.rewrite(reqset) assert(reqset.get_requirement("A").get_incoming_as_named_list() == []) assert(reqset.get_requirement("A").get_outgoing_as_named_list() == ["C", "B"]) assert(reqset.get_requirement("B").get_incoming_as_named_list() == ["A"]) assert(reqset.get_requirement("B").get_outgoing_as_named_list() == ["C"]) assert(reqset.get_requirement("C").get_incoming_as_named_list() == ["A", "B"]) assert(reqset.get_requirement("C").get_outgoing_as_named_list() == [])
def test_neg_01(self): "LaTeX output: check invalid tag in topic" tcfg = TestConfig() tcfg.set_output_cfg() tvcs = TestVCS(tcfg) tfile = tvcs.get_tfile1() dg = Digraph() topic = Topic(dg, "TName", tvcs, None, tfile, None) topic.t = [RecordEntry("CompleteleOther", "My content"), ] tmpdir = create_tmp_dir() rset = RequirementSet(tcfg) ttopic_set = TestTopicSet(rset) mconfig = {"output_filename": os.path.join(tmpdir, "TestLateX2Out.tex")} l2 = latex2(mconfig) try: l2.topic_set_pre(ttopic_set) topic.execute(l2, "") assert(False) except RMTException, rmte: pass
def rmttest_neg_01(self): "LaTeX output: check invalid tag in topic" tcfg = TestConfig() tcfg.set_output_cfg() tvcs = TestVCS(tcfg) tfile = tvcs.get_tfile1() topic = Topic(None, u"TName", tvcs, None, tfile, None) topic.t = [ RecordEntry(u"CompleteleOther", u"My content"), ] tmpdir = create_tmp_dir() rset = RequirementSet(tcfg) ttopic_set = TestTopicSet(rset) mconfig = { "output_filename": os.path.join(tmpdir, "TestLateX2Out.tex") } out_l2 = latex2(mconfig) try: out_l2.topic_set_pre(ttopic_set) topic.execute(out_l2, "") assert False except RMTException: pass out_l2.topic_set_post(ttopic_set) delete_tmp_dir(tmpdir)
def rmttest_positive_01(self): """Requirement contains a tag where no handler exists""" mstderr = StringIO() init_logger(mstderr) test_config = TestConfig() test_config.set_solved_by() mods = InputModules(test_config) reqs = RequirementSet(None) req = Requirement("Hubbel: bubbel", "hubbel", reqs, mods, test_config) reqs.add_requirement(req) reqs._handle_modules(mods) lstderr = hide_volatile(mstderr.getvalue()) tear_down_log_handler() result_expected \ = ["===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;" "__all_tags_handled;===LINENO===; 57:hubbel:No tag handler " "found for " "tag(s) '[\"Hubbel\"]' - Hint: typo in tag(s)?", "===DATETIMESTAMP===;rmtoo;ERROR;" "RequirementSet;_handle_modules;" "===LINENO===; 56:There were errors encountered during parsing " "and checking - can't continue."] lstderr_last_two_lines = lstderr.split("\n")[-3:-1] assert result_expected == lstderr_last_two_lines
def __init__(self): tc = TestConfig() tc.set_value('input.txtfile.whatsoever.max_line_length', 80) tm = TMods() tm.tagtypes = {"mytag": {"keyA": TMods()}} BaseRMObject.__init__(self, "mytag", "", "MRid", tm, tc, "tobjs", None)
def rmttest_positive_01(self): "Two node one edge digraph B -> A" config = TestConfig() imod = InputModules(config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement Depends on: A''', 'B', None, imod, config) reqset.add_requirement(req2) config.set_depends_on() rdep = RDepDependsOn(config) rdep.rewrite(reqset) self.assertEqual([], reqset.get_requirement("A").incoming_as_named_list()) self.assertEqual(["B"], reqset.get_requirement("A").outgoing_as_named_list()) self.assertEqual(["A"], reqset.get_requirement("B").incoming_as_named_list()) self.assertEqual([], reqset.get_requirement("B").outgoing_as_named_list())
def rmttest_neg_solved_by_to_nonex_req(self): "'Solved by' points to a non existing requirement" mstderr = StringIO() init_logger(mstderr) config = TestConfig() reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, None, None) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement Solved by: C''', 'B', None, None, None) reqset.add_requirement(req2) config.set_solved_by() rdep = RDepSolvedBy(config) status = rdep.rewrite(reqset) self.assertFalse(status) lstderr = hide_volatile(mstderr.getvalue()) tear_down_log_handler() result_expected \ = "===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;" \ "__resolve_solved_by_one_req_deps;===LINENO===; " \ "74:B:'Solved by' points to a non-existing requirement 'C'\n" self.assertEquals(result_expected, lstderr)
def __init__(self): sfd = StringIO.StringIO() tc = TestConfig() tc.txtio = {"tobjs": TxtIOConfig()} tm = TMods() tm.tagtypes = {"mytag": {"keyA": TMods()}} self.mls = MemLogStore() BaseRMObject.__init__(self, "mytag", sfd, "MRid", self.mls, tm, None, tc, "tobjs")
def __init__(self): sfd = StringIO.StringIO() tc = TestConfig() tc.set_value('input.txtfile.whatsoever.max_line_length', 80) tm = TMods() tm.tagtypes = {"mytag": {"keyA": TMods()}} self.mls = MemLogStore() BaseRMObject.__init__(self, "mytag", sfd, "MRid", self.mls, tm, tc, "tobjs")
def test_neg_01(self): "Wrong value in dependency_notation" tc = TestConfig() tc.reqs_spec["dependency_notation"] = set(["Das gibbt es nich",]) try: ConfigUtils.check(tc) assert(False) except RMTException, rmte: assert(rmte.id()==70)
def test_pos_01(self): "config.parser is available, but no other value" tc = TestConfig() tc.parser = {} ConfigUtils.set_defaults_parser(tc) ConfigUtils.check(tc) assert(tc.txtio["requirements"].get_max_line_length()==80) assert(tc.txtio["topics"].get_max_line_length()==80)
def rmttest_neg_01(self): "Topic: (internal) check if Name tag exists" dg = Digraph() tconfig = TestConfig() tconfig.set_value("topic_root_node", "/nothing/compare") tvcs = TestVCS(tconfig) tfileinfo = TestVCS.FileInfo(1) with self.assertRaises(RMTException) as rmte: Topic(dg, tconfig, tvcs, None, tfileinfo, None) self.assertEqual(62, rmte.get_id())
def rmttest_neg_01(self): "Topic: (internal) check if Name tag exists" dg = Digraph() tconfig = TestConfig() tconfig.set_value("topic_root_node", "/nothing/compare") tvcs = TestVCS(tconfig) tfileinfo = TestVCS.FileInfo(1) with pytest.raises(RMTException) as rmte: Topic(dg, tconfig, tvcs, None, tfileinfo, None) assert 62 == rmte.get_id()
def test_neg_03(self): "Wrong value in requirements max_line_length" tc = TestConfig() tc.parser = {} tc.parser["requirements"] = {} tc.parser["requirements"]["max_line_length"] = -112 try: ConfigUtils.set_defaults_parser(tc) ConfigUtils.check(tc) assert(False) except RMTException, rmte: assert(rmte.id()==72)
def test_neg_02(self): "Wrong type in requirements max_line_length" tc = TestConfig() tc.parser = {} tc.parser["requirements"] = {} tc.parser["requirements"]["max_line_length"] = \ set(["Das gibbt es nich",]) try: ConfigUtils.set_defaults_parser(tc) ConfigUtils.check(tc) assert(False) except RMTException, rmte: assert(rmte.id()==71)
def test_neg_01(self): "Topic: (internal) check if Name tag exists" dg = Digraph() tconfig = TestConfig() tconfig.set_value("topic_root_node", "/nothing/compare") tvcs = TestVCS(tconfig) tfileinfo = TestVCS.FileInfo(1) try: topic = Topic(dg, tconfig, tvcs, None, tfileinfo, None) assert (False) except RMTException, rmte: assert (rmte.id() == 62)
def test_neg_01(self): "Topic: (internal) check if Name tag exists" dg = Digraph() tconfig = TestConfig() tconfig.set_value("topic_root_node", "/nothing/compare") tvcs = TestVCS(tconfig) tfileinfo = TestVCS.FileInfo(1) try: topic = Topic(dg, tconfig, tvcs, None, tfileinfo, None) assert(False) except RMTException, rmte: assert(rmte.id() == 62)
def rmttest_positive_02(self): "Three node digraph C -> B -> A" config = TestConfig() reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement Solved by: B''', 'A', None, None, None) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement Solved by: C''', 'B', None, None, None) reqset.add_requirement(req2) req3 = Requirement('''Name: C Type: requirement''', 'C', None, None, None) reqset.add_requirement(req3) reqset.resolve_solved_by() reqset.find_master_nodes() reqset.build_named_nodes() reqset.graph_master_node = reqset.get_named_node("A") reqset.get_named_node("A").set_value("Factor", 1.0) reqset.get_named_node("B").set_value("Factor", 0.8) reqset.get_named_node("C").set_value("Factor", 0.5) rdep = RDepPriority(config) rdep.rewrite(reqset) assert 1.0 == reqset.get_named_node("A").get_value("Priority") assert 0.8 == reqset.get_named_node("B").get_value("Priority") assert 0.4 == reqset.get_named_node("C").get_value("Priority")
def test_positive_02(self): "Requirement contains a tag where no handler exists - multiple tags" mstderr = StringIO.StringIO() init_logger(mstderr) mods = InputModules(os.path.join(mod_base_dir, "modules08"), {}, [], mods_list("modules08", mod_base_dir)) reqs = RequirementSet(None) req = Requirement("Hubbel: bubbel\nSiebel: do", "InvalidTagReq", reqs, mods, TestConfig()) reqs.add_node(RequirementDNode(req)) reqs._handle_modules(mods) lstderr = hide_timestamp(mstderr.getvalue()) lstderr = hide_lineno(lstderr) tear_down_log_handler() result_expected = "===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;" \ "__all_tags_handled;===SOURCELINENO===; 57:InvalidTagReq:No tag " \ "handler found " \ "for tag(s) '['Siebel', 'Hubbel']' - Hint: typo in tag(s)?\n" \ "===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;_handle_modules;" \ "===SOURCELINENO===; 56:There were errors encountered during parsing " \ "and checking " \ "- can't continue.\n" self.assertEquals(result_expected, lstderr)
def test_positive_01(self): "Two node one edge digraph B -> A" config = TestConfig() reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement Solved by: B''', 'A', None, None, None) reqset.add_node(RequirementDNode(req1)) req2 = Requirement('''Name: B Type: requirement''', 'B', None, None, None) reqset.add_node(RequirementDNode(req2)) reqset.resolve_solved_by() reqset.find_master_nodes() reqset.graph_master_node = reqset.find("A") reqset.find("A").get_requirement().set_value("Factor", 1.0) reqset.find("B").get_requirement().set_value("Factor", 0.8) rdep = RDepPriority(config) rdep.rewrite(reqset) assert ( reqset.find("A").get_requirement().get_value("Priority") == 1.0) assert ( reqset.find("B").get_requirement().get_value("Priority") == 0.8)
def rmttest_negative_01(self): "Master requirement with Depends on field" config = TestConfig() imod = InputModules(config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement Depends on: A''', 'A', None, imod, config) reqset.add_requirement(req1) config.set_depends_on() rdep = RDepDependsOn(config) status = rdep.rewrite(reqset) assert not status
def rmttest_positive_01(self): "Requirement: parser returns error" try: Requirement("DTag: content1\n" "DTag: content2\n", "1", None, None, TestConfig()) assert (False) except RMTException as rmte: assert (rmte.get_id() == 81)
def test_negative_01(self): "Master requirement with Depends on field" config = TestConfig() imod = InputModules("..", config) reqset = RequirementSet(config) req1 = Requirement( '''Name: A Type: master requirement Depends on: A''', 'A', None, imod, config) reqset.add_node(RequirementDNode(req1)) config.set_depends_on() rdep = RDepDependsOn(config) status = rdep.rewrite(reqset) assert (status == False)
def test_negative_03(self): "Normal requirement has no 'Depends on'" config = TestConfig() imod = InputModules("..", config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_node(RequirementDNode(req1)) req2 = Requirement('''Name: B Type: requirement''', 'B', None, imod, config) reqset.add_node(RequirementDNode(req2)) config.set_depends_on() rdep = RDepDependsOn(config) status = rdep.rewrite(reqset) assert (status == False)
def rmttest_negative_03(self): "Normal requirement has no 'Depends on'" config = TestConfig() imod = InputModules(config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement''', 'B', None, imod, config) reqset.add_requirement(req2) config.set_depends_on() rdep = RDepDependsOn(config) status = rdep.rewrite(reqset) assert not status
def test_negative_07(self): "'Depends on' points to same requirement" config = TestConfig() imod = InputModules("..", config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_node(RequirementDNode(req1)) req2 = Requirement('''Name: B Type: requirement Depends on: B''', 'B', None, imod, config) reqset.add_node(RequirementDNode(req2)) config.set_depends_on() rdep = RDepDependsOn(config) status = rdep.rewrite(reqset) assert(status == False)
def rmttest_negative_04(self): "Normal requirement has empty 'Depends on'" config = TestConfig() imod = InputModules(config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement Depends on:''', 'B', None, imod, config) reqset.add_requirement(req2) config.set_depends_on() rdep = RDepDependsOn(config) status = rdep.rewrite(reqset) self.assertFalse(status)
def rmttest_negative_07(self): "'Depends on' points to same requirement" config = TestConfig() imod = InputModules(config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement Depends on: B''', 'B', None, imod, config) reqset.add_requirement(req2) config.set_depends_on() rdep = RDepDependsOn(config) status = rdep.rewrite(reqset) assert not status
def rmttest_positive_02(self): "Three node one edge digraph B -> A, C -> A and C -> B" config = TestConfig() imod = InputModules(config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement Depends on: A''', 'B', None, imod, config) reqset.add_requirement(req2) config.set_depends_on() req3 = Requirement('''Name: C Type: requirement Depends on: A B''', 'C', None, imod, config) reqset.add_requirement(req3) config.set_depends_on() rdep = RDepDependsOn(config) rdep.rewrite(reqset) assert [] == reqset.get_requirement("A").incoming_as_named_list() # There are two possible valid results assert reqset.get_requirement("A").outgoing_as_named_list() \ in [["C", "B"], ["B", "C"]] assert ["A"] == reqset.get_requirement("B").incoming_as_named_list() assert ["C"] == reqset.get_requirement("B").outgoing_as_named_list() assert ["A", "B"] == reqset.get_requirement("C").incoming_as_named_list() assert [] == reqset.get_requirement("C").outgoing_as_named_list()
def rmttest_neg_02(self): "LaTeX output: check invalid tag in requirement output config" tcfg = TestConfig() tcfg.set_output_cfg() # ToDo: is this needed? tvcs = TestVCS(tcfg) # ToDo: is this needed? tfile = tvcs.get_tfile1() tmpdir = create_tmp_dir() mconfig = { "req_attributes": ["Status", "Class", "DoesNotExists"], "output_filename": os.path.join(tmpdir, "TestLateX2Out.tex") } out_l2 = latex2(mconfig) req = Requirement(None, u"TestReq", None, None, None) req.values = {} req.values[u"Name"] = RecordEntry(u"Name", u"my name") req.values[u"Type"] = RequirementType.requirement req.values[u"Description"] = RecordEntry(u"Description", u"my desc") req.values[u"Status"] = RequirementStatusFinished( None, u"rid", u"finished:meiner:2011-04-15:4h") req.values[u"Class"] = ClassTypeImplementable() ce3set = CE3Set() ce3 = CE3() ce3set.insert(u"TestReq", ce3) rset = RequirementSet(tcfg) ttopic_set = TestTopicSet(rset) try: out_l2.topic_set_pre(None) req.execute(out_l2, "") assert False except RMTException: pass out_l2.topic_set_post(ttopic_set) delete_tmp_dir(tmpdir)
def rmttest_neg_02(self): "LaTeX output: check invalid tag in requirement output config" tcfg = TestConfig() tcfg.set_output_cfg() # ToDo: is this needed? tvcs = TestVCS(tcfg) # ToDo: is this needed? tfile = tvcs.get_tfile1() tmpdir = create_tmp_dir() mconfig = {"req_attributes": ["Status", "Class", "DoesNotExists"], "output_filename": os.path.join(tmpdir, "TestLateX2Out.tex")} out_l2 = latex2(mconfig) req = Requirement(None, u"TestReq", None, None, None) req.values = {} req.values[u"Name"] = RecordEntry(u"Name", u"my name") req.values[u"Type"] = RequirementType.requirement req.values[u"Description"] = RecordEntry(u"Description", u"my desc") req.values[u"Status"] = RequirementStatusFinished( None, u"rid", u"finished:meiner:2011-04-15:4h") req.values[u"Class"] = ClassTypeImplementable() ce3set = CE3Set() ce3 = CE3() ce3set.insert(u"TestReq", ce3) rset = RequirementSet(tcfg) ttopic_set = TestTopicSet(rset) try: out_l2.topic_set_pre(None) req.execute(out_l2, "") assert False except RMTException: pass out_l2.topic_set_post(ttopic_set) delete_tmp_dir(tmpdir)
def rmttest_positive_02(self): "Requirement contains a tag where no handler exists - multiple tags" mstderr = StringIO() init_logger(mstderr) tc = TestConfig() tc.set_solved_by() mods = InputModules(tc) reqs = RequirementSet(None) req = Requirement("Hubbel: bubbel\nSiebel: do", "InvalidTagReq", reqs, mods, tc) reqs.add_requirement(req) reqs._handle_modules(mods) lstderr = hide_volatile(mstderr.getvalue()) tear_down_log_handler() lstderr_last_two_lines = lstderr.split("\n")[-3:-1] result0 \ = re.match( "^===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;" "__all_tags_handled;===LINENO===; 57:InvalidTagReq:" "No tag handler found " "for tag\(s\) '\[.*\]' - Hint: typo in tag\(s\)\?$", lstderr_last_two_lines[0]) result1 \ = re.match( "^===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;" "_handle_modules;" "===LINENO===; 56:There were errors encountered " "during parsing " "and checking - can't continue.$", lstderr_last_two_lines[1]) assert result0 assert result1
def rmttest_positive_02(self): "Requirement contains a tag where no handler exists - multiple tags" mstderr = StringIO() init_logger(mstderr) tc = TestConfig() tc.set_solved_by() mods = InputModules(tc) reqs = RequirementSet(None) req = Requirement("Hubbel: bubbel\nSiebel: do", "InvalidTagReq", reqs, mods, tc) reqs.add_requirement(req) reqs._handle_modules(mods) lstderr = hide_volatile(mstderr.getvalue()) tear_down_log_handler() lstderr_last_two_lines = lstderr.split("\n")[-3:-1] result0 \ = re.match( r"^===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;" r"__all_tags_handled;===LINENO===; 57:InvalidTagReq:" r"No tag handler found " r"for tag\(s\) '\[.*\]' - Hint: typo in tag\(s\)\?$", lstderr_last_two_lines[0]) result1 \ = re.match( r"^===DATETIMESTAMP===;rmtoo;ERROR;RequirementSet;" "_handle_modules;" "===LINENO===; 56:There were errors encountered " "during parsing " "and checking - can't continue.$", lstderr_last_two_lines[1]) assert result0 assert result1
def test_neg_02(self): "LaTeX output: check invalid tag in requirement output config" tcfg = TestConfig() tcfg.set_output_cfg() tvcs = TestVCS(tcfg) tfile = tvcs.get_tfile1() tmpdir = create_tmp_dir() mconfig = { "req_attributes": ["Status", "Class", "DoesNotExists"], "output_filename": os.path.join(tmpdir, "TestLateX2Out.tex")} l2 = latex2(mconfig) req = Requirement(None, "TestReq", None, None, None) req.values = {} req.values["Name"] = RecordEntry("Name", "my name") req.values["Type"] = Requirement.rt_requirement req.values["Description"] = RecordEntry("Description", "my desc") req.values["Status"] = RequirementStatusFinished( None, "rid", "finished:meiner:2011-04-15:4h") req.values["Class"] = ClassTypeImplementable() dnreq = RequirementDNode(req) ce3set = CE3Set() ce3 = CE3() ce3set.insert("TestReq", ce3) rset = RequirementSet(tcfg) ttopic_set = TestTopicSet(rset) try: l2.topic_set_pre(None) dnreq.execute(l2, "") assert(False) except RMTException, rmte: pass
def rmttest_positive_01(self): "Two node one edge digraph B -> A" config = TestConfig() imod = InputModules(config) reqset = RequirementSet(config) req1 = Requirement('''Name: A Type: master requirement''', 'A', None, imod, config) reqset.add_requirement(req1) req2 = Requirement('''Name: B Type: requirement Depends on: A''', 'B', None, imod, config) reqset.add_requirement(req2) config.set_depends_on() rdep = RDepDependsOn(config) rdep.rewrite(reqset) assert [] == reqset.get_requirement("A").incoming_as_named_list() assert ["B"] == reqset.get_requirement("A").outgoing_as_named_list() assert ["A"] == reqset.get_requirement("B").incoming_as_named_list() assert [] == reqset.get_requirement("B").outgoing_as_named_list()
def test_simple_05(self): "Module test with dependent modules" mstderr = StringIO.StringIO() init_logger(mstderr) mods = InputModules(os.path.join(mod_base_dir, "modules05"), {}, [], mods_list("modules05", mod_base_dir)) req = Requirement("Name: t\n", 77, None, mods, TestConfig()) lstderr = hide_lineno(hide_timestamp(mstderr.getvalue())) tear_down_log_handler() self.assertEqual(req.is_usable(), False) expected_result = "===DATETIMESTAMP===;rmtoo;ERROR;BaseRMObject;" \ "handle_modules_tag;===SOURCELINENO===; 54:77:" \ "tag [SameTag] already defined\n" self.assertEqual(lstderr, expected_result)
def rmttest_pos_01(self): "TopicCohe: Check different ways of topic coherence" class LNTopic: def __init__(self, name): self.name = name def is_self_of_ancient(self, t): return False cfg = TestConfig() topic_cohe = TopicCohe(cfg) topic_cohe._add_topic_relation(LNTopic("first"), LNTopic("second")) assert {'second': [0, 1], 'first': [0, 1]} == topic_cohe._get_tcnt()
def test_simple_06(self): "Requirement: Module test with exception thrown" mstderr = StringIO.StringIO() init_logger(mstderr) mods = InputModules(os.path.join(mod_base_dir, "modules06"), {}, [], mods_list("modules06", mod_base_dir)) req = Requirement("Name: t\n", 77, None, mods, TestConfig()) lstderr = hide_lineno(hide_timestamp(mstderr.getvalue())) tear_down_log_handler() self.assertEqual(req.is_usable(), False) expected_result = "===DATETIMESTAMP===;rmtoo;ERROR;BaseRMObject;" \ "handle_modules_tag;===SOURCELINENO===; 55:TCExcept\n" \ "===DATETIMESTAMP===;rmtoo;ERROR;BaseRMObject;handle_modules_tag;" \ "===SOURCELINENO===; 41:77:" \ "semantic error occurred in module [Module01]\n" self.assertEqual(lstderr, expected_result)
def test_positive_03(self): "Four node digraph D -> B -> A and D -> C -> A" config = TestConfig() reqset = RequirementSet(config) req1 = Requirement( '''Name: A Type: master requirement Solved by: B C''', 'A', None, None, None) reqset.add_node(RequirementDNode(req1)) req2 = Requirement('''Name: B Type: requirement Solved by: D''', 'B', None, None, None) reqset.add_node(RequirementDNode(req2)) req3 = Requirement('''Name: C Type: requirement Solved by: D''', 'C', None, None, None) reqset.add_node(RequirementDNode(req3)) req4 = Requirement('''Name: D Type: requirement''', 'D', None, None, None) reqset.add_node(RequirementDNode(req4)) reqset.resolve_solved_by() reqset.find_master_nodes() reqset.graph_master_node = reqset.find("A") reqset.find("A").get_requirement().set_value("Factor", 1.0) reqset.find("B").get_requirement().set_value("Factor", 0.2) reqset.find("C").get_requirement().set_value("Factor", 0.4) reqset.find("D").get_requirement().set_value("Factor", 0.5) rdep = RDepPriority(config) rdep.rewrite(reqset) assert ( reqset.find("A").get_requirement().get_value("Priority") == 1.0) assert ( reqset.find("B").get_requirement().get_value("Priority") == 0.2) assert ( reqset.find("C").get_requirement().get_value("Priority") == 0.4) assert ( reqset.find("D").get_requirement().get_value("Priority") == 0.2)
def rmttest_def_req(self): "LaTeX output: compare output to defined value" exp_value = r""" \paragraph{my name} \hypertarget{TestReq}{TestReq} \label{TestReq} my desc \textbf{Rationale:} \textbf{Note:} \par{\small \begin{center} \begin{tabular}{rlrlrl} Id: & TestReq & Priority: & & Owner: & \\ Invented on: & & Invented by: & & Status: & finished (meiner, 2011-04-15, 4 h) \\ Class: & implementable \end{tabular}\end{center} } """ # noqa tcfg = TestConfig() tcfg.set_output_cfg() mconfig = self.__def_mconfig mconfig['req_attributes'] = ["Status", "Class", "DoesNotExists"] req_proc = latex2(mconfig) req = Requirement(None, u"TestReq", None, None, None) req.values = {} req.values[u"Name"] = RecordEntry(u"Name", u"my name") req.values[u"Type"] = RequirementType.requirement req.values[u"Description"] = RecordEntry(u"Description", u"my desc") req.values[u"Status"] = RequirementStatusFinished( None, u"rid", u"finished:meiner:2011-04-15:4h") req.values[u"Class"] = ClassTypeImplementable() ce3set = CE3Set() ce3 = CE3() ce3set.insert(u"TestReq", ce3) ''' This is here for future? use. rset = RequirementSet(tcfg) ttopic_set = TestTopicSet(rset) ''' req_text = req_proc._get_requirement(req) try: assert req_text == exp_value except AssertionError: import difflib diff = difflib.ndiff( req_text.splitlines(True), exp_value.splitlines(True)) print(''.join(diff)) raise Exception("The template is not equal to it's expected value")
def create_parameters(d=None): tconfig = TestConfig() return tconfig, ReqSet(d)