AsmGrader 0.0.0
Loading...
Searching...
No Matches
plaintext_serializer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "grading_session.hpp"
5#include "output/sink.hpp"
7
8#include <fmt/base.h>
9#include <fmt/color.h>
10#include <fmt/format.h>
11
12#include <cstddef>
13#include <string>
14#include <string_view>
15
16namespace asmgrader {
17
19{
20public:
23
24 void on_student_begin(const StudentInfo& info) override;
25 void on_student_end(const StudentInfo& info) override;
26
27 void on_run_metadata(const RunMetadata& data) override;
28 void on_requirement_result(const RequirementResult& data) override;
29 void on_test_begin(std::string_view test_name) override;
30 void on_test_result(const TestResult& data) override;
31 void on_assignment_result(const AssignmentResult& data) override;
32
33 void on_warning(std::string_view what) override;
34 void on_error(std::string_view what) override;
35
36 void finalize() override;
37
38private:
39 static bool process_colorize_opt(ProgramOptions::ColorizeOpt colorize_option);
40 static std::size_t get_terminal_width();
41
42 void output_grade_percentage(const AssignmentResult& data);
43
44 template <fmt::formattable T>
45 auto style(const T& arg, fmt::text_style style) const -> decltype(fmt::styled(arg, style));
46
47 template <fmt::formattable T>
48 std::string style_str(const T& arg, fmt::text_style style, fmt::format_string<T> fmt = "{}") const;
49
58 static std::string pluralize(std::string_view root, int count, std::string_view suffix = "s",
59 std::size_t replace_last_chars = 0);
60
61 // Basic styles for different kinds of output:
62 // error - FAILED messages, fatal errors, etc.
63 // success - PASSED messages
64 // header - section header (like "String Test Results:")
65 // value - for variables or literal values referenced for test requirements
66 static constexpr auto ERROR_STYLE = fmt::fg(fmt::color::red) | fmt::emphasis::bold;
67 static constexpr auto WARNING_STYLE = fmt::fg(fmt::color::yellow) | fmt::emphasis::bold;
68 static constexpr auto SUCCESS_STYLE = fmt::fg(fmt::color::lime_green);
69 static constexpr auto POP_OUT_STYLE =
70 fmt::emphasis::underline | fmt::emphasis::bold | fmt::fg(fmt::color::golden_rod);
71 static constexpr auto VALUE_STYLE = fmt::fg(fmt::color::aqua);
72
73 static constexpr std::size_t DEFAULT_WIDTH = 80;
74
75 static constexpr auto MAKE_LINE_DIVIDER = [](char chr) {
76 return [chr](std::size_t len) { return std::string(len, chr); };
77 };
78
79 // Basic line dividers to seperate output, parameterized on length
80 // Line Divider 2x Emphasized : "#######"...
81 // Line Divider Emphasized : "======="...
82 // Line Divider : "--------...
83 static const inline auto LINE_DIVIDER = MAKE_LINE_DIVIDER('-');
84 static const inline auto LINE_DIVIDER_EM = MAKE_LINE_DIVIDER('=');
85 static const inline auto LINE_DIVIDER_2EM = MAKE_LINE_DIVIDER('#');
86
87 bool do_colorize_;
88 std::size_t terminal_width_;
89};
90
91template <fmt::formattable T>
92auto PlainTextSerializer::style(const T& arg, fmt::text_style style) const -> decltype(fmt::styled(arg, style)) {
93 if (!do_colorize_) {
94 return fmt::styled(arg, {});
95 }
96 return fmt::styled(arg, style);
97}
98
99template <fmt::formattable T>
100std::string PlainTextSerializer::style_str(const T& arg, fmt::text_style style, fmt::format_string<T> fmt) const {
101 if (!do_colorize_) {
102 return fmt::vformat(fmt.str, fmt::vargs<T>{arg});
103 }
104
105 return fmt::vformat(style, fmt.str, fmt::vargs<T>{arg});
106}
107
108} // namespace asmgrader
Definition plaintext_serializer.hpp:19
void on_student_begin(const StudentInfo &info) override
Definition plaintext_serializer.cpp:183
void on_run_metadata(const RunMetadata &data) override
Definition plaintext_serializer.cpp:266
void on_assignment_result(const AssignmentResult &data) override
Definition plaintext_serializer.cpp:90
void on_test_result(const TestResult &data) override
Definition plaintext_serializer.cpp:69
void on_error(std::string_view what) override
Definition plaintext_serializer.cpp:261
void on_test_begin(std::string_view test_name) override
Definition plaintext_serializer.cpp:59
PlainTextSerializer(Sink &sink, ProgramOptions::ColorizeOpt colorize_option, ProgramOptions::VerbosityLevel verbosity)
Definition plaintext_serializer.cpp:35
void finalize() override
Definition plaintext_serializer.cpp:154
void on_warning(std::string_view what) override
Definition plaintext_serializer.cpp:256
void on_requirement_result(const RequirementResult &data) override
Definition plaintext_serializer.cpp:41
void on_student_end(const StudentInfo &info) override
Definition plaintext_serializer.cpp:246
Definition serializer.hpp:13
Definition sink.hpp:8
Defines data classes to store result data for the current run session.
Definition asm_buffer.hpp:19
Definition grading_session.hpp:113
VerbosityLevel
See Description of Levels for an explaination of each of the levels. Max is just used as a sentinal f...
Definition program_options.hpp:37
ColorizeOpt
Definition program_options.hpp:53
Definition grading_session.hpp:72
Definition grading_session.hpp:59
Definition grading_session.hpp:151
Definition grading_session.hpp:93