mirror of
https://github.com/redmine/redmine.git
synced 2025-11-12 16:26:03 +01:00
Patch by Mizuki ISHIKAWA (user:ishikawa999). git-svn-id: https://svn.redmine.org/redmine/trunk@24057 e93f8b46-1217-0410-a6f0-8f06a7374b81
352 lines
11 KiB
Ruby
352 lines
11 KiB
Ruby
# frozen_string_literal: true
|
||
|
||
require_relative '../application_system_test_case'
|
||
|
||
class ListAutofillSystemTest < ApplicationSystemTestCase
|
||
def setup
|
||
super
|
||
log_user('jsmith', 'jsmith')
|
||
end
|
||
|
||
def test_autofill_textile_unordered_list
|
||
with_settings :text_formatting => 'textile' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('* First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"* First item\n" \
|
||
"* ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_autofill_textile_ordered_list
|
||
with_settings :text_formatting => 'textile' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('# First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"# First item\n" \
|
||
"# ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_remove_list_marker_for_empty_item
|
||
with_settings :text_formatting => 'textile' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('* First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
find('#issue_description').send_keys(:enter) # Press Enter on empty line removes the marker
|
||
|
||
assert_equal(
|
||
"* First item\n",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_autofill_markdown_unordered_list
|
||
with_settings :text_formatting => 'common_mark' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('- First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
assert_equal(
|
||
"- First item\n" \
|
||
"- ",
|
||
find('#issue_description').value
|
||
)
|
||
|
||
fill_in 'Description', with: ''
|
||
find('#issue_description').send_keys('* First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
assert_equal(
|
||
"* First item\n" \
|
||
"* ",
|
||
find('#issue_description').value
|
||
)
|
||
|
||
fill_in 'Description', with: ''
|
||
find('#issue_description').send_keys('+ First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
assert_equal(
|
||
"+ First item\n" \
|
||
"+ ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_autofill_with_markdown_ordered_list
|
||
with_settings :text_formatting => 'common_mark' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('1. First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"1. First item\n" \
|
||
"2. ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_autofill_with_markdown_ordered_list_using_parenthesis
|
||
with_settings :text_formatting => 'common_mark' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('1) First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"1) First item\n" \
|
||
"2) ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_autofill_with_markdown_unchecked_task_list
|
||
with_settings :text_formatting => 'common_mark' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('- [ ] First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"- [ ] First item\n" \
|
||
"- [ ] ",
|
||
find('#issue_description').value
|
||
)
|
||
|
||
fill_in 'Description', with: ''
|
||
find('#issue_description').send_keys('1. [ ] First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"1. [ ] First item\n" \
|
||
"2. [ ] ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_autofill_with_markdown_checked_task_list
|
||
with_settings :text_formatting => 'common_mark' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('- [x] First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"- [x] First item\n" \
|
||
"- [ ] ",
|
||
find('#issue_description').value
|
||
)
|
||
|
||
fill_in 'Description', with: ''
|
||
find('#issue_description').send_keys('1. [x] First item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"1. [x] First item\n" \
|
||
"2. [ ] ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_textile_nested_list_autofill
|
||
with_settings :text_formatting => 'textile' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('* Parent item')
|
||
find('#issue_description').send_keys(:enter)
|
||
find('#issue_description').send_keys(:backspace, :backspace) # Remove auto-filled marker
|
||
find('#issue_description').send_keys('** Child item')
|
||
find('#issue_description').send_keys(:enter)
|
||
find('#issue_description').send_keys(:backspace, :backspace, :backspace) # Remove auto-filled marker
|
||
find('#issue_description').send_keys("*** Grandchild item")
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"* Parent item\n" \
|
||
"** Child item\n" \
|
||
"*** Grandchild item\n" \
|
||
"*** ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_common_mark_nested_list_autofill
|
||
with_settings :text_formatting => 'common_mark' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('- Parent item')
|
||
find('#issue_description').send_keys(:enter)
|
||
find('#issue_description').send_keys(:backspace, :backspace) # Remove auto-filled marker
|
||
find('#issue_description').send_keys(' - Child item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"- Parent item\n" \
|
||
" - Child item\n" \
|
||
" - ",
|
||
find('#issue_description').value
|
||
)
|
||
|
||
find('#issue_description').send_keys(:backspace, :backspace, :backspace, :backspace) # Remove auto-filled marker
|
||
find('#issue_description').send_keys(' - Grandchild item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"- Parent item\n" \
|
||
" - Child item\n" \
|
||
" - Grandchild item\n" \
|
||
" - ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_common_mark_mixed_list_types
|
||
with_settings :text_formatting => 'common_mark' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').send_keys('1. First numbered item')
|
||
find('#issue_description').send_keys(:enter)
|
||
find('#issue_description').send_keys(:backspace, :backspace, :backspace) # Remove auto-filled numbered list marker
|
||
find('#issue_description').send_keys(' - Nested bullet item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"1. First numbered item\n" \
|
||
" - Nested bullet item\n" \
|
||
" - ",
|
||
find('#issue_description').value
|
||
)
|
||
|
||
find('#issue_description').send_keys(:backspace, :backspace, :backspace, :backspace, :backspace) # Remove auto-filled numbered list marker
|
||
find('#issue_description').send_keys('2. Second numbered item')
|
||
find('#issue_description').send_keys(:enter)
|
||
|
||
assert_equal(
|
||
"1. First numbered item\n" \
|
||
" - Nested bullet item\n" \
|
||
"2. Second numbered item\n" \
|
||
"3. ",
|
||
find('#issue_description').value
|
||
)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_remove_list_marker_with_single_halfwidth_space_variants
|
||
with_settings :text_formatting => 'common_mark' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').click
|
||
|
||
# Half-width space only → should remove marker
|
||
find('#issue_description').send_keys('1. First item', :enter)
|
||
assert_equal("1. First item\n2. ", find('#issue_description').value)
|
||
find('#issue_description').send_keys(:enter)
|
||
assert_equal("1. First item\n", find('#issue_description').value)
|
||
|
||
fill_in 'Description', with: ''
|
||
# Full-width space only → should NOT remove marker
|
||
find('#issue_description').send_keys('1. First item', :enter)
|
||
find('#issue_description').send_keys(:backspace, :backspace, :backspace)
|
||
find('#issue_description').send_keys("2. ", :enter)
|
||
assert_equal("1. First item\n2. \n", find('#issue_description').value)
|
||
|
||
fill_in 'Description', with: ''
|
||
# Two or more spaces → should NOT remove marker
|
||
find('#issue_description').send_keys('1. First item', :enter)
|
||
find('#issue_description').send_keys(:backspace, :backspace, :backspace)
|
||
find('#issue_description').send_keys("2. ", :enter)
|
||
assert_equal("1. First item\n2. \n3. ", find('#issue_description').value)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_no_autofill_when_content_is_missing_or_invalid_marker
|
||
with_settings :text_formatting => 'common_mark' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').click
|
||
|
||
# Marker only with no content → should not trigger insert
|
||
find('#issue_description').send_keys('1.', :enter)
|
||
assert_equal("1.\n", find('#issue_description').value)
|
||
|
||
fill_in 'Description', with: ''
|
||
# Invalid marker pattern (e.g. double dot) → should not trigger insert
|
||
find('#issue_description').send_keys('1.. Invalid marker', :enter)
|
||
assert_equal("1.. Invalid marker\n", find('#issue_description').value)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_autofill_ignored_with_none_text_formatting
|
||
with_settings :text_formatting => '' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').click
|
||
|
||
# Unsupported format → no autofill should occur
|
||
find('#issue_description').send_keys('* First item', :enter)
|
||
assert_equal("* First item\n", find('#issue_description').value)
|
||
end
|
||
end
|
||
end
|
||
|
||
def test_marker_not_inserted_on_empty_line
|
||
with_settings :text_formatting => 'textile' do
|
||
visit '/projects/ecookbook/issues/new'
|
||
|
||
within('form#issue-form') do
|
||
find('#issue_description').click
|
||
|
||
# Pressing enter on an empty line → should not trigger insert
|
||
find('#issue_description').send_keys(:enter)
|
||
assert_equal("\n", find('#issue_description').value)
|
||
end
|
||
end
|
||
end
|
||
end
|