Ejemplo n.º 1
0
def main ():
    options, input_file = parse_options()

    logging.getLogger().setLevel(logging.ERROR)
    if options.debug:
        logging.getLogger().setLevel(logging.DEBUG)
    
    sys.stdout.write("Reading file %s..." % input_file)
    with open(input_file, "r") as input_file:
        lines = input_file.readlines()
    
    sys.stdout.write(" done\nParsing file...")

    parser = TaskCardParser()
    parser.parse(*lines)
    
    project = parser.project
    
    sys.stdout.write(" done. Found %d stories.\nRendering stories to %s..." % (len(project.stories), options.output_file))
    renderer = Renderer(options.output_file, "Tasks for " + project.name)
    renderer.apply_settings(parser.settings)
    for story in project.stories:
        renderer.render_story(story)
        
    renderer.close()
    sys.stdout.write(" finished.\n")
Ejemplo n.º 2
0
 def setUp (self):
     self.parser = TaskCardParser()
Ejemplo n.º 3
0
class TaskCardParserTest (unittest.TestCase):
    def setUp (self):
        self.parser = TaskCardParser()

    def test_should_raise_parsing_error_when_using_setting_colorswith_unknown_value (self):
        self.assertRaises(ParsingError, self.parser.parse, "# colors caboom")

    def test_should_parse_setting_colors_with_foreground(self):
        self.parser.parse("# colors foreground")
        self.assertEquals(Settings.COLORS_FOREGROUND, self.parser.settings.colors)

    def test_should_parse_setting_colors_with_value_background (self):
        self.parser.parse("# colors background")
        self.assertEquals(Settings.COLORS_BACKGROUND, self.parser.settings.colors)

    def test_should_raise_parsing_error_when_using_setting_storycards_with_unknown_value (self):
        self.assertRaises(ParsingError, self.parser.parse, "# storycards caboom")

    def test_should_parse_setting_storycards_with_value_no (self):
        self.parser.parse("# storycards no")
        self.assertFalse(self.parser.settings.render_storycards)

    def test_should_parse_setting_storycards_with_value_yes (self):
        self.parser.parse("# storycards yes")
        self.assertTrue(self.parser.settings.render_storycards)

    def test_should_raise_syntax_error_when_unknown_settings_is_used  (self):
        self.assertRaises(ParsingError, self.parser.parse, "# spam eggs")

    def test_should_raise_syntax_error_when_width_setting_has_error  (self):
        self.assertRaises(ParsingError, self.parser.parse, "# width caboom")
        
    def test_should_parse_width_setting (self):
        self.parser.parse("# width 70")
        self.assertEquals(70, self.parser.settings.card_width)

    def test_should_raise_syntax_error_when_font_size_setting_has_error  (self):
        self.assertRaises(ParsingError, self.parser.parse, "# font_size caboom")
        
    def test_should_parse_font_size_setting (self):
        self.parser.parse("# font_size 13")
        self.assertEquals(13, self.parser.settings.font_size)

    def test_should_parse_multiple_settings (self):
        self.parser.parse("# font_size 13", "#width 13")
        
    def test_should_raise_exception_when_parsing_checkbox_setting_with_invalid_value (self):
        self.assertRaises(ParsingError, self.parser.parse, "# checkboxes spam")

    def test_should_disable_checkboxes_when_parsing_checkbox_setting (self):
        self.parser.parse("# checkboxes no")
        self.assertFalse(self.parser.settings.render_check_box)
        
    def test_should_raise_syntax_error_when_story_line_has_syntax_error (self):
        self.assertRaises(ParsingError, self.parser.parse, "S:")

    def test_should_parse_story_when_only_id_is_given (self):
        self.parser.parse("S:SPAM")

        project = self.parser.project
        self.assertEquals(1, len(project.stories))
        
        story = project.stories[0]
        self.assertEquals("SPAM", story.identifier)
        self.assertEquals(["SPAM"], story.title)        
        
    def test_should_parse_single_task (self):
        self.parser.parse("P:I18N", "S:IP-275|Sortierung nach Aktualitaet",
                          "Beispieltask")
        project = self.parser.project
        
        self.assertEquals("I18N", project.name)
        self.assertEquals(1, len(project.stories))
        
        story = project.stories[0]
        self.assertEquals("IP-275", story.identifier)
        self.assertEquals(["Sortierung nach Aktualitaet"], story.title)
        self.assertEquals(1, len(story.tasks))
        
        task = story.tasks[0]
        self.assertEquals(["Beispieltask"], task.description)

    def test_should_parse_single_task_without_project (self):
        self.parser.parse("S:IP-275|Sortierung nach Aktualitaet",
                          "Beispieltask")
        project = self.parser.project
        
        self.assertEquals("", project.name)
        self.assertEquals(1, len(project.stories))
        
        story = project.stories[0]
        self.assertEquals("IP-275", story.identifier)
        self.assertEquals(["Sortierung nach Aktualitaet"], story.title)
        self.assertEquals(1, len(story.tasks))
        
        task = story.tasks[0]
        self.assertEquals(["Beispieltask"], task.description)

    def test_should_parse_single_task_with_single_tag (self):
        self.parser.parse("P:I18N", "S:IP-275|Sortierung nach Aktualitaet",
                          "Beispieltask|TAG")
        
        task = self.parser.project.stories[0].tasks[0]
        self.assertEquals(["TAG"], task.tags)

    def test_should_parse_single_task_with_multiple_tags (self):
        self.parser.parse("P:I18N", "S:IP-275|Sortierung nach Aktualitaet",
                          "Beispieltask|TAG,TAG2")
        
        task = self.parser.project.stories[0].tasks[0]
        self.assertEquals(["TAG", "TAG2"], task.tags)

    def test_should_strip_whitespace_in_project (self):
        self.parser.parse("P:  I18N               ",)
        
        self.assertEquals("I18N", self.parser.project.name)

    def test_should_strip_whitespace_in_story_identifier_and_title (self):
        self.parser.parse("S:  IP-275          |     Lorem ipsum             ")
        
        self.assertEquals("IP-275", self.parser.project.stories[0].identifier)
        self.assertEquals(["Lorem ipsum"], self.parser.project.stories[0].title)

    def test_should_strip_whitespace_in_task_text_and_tags (self):
        self.parser.parse("S:IP-275|Lorem ipsum", "      Foo    |    Bar    , Foo ")
        
        self.assertEquals(["Foo"],
                          self.parser.project.stories[0].tasks[0].description)
        self.assertEquals(["Bar", "Foo"],
                          self.parser.project.stories[0].tasks[0].tags)

    def test_should_parse_blocker_tasks (self):
        self.parser.parse("S:IP-275|", "Foo|BLOCKER", "Bar")
        
        self.assertTrue(self.parser.project.stories[0].tasks[0].blocker)
        self.assertFalse(self.parser.project.stories[0].tasks[1].blocker)

    def test_should_parse_task_with_multiline_description (self):
        self.parser.parse("S:IP-275|", "Spam\\and\\Eggs")
        
        self.assertEquals(["Spam", "and", "Eggs"], 
                          self.parser.project.stories[0].tasks[0].description)

    def test_should_parse_story_with_multiline_description (self):
        self.parser.parse("S:IP-275|Spam\\and\\Eggs")
        
        self.assertEquals(["Spam", "and", "Eggs"], 
                          self.parser.project.stories[0].title)