def test_question_correct_option(): """Test add answer """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer("That's me.") a2 = exam2pdf.Answer("That's you.") q.add_answer(a1), q.add_answer(a2) with pytest.raises(ValueError): q.correct_option = "X"
def test_question_correct_index_invalid(): """Test set invalid correct answer index """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() a2 = exam2pdf.Answer() q.add_answer(a1) q.add_answer(a2) with pytest.raises(ValueError): q.correct_index = 2
def test_question_correct_index_set(): """Test set correct answer index """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() a2 = exam2pdf.Answer() q.add_answer(a1) q.add_answer(a2) q.correct_index = 1 assert q.correct_answer == a2 assert q.correct_index == 1
def test_question_answer_correct_set(): """Test correctness of the last answer added when set correct """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() a2 = exam2pdf.Answer() q.add_answer(a2) q.add_answer(a1, True) assert q.correct_answer == a1 assert q.correct_index == 1
def test_question_add_two_answers(): """Test add answer """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer("That's me.") a2 = exam2pdf.Answer("That's you.") q.add_answer(a1), q.add_answer(a2) q.correct_option = "B" assert q.correct_answer == a2 assert q.correct_index == 1 assert q.correct_option == "B"
def test_question_answer_add_two(): """Test two answers addition and correctness """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() a2 = exam2pdf.Answer() q.add_answer(a1) q.add_answer(a2) assert q.answers == (a1, a2) assert q.correct_answer == a1 assert q.correct_index == 0
def test_question_add_path_parent0(): """Test whether not existing file path is added to Answer.image """ path = Path("home/my_home/file.txt") quest = exam2pdf.Question("question text", image=Path()) image_path = Path("image1.png") answer_1 = exam2pdf.Answer() answer_1.image = image_path answer_2 = exam2pdf.Answer() answer_2.image = Path() quest.answers = (answer_1, answer_2) quest.add_parent_path(path) assert quest.image == Path() assert quest.answers[0].image == path.parent / image_path assert quest.answers[1].image == Path()
def test_answer_init_wrong_test(): """Test wrong arguments """ image = Path() with pytest.raises(TypeError): exam2pdf.Answer(image)
def test_answer_init_default(): """test default arguments """ a = exam2pdf.Answer() assert a.text == "" assert a.image == Path()
def test_copy_exam_add_answer(dummy_exam): ex = dummy_exam question_1_answers_len = len(ex.questions[0].answers) new_ex = ex.copy() new_ex.questions[0].add_answer(exam2pdf.Answer("q1 a3")) assert len(ex.questions[0].answers) == question_1_answers_len
def test_question_answer_setter(): """Test tuple addition, overwriting previous addition and correctness """ q = exam2pdf.Question("Who are you?") a = exam2pdf.Answer() q.add_answer(a) b = exam2pdf.Answer() c = exam2pdf.Answer() q.answers = (b, c) assert a not in q.answers assert b in q.answers assert c in q.answers assert q.correct_answer == b assert q.correct_index == 0
def test_answer_load(): a = exam2pdf.Answer() test_tuple = ("text", ) with pytest.raises(StopIteration): a.load_sequentially(iter(test_tuple)) assert a.text == test_tuple[0] assert a.image == Path()
def test_answer_set(attribute, expected): a = exam2pdf.Answer() try: setattr(a, attribute, expected) except TypeError: assert False assert getattr(a, attribute) == expected
def test_question_answer_correct_false(): """Test ineffectiveness of correct setting for the first answer added """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer() q.add_answer(a1, False) assert q.correct_answer == a1
def test_answer_print(): a = exam2pdf.Answer() text = "Answer text" image = "home/mydir/image.jpg" i = iter((text, image)) a.load_sequentially(i) assert f"text: {text}" in a.__str__() assert f"image: {image}" in a.__str__()
def test_answer_attributes(): """Test sequence attributes """ a = exam2pdf.Answer() expected_attr_load_sequence = ("text", "image") expected_type_caster_sequence = (str, Path) assert a.attr_load_sequence == expected_attr_load_sequence assert a.type_caster_sequence == expected_type_caster_sequence
def test_question_add_path_parent1(tmp_path): """Test whether existing folder path is added to Answer.image and Question.image """ folder_path = tmp_path / "home" folder_path.mkdir() image_path = Path("image1.png") quest = exam2pdf.Question("question text", image=image_path) answer_1 = exam2pdf.Answer() answer_1.image = Path() answer_2 = exam2pdf.Answer() answer_2.image = image_path quest.answers = (answer_1, answer_2) quest.add_parent_path(folder_path) assert quest.image == folder_path / image_path assert quest.answers[0].image == Path() assert quest.answers[1].image == folder_path / image_path
def test_exam_add_path_parent2(tmp_path): image = Path("images/image.png") folder_path = tmp_path q1 = exam2pdf.Question("q1 text", "") q1.answers = ( exam2pdf.Answer("a1 text", image), exam2pdf.Answer("a2 text", image), ) q2 = exam2pdf.Question("q2 text", "", image) q2.add_answer(exam2pdf.Answer("a3 text")) ex = exam2pdf.Exam(q1, q2) ex.add_path_parent(folder_path) assert ex.questions[0].image == Path() assert ex.questions[0].answers[0].image == folder_path / image assert ex.questions[0].answers[1].image == folder_path / image assert ex.questions[1].image == folder_path / image assert ex.questions[1].answers[0].image == Path()
def test_answer_init(): """Test init assignment """ text = "text" image = Path("my_pic.jpg") a = exam2pdf.Answer(text, image) assert a.text == text assert a.image == image
def mix_dummy_exam(): q1 = exam2pdf.Question( "question 1: correct is n. two", "subject 1", Path("a.png") ) a1 = exam2pdf.Answer("answer 1", Path("b.png")) a2 = exam2pdf.Answer("answer 2", Path("c.png")) a3 = exam2pdf.Answer("answer 3", Path("a.png")) q1.answers = (a1, a2, a3) q1.correct_option = "B" q2 = exam2pdf.Question( "question 2: correct is n. one", "subject 1", Path("a.png") ) a1 = exam2pdf.Answer("answer 1") a2 = exam2pdf.Answer("answer 2") a3 = exam2pdf.Answer("answer 3") q2.answers = (a1, a2, a3) q3 = exam2pdf.TrueFalseQuest("question 3: correct is True (first)") a1 = exam2pdf.TrueFalseAnswer(True) a2 = exam2pdf.TrueFalseAnswer(False) q3.answers = (a1, a2) q4 = exam2pdf.Question("question 4: no answer", "subject 2", Path("b.png")) q5 = exam2pdf.TrueFalseQuest("question 5: correct is False (first))") a1 = exam2pdf.TrueFalseAnswer(False) a2 = exam2pdf.TrueFalseAnswer(True) q5.answers = (a1, a2) q6 = exam2pdf.Question( "question 6: correct is n. three", "subject 4", Path("c.png") ) a1 = exam2pdf.Answer("answer 1") a2 = exam2pdf.Answer("answer 2") a3 = exam2pdf.Answer("answer 3") a4 = exam2pdf.Answer("answer 4") q6.add_answer(a1) q6.add_answer(a2) q6.add_answer(a3, is_correct=True) q6.add_answer(a4) dummy_ex = exam2pdf.Exam(q1, q2, q3, q4, q5, q6) return dummy_ex
def test_answer_load_empty(): """test empty iterator """ a = exam2pdf.Answer() a._attr_load_sequence = ("A", ) a._type_caster_sequence = (str, ) try: a.load_sequentially(iter(tuple())) except StopIteration: pass
def test_question_shuffle_more_answers(): """Test shuffle with more answers added """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer("That's me.") a2 = exam2pdf.Answer("That's not me.") a3 = exam2pdf.Answer("That's him") a4 = exam2pdf.Answer("That's her.") q.add_answer(a1) q.add_answer(a2, True) q.add_answer(a3) q.add_answer(a4) random.seed(1) q.shuffle() assert q.answers == (a4, a1, a3, a2) assert q.correct_answer == a2 assert q.correct_index == 3 assert q.correct_option == "D"
def test_exam_mix_question(): question = exam2pdf.Question("mc quest1 text", "subject") question.answers = ( exam2pdf.Answer("Q1 A1"), exam2pdf.Answer("Q1 A2"), exam2pdf.Answer("Q1 A3"), ) truefalse_quest = exam2pdf.TrueFalseQuest("mc quest2 text", "subject") truefalse_quest.answers = ( exam2pdf.TrueFalseAnswer(False), exam2pdf.TrueFalseAnswer(True), ) ex = exam2pdf.Exam(question, truefalse_quest) assert ex.questions[0].answers[1].image == Path() assert ex.questions[0].correct_option == "A" assert ex.questions[1].text == "mc quest2 text" assert ex.questions[1].correct_answer.text == "Falso"
def test_question_add_one_answer(): """Test add answer """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer("That's me.") q.add_answer(a1) assert q.correct_answer == a1 assert q.correct_index == 0 assert q.correct_option == "A"
def test_question_answer_add_one(): """Test one answer addition and correctness """ q = exam2pdf.Question("Who are you?") a = exam2pdf.Answer() q.add_answer(a) assert a in q.answers assert q.correct_answer == a assert q.correct_index == 0
def dummy_exam(): q1, q2, q3, q4, q5 = ( exam2pdf.Question("q1 text", "q1 subject", Path("a.png"), 1), exam2pdf.Question("q2 text", "q2 subject", Path("b.png"), 2), exam2pdf.Question("q3 text", "q3 subject", Path("c.png"), 3), exam2pdf.Question("q4 text", "q4 subject", Path("a.png"), 4), exam2pdf.Question("q5 text", "q5 subject", Path("b.png"), 5), ) q1.answers = ( exam2pdf.Answer("q1 a1"), exam2pdf.Answer("q1 a2", Path("t1.jpg")), ) q1.correct_index = 1 q2.answers = ( exam2pdf.Answer("q2 a1", Path("t2.png")), exam2pdf.Answer("q2 a2"), ) return exam2pdf.Exam(q1, q2, q3, q4, q5)
def test_exam_add_path_parent1(tmp_path): """test with a file path """ image = Path("images/image.png") file_path = tmp_path / "A.txt" file_path.touch() q1 = exam2pdf.Question("q1 text", "") q1.answers = ( exam2pdf.Answer("a1 text", image), exam2pdf.Answer("a2 text", image), ) q2 = exam2pdf.Question("q2 text", "", image) q2.add_answer(exam2pdf.Answer("a3 text")) ex = exam2pdf.Exam(q1, q2) ex.add_path_parent(file_path) assert ex.questions[0].image == Path() assert ex.questions[0].answers[0].image == file_path.parent / image assert ex.questions[0].answers[1].image == file_path.parent / image assert ex.questions[1].image == file_path.parent / image assert ex.questions[1].answers[0].image == Path()
def test_question_shuffle_one_answer(): """Test shuffle with one answer added """ q = exam2pdf.Question("Who are you?") a1 = exam2pdf.Answer("That's me.") q.add_answer(a1) random.seed(1) q.shuffle() assert q.correct_answer == a1 assert q.correct_index == 0 assert q.correct_option == "A"
def test_answer_load_one_item1(): """test iterator with one item, two attributes """ a = exam2pdf.Answer() a._attr_load_sequence = ("text", "image") a._type_caster_sequence = (str, Path) test_tuple = ("x", ) iterator = iter(test_tuple) with pytest.raises(StopIteration): a.load_sequentially(iterator) assert a.text == str(test_tuple[0])
def test_answer_load_two_items0(): """test iterator with two items, one attribute; test last item left in the iterator """ a = exam2pdf.Answer() a._attr_load_sequence = ("text", ) a._type_caster_sequence = (str, ) test_tuple = ("a", "abc") iterator = iter(test_tuple) a.load_sequentially(iterator) assert a.text == str(test_tuple[0]) assert next(iterator) == test_tuple[1]