Example #1
0
class PencilTester(unittest.TestCase):
    def setUp(self):
        """Runs once per test to define a fresh object."""
        self.my_pencil = Pencil(100, 5, 50)

    def tearDown(self):
        """Runs once per test to delete object"""
        del (self.my_pencil)

    def test_if_pencil_writes_a_word_it_is_outputted(self):
        self.assertEqual(self.my_pencil.write("hello"), "hello")

    def test_if_pencil_writes_another_word_it_is_appended_to_the_sheet(self):
        self.my_pencil.write("hello")
        self.assertEqual(self.my_pencil.write(" world!"), "hello world!")

    def test_if_pencil_writes_too_many_characters_its_durability_goes_to_zero(
            self):
        self.my_pencil.set_tip_durability(4)
        self.my_pencil.write("hello")
        self.assertEqual(self.my_pencil.get_tip_durability(), 0)

    def test_if_pencil_durability_is_zero_it_no_longer_writes_characters(self):
        self.my_pencil.set_tip_durability(4)
        self.assertEqual(self.my_pencil.write("hello"), "hell")

    def test_if_durability_is_not_affected_by_whitespace(self):
        self.my_pencil.set_tip_durability(4)
        self.assertEqual(self.my_pencil.write("ab cd"), "ab cd")

    def test_if_durability_is_affected_by_case_of_characters(self):
        self.my_pencil.set_tip_durability(4)
        self.assertEqual(self.my_pencil.write("Hello"), "Hel")

    def test_if_pencil_is_sharpened_its_durability_is_reset(self):
        self.my_pencil.set_tip_durability(4)
        self.my_pencil.write("Hello")
        self.assertEqual(self.my_pencil.get_tip_durability(), 0)
        self.my_pencil.sharpen()
        self.assertEqual(self.my_pencil.get_tip_durability(), 4)

    def test_if_pencil_is_sharpened_its_length_is_reduced(self):
        self.my_pencil.set_length(2)
        self.my_pencil.sharpen()
        self.assertEqual(self.my_pencil.get_length(), 1)

    def test_if_pencil_length_is_zero_it_cannot_be_sharpened_anymore(self):
        self.my_pencil.set_length(0)
        self.my_pencil.set_tip_durability(0)
        self.assertEqual(self.my_pencil.sharpen(), False)
        self.assertEqual(self.my_pencil.get_tip_durability(), 0)

    def test_if_word_is_erased_its_replaced_with_spaces(self):
        self.my_pencil.write("hello world!")
        self.assertEqual(self.my_pencil.erase("world"), "hello      !")

    def test_if_more_than_one_of_same_word_the_last_occurrence_of_word_is_erased(
            self):
        self.my_pencil.write("up up down down left right left right")
        self.assertEqual(self.my_pencil.erase("left"),
                         "up up down down left right      right")

    def test_if_erasing_reduces_eraser_durability(self):
        self.my_pencil.write("hello world!")
        self.my_pencil.set_eraser_durability(5)
        self.my_pencil.erase("world")
        self.assertEqual(self.my_pencil.get_eraser_durability(), 0)

    def test_that_whitespace_does_not_degrade_eraser(self):
        self.my_pencil.write("hello world!")
        self.my_pencil.set_eraser_durability(6)
        self.my_pencil.erase(" world")
        self.assertEqual(self.my_pencil.get_eraser_durability(), 1)

    def test_if_eraser_durability_reaches_zero_then_it_stops_erasing_from_the_right(
            self):
        self.my_pencil.write("shinedown")
        self.my_pencil.set_eraser_durability(5)
        self.assertEqual(self.my_pencil.erase("shinedown"), "shin     ")

    def test_if_a_word_is_erased_you_can_edit_to_write_over_the_whitespace(
            self):
        self.my_pencil.write("your mother was a hamster")
        self.my_pencil.erase("mother")
        self.assertEqual(self.my_pencil.rewrite(0, "mom"),
                         "your mom    was a hamster")

    def test_rewriting_a_word_that_is_too_long_overwrites_characters_with_at_symbols(
            self):
        self.my_pencil.write("my name is Smith.")
        self.my_pencil.erase("name")
        self.assertEqual(self.my_pencil.rewrite(0, "surname"),
                         "my surna@@ Smith.")

    def test_erasing_multiple_word_multiples(self):
        self.my_pencil.write(
            "How much wood could a woodchuck chuck if a woodchuck...")
        self.assertEqual(
            self.my_pencil.erase("chuck"),
            "How much wood could a woodchuck chuck if a wood     ...")
        self.assertEqual(
            self.my_pencil.erase("chuck"),
            "How much wood could a woodchuck       if a wood     ...")

    def test_rewriting_where_you_can_choose_which_erased_spot_to_rewrite(self):
        self.my_pencil.write(
            "Charizard used blast burn. It's super effective!")
        self.assertEqual(self.my_pencil.erase("super effective!"),
                         "Charizard used blast burn. It's                 ")
        self.assertEqual(self.my_pencil.erase("blast burn"),
                         "Charizard used           . It's                 ")
        self.assertEqual(self.my_pencil.erase("Charizard"),
                         "          used           . It's                 ")
        self.assertEqual(self.my_pencil.rewrite(1, "fly"),
                         "          used fly       . It's                 ")
        self.assertEqual(
            self.my_pencil.rewrite(1, "not very effective."),
            "          used fly       . It's not very effective.")
        self.assertEqual(
            self.my_pencil.rewrite(0, "Blaziken"),
            "Blaziken  used fly       . It's not very effective.")

    def test_bug_where_eraser_does_not_always_work_properly_when_its_durability_runs_out(
            self):
        self.my_pencil.set_eraser_durability(11)
        self.my_pencil.write("hello world! my name is Michael.")
        self.assertEqual(self.my_pencil.erase("world"),
                         "hello      ! my name is Michael.")
        self.assertEqual(self.my_pencil.erase("Michael"),
                         "hello      ! my name is M      .")

    def test_if_rewriting_affects_pencil_durability_because_I_did_not_think_of_it_earlier(
            self):
        self.my_pencil.write("Hello world! My name is Michael. yay.")
        self.my_pencil.erase("Michael")
        self.my_pencil.set_tip_durability(7)
        self.assertEqual(self.my_pencil.rewrite(0, "Michael"),
                         "Hello world! My name is Michae . yay.")

    def test_bug_where_when_eraser_durability_runs_out_and_the_whole_word_is_not_erased_rewriting_overwrites_the_characters_still_there(
            self):
        self.my_pencil.write("hello world!")
        self.my_pencil.set_eraser_durability(4)
        self.assertEqual(self.my_pencil.erase("world"), "hello w    !")
        self.assertEqual(self.my_pencil.rewrite(0, "orld"), "hello world!")