Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features/markdown/math_spec.rb')
-rw-r--r--spec/features/markdown/math_spec.rb104
1 files changed, 75 insertions, 29 deletions
diff --git a/spec/features/markdown/math_spec.rb b/spec/features/markdown/math_spec.rb
index 25459494a0c..0bc8f2146e9 100644
--- a/spec/features/markdown/math_spec.rb
+++ b/spec/features/markdown/math_spec.rb
@@ -24,9 +24,7 @@ RSpec.describe 'Math rendering', :js, feature_category: :team_planning do
```
MATH
- issue = create(:issue, project: project, description: description)
-
- visit project_issue_path(project, issue)
+ create_and_visit_issue_with_description(description)
expect(page).to have_selector('.katex .mord.mathnormal', text: 'b')
expect(page).to have_selector('.katex-display .mord.mathnormal', text: 'b')
@@ -40,9 +38,7 @@ RSpec.describe 'Math rendering', :js, feature_category: :team_planning do
This link is valid $`\\href{https://gitlab.com}{Gitlab}`$.
MATH
- issue = create(:issue, project: project, description: description)
-
- visit project_issue_path(project, issue)
+ create_and_visit_issue_with_description(description)
page.within '.description > .md' do
# unfortunately there is no class selector for KaTeX's "unsupported command"
@@ -59,9 +55,7 @@ RSpec.describe 'Math rendering', :js, feature_category: :team_planning do
```
MATH
- issue = create(:issue, project: project, description: description)
-
- visit project_issue_path(project, issue)
+ create_and_visit_issue_with_description(description)
page.within '.description > .md' do
expect(page).to have_selector('.js-lazy-render-math-container', text: /math block exceeds 1000 characters/)
@@ -75,11 +69,7 @@ RSpec.describe 'Math rendering', :js, feature_category: :team_planning do
```
MATH
- issue = create(:issue, project: project, description: description)
-
- visit project_issue_path(project, issue)
-
- wait_for_requests
+ create_and_visit_issue_with_description(description)
page.within '.description > .md' do
expect(page).not_to have_selector('.katex-error')
@@ -93,11 +83,7 @@ RSpec.describe 'Math rendering', :js, feature_category: :team_planning do
```
MATH
- issue = create(:issue, project: project, description: description)
-
- visit project_issue_path(project, issue)
-
- wait_for_requests
+ create_and_visit_issue_with_description(description)
page.within '.description > .md' do
click_button 'Display anyway'
@@ -113,11 +99,7 @@ RSpec.describe 'Math rendering', :js, feature_category: :team_planning do
```
MATH
- issue = create(:issue, project: project, description: description)
-
- visit project_issue_path(project, issue)
-
- wait_for_requests
+ create_and_visit_issue_with_description(description)
page.within '.description > .md' do
expect(page).to have_selector('.katex-error',
@@ -132,11 +114,7 @@ RSpec.describe 'Math rendering', :js, feature_category: :team_planning do
```
MATH
- issue = create(:issue, project: project, description: description)
-
- visit project_issue_path(project, issue)
-
- wait_for_requests
+ create_and_visit_issue_with_description(description)
page.within '.description > .md' do
expect(page).to have_selector('.katex-error', text: /<script>/)
@@ -162,4 +140,72 @@ RSpec.describe 'Math rendering', :js, feature_category: :team_planning do
expect(page).not_to have_selector('.js-lazy-render-math')
end
end
+
+ it 'uses math-content-display for display math', :js do
+ description = <<~MATH
+ ```math
+ 1 + 2
+ ```
+ MATH
+
+ create_and_visit_issue_with_description(description)
+
+ page.within '.description > .md' do
+ expect(page).to have_selector('.math-content-display')
+ end
+ end
+
+ it 'uses math-content-inline for inline math', :js do
+ description = 'one $`1 + 2`$ two'
+
+ create_and_visit_issue_with_description(description)
+
+ page.within '.description > .md' do
+ expect(page).to have_selector('.math-content-inline')
+ end
+ end
+
+ context 'when math tries to cover other elements on the page' do
+ it 'prevents hijacking for display math', :js do
+ description = <<~MATH
+ [test link](#)
+
+ ```math
+ \\hskip{-200pt}\\href{https://example.com}{\\smash{\\raisebox{20em}{$\\smash{\\raisebox{20em}{$\\phantom{\\underset{\\underset{\\underset{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}}{\\underset{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}}}{\\underset{\\underset{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}}{}}}$}}$}}}
+ ```
+ MATH
+
+ issue = create_and_visit_issue_with_description(description)
+
+ page.within '.description > .md' do
+ click_link 'test link'
+
+ expect(page).to have_current_path(project_issue_path(project, issue))
+ end
+ end
+
+ it 'prevents hijacking for inline math', :js do
+ description = <<~MATH
+ [test link](#) $`\\hskip{-200pt}\\href{https://example.com}{\\smash{\\raisebox{20em}{$\\smash{\\raisebox{20em}{$\\phantom{\\underset{\\underset{\\underset{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}}{\\underset{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}}}{\\underset{\\underset{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}{\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}\\rule{20em}{20em}}}{}}}$}}$}}}`$
+ MATH
+
+ issue = create_and_visit_issue_with_description(description)
+
+ page.within '.description > .md' do
+ click_link 'test link'
+
+ expect(page).to have_current_path(project_issue_path(project, issue))
+ end
+ end
+ end
+
+ def create_and_visit_issue_with_description(description)
+ issue = create(:issue, project: project, description: description)
+
+ visit project_issue_path(project, issue)
+
+ wait_for_requests
+
+ issue
+ end
end