|
|
@@ -10,6 +10,8 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
|
|
class OutlookExamSprintReportTemplateCompatibilityTest {
|
|
|
|
|
|
+ private static final String REPORT_FONT_STACK = "'MiSans VF', MiSans, ReportFont, sans-serif";
|
|
|
+
|
|
|
@Test
|
|
|
void templateMatchesDesignDraftWithPdfSafeLayoutStyles() throws Exception {
|
|
|
String normalizedTemplate = normalizeWhitespace(loadTemplate());
|
|
|
@@ -19,7 +21,7 @@ class OutlookExamSprintReportTemplateCompatibilityTest {
|
|
|
.contains("background-color: #f5f7fa")
|
|
|
.contains("padding: 0")
|
|
|
.contains("color: #333")
|
|
|
- .contains("font-family: MiSans, ReportFont, sans-serif")
|
|
|
+ .contains("font-family: " + REPORT_FONT_STACK)
|
|
|
.contains("font-size: 14px")
|
|
|
.contains("line-height: 1.72")
|
|
|
.doesNotContainPattern("(?i)-webkit-print-color-adjust\\s*:")
|
|
|
@@ -35,12 +37,12 @@ class OutlookExamSprintReportTemplateCompatibilityTest {
|
|
|
.doesNotContainPattern("(?i)(^|[\\s{;])box-shadow\\s*:")
|
|
|
.contains("h1.report-title")
|
|
|
.contains("font-size: 28px")
|
|
|
- .containsPattern("h1\\.report-title\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*font-size\\s*:\\s*28px\\s*;[^}]*font-weight\\s*:\\s*600\\s*;[^}]*}")
|
|
|
+ .containsPattern("h1\\.report-title\\s*\\{[^}]*font-family\\s*:\\s*'MiSans VF', MiSans, ReportFont, sans-serif\\s*;[^}]*font-size\\s*:\\s*28px\\s*;[^}]*font-weight\\s*:\\s*600\\s*;[^}]*}")
|
|
|
.contains("p.report-subtitle")
|
|
|
- .containsPattern("p\\.report-subtitle\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")
|
|
|
+ .containsPattern("p\\.report-subtitle\\s*\\{[^}]*font-family\\s*:\\s*'MiSans VF', MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")
|
|
|
.contains(".section")
|
|
|
.contains(".section-title")
|
|
|
- .containsPattern("\\.section-title\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*font-size\\s*:\\s*20px\\s*;[^}]*font-weight\\s*:\\s*600\\s*;[^}]*}")
|
|
|
+ .containsPattern("\\.section-title\\s*\\{[^}]*font-family\\s*:\\s*'MiSans VF', MiSans, ReportFont, sans-serif\\s*;[^}]*font-size\\s*:\\s*20px\\s*;[^}]*font-weight\\s*:\\s*600\\s*;[^}]*}")
|
|
|
.contains("border-left: 6px solid #ff7d00")
|
|
|
.contains(".analysis-table")
|
|
|
.contains(".analysis-row")
|
|
|
@@ -51,7 +53,7 @@ class OutlookExamSprintReportTemplateCompatibilityTest {
|
|
|
.containsPattern("\\.card\\s*\\{[^}]*min-height\\s*:\\s*370px\\s*;[^}]*}")
|
|
|
.doesNotContainPattern("(?i)(^|[\\s{;])display\\s*:\\s*flex\\b")
|
|
|
.doesNotContainPattern("(?i)(^|[\\s{;])flex-direction\\s*:")
|
|
|
- .containsPattern("\\.card-title\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*font-size\\s*:\\s*16px\\s*;[^}]*font-weight\\s*:\\s*600\\s*;[^}]*}")
|
|
|
+ .containsPattern("\\.card-title\\s*\\{[^}]*font-family\\s*:\\s*'MiSans VF', MiSans, ReportFont, sans-serif\\s*;[^}]*font-size\\s*:\\s*16px\\s*;[^}]*font-weight\\s*:\\s*600\\s*;[^}]*}")
|
|
|
.contains(".frequency-table")
|
|
|
.contains(".frequency-row")
|
|
|
.contains(".frequency-cell")
|
|
|
@@ -59,7 +61,7 @@ class OutlookExamSprintReportTemplateCompatibilityTest {
|
|
|
.containsPattern("\\.frequency-row\\s*\\{[^}]*page-break-inside\\s*:\\s*avoid\\s*;[^}]*}")
|
|
|
.containsPattern("\\.freq-card\\s*\\{[^}]*page-break-inside\\s*:\\s*avoid\\s*;[^}]*}")
|
|
|
.contains(".freq-header")
|
|
|
- .containsPattern("\\.freq-header\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*font-size\\s*:\\s*18px\\s*;[^}]*font-weight\\s*:\\s*600\\s*;[^}]*}")
|
|
|
+ .containsPattern("\\.freq-header\\s*\\{[^}]*font-family\\s*:\\s*'MiSans VF', MiSans, ReportFont, sans-serif\\s*;[^}]*font-size\\s*:\\s*18px\\s*;[^}]*font-weight\\s*:\\s*600\\s*;[^}]*}")
|
|
|
.containsPattern("\\.badge\\s*\\{[^}]*position\\s*:\\s*relative\\s*;[^}]*top\\s*:\\s*7px\\s*;[^}]*min-width\\s*:\\s*40px\\s*;[^}]*height\\s*:\\s*20px\\s*;[^}]*padding\\s*:\\s*0\\s+8px\\s*;[^}]*line-height\\s*:\\s*20px\\s*;[^}]*text-align\\s*:\\s*center\\s*;[^}]*vertical-align\\s*:\\s*middle\\s*;[^}]*}")
|
|
|
.contains(".freq-header-table")
|
|
|
.containsPattern("\\.freq-header-table\\s*\\{[^}]*width\\s*:\\s*100%\\s*;[^}]*table-layout\\s*:\\s*fixed\\s*;[^}]*border-collapse\\s*:\\s*collapse\\s*;[^}]*}")
|
|
|
@@ -67,10 +69,10 @@ class OutlookExamSprintReportTemplateCompatibilityTest {
|
|
|
.containsPattern("\\.freq-star-cell\\s*\\{[^}]*width\\s*:\\s*28px\\s*;[^}]*text-align\\s*:\\s*right\\s*;[^}]*vertical-align\\s*:\\s*middle\\s*;[^}]*}")
|
|
|
.doesNotContainPattern("\\.crown\\s*\\{[^}]*position\\s*:\\s*absolute\\s*;")
|
|
|
.containsPattern("\\.crown\\s*\\{[^}]*position\\s*:\\s*relative\\s*;[^}]*top\\s*:\\s*-4px\\s*;[^}]*}")
|
|
|
- .containsPattern("\\.data-text\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")
|
|
|
+ .containsPattern("\\.data-text\\s*\\{[^}]*font-family\\s*:\\s*'MiSans VF', MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")
|
|
|
.contains(".text-desc")
|
|
|
- .containsPattern("\\.text-desc\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")
|
|
|
- .containsPattern("\\.freq-data\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")
|
|
|
+ .containsPattern("\\.text-desc\\s*\\{[^}]*font-family\\s*:\\s*'MiSans VF', MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")
|
|
|
+ .containsPattern("\\.freq-data\\s*\\{[^}]*font-family\\s*:\\s*'MiSans VF', MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")
|
|
|
.contains(".student-case")
|
|
|
.contains(".student-case-table")
|
|
|
.contains(".student-case-row")
|
|
|
@@ -127,7 +129,7 @@ class OutlookExamSprintReportTemplateCompatibilityTest {
|
|
|
assertThat(normalizedTemplate)
|
|
|
.containsPattern("@page\\s*\\{[^}]*size\\s*:\\s*A4\\s*;[^}]*margin\\s*:\\s*0\\s*;[^}]*}")
|
|
|
.contains("h1.report-title")
|
|
|
- .contains("font-family: MiSans, ReportFont, sans-serif")
|
|
|
+ .contains("font-family: " + REPORT_FONT_STACK)
|
|
|
.contains("font-size: 28px")
|
|
|
.contains("font-weight: 600")
|
|
|
.contains("color: #2b4c8a")
|
|
|
@@ -136,6 +138,15 @@ class OutlookExamSprintReportTemplateCompatibilityTest {
|
|
|
.contains("text-align: center");
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ void templateUsesRealBundledFontFamilyBeforeAliases() throws Exception {
|
|
|
+ String normalizedTemplate = normalizeWhitespace(loadTemplate());
|
|
|
+
|
|
|
+ assertThat(normalizedTemplate)
|
|
|
+ .contains("font-family: " + REPORT_FONT_STACK)
|
|
|
+ .doesNotContain("font-family: MiSans, ReportFont, sans-serif");
|
|
|
+ }
|
|
|
+
|
|
|
private String loadTemplate() throws Exception {
|
|
|
ClassPathResource resource = new ClassPathResource("templates/outlook-exam-sprint-report-template.html");
|
|
|
try (InputStream inputStream = resource.getInputStream()) {
|