Beispiel #1
0
def test_question_load_empty_answer():
    """load question and only some empty answers;
    check empty answers are not loaded.
    """
    quest = exam2pdf.Question()
    sequence = (
        "Text",
        "Subject",
        "dir/ec/tor/y",
        1,
        "",
        "",
        "Answer",
        "",
        "",
        "",
        "",
        "image.png",
    )
    iterator = iter(sequence)
    quest.load_sequentially(iterator)

    assert quest.text == sequence[0]
    assert quest.subject == sequence[1]
    assert quest.image == Path(sequence[2])
    assert quest.level == sequence[3]
    assert quest.answers[0].text == sequence[6]
    assert quest.answers[0].image == Path(".")
    assert quest.answers[1].text == sequence[10]
    assert quest.answers[1].image == Path(sequence[11])
    with pytest.raises(IndexError):
        _ = quest.answers[2]
Beispiel #2
0
def test_copy_mix_exam_add_question(mix_dummy_exam):
    ex = mix_dummy_exam
    ex_questions_len = len(ex.questions)
    new_ex = ex.copy()
    new_ex.add_question(exam2pdf.Question("new"))

    assert len(ex.questions) == ex_questions_len
Beispiel #3
0
def test_question_get(attribute, expected):
    """Test default attribute values
    """
    text = "What's your name?"
    q = exam2pdf.Question(text)

    assert getattr(q, attribute) == expected
Beispiel #4
0
def test_question_default():
    """Test default arguments
    """
    q = exam2pdf.Question()
    expected = ""

    assert q.text == expected
Beispiel #5
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
Beispiel #6
0
def test_question_init_empty():
    """test init with no answer
    """
    q = exam2pdf.Question()

    assert q.text == ""
    assert q.subject == ""
    assert q.image == Path()
    assert q.level == 0
Beispiel #7
0
def test_question_init(text, subject, image, level):
    """Test arguments assignments
    """
    q = exam2pdf.Question(text, subject=subject, image=image, level=level)

    assert q.text == text
    assert q.subject == subject
    assert q.image == image
    assert q.level == level
Beispiel #8
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()
Beispiel #9
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
Beispiel #10
0
def test_question_init_all_args():
    """test init with no answer
    """
    text, subject, image, level = ("q text", "q subject", Path("image.png"), 2)
    q = exam2pdf.Question(text, subject, image, level)

    assert q.text == text
    assert q.subject == subject
    assert q.image == image
    assert q.level == level
Beispiel #11
0
def test_copy_exam_add_question(dummy_exam):
    """GIVEN a exam  copy
    WHEN a question is added to the copy
    THEN the original number of questions does not change"""
    ex = dummy_exam
    ex_questions_len = len(ex.questions)
    new_ex = ex.copy()
    new_ex.add_question(exam2pdf.Question("new"))

    assert len(ex.questions) == ex_questions_len
Beispiel #12
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"
Beispiel #13
0
def test_question_set(attribute, expected):
    """Test set right and wrong attribute
    """
    q = exam2pdf.Question()
    try:
        setattr(q, attribute, expected)
    except TypeError:
        assert False

    assert getattr(q, attribute) == expected
Beispiel #14
0
def test_exam_question():
    question1 = exam2pdf.Question("mc quest1 text", "subject")
    question1.answers = (
        exam2pdf.Answer("Q1 A1"),
        exam2pdf.Answer("Q1 A2"),
        exam2pdf.Answer("Q1 A3"),
    )
    question2 = exam2pdf.Question("mc quest2 text", "subject")
    question2.answers = (
        exam2pdf.Answer("Q2 A1"),
        exam2pdf.Answer("Q2 A2"),
        exam2pdf.Answer("Q2 A3"),
    )

    ex = exam2pdf.Exam(question1, question2)

    assert ex.questions[0].answers[1].image == Path()
    assert ex.questions[0].correct_answer.text == "Q1 A1"
    assert ex.questions[1].text == "mc quest2 text"
Beispiel #15
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"
Beispiel #16
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
Beispiel #17
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
Beispiel #18
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)
Beispiel #19
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"
Beispiel #20
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
Beispiel #21
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
Beispiel #22
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"
Beispiel #23
0
def test_question_load_empty():
    """Empty iterator.
    """
    test_tuple = ()
    quest = exam2pdf.Question()
    quest.load_sequentially(iter(test_tuple))

    assert quest.text == ""
    assert quest.subject == ""
    assert quest.image == Path()
    assert quest.level == 0
    assert quest.answers == ()
Beispiel #24
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()
Beispiel #25
0
def test_question_load_full():
    """load a complete question;
    no answer.
    """
    test_tuple = ("t1", "s1", "p1", "1")
    quest = exam2pdf.Question()
    quest.load_sequentially(iter(test_tuple))

    assert quest.text == test_tuple[0]
    assert quest.subject == test_tuple[1]
    assert quest.image == Path(test_tuple[2])
    assert quest.level == int(test_tuple[3])
    assert quest.answers == ()
Beispiel #26
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
Beispiel #27
0
def test_question_load_partial():
    """load question text and subject; check for default image, level;
    no answer.
    """
    test_tuple = ("t1", "s1")
    quest = exam2pdf.Question()
    quest.load_sequentially(iter(test_tuple))

    assert quest.text == test_tuple[0]
    assert quest.subject == test_tuple[1]
    assert quest.image == Path()
    assert quest.level == 0
    assert quest.answers == ()
Beispiel #28
0
def test_question_print():
    """test __str__ method
    """
    quest = exam2pdf.Question()
    quest_text = "Text"
    quest_subject = "Subject"
    quest_image = "dir/ec/tor/y"
    quest_level = 1
    iterator = iter((quest_text, quest_subject, quest_image, quest_level))
    quest.load_sequentially(iterator)

    assert f"text: {quest.text}" in quest.__str__()
    assert f"subject: {quest_subject}" in quest.__str__()
    assert f"image: {quest_image}" in quest.__str__()
    assert f"level: {quest_level}" in quest.__str__()
Beispiel #29
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()
Beispiel #30
0
def test_question_load_partial_answer():
    """load question and only answer text;
    answer image checked for default value.
    """
    quest = exam2pdf.Question()
    sequence = ("Text", "Subject", "dir/ec/tor/y", 1, "Answer")
    iterator = iter(sequence)
    quest.load_sequentially(iterator)

    assert quest.text == sequence[0]
    assert quest.subject == sequence[1]
    assert quest.image == Path(sequence[2])
    assert quest.level == sequence[3]
    assert quest.answers[0].text == sequence[4]
    assert quest.answers[0].image == Path(".")
    with pytest.raises(IndexError):
        _ = quest.answers[1]