changeset 12523:881564b89f9b v8.0.1140

patch 8.0.1140: still old style tests commit https://github.com/vim/vim/commit/bb3e6416f157f68799ccb6070fa2f91df6780e79 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Sep 23 19:24:46 2017 +0200 patch 8.0.1140: still old style tests Problem: Still old style tests. Solution: Convert two tests to new style. (Yegappan Lakshmanan)
author Christian Brabandt <cb@256bit.org>
date Sat, 23 Sep 2017 19:30:04 +0200
parents c9f1b01ee83d
children 5b3fd121883e
files src/Makefile src/testdir/Make_all.mak src/testdir/Make_vms.mms src/testdir/test56.in src/testdir/test56.ok src/testdir/test57.in src/testdir/test57.ok src/testdir/test_sort.vim src/testdir/test_vimscript.vim src/version.c
diffstat 10 files changed, 1162 insertions(+), 1073 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile
+++ b/src/Makefile
@@ -2105,7 +2105,7 @@ test1 \
 	test20 test25 test28 test29 \
 	test30 test31 test32 test33 test34 test36 test37 test38 test39 \
 	test40 test41 test42 test43 test44 test45 test48 test49 \
-	test50 test52 test53 test54 test55 test56 test57 test59 \
+	test50 test52 test53 test54 test55 test59 \
 	test60 test64 test66 test68 test69 \
 	test70 test72 test73 test77 test78 test79 \
 	test83 test85 test86 test87 test88 \
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -40,8 +40,6 @@ SCRIPTS_ALL = \
 	test48.out \
 	test53.out \
 	test55.out \
-	test56.out \
-	test57.out \
 	test60.out \
 	test64.out \
 	test66.out \
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -82,7 +82,7 @@ SCRIPT = test1.out  test3.out  test4.out
        test38.out test39.out test40.out test41.out test42.out \
        test43.out test44.out test45.out \
        test48.out test49.out test53.out test54.out \
-       test55.out test56.out test57.out test60.out \
+       test55.out test60.out \
        test64.out \
        test66.out test68.out test69.out \
        test72.out \
