diff options
author | David Bürgin <676c7473@gmail.com> | 2015-04-06 21:09:02 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2015-04-07 18:54:27 -0400 |
commit | 9a6a311f35835a3ea481faa0eddcc12672777864 (patch) | |
tree | 2c235a2f6ea552124be2050f5ec28154233b23c0 /test/functional/legacy | |
parent | 6881d9705b78fcd2b30a9352c20ed21907471f1a (diff) | |
download | rneovim-9a6a311f35835a3ea481faa0eddcc12672777864.tar.gz rneovim-9a6a311f35835a3ea481faa0eddcc12672777864.tar.bz2 rneovim-9a6a311f35835a3ea481faa0eddcc12672777864.zip |
tests: Migrate legacy tests 44 and 99 #2366
Consolidates the old test44 and test99 tests into one busted spec.
Diffstat (limited to 'test/functional/legacy')
-rw-r--r-- | test/functional/legacy/044_099_regexp_multibyte_magic_spec.lua | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/test/functional/legacy/044_099_regexp_multibyte_magic_spec.lua b/test/functional/legacy/044_099_regexp_multibyte_magic_spec.lua new file mode 100644 index 0000000000..de628b0b52 --- /dev/null +++ b/test/functional/legacy/044_099_regexp_multibyte_magic_spec.lua @@ -0,0 +1,147 @@ +-- Tests for regexp with multi-byte encoding and various magic settings. +-- Test matchstr() with a count and multi-byte chars. +-- +-- This test contains both "test44" and "test99" from the old test suite. + +local helpers = require('test.functional.helpers') +local feed, insert, source = helpers.feed, helpers.insert, helpers.source +local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect + +-- Runs the test protocol with the given 'regexpengine' setting. In the old test +-- suite the test protocol was duplicated in test44 and test99, the only +-- difference being the 'regexpengine' setting. We've extracted it here. +local function run_test_with_regexpengine(regexpengine) + insert([[ + 1 a aa abb abbccc + 2 d dd dee deefff + 3 g gg ghh ghhiii + 4 j jj jkk jkklll + 5 m mm mnn mnnooo + 6 x ^aa$ x + 7 (a)(b) abbaa + 8 axx [ab]xx + 9 หม่x อมx + a อมx หม่x + b ちカヨは + c x ¬€x + d 天使x + e y + f z + g a啷bb + h AÀÁÂÃÄÅĀĂĄǍǞǠẢ BḂḆ CÇĆĈĊČ DĎĐḊḎḐ EÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÌÍÎÏĨĪĬĮİǏỈ JĴ KĶǨḰḴ LĹĻĽĿŁḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎŐƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ VṼ WŴẀẂẄẆ XẊẌ YÝŶŸẎỲỶỸ ZŹŻŽƵẐẔ + i aàáâãäåāăąǎǟǡả bḃḇ cçćĉċč dďđḋḏḑ eèéêëēĕėęěẻẽ fḟ gĝğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįǐỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṁ nñńņňʼnṅṉ oòóôõöøōŏőơǒǫǭỏ pṕṗ q rŕŗřṙṟ sśŝşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vṽ wŵẁẃẅẇẘ xẋẍ yýÿŷẏẙỳỷỹ zźżžƶẑẕ + j 0123❤x + k combinations]]) + + execute('set encoding=utf-8 termencoding=latin1') + execute('set re=' .. regexpengine) + + -- Lines 1-8. Exercise regexp search with various magic settings. On each + -- line the character on which the cursor is expected to land is deleted. + feed('/^1<cr>') + feed([[/a*b\{2}c\+/e<cr>x]]) + feed([[/\Md\*e\{2}f\+/e<cr>x]]) + execute('set nomagic') + feed([[/g\*h\{2}i\+/e<cr>x]]) + feed([[/\mj*k\{2}l\+/e<cr>x]]) + feed([[/\vm*n{2}o+/e<cr>x]]) + feed([[/\V^aa$<cr>x]]) + execute('set magic') + feed([[/\v(a)(b)\2\1\1/e<cr>x]]) + feed([[/\V[ab]\(\[xy]\)\1<cr>x]]) + + -- Line 9. Search for multi-byte character without combining character. + feed('/ม<cr>x') + + -- Line a. Search for multi-byte character with combining character. + feed('/ม่<cr>x') + + -- Line b. Find word by change of word class. + -- (The "<" character in this test step seemed to confuse our "feed" test + -- helper, which is why we've resorted to "execute" here.) + execute([[/ち\<カヨ\>は]]) + feed('x') + + -- Lines c-i. Test \%u, [\u], and friends. + feed([[/\%u20ac<cr>x]]) + feed([[/[\u4f7f\u5929]\+<cr>x]]) + feed([[/\%U12345678<cr>x]]) + feed([[/[\U1234abcd\u1234\uabcd]<cr>x]]) + feed([[/\%d21879b<cr>x]]) + feed('/ [[=A=]]* [[=B=]]* [[=C=]]* [[=D=]]* [[=E=]]* [[=F=]]* ' .. + '[[=G=]]* [[=H=]]* [[=I=]]* [[=J=]]* [[=K=]]* [[=L=]]* [[=M=]]* ' .. + '[[=N=]]* [[=O=]]* [[=P=]]* [[=Q=]]* [[=R=]]* [[=S=]]* [[=T=]]* ' .. + '[[=U=]]* [[=V=]]* [[=W=]]* [[=X=]]* [[=Y=]]* [[=Z=]]*/e<cr>x') + feed('/ [[=a=]]* [[=b=]]* [[=c=]]* [[=d=]]* [[=e=]]* [[=f=]]* ' .. + '[[=g=]]* [[=h=]]* [[=i=]]* [[=j=]]* [[=k=]]* [[=l=]]* [[=m=]]* ' .. + '[[=n=]]* [[=o=]]* [[=p=]]* [[=q=]]* [[=r=]]* [[=s=]]* [[=t=]]* ' .. + '[[=u=]]* [[=v=]]* [[=w=]]* [[=x=]]* [[=y=]]* [[=z=]]*/e<cr>x') + + -- Line j. Test backwards search from a multi-byte character. + feed('/x<cr>x') + feed('?.<cr>x') + + -- Line k. Test substitution with combining characters by executing register + -- contents. + execute([[let @w=':%s#comb[i]nations#œ̄ṣ́m̥̄ᾱ̆́#g']]) + execute('@w') + + -- Additional tests. Test matchstr() with multi-byte characters. + feed('G') + execute([[put =matchstr(\"אבגד\", \".\", 0, 2)]]) -- ב + execute([[put =matchstr(\"אבגד\", \"..\", 0, 2)]]) -- בג + execute([[put =matchstr(\"אבגד\", \".\", 0, 0)]]) -- א + execute([[put =matchstr(\"אבגד\", \".\", 4, -1)]]) -- ג + + -- Test that a search with "/e" offset wraps around at the end of the buffer. + execute('new') + execute([[$put =['dog(a', 'cat('] ]]) + feed('/(/e+<cr>') + feed('"ayn') + execute('bd!') + execute([[$put ='']]) + feed('G"ap') + + -- Assert buffer contents. + expect([[ + 1 a aa abb abbcc + 2 d dd dee deeff + 3 g gg ghh ghhii + 4 j jj jkk jkkll + 5 m mm mnn mnnoo + 6 x aa$ x + 7 (a)(b) abba + 8 axx ab]xx + 9 หม่x อx + a อมx หx + b カヨは + c x ¬x + d 使x + e y + f z + g abb + h AÀÁÂÃÄÅĀĂĄǍǞǠẢ BḂḆ CÇĆĈĊČ DĎĐḊḎḐ EÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÌÍÎÏĨĪĬĮİǏỈ JĴ KĶǨḰḴ LĹĻĽĿŁḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎŐƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ VṼ WŴẀẂẄẆ XẊẌ YÝŶŸẎỲỶỸ ZŹŻŽƵẐ + i aàáâãäåāăąǎǟǡả bḃḇ cçćĉċč dďđḋḏḑ eèéêëēĕėęěẻẽ fḟ gĝğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįǐỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṁ nñńņňʼnṅṉ oòóôõöøōŏőơǒǫǭỏ pṕṗ q rŕŗřṙṟ sśŝşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vṽ wŵẁẃẅẇẘ xẋẍ yýÿŷẏẙỳỷỹ zźżžƶẑ + j 012❤ + k œ̄ṣ́m̥̄ᾱ̆́ + ב + בג + א + ג + a + cat(]]) +end + +describe('multi-byte regexp search with magic settings', function() + before_each(clear) + + it('is working with regexpengine=1', function() + -- The old test44. + run_test_with_regexpengine(1) + end) + + it('is working with regexpengine=2', function() + -- The old test99. + run_test_with_regexpengine(2) + end) +end) |