| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- namespace Tests\Unit;
- use App\Support\BlankPlaceholderRenderer;
- use PHPUnit\Framework\TestCase;
- class BlankPlaceholderRendererTest extends TestCase
- {
- public function test_fill_stem_canonical_2562_dollar_around_a_only(): void
- {
- // questions.id=2562 本源:$a$ 与横线分段,横线在 $…$ 外;不得出现 </span>$时 这类误插 $。
- $stem = '当$a$=__________时,$2(2a-3)$的值比$3(a+1)$的值大$1$.';
- [$rendered, $changed] = BlankPlaceholderRenderer::replaceToBlankSpan(
- $stem,
- BlankPlaceholderRenderer::defaultBlankSpan(),
- false,
- false
- );
- $this->assertTrue($changed);
- $this->assertStringNotContainsString('</span>$时', $rendered);
- $this->assertMatchesRegularExpression('/\$2\(2a-3\)\$/u', $rendered);
- $this->assertMatchesRegularExpression('/当\$a\$=/u', $rendered);
- }
- public function test_fill_stem_malformed_missing_close_dollar_before_han_still_repaired(): void
- {
- // 脏数据:仅 $a=__________($a 与横线同一数学段且漏写收尾 $)时补闭合,避免吞段。
- $stem = '当$a=__________时,$2(2a-3)$的值比$3(a+1)$的值大$1$.';
- [$rendered, $changed] = BlankPlaceholderRenderer::replaceToBlankSpan(
- $stem,
- BlankPlaceholderRenderer::defaultBlankSpan(),
- false,
- false
- );
- $this->assertTrue($changed);
- $this->assertStringNotContainsString('</span>$时', $rendered);
- $this->assertMatchesRegularExpression('/\$2\(2a-3\)\$/u', $rendered);
- }
- public function test_inline_math_with_normal_parentheses_not_turned_to_blank(): void
- {
- $stem = '设$f(x)=\sin(x)$,则$g(2)$的值是__________。';
- [$rendered] = BlankPlaceholderRenderer::replaceToBlankSpan(
- $stem,
- BlankPlaceholderRenderer::defaultBlankSpan(),
- false,
- false
- );
- $this->assertStringContainsString('sin(x)', $rendered);
- $this->assertStringContainsString('g(2)', $rendered);
- $this->assertStringContainsString('border-bottom:1.2px dashed', $rendered);
- }
- public function test_left_quad_right_not_at_suffix_stays_in_formula(): void
- {
- // 段末不是「…=\left(\quad\right)」完整后缀时,不转为下划线(避免误伤中段记号)。
- $stem = '若$x=\left(\quad\right)+1$,则$y=__________。';
- [$rendered] = BlankPlaceholderRenderer::replaceToBlankSpan(
- $stem,
- BlankPlaceholderRenderer::defaultBlankSpan(),
- false,
- false
- );
- $this->assertStringContainsString('\\left(\\quad\\right)', $rendered);
- }
- public function test_fill_degree_after_plain_blank_not_prefixed_with_stray_dollar(): void
- {
- // questions.id=332:inline $40^{\circ}$ 后又出现「向左拐______度」,中间无 $;
- // closeMissing 不得误用上一段公式的收尾 $,否则会出现「……横线 $度」。
- $stem = '一辆汽车在笔直的公路上行驶,第一次向左拐 $40^{\circ}$,若经第二次拐弯后,运动路线与原来的路线平行,则第二次拐弯是否向右拐或向左拐______度。';
- [$rendered] = BlankPlaceholderRenderer::replaceToBlankSpan(
- $stem,
- BlankPlaceholderRenderer::defaultBlankSpan(),
- false,
- false
- );
- $this->assertStringContainsString('</span>度', $rendered);
- $this->assertStringNotContainsString('</span>$度', $rendered);
- }
- public function test_choice_stem_trailing_left_quad_right_becomes_blank_line(): void
- {
- // questions.id=30949:段末 $=\left(\quad\right)$ 意图为答题横线,转为段外下划线再渲染为标准空位。
- $stem = '在三角形$ABC$中,$AC=3,AB=4,\angle CAB=120^{\circ}$,则$\left(\overrightarrow{AB}+\overrightarrow{AC}\right)\cdot\overrightarrow{AB}=\left(\quad\right)$';
- [$rendered] = BlankPlaceholderRenderer::replaceToBlankSpan(
- $stem,
- BlankPlaceholderRenderer::defaultBlankSpan(),
- false,
- false
- );
- $this->assertStringContainsString('border-bottom:1.2px dashed', $rendered);
- $this->assertStringContainsString('min-width:80px', $rendered);
- $this->assertStringNotContainsString('\\left(\\quad\\right)', $rendered);
- $this->assertStringNotContainsString('TOKEN', $rendered);
- $this->assertStringContainsString('\\overrightarrow{AB}', $rendered);
- }
- }
|