deleted file mode 100644
--- a/src/testdir/test56.in
+++ /dev/null
@@ -1,21 +0,0 @@
-Test for script-local function.     vim: set ft=vim :
-
-STARTTEST
-:so small.vim
-:"
-:set nocp viminfo+=nviminfo
-:/^start:/+1,/^end:/-1w! Xtest.vim
-:source Xtest.vim
-_x
-:$-1,$wq! test.out
-ENDTEST
-
-start:
-fun <SID>DoLast()
-  call append(line('$'), "last line")
-endfun
-fun s:DoNothing()
-  call append(line('$'), "nothing line")
-endfun
-nnoremap <buffer> _x	:call <SID>DoNothing()<bar>call <SID>DoLast()<bar>delfunc <SID>DoNothing<bar>delfunc <SID>DoLast<cr>
-end:
deleted file mode 100644
--- a/src/testdir/test56.ok
+++ /dev/null
@@ -1,2 +0,0 @@
-nothing line
-last line
deleted file mode 100644
--- a/src/testdir/test57.in
+++ /dev/null
@@ -1,545 +0,0 @@
-Tests for :sort command.     vim: set ft=vim :
-
-STARTTEST
-:so small.vim
-:"
-:/^t01:/+1,/^t02/-1sort
-:/^t02:/+1,/^t03/-1sort n
-:/^t03:/+1,/^t04/-1sort x
-:/^t04:/+1,/^t05/-1sort u
-:/^t05:/+1,/^t06/-1sort!
-:/^t06:/+1,/^t07/-1sort! n        
-:/^t07:/+1,/^t08/-1sort! u
-:/^t08:/+1,/^t09/-1sort o         
-:/^t09:/+1,/^t10/-1sort! x        
-:/^t10:/+1,/^t11/-1sort/./        
-:/^t11:/+1,/^t12/-1sort/../       
-:/^t12:/+1,/^t13/-1sort/../u
-:/^t13:/+1,/^t14/-1sort/./n
-:/^t14:/+1,/^t15/-1sort/./r
-:/^t15:/+1,/^t16/-1sort/../r
-:/^t16:/+1,/^t17/-1sort/./rn
-:/^t17:/+1,/^t18/-1sort/\d/
-:/^t18:/+1,/^t19/-1sort/\d/r
-:/^t19:/+1,/^t20/-1sort/\d/n
-:/^t20:/+1,/^t21/-1sort/\d/rn
-:/^t21:/+1,/^t22/-1sort/\d\d/
-:/^t22:/+1,/^t23/-1sort/\d\d/n
-:/^t23:/+1,/^t24/-1sort/\d\d/x
-:/^t24:/+1,/^t25/-1sort/\d\d/r
-:/^t25:/+1,/^t26/-1sort/\d\d/rn
-:/^t26:/+1,/^t27/-1sort/\d\d/rx
-:/^t27:/+1,/^t28/-1sort no
-:/^t28:/+1,/^t29/-1sort b
-:/^t29:/+1,/^t30/-1sort b
-:/^t30:/+1,/^t31/-1sort f
-:/^t01:/,$wq! test.out
-ENDTEST
-
-t01: alphebetical
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t02: numeric
-abc
-ab
-a321
-a123
-a122
-a
-x-22
-b321
-b123
-
-c123d
--24
- 123b
-c321d
-0
-b322b
-b321
-b321b
-
-
-t03: hexadecimal
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t04: alpha, unique
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t05: alpha, reverse
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t06: numeric, reverse
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t07: unique, reverse
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t08: octal
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t09: reverse, hexadecimal
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t10: alpha, skip first character
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t11: alpha, skip first 2 characters
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t12: alpha, unique, skip first 2 characters
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t13: numeric, skip first character
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t14: alpha, sort on first character
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t15: alpha, sort on first 2 characters
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t16: numeric, sort on first character
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t17: alpha, skip past first digit
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t18: alpha, sort on first digit
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t19: numeric, skip past first digit
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t20: numeric, sort on first digit
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t21: alpha, skip past first 2 digits
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t22: numeric, skip past first 2 digits
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t23: hexadecimal, skip past first 2 digits
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t24: alpha, sort on first 2 digits
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t25: numeric, sort on first 2 digits
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t26: hexadecimal, sort on first 2 digits
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t27: wrong arguments
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t28: binary
-0b111000
-0b101100
-0b101001
-0b101001
-0b101000
-0b000000
-0b001000
-0b010000
-0b101000
-0b100000
-0b101010
-0b100010
-0b100100
-0b100010
-
-
-t29: binary with leading characters
-0b100010
-0b010000
- 0b101001
-b0b101100
-0b100010
- 0b100100
-a0b001000
-0b101000
-0b101000
-a0b101001
-ab0b100000
-0b101010
-0b000000
-b0b111000
-
-
-t30: float
-1.234
-0.88
-123.456
-1.15e-6
--1.1e3
--1.01e3
-
-
-t31: done
deleted file mode 100644
--- a/src/testdir/test57.ok
+++ /dev/null
@@ -1,501 +0,0 @@
-t01: alphebetical
-
-
- 123b
-a
-a122
-a123
-a321
-ab
-abc
-b123
-b321
-b321
-b321b
-b322b
-c123d
-c321d
-t02: numeric
-abc
-ab
-a
-
-
-
--24
-x-22
-0
-a122
-a123
-b123
-c123d
- 123b
-a321
-b321
-c321d
-b321
-b321b
-b322b
-t03: hexadecimal
-
-
-a
-ab
-abc
- 123b
-a122
-a123
-a321
-b123
-b321
-b321
-b321b
-b322b
-c123d
-c321d
-t04: alpha, unique
-
- 123b
-a
-a122
-a123
-a321
-ab
-abc
-b123
-b321
-b321b
-b322b
-c123d
-c321d
-t05: alpha, reverse
-c321d
-c123d
-b322b
-b321b
-b321
-b321
-b123
-abc
-ab
-a321
-a123
-a122
-a
- 123b
-
-
-t06: numeric, reverse
-b322b
-b321b
-b321
-c321d
-b321
-a321
- 123b
-c123d
-b123
-a123
-a122
-
-
-a
-ab
-abc
-t07: unique, reverse
-c321d
-c123d
-b322b
-b321b
-b321
-b123
-abc
-ab
-a321
-a123
-a122
-a
- 123b
-
-t08: octal
-abc
-ab
-a
-
-
-a122
-a123
-b123
-c123d
- 123b
-a321
-b321
-c321d
-b321
-b321b
-b322b
-t09: reverse, hexadecimal
-c321d
-c123d
-b322b
-b321b
-b321
-b321
-b123
-a321
-a123
-a122
- 123b
-abc
-ab
-a
-
-
-t10: alpha, skip first character
-a
-
-
-a122
-a123
-b123
- 123b
-c123d
-a321
-b321
-b321
-b321b
-c321d
-b322b
-ab
-abc
-t11: alpha, skip first 2 characters
-ab
-a
-
-
-a321
-b321
-b321
-b321b
-c321d
-a122
-b322b
-a123
-b123
- 123b
-c123d
-abc
-t12: alpha, unique, skip first 2 characters
-ab
-a
-
-a321
-b321
-b321b
-c321d
-a122
-b322b
-a123
-b123
- 123b
-c123d
-abc
-t13: numeric, skip first character
-abc
-ab
-a
-
-
-a122
-a123
-b123
-c123d
- 123b
-a321
-b321
-c321d
-b321
-b321b
-b322b
-t14: alpha, sort on first character
-
-
- 123b
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-b322b
-b321
-b321b
-c123d
-c321d
-t15: alpha, sort on first 2 characters
-a
-
-
- 123b
-a123
-a122
-a321
-abc
-ab
-b123
-b321
-b322b
-b321
-b321b
-c123d
-c321d
-t16: numeric, sort on first character
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t17: alpha, skip past first digit
-abc
-ab
-a
-
-
-a321
-b321
-b321
-b321b
-c321d
-a122
-b322b
-a123
-b123
- 123b
-c123d
-t18: alpha, sort on first digit
-abc
-ab
-a
-
-
-a123
-a122
-b123
-c123d
- 123b
-a321
-b321
-c321d
-b322b
-b321
-b321b
-t19: numeric, skip past first digit
-abc
-ab
-a
-
-
-a321
-b321
-c321d
-b321
-b321b
-a122
-b322b
-a123
-b123
-c123d
- 123b
-t20: numeric, sort on first digit
-abc
-ab
-a
-
-
-a123
-a122
-b123
-c123d
- 123b
-a321
-b321
-c321d
-b322b
-b321
-b321b
-t21: alpha, skip past first 2 digits
-abc
-ab
-a
-
-
-a321
-b321
-b321
-b321b
-c321d
-a122
-b322b
-a123
-b123
- 123b
-c123d
-t22: numeric, skip past first 2 digits
-abc
-ab
-a
-
-
-a321
-b321
-c321d
-b321
-b321b
-a122
-b322b
-a123
-b123
-c123d
- 123b
-t23: hexadecimal, skip past first 2 digits
-abc
-ab
-a
-
-
-a321
-b321
-b321
-a122
-a123
-b123
-b321b
-c321d
-b322b
- 123b
-c123d
-t24: alpha, sort on first 2 digits
-abc
-ab
-a
-
-
-a123
-a122
-b123
-c123d
- 123b
-a321
-b321
-c321d
-b322b
-b321
-b321b
-t25: numeric, sort on first 2 digits
-abc
-ab
-a
-
-
-a123
-a122
-b123
-c123d
- 123b
-a321
-b321
-c321d
-b322b
-b321
-b321b
-t26: hexadecimal, sort on first 2 digits
-abc
-ab
-a
-
-
-a123
-a122
-b123
-c123d
- 123b
-a321
-b321
-c321d
-b322b
-b321
-b321b
-t27: wrong arguments
-abc
-ab
-a
-a321
-a123
-a122
-b321
-b123
-c123d
- 123b
-c321d
-b322b
-b321
-b321b
-
-
-t28: binary
-
-
-0b000000
-0b001000
-0b010000
-0b100000
-0b100010
-0b100010
-0b100100
-0b101000
-0b101000
-0b101001
-0b101001
-0b101010
-0b101100
-0b111000
-t29: binary with leading characters
-
-
-0b000000
-a0b001000
-0b010000
-ab0b100000
-0b100010
-0b100010
- 0b100100
-0b101000
-0b101000
- 0b101001
-a0b101001
-0b101010
-b0b101100
-b0b111000
-t30: float
-
-
--1.1e3
--1.01e3
-1.15e-6
-0.88
-1.234
-123.456
-t31: done
--- a/src/testdir/test_sort.vim
+++ b/src/testdir/test_sort.vim
@@ -44,3 +44,1141 @@ func Test_sort_default()
   call assert_equal(['2', 'A', 'a', 'AA', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], 1))
   call assert_fails('call sort([3.3, 1, "2"], 3)', "E474")
 endfunc
