예제 #1
0
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"
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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"
예제 #6
0
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
예제 #7
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()
예제 #8
0
def test_answer_init_wrong_test():
    """Test wrong arguments
    """
    image = Path()

    with pytest.raises(TypeError):
        exam2pdf.Answer(image)
예제 #9
0
def test_answer_init_default():
    """test default arguments
    """
    a = exam2pdf.Answer()

    assert a.text == ""
    assert a.image == Path()
예제 #10
0
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
예제 #11
0
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
예제 #12
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()
예제 #13
0
def test_answer_set(attribute, expected):
    a = exam2pdf.Answer()
    try:
        setattr(a, attribute, expected)
    except TypeError:
        assert False

    assert getattr(a, attribute) == expected
예제 #14
0
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
예제 #15
0
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__()
예제 #16
0
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
예제 #17
0
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
예제 #18
0
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()
예제 #19
0
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
예제 #20
0
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
예제 #21
0
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
예제 #22
0
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"
예제 #23
0
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"
예제 #24
0
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"
예제 #25
0
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
예제 #26
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)
예제 #27
0
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()
예제 #28
0
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"
예제 #29
0
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])
예제 #30
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]