+
+" Tests for the :sort command
+func Test_sort_cmd()
+  let tests = [
+	\ {
+	\    'name' : 'Alphabetical sort',
+	\    'cmd' : '%sort',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ],
+	\    'expected' : [
+	\	' 123b',
+	\	'a',
+	\	'a122',
+	\	'a123',
+	\	'a321',
+	\	'ab',
+	\	'abc',
+	\	'b123',
+	\	'b321',
+	\	'b321',
+	\	'b321b',
+	\	'b322b',
+	\	'c123d',
+	\	'c321d'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Numeric sort',
+	\    'cmd' : '%sort n',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'a',
+	\	'x-22',
+	\	'b321',
+	\	'b123',
+	\	'',
+	\	'c123d',
+	\	'-24',
+	\	' 123b',
+	\	'c321d',
+	\	'0',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'-24',
+	\	'x-22',
+	\	'0',
+	\	'a122',
+	\	'a123',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b321',
+	\	'b321b',
+	\	'b322b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Hexadecimal sort',
+	\    'cmd' : '%sort x',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ],
+	\    'expected' : [
+	\	'a',
+	\	'ab',
+	\	'abc',
+	\	' 123b',
+	\	'a122',
+	\	'a123',
+	\	'a321',
+	\	'b123',
+	\	'b321',
+	\	'b321',
+	\	'b321b',
+	\	'b322b',
+	\	'c123d',
+	\	'c321d'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Alphabetical unique sort',
+	\    'cmd' : '%sort u',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ],
+	\    'expected' : [
+	\	' 123b',
+	\	'a',
+	\	'a122',
+	\	'a123',
+	\	'a321',
+	\	'ab',
+	\	'abc',
+	\	'b123',
+	\	'b321',
+	\	'b321b',
+	\	'b322b',
+	\	'c123d',
+	\	'c321d'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Alphabetical reverse sort',
+	\    'cmd' : '%sort!',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ],
+	\    'expected' : [
+	\	'c321d',
+	\	'c123d',
+	\	'b322b',
+	\	'b321b',
+	\	'b321',
+	\	'b321',
+	\	'b123',
+	\	'abc',
+	\	'ab',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'a',
+	\	' 123b',
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Numeric reverse sort',
+	\    'cmd' : '%sort! n',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ],
+	\    'expected' : [
+	\	'b322b',
+	\	'b321b',
+	\	'b321',
+	\	'c321d',
+	\	'b321',
+	\	'a321',
+	\	' 123b',
+	\	'c123d',
+	\	'b123',
+	\	'a123',
+	\	'a122',
+	\	'a',
+	\	'ab',
+	\	'abc'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Unique reverse sort',
+	\    'cmd' : 'sort! u',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ],
+	\    'expected' : [
+	\	'c321d',
+	\	'c123d',
+	\	'b322b',
+	\	'b321b',
+	\	'b321',
+	\	'b123',
+	\	'abc',
+	\	'ab',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'a',
+	\	' 123b',
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Octal sort',
+	\    'cmd' : 'sort o',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a122',
+	\	'a123',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b321',
+	\	'b321b',
+	\	'b322b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Reverse hexadecimal sort',
+	\    'cmd' : 'sort! x',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'c321d',
+	\	'c123d',
+	\	'b322b',
+	\	'b321b',
+	\	'b321',
+	\	'b321',
+	\	'b123',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	' 123b',
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	''
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Alpha (skip first character) sort',
+	\    'cmd' : 'sort/./',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'a',
+	\	'',
+	\	'',
+	\	'a122',
+	\	'a123',
+	\	'b123',
+	\	' 123b',
+	\	'c123d',
+	\	'a321',
+	\	'b321',
+	\	'b321',
+	\	'b321b',
+	\	'c321d',
+	\	'b322b',
+	\	'ab',
+	\	'abc'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'Alpha (skip first 2 characters) sort',
+	\    'cmd' : 'sort/../',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a321',
+	\	'b321',
+	\	'b321',
+	\	'b321b',
+	\	'c321d',
+	\	'a122',
+	\	'b322b',
+	\	'a123',
+	\	'b123',
+	\	' 123b',
+	\	'c123d',
+	\	'abc'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'alpha, unique, skip first 2 characters',
+	\    'cmd' : 'sort/../u',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'a321',
+	\	'b321',
+	\	'b321b',
+	\	'c321d',
+	\	'a122',
+	\	'b322b',
+	\	'a123',
+	\	'b123',
+	\	' 123b',
+	\	'c123d',
+	\	'abc'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'numeric, skip first character',
+	\    'cmd' : 'sort/./n',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a122',
+	\	'a123',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b321',
+	\	'b321b',
+	\	'b322b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'alpha, sort on first character',
+	\    'cmd' : 'sort/./r',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'',
+	\	'',
+	\	' 123b',
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'c123d',
+	\	'c321d'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'alpha, sort on first 2 characters',
+	\    'cmd' : 'sort/../r',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'a',
+	\	'',
+	\	'',
+	\	' 123b',
+	\	'a123',
+	\	'a122',
+	\	'a321',
+	\	'abc',
+	\	'ab',
+	\	'b123',
+	\	'b321',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'c123d',
+	\	'c321d'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'numeric, sort on first character',
+	\    'cmd' : 'sort/./rn',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'alpha, skip past first digit',
+	\    'cmd' : 'sort/\d/',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a321',
+	\	'b321',
+	\	'b321',
+	\	'b321b',
+	\	'c321d',
+	\	'a122',
+	\	'b322b',
+	\	'a123',
+	\	'b123',
+	\	' 123b',
+	\	'c123d'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'alpha, sort on first digit',
+	\    'cmd' : 'sort/\d/r',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a123',
+	\	'a122',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'numeric, skip past first digit',
+	\    'cmd' : 'sort/\d/n',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b321',
+	\	'b321b',
+	\	'a122',
+	\	'b322b',
+	\	'a123',
+	\	'b123',
+	\	'c123d',
+	\	' 123b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'numeric, sort on first digit',
+	\    'cmd' : 'sort/\d/rn',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a123',
+	\	'a122',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'alpha, skip past first 2 digits',
+	\    'cmd' : 'sort/\d\d/',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a321',
+	\	'b321',
+	\	'b321',
+	\	'b321b',
+	\	'c321d',
+	\	'a122',
+	\	'b322b',
+	\	'a123',
+	\	'b123',
+	\	' 123b',
+	\	'c123d'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'numeric, skip past first 2 digits',
+	\    'cmd' : 'sort/\d\d/n',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b321',
+	\	'b321b',
+	\	'a122',
+	\	'b322b',
+	\	'a123',
+	\	'b123',
+	\	'c123d',
+	\	' 123b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'hexadecimal, skip past first 2 digits',
+	\    'cmd' : 'sort/\d\d/x',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a321',
+	\	'b321',
+	\	'b321',
+	\	'a122',
+	\	'a123',
+	\	'b123',
+	\	'b321b',
+	\	'c321d',
+	\	'b322b',
+	\	' 123b',
+	\	'c123d'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'alpha, sort on first 2 digits',
+	\    'cmd' : 'sort/\d\d/r',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a123',
+	\	'a122',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'numeric, sort on first 2 digits',
+	\    'cmd' : 'sort/\d\d/rn',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a123',
+	\	'a122',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'hexadecimal, sort on first 2 digits',
+	\    'cmd' : 'sort/\d\d/rx',
+	\    'input' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'a321',
+	\	'a123',
+	\	'a122',
+	\	'b321',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'abc',
+	\	'ab',
+	\	'a',
+	\	'',
+	\	'',
+	\	'a123',
+	\	'a122',
+	\	'b123',
+	\	'c123d',
+	\	' 123b',
+	\	'a321',
+	\	'b321',
+	\	'c321d',
+	\	'b322b',
+	\	'b321',
+	\	'b321b'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'binary',
+	\    'cmd' : 'sort b',
+	\    'input' : [
+	\	'0b111000',
+	\	'0b101100',
+	\	'0b101001',
+	\	'0b101001',
+	\	'0b101000',
+	\	'0b000000',
+	\	'0b001000',
+	\	'0b010000',
+	\	'0b101000',
+	\	'0b100000',
+	\	'0b101010',
+	\	'0b100010',
+	\	'0b100100',
+	\	'0b100010',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'',
+	\	'',
+	\	'0b000000',
+	\	'0b001000',
+	\	'0b010000',
+	\	'0b100000',
+	\	'0b100010',
+	\	'0b100010',
+	\	'0b100100',
+	\	'0b101000',
+	\	'0b101000',
+	\	'0b101001',
+	\	'0b101001',
+	\	'0b101010',
+	\	'0b101100',
+	\	'0b111000'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'binary with leading characters',
+	\    'cmd' : 'sort b',
+	\    'input' : [
+	\	'0b100010',
+	\	'0b010000',
+	\	' 0b101001',
+	\	'b0b101100',
+	\	'0b100010',
+	\	' 0b100100',
+	\	'a0b001000',
+	\	'0b101000',
+	\	'0b101000',
+	\	'a0b101001',
+	\	'ab0b100000',
+	\	'0b101010',
+	\	'0b000000',
+	\	'b0b111000',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'',
+	\	'',
+	\	'0b000000',
+	\	'a0b001000',
+	\	'0b010000',
+	\	'ab0b100000',
+	\	'0b100010',
+	\	'0b100010',
+	\	' 0b100100',
+	\	'0b101000',
+	\	'0b101000',
+	\	' 0b101001',
+	\	'a0b101001',
+	\	'0b101010',
+	\	'b0b101100',
+	\	'b0b111000'
+	\    ]
+	\ },
+	\ {
+	\    'name' : 'float',
+	\    'cmd' : 'sort f',
+	\    'input' : [
+	\	'1.234',
+	\	'0.88',
+	\	'123.456',
+	\	'1.15e-6',
+	\	'-1.1e3',
+	\	'-1.01e3',
+	\	'',
+	\	''
+	\    ],
+	\    'expected' : [
+	\	'',
+	\	'',
+	\	'-1.1e3',
+	\	'-1.01e3',
+	\	'1.15e-6',
+	\	'0.88',
+	\	'1.234',
+	\	'123.456'
+	\    ]
+	\ }
+	\ ]
+
+  for t in tests
+    enew!
+    call append(0, t.input)
+    $delete _
+    exe t.cmd
+    call assert_equal(t.expected, getline(1, '$'), t.name)
+  endfor
+
+  call assert_fails('sort no', 'E474')
+
+  enew!
+endfunc
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -1421,6 +1421,26 @@ func Test_user_command_with_bang()
     delcommand Nieuw
 endfunc
 
+" Test for script-local function
+func <SID>DoLast()
+  call append(line('$'), "last line")
+endfunc
+
+func s:DoNothing()
+  call append(line('$'), "nothing line")
+endfunc
+
+func Test_script_local_func()
+  set nocp viminfo+=nviminfo
+  new
+  nnoremap <buffer> _x	:call <SID>DoNothing()<bar>call <SID>DoLast()<bar>delfunc <SID>DoNothing<bar>delfunc <SID>DoLast<cr>
+
+  normal _x
+  call assert_equal('nothing line', getline(2))
+  call assert_equal('last line', getline(3))
+  enew! | close
+endfunc
+
 "-------------------------------------------------------------------------------
 " Modelines								    {{{1
 " vim: ts=8 sw=4 tw=80 fdm=marker
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1140,
+/**/
     1139,
 /**/
     1138,