Commits

ZyX_I committed 9bef657

@frawor: Removed twoload functionality

Comments (0)

Files changed (341)

autoload/frawor.vim

 endfunction
 let s:_functions+=['s:Eval']
 "▶1 frawor#Setup      :: version, dependencies[, oneload] → vimlstr
-function frawor#Setup(version, dependencies, ...)
+function frawor#Setup(version, dependencies)
     if type(a:version)==type('')
         let ver=map(split(a:version, '\.'), '+v:val')
     else
                 \   '(map(split(v:val, "\\."), "+v:val")):'.
                 \   '(v:val))')
     let dstr=substitute(string(deps), "\n", '''."\\n".''', 'g')
-    let oneload=((a:0)?(a:1 isnot 0):(1))
     return       "if !exists('s:_pluginloaded')\n"
                 \."    execute \"function s:Eval(expr)\\n"
                 \.              "    return eval(a:expr)\\n"
                 \."    let s:F={}\n"
                 \."    let s:_functions=['s:Eval']\n"
                 \."    call FraworRegister(".string(ver).", "
-                \.                               "s:_sid, s:_sfile, ".dstr.", "
-                \.                                oneload.", s:)\n"
+                \.                        "s:_sid, s:_sfile, ".dstr.", s:)\n"
                 \."elseif s:_pluginloaded\n"
                 \."    finish\n"
                 \."endif\n"
     runtime! plugin/frawor.vim
 endif
 call FraworRegister([0, 0], s:Eval('+matchstr(expand("<sfile>"), ''\d\+'')'),
-            \       expand('<sfile>:p'), {}, 1, s:)
+            \       expand('<sfile>:p'), {}, s:)
 "▶1
 call frawor#Lockvar(s:, '')
 " vim: fmr=▶,▲ sw=4 ts=4 sts=4 et tw=80
 2.1. Functions                                              *frawor-functions*
 
                                                             *FraworRegister()*
-FraworRegister({version}, {sid}, {file}, {dependencies}, {oneload}, {g})
+FraworRegister({version}, {sid}, {file}, {dependencies}, {g})
         Registers plugin sourced from {file} that has given {version} (see 
-        |frawor-t-version|; {version} must have at least two components). If 
-        {oneload} is true, then plugin is considered loaded when it is 
-        registered, otherwise it will be sourced for the second time when 
-        required. {dependencies} argument is a dictionary that contains pairs 
+        |frawor-t-version|; {version} must have at least two components). 
+        {dependencies} argument is a dictionary that contains pairs 
         {{depplid}: {depversion}} where each {depversion} must have at least 
         one component. {g} argument must contain dictionary with script-local 
         variable (s:, see |internal-variables|, a paragraph just after a list 
         type         First component of plugin file path that is not part of 
                      runtimepath (or `/unknown' if frawor failed to detect 
                      it).
-        It sets s:_pluginloaded to 1 for oneload plugins and 0 for other. Also 
-        see |s:_loading|.
+        It sets s:_pluginloaded to 1.
                                                        *frawor-plid-expansion*
         If some key in {dependencies} dictionary starts with `@', then it is 
         transformed:
         you may use s:_sfile variable to tell frawor what should be sourced to 
         load plugin.
 
-frawor#Setup({version}, {dependencies}, {oneload})            *frawor#Setup()*
+frawor#Setup({version}, {dependencies})                       *frawor#Setup()*
         If |:execute|d, does some common setup:
         1. If {version} or some value in {dependencies} is a dot-separated 
            list of numbers, then it is transformed into |List| of |Number|s. 
         4. Creates s:_sid variable containing your plugin script id.
         5. If s:_sfile variable does not exist, sets it to plugin filename.
         6. Calls |FraworRegister()|, passing it transformed {version}, s:_sid, 
-           s:_sfile, transformed {dependencies}, {oneload} and s:.
+           s:_sfile, transformed {dependencies} and s:.
         Example: >
-            execute frawor#Setup([0, 0], {"@frawor": [0, 0]}, 0)
+            execute frawor#Setup([0, 0], {"@frawor": [0, 0]})
 <       You may replace [0, 0] here with "0.0", but remember that it is 
         frawor#Setup extension, it won't work with FraworRegister.
         Note: you must |:execute| frawor#Setup, not |:call| it.
                    will be ignored for plugins that do not specify feature 
                    definer in dependencies.
 
+        Sequence in which feature keys are used:
+        0. Loading all dependencies.
+        1. (In case using |frawor-f-require|) running |frawor-fk-depadd|.
+        2. Populating feature dictionary using |frawor-fk-init|.
+        3. Running |frawor-fk-register|.
+        4. Constructing functions from |frawor-fk-cons|.
+        5. Running |frawor-fk-load|.
+        6. (While unloading) running |frawor-fk-unloadpre|.
+        7. (While unloading) unloading dependencies and the plugin itself, 
+           |frawor-fk-unload| is called just before unloading of each plugin, 
+           |s:_unload| just after |frawor-fk-unload|.
+
 ------------------------------------------------------------------------------
 3.2. @/functions features                               *frawor-f-@/functions*
 
         isfiletype    Bool, true if plugin is devoted to some filetype 
                       (determined by chekcing whether plugin id starts with 
                       ftplugin/, syntax/ or indent/).
-        oneload       Bool, true if plugin should be loaded only once.
         file          Path to plugin file ({file} argument to 
                       |FraworRegister()| for non-anonymous plugins, |s:_sfile| 
                       or 0 for anonymous plugins).
 *s:_pluginloaded*  @frawor          Integer. Is set to 0 after plugin is 
                                   registered and then to 1 after plugin is 
                                   loaded.
-*s:_loading*       @frawor          Integer. Is set to 1 when frawor started 
-                                  to load non-oneload plugin and unset after 
-                                  plugin was loaded.
 *s:_frawor*        @frawor          Dictionary. Is set by |FraworRegister()|.
 *s:_messages*      @frawor          Dictionary that contains strings as 
                                   values. Required for |frawor-f-warn| and 
 
 @frawor:
     0.1: Added |frawor-f-require| and |frawor-fk-depadd|
-    0.2: Added |s:_loading| variable
+    0.2: Added s:_loading variable
     0.3: Added isftplugin key to |frawor-t-plugdict|,
          adjusted the way plugin type is determined.
+    1.0: Removed twoload feature and s:_loading variable.
 @/mappings:
     0.1: Added possibility to specify dictionaries in `strfunc' and `func' 
          keys.

plugin/frawor.vim

                     \   '0)')
     endif
 endfunction
-"▶1 newplugin       :: version, sid, file, dependencies, oneload, g → +s:pls,
+"▶1 newplugin       :: version, sid, file, dependencies, g → +s:pls,
 let s:ftplugtypes=['ftplugin', 'syntax', 'indent']
-function s:F.newplugin(version, sid, file, dependencies, oneload, g)
+function s:F.newplugin(version, sid, file, dependencies, g)
     "▶2 Checking whether a:file is a string
     if type(a:file)!=type('')
         call s:_f.throw('filenotstr')
                 \  'runtimepath': plrtp,
                 \      'version': plversion,
                 \   'isftplugin': index(s:ftplugtypes, plugtype)!=-1,
-                \      'oneload': !!a:oneload,
                 \         'file': ((a:version is 0)?(get(a:g, '_sfile', 0)):
                 \                                   (a:file)),
                 \          'sid': a:sid,
     call s:F.updatedeplen(plid, s:deplen[plid], {})
     call s:F.initfeatures(plugdict)
     let plugdict.g._pluginloaded=0
-    if a:oneload
-        call s:F.loadplugin(plugdict)
-    else
-        call s:F.addcons(plugdict)
-    endif
+    call s:F.loadplugin(plugdict)
 endfunction
 "▶1 addfeature      :: plugdict, feature(ircl)[, load] → + shadowdict
 function s:F.addfeature(plugdict, feature, ...)
     if plugdict.status!=2
         let shadowdict=s:shadow[plugdict.id]
         let s:loading[plid]=1
-        let plugdict.g._loading=1
         let d={}
         try
             let olddeplen=s:deplen[plid]
                 call s:F.addfeature(plugdict, feature, 1)
             endfor
             "▲2
-            if !plugdict.oneload
-                execute 'source '.fnameescape(plugdict.file)
-            endif
             if s:deplen[plid]>olddeplen
                 call s:F.updatedeplen(plid, s:deplen[plid], {})
             endif
             endif
             "▲2
         finally
-            unlet plugdict.g._loading
             unlet s:loading[plid]
         endtry
     endif
 let s:features[s:newfeature.id]=s:newfeature
 let s:featordered.all+=[s:newfeature]
 "▶1 Plugin registration
-call s:F.newplugin([0, 3], s:Eval('+matchstr(expand("<sfile>"), ''\d\+'')'),
-            \      expand('<sfile>:p'), {}, 1, s:)
+call s:F.newplugin([1, 0], s:Eval('+matchstr(expand("<sfile>"), ''\d\+'')'),
+            \      expand('<sfile>:p'), {}, s:)
 let s:shadow[s:_frawor.id].features.newfeature.newfeature=s:newfeature
 unlet s:newfeature
 "▶1 warn feature    :: {f}, msgid, … + p:_messages → message + echomsg

test/augroup-twoload.in

-:let &rtp.=",".escape($TESTDIR, ',\').'/rtp'
-:let g:testfile="plugin/".g:curtest.".vim"
-:let g:testcmd='runtime'
-:source test.vim
-:new abc
-:new def
-:bwipeout abc
-:bwipeout def
-:call FraworUnload(g:testfile[:-5])
-:source test.vim
-:new abc
-:new def
-:bwipeout abc
-:bwipeout def

test/augroup-twoload.ok

-entered %TMPDIR%/test/abc
-wiped %TMPDIR%/test/abc
-wiped %TMPDIR%/test/def
-entered %TMPDIR%/test/abc
-wiped %TMPDIR%/test/abc
-wiped %TMPDIR%/test/def

test/commands-completion-twoload.in

-:let &rtp.=",".escape($TESTDIR, ',\').'/rtp'
-:let g:testfile="plugin/".g:curtest.".vim"
-:source test.vim
-:set wc=<Tab> wcm=<Tab>
-:Abc a	
-:Def g	
-:call FraworUnload(g:testfile[:-5])
-:source test.vim
-:Abc b	
-:Def d	

test/commands-completion-twoload.ok

->>> messages
-First load
-Second load
-<<< messages
-aa
-ghi
->>> messages
-First load
-Second load
-<<< messages
-bb
-def

test/commands-twoload.in

-:let &rtp.=",".escape($TESTDIR, ',\').'/rtp'
-:let g:testfile="plugin/".g:curtest.".vim"
-:source test.vim
-:Abc
-:call FraworUnload(g:testfile[:-5])
-:source test.vim
-:Abc

test/commands-twoload.ok

-$ Abc
-$ Abc
-$ Abc
-$ Abc

test/double-load.in

-:let &rtp.=",".escape($TESTDIR, ',\').'/rtp'
-:let g:testfile="plugin/double-load.2.vim"
-:source test.vim
-:call FraworUnload(g:testfile[:-5])
-:source test.vim

test/double-load.ok

-registered plugin/double-load.2
-features: newfeature require throw warn
-registered plugin/double-load
-features: newfeature require throw warn
-feature-load: plugin/double-load
-loaded plugin/double-load
-features: newfeature require testfeature throw warn
-loaded plugin/double-load.2
-features: doublefeature newfeature require throw warn
-registered plugin/double-load.2
-features: doublefeature newfeature require throw warn
-loaded plugin/double-load.2
-features: doublefeature newfeature require throw warn

test/fwccompletetests-withredir.dat

   @#R
   frawor#Reload
 
+\function FraworTest(a, b, ...)
+:endfunction
 `run [1 2 3]
-  @f
-  frawor#Setup
+  @FT
+  FraworTest
 
 `run [1 2 3 4 5 6 7 8]
   @p

test/gentests-mappings.pl

 @@@
 :W> 2
 :wincmd w
-:W+ twoload
-:runtime! plugin/mappings-twoload.vim
+:W+ 2
+:runtime! plugin/mappings-2.vim
 @@@
 :W> 1
 :wincmd w
 :W> 2
 :wincmd w
 :W* unload
-:let tosource=FraworUnload(g:testfile[:-5])+FraworUnload('plugin/mappings-twoload')
+:let tosource=FraworUnload(g:testfile[:-5])+FraworUnload('plugin/mappings-2')
 @@@
 :W> 1
 :wincmd w

test/gwine/augroup-twoload.ok

-entered %TMPDIR%/test/abc
-wiped %TMPDIR%/test/abc
-wiped %TMPDIR%/test/def
-entered %TMPDIR%/test/abc
-wiped %TMPDIR%/test/abc
-wiped %TMPDIR%/test/def

test/intrtp/plugin/lua.vim

-execute frawor#Setup('0.0', {'@/lua': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/lua': '0.0'})
 if has("lua")
     lua require"xxxtest"
     lua xxxtest.WriteFile("lua-test")

test/intrtp/plugin/perl.vim

-execute frawor#Setup('0.0', {'@/perl': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/perl': '0.0'})
 if has("perl")
     perl use XXXTest;
     perl XXXTest::WriteFile("perl-test");

test/intrtp/plugin/python.vim

-execute frawor#Setup('0.0', {'@/python': '1.0'}, 1)
+execute frawor#Setup('0.0', {'@/python': '1.0'})
 if has('python')
     python import xxxtest
     python xxxtest.WriteFile('python-test')

test/intrtp/plugin/python3.vim

-execute frawor#Setup('0.0', {'@/python': '1.0'}, 1)
+execute frawor#Setup('0.0', {'@/python': '1.0'})
 if has('python3')
     python3 import xxxtest
     python3 xxxtest.WriteFile('python3-test')

test/intrtp/plugin/ruby.vim

-execute frawor#Setup('0.0', {'@/ruby': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/ruby': '0.0'})
 if has("ruby")
     ruby require "xxxtest.rb"
     ruby XXXTest::WriteFile("ruby-test")

test/intrtp/plugin/tcl.vim

-execute frawor#Setup('0.0', {'@/tcl': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/tcl': '0.0'})
 if has("tcl")
     tcl package require xxxtest 0.0
     tcl xxxtest::WriteFile "tcl-test"

test/mappings-func-twoload.in

-:let &rtp.=",".escape($TESTDIR, ',\').'/rtp'
-:let g:testfile="plugin/".g:curtest.".vim"
-:source test.vim
-ab
-:call FraworUnload(g:testfile[:-5])
-:source test.vim
-ba
-:call FraworUnload(g:testfile[:-5])
-:source test.vim
-a
-:call FraworUnload(g:testfile[:-5])
-:source test.vim
-b

test/mappings-func-twoload.ok

-alpha: ('a')
-beta: ('b')
-beta: ('b')
-alpha: ('a')
-alpha: ('a')
-beta: ('b')
 =zeta!
 =g!
 > 2
-+ twoload
++ 2
 args: ('"ap', 'n', ['def'], 'Mgroup3', 'iota', ['abc'])
 h
 args: ()

test/require-feature-twoload-after-registration.in

-:let &rtp.=",".escape($TESTDIR, ',\').'/rtp'
-:let g:testfile="plugin/".g:curtest.".vim"
-:source test.vim
-:call FraworUnload(g:testfile[:-5])
-:source test.vim

test/require-feature-twoload-after-registration.ok

-newfeature
-require
-throw
-warn
-Entered s:F.main()
-Registered plugin/twoload-plugin-with-feature-2
-Has run :runtime
-Registered plugin/twoload-plugin-with-feature-3
-Loaded plugin/twoload-plugin-with-feature-3
-Has run FraworLoad
-Registered plugin/twoload-plugin-with-feature-after-registration-2
-Has run :runtime 2
-Registered plugin/twoload-plugin-with-feature-after-registration-3
-Loaded plugin/twoload-plugin-with-feature-after-registration-3
-Has run FraworLoad 2
-Registered plugin/twoload-plugin-with-feature-1
-Loaded plugin/twoload-plugin-with-feature-1
-feature-register: plugin/twoload-plugin-with-feature-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
-require tpwf1: 1
-Loaded plugin/twoload-plugin-with-feature-2
-feature-register: plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
-require tpwf2: 1
-feature-register: plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
-require tpwf3: 1
-Registered plugin/twoload-plugin-with-feature-after-registration-1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-1
-Loaded plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
-require tpwfar1: 1
-Loaded plugin/twoload-plugin-with-feature-after-registration-2
-feature-register: plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
-require tpwfar2: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
-require tpwfar3: 1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
-require pwf: 1
-newfeature
-require
-testfeature
-throw
-warn
-feature-load: plugin/require-feature-twoload-after-registration
-feature-load: plugin/twoload-plugin-with-feature-1
-feature-load: plugin/twoload-plugin-with-feature-2
-feature-load: plugin/twoload-plugin-with-feature-3
-feature-load: plugin/twoload-plugin-with-feature-after-registration-1
-feature-load: plugin/twoload-plugin-with-feature-after-registration-2
-feature-load: plugin/twoload-plugin-with-feature-after-registration-3
-Loaded plugin/require-feature-twoload-after-registration
-feature-unloadpre: plugin/twoload-plugin-with-feature-1
-feature-unloadpre: plugin/twoload-plugin-with-feature-2
-feature-unloadpre: plugin/twoload-plugin-with-feature-3
-feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-1
-feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-2
-feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-3
-feature-unload: plugin/twoload-plugin-with-feature-1
-feature-unload: plugin/twoload-plugin-with-feature-2
-feature-unload: plugin/twoload-plugin-with-feature-3
-feature-unload: plugin/twoload-plugin-with-feature-after-registration-1
-feature-unload: plugin/twoload-plugin-with-feature-after-registration-2
-feature-unload: plugin/twoload-plugin-with-feature-after-registration-3
-newfeature
-require
-throw
-warn
-Entered s:F.main()
-Has run :runtime
-Has run FraworLoad
-Has run :runtime 2
-Has run FraworLoad 2
-feature-register: plugin/twoload-plugin-with-feature-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
-require tpwf1: 1
-feature-register: plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
-require tpwf2: 1
-feature-register: plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
-require tpwf3: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
-require tpwfar1: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
-require tpwfar2: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
-require tpwfar3: 1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
-require pwf: 1
-newfeature
-require
-testfeature
-throw
-warn
-feature-load: plugin/require-feature-twoload-after-registration
-feature-load: plugin/twoload-plugin-with-feature-1
-feature-load: plugin/twoload-plugin-with-feature-2
-feature-load: plugin/twoload-plugin-with-feature-3
-feature-load: plugin/twoload-plugin-with-feature-after-registration-1
-feature-load: plugin/twoload-plugin-with-feature-after-registration-2
-feature-load: plugin/twoload-plugin-with-feature-after-registration-3
-Loaded plugin/require-feature-twoload-after-registration

test/require-feature-twoload.in

-:let &rtp.=",".escape($TESTDIR, ',\').'/rtp'
-:let g:testfile="plugin/".g:curtest.".vim"
-:source test.vim
-:call FraworUnload(g:testfile[:-5])
-:source test.vim

test/require-feature-twoload.ok

-newfeature
-require
-throw
-warn
-Entered s:F.main()
-Registered plugin/twoload-plugin-with-feature-2
-Has run :runtime
-Registered plugin/twoload-plugin-with-feature-3
-Loaded plugin/twoload-plugin-with-feature-3
-Has run FraworLoad
-Registered plugin/twoload-plugin-with-feature-after-registration-2
-Has run :runtime 2
-Registered plugin/twoload-plugin-with-feature-after-registration-3
-Loaded plugin/twoload-plugin-with-feature-after-registration-3
-Has run FraworLoad 2
-Registered plugin/twoload-plugin-with-feature-1
-Loaded plugin/twoload-plugin-with-feature-1
-feature-register: plugin/twoload-plugin-with-feature-1
-feature-load: plugin/twoload-plugin-with-feature-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
-require tpwf1: 1
-Loaded plugin/twoload-plugin-with-feature-2
-feature-register: plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
-require tpwf2: 1
-feature-register: plugin/twoload-plugin-with-feature-3
-feature-load: plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
-require tpwf3: 1
-Registered plugin/twoload-plugin-with-feature-after-registration-1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-1
-Loaded plugin/twoload-plugin-with-feature-after-registration-1
-feature-load: plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
-require tpwfar1: 1
-Loaded plugin/twoload-plugin-with-feature-after-registration-2
-feature-register: plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
-require tpwfar2: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-3
-feature-load: plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
-require tpwfar3: 1
-feature-load: plugin/require-feature-twoload
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
-require pwf: 1
-newfeature
-require
-testfeature
-throw
-warn
-Loaded plugin/require-feature-twoload
-feature-unloadpre: plugin/twoload-plugin-with-feature-1
-feature-unloadpre: plugin/twoload-plugin-with-feature-2
-feature-unloadpre: plugin/twoload-plugin-with-feature-3
-feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-1
-feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-2
-feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-3
-feature-unload: plugin/twoload-plugin-with-feature-1
-feature-unload: plugin/twoload-plugin-with-feature-2
-feature-unload: plugin/twoload-plugin-with-feature-3
-feature-unload: plugin/twoload-plugin-with-feature-after-registration-1
-feature-unload: plugin/twoload-plugin-with-feature-after-registration-2
-feature-unload: plugin/twoload-plugin-with-feature-after-registration-3
-newfeature
-require
-throw
-warn
-Entered s:F.main()
-Has run :runtime
-Has run FraworLoad
-Has run :runtime 2
-Has run FraworLoad 2
-feature-register: plugin/twoload-plugin-with-feature-1
-feature-load: plugin/twoload-plugin-with-feature-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
-require tpwf1: 1
-feature-register: plugin/twoload-plugin-with-feature-2
-feature-load: plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
-require tpwf2: 1
-feature-register: plugin/twoload-plugin-with-feature-3
-feature-load: plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
-require tpwf3: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-1
-feature-load: plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
-require tpwfar1: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-2
-feature-load: plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
-require tpwfar2: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-3
-feature-load: plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
-require tpwfar3: 1
-feature-load: plugin/require-feature-twoload
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
-require pwf: 1
-newfeature
-require
-testfeature
-throw
-warn
-Loaded plugin/require-feature-twoload

test/require-feature.ok

+Registered plugin/plugin-with-feature-4
+feature-register: plugin/plugin-with-feature-4
+Loaded plugin/plugin-with-feature-4
+feature-load: plugin/plugin-with-feature-4
 newfeature
 require
 throw
 warn
 Entered s:F.main()
-Registered plugin/twoload-plugin-with-feature-2
+Registered plugin/plugin-with-feature-2
+Loaded plugin/plugin-with-feature-2
 Has run :runtime
-Registered plugin/twoload-plugin-with-feature-3
-Loaded plugin/twoload-plugin-with-feature-3
+Registered plugin/plugin-with-feature-3
+Loaded plugin/plugin-with-feature-3
 Has run FraworLoad
-Registered plugin/twoload-plugin-with-feature-after-registration-2
-Has run :runtime 2
-Registered plugin/twoload-plugin-with-feature-after-registration-3
-Loaded plugin/twoload-plugin-with-feature-after-registration-3
-Has run FraworLoad 2
-Registered plugin/twoload-plugin-with-feature-1
-Loaded plugin/twoload-plugin-with-feature-1
-feature-register: plugin/twoload-plugin-with-feature-1
-feature-load: plugin/twoload-plugin-with-feature-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
-require tpwf1: 1
-Loaded plugin/twoload-plugin-with-feature-2
-feature-register: plugin/twoload-plugin-with-feature-2
-feature-load: plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
-require tpwf2: 1
-feature-register: plugin/twoload-plugin-with-feature-3
-feature-load: plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
-require tpwf3: 1
-Registered plugin/twoload-plugin-with-feature-after-registration-1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-1
-feature-load: plugin/twoload-plugin-with-feature-after-registration-1
-Loaded plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
-require tpwfar1: 1
-Loaded plugin/twoload-plugin-with-feature-after-registration-2
-feature-register: plugin/twoload-plugin-with-feature-after-registration-2
-feature-load: plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
-require tpwfar2: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-3
-feature-load: plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
-require tpwfar3: 1
+Registered plugin/plugin-with-feature-1
+feature-register: plugin/plugin-with-feature-1
+feature-load: plugin/plugin-with-feature-1
+Loaded plugin/plugin-with-feature-1
+feature-depadd: plugin/plugin-with-feature-1 plugin/plugin-with-feature-1
+feature-depadd: plugin/plugin-with-feature-4 plugin/plugin-with-feature-1
+require pwf1: 1
+feature-register: plugin/plugin-with-feature-2
+feature-load: plugin/plugin-with-feature-2
+feature-depadd: plugin/plugin-with-feature-1 plugin/plugin-with-feature-2
+feature-depadd: plugin/plugin-with-feature-2 plugin/plugin-with-feature-2
+feature-depadd: plugin/plugin-with-feature-4 plugin/plugin-with-feature-2
+require pwf2: 1
+feature-register: plugin/plugin-with-feature-3
+feature-load: plugin/plugin-with-feature-3
+feature-depadd: plugin/plugin-with-feature-1 plugin/plugin-with-feature-3
+feature-depadd: plugin/plugin-with-feature-2 plugin/plugin-with-feature-3
+feature-depadd: plugin/plugin-with-feature-3 plugin/plugin-with-feature-3
+feature-depadd: plugin/plugin-with-feature-4 plugin/plugin-with-feature-3
+require pwf3: 1
+require pwf4: 2
 feature-load: plugin/require-feature
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
+feature-depadd: plugin/plugin-with-feature-1 plugin/plugin-with-feature
+feature-depadd: plugin/plugin-with-feature-2 plugin/plugin-with-feature
+feature-depadd: plugin/plugin-with-feature-3 plugin/plugin-with-feature
+feature-depadd: plugin/plugin-with-feature-4 plugin/plugin-with-feature
 require pwf: 1
 newfeature
 require
 warn
 require xup: 0
 plugin/frawor:reqfailed
-feature-unloadpre: plugin/twoload-plugin-with-feature-1
-feature-unloadpre: plugin/twoload-plugin-with-feature-2
-feature-unloadpre: plugin/twoload-plugin-with-feature-3
-feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-1
-feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-2
-feature-unloadpre: plugin/twoload-plugin-with-feature-after-registration-3
-feature-unload: plugin/twoload-plugin-with-feature-1
-feature-unload: plugin/twoload-plugin-with-feature-2
-feature-unload: plugin/twoload-plugin-with-feature-3
-feature-unload: plugin/twoload-plugin-with-feature-after-registration-1
-feature-unload: plugin/twoload-plugin-with-feature-after-registration-2
-feature-unload: plugin/twoload-plugin-with-feature-after-registration-3
+feature-unloadpre: plugin/plugin-with-feature-1
+feature-unloadpre: plugin/plugin-with-feature-2
+feature-unloadpre: plugin/plugin-with-feature-3
+feature-unloadpre: plugin/plugin-with-feature-4
+feature-unload: plugin/plugin-with-feature-1
+feature-unload: plugin/plugin-with-feature-2
+feature-unload: plugin/plugin-with-feature-3
+feature-unload: plugin/plugin-with-feature-4
+feature-register: plugin/plugin-with-feature-4
+feature-load: plugin/plugin-with-feature-4
 newfeature
 require
 throw
 Entered s:F.main()
 Has run :runtime
 Has run FraworLoad
-Has run :runtime 2
-Has run FraworLoad 2
-feature-register: plugin/twoload-plugin-with-feature-1
-feature-load: plugin/twoload-plugin-with-feature-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-1
-require tpwf1: 1
-feature-register: plugin/twoload-plugin-with-feature-2
-feature-load: plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-2
-require tpwf2: 1
-feature-register: plugin/twoload-plugin-with-feature-3
-feature-load: plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-3
-require tpwf3: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-1
-feature-load: plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-1
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-1
-require tpwfar1: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-2
-feature-load: plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-2
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-2
-require tpwfar2: 1
-feature-register: plugin/twoload-plugin-with-feature-after-registration-3
-feature-load: plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/twoload-plugin-with-feature-after-registration-3
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/twoload-plugin-with-feature-after-registration-3
-require tpwfar3: 1
+feature-register: plugin/plugin-with-feature-1
+feature-load: plugin/plugin-with-feature-1
+feature-depadd: plugin/plugin-with-feature-1 plugin/plugin-with-feature-1
+feature-depadd: plugin/plugin-with-feature-4 plugin/plugin-with-feature-1
+require pwf1: 1
+feature-register: plugin/plugin-with-feature-2
+feature-load: plugin/plugin-with-feature-2
+feature-depadd: plugin/plugin-with-feature-1 plugin/plugin-with-feature-2
+feature-depadd: plugin/plugin-with-feature-2 plugin/plugin-with-feature-2
+feature-depadd: plugin/plugin-with-feature-4 plugin/plugin-with-feature-2
+require pwf2: 1
+feature-register: plugin/plugin-with-feature-3
+feature-load: plugin/plugin-with-feature-3
+feature-depadd: plugin/plugin-with-feature-1 plugin/plugin-with-feature-3
+feature-depadd: plugin/plugin-with-feature-2 plugin/plugin-with-feature-3
+feature-depadd: plugin/plugin-with-feature-3 plugin/plugin-with-feature-3
+feature-depadd: plugin/plugin-with-feature-4 plugin/plugin-with-feature-3
+require pwf3: 1
+require pwf4: 2
 feature-load: plugin/require-feature
-feature-depadd: plugin/twoload-plugin-with-feature-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-3 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-1 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-2 plugin/plugin-with-feature
-feature-depadd: plugin/twoload-plugin-with-feature-after-registration-3 plugin/plugin-with-feature
+feature-depadd: plugin/plugin-with-feature-1 plugin/plugin-with-feature
+feature-depadd: plugin/plugin-with-feature-2 plugin/plugin-with-feature
+feature-depadd: plugin/plugin-with-feature-3 plugin/plugin-with-feature
+feature-depadd: plugin/plugin-with-feature-4 plugin/plugin-with-feature
 require pwf: 1
 newfeature
 require

test/rtp/autoload/exptest.vim

-execute frawor#Setup('0.0', {}, 1)
+execute frawor#Setup('0.0', {})
 call WriteFile('autoload/exptest')

test/rtp/ftplugin/exptest.vim

-execute frawor#Setup('0.0', {}, 1)
+execute frawor#Setup('0.0', {})
 call WriteFile('ftplugin/exptest')
 

test/rtp/ftplugin/test.vim

 execute frawor#Setup('0.0', {'@/mappings': '0.0',
-            \                '@/commands': '0.0',}, 1)
+            \                '@/commands': '0.0',})
 call s:_f.mapgroup.add('FtGroup', {'test': {'expr': 1, 'lhs': 'a', 'rhs': 'WriteFile("a")'}})
 call s:_f.command.add('FtWrite', 'execute "W In buffer ".bufnr("%").":".&ft', {})
 autocmd BufNewFile test setlocal ft=test

test/rtp/plugin/add-buffer-mappings.vim

-execute frawor#Setup('0.0', {'autoload/frawor/mappings': '0.0'}, 1)
+execute frawor#Setup('0.0', {'autoload/frawor/mappings': '0.0'})
 W+ test
 call s:_f.mapgroup.add('Buffer', {'test': {'rhs': ":W test\n", 'lhs': "a"}},
             \                    {'buffer': 1, 'mode': 'n'})

test/rtp/plugin/adddecorator.vim

             \              '@adddecorator': '0.0',
             \               '@/decorators': '0.0',
             \     '@/decorators/altervars': '0.0',
-            \                   '@/checks': '0.0'}, 1)
+            \                   '@/checks': '0.0'})
 function s:F.testdecorator(plugdict, ...)
     call WriteFile('decargs: {'.a:plugdict.id.'}, '.string(a:000)[1:-2])
     return [10, '@@@', 0, ['try',

test/rtp/plugin/anonymous-mapgroup.vim

-execute frawor#Setup('0.0', {'autoload/frawor/mappings': '0.0'}, 1)
+execute frawor#Setup('0.0', {'autoload/frawor/mappings': '0.0'})
 function s:Write(...)
     call WriteFile(a:000)
     return ""

test/rtp/plugin/anonymous-return-value.vim

-execute frawor#Setup(0, {}, 1)
+execute frawor#Setup(0, {})
 call call("WriteFile", map(sort(keys(s:_frawor)),
             \               'v:val.": ".string(s:_frawor[v:val])'))
 

test/rtp/plugin/augroup-twoload.vim

-if exists('s:_pluginloaded') && s:_pluginloaded
-    finish
-elseif !exists('s:_pluginloaded')
-    execute frawor#Setup('0.0', {'autoload/frawor/autocommands': '0.0',
-                \                   'autoload/frawor/functions': '0.0'}, 0)
-    let s:ecmd={}
-    call s:_f.augroup.add('Au1', [['BufEnter', '*', 0, s:ecmd]])
-    finish
-endif
-function s:ecmd.function()
-    call WriteFile('entered '.expand('<amatch>'))
-    call s:_f.augroup.del('Au1')
-    call s:_f.augroup.add('Au1', [['BufWipeout', '*', 0, 'call WriteFile("wiped ".expand("<amatch>"))']])
-endfunction

test/rtp/plugin/augroup.vim

-execute frawor#Setup('0.0', {'autoload/frawor/autocommands': '0.0',
-            \                   'autoload/frawor/functions': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/autocommands': '0.0',
+            \                   '@/functions': '0.0'})
 function s:Entered(...)
     call WriteFile(join(a:000).': '.expand('<amatch>'))
 endfunction

test/rtp/plugin/base64.vim

-execute frawor#Setup('0.0', {'@/base64': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/base64': '0.0'})
 W: Testing base64. Test should not output anything
 let tests=[
             \['', ''],

test/rtp/plugin/buffer-mappings.vim

-execute frawor#Setup('0.0', {'autoload/frawor/mappings': '0.0',
-            \                'plugin/buffer-mappings': '0.0',}, 1)
+execute frawor#Setup('0.0', {'@/mappings': '0.0',
+            \          '@buffer-mappings': '0.0',})
 nnoremap a :call WriteFile("a-orig")<CR>
 call s:_f.mapgroup.add('Global',
             \{

test/rtp/plugin/commands-addargs.vim

-execute frawor#Setup('0.0', {'@/commands': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/commands': '0.0'})
 
 function PrintArgs(...)
     call WriteFile(string(a:000))

test/rtp/plugin/commands-completion-twoload.vim

-if !exists('s:_pluginloaded')
-    execute frawor#Setup('0.0', {'@/commands': '0.0', '@/functions': '0.0'}, 0)
-    call FraworLoad('@/commands')
-    call FraworLoad('@/functions')
-    let s:rdict={}
-    call s:_f.command.add('Abc', 'call WriteFile(<q-args>)',
-                \         {'complete': s:rdict, 'nargs': '1'})
-    let s:rlist=[]
-    call s:_f.command.add('Def', 'call WriteFile(<q-args>)',
-                \         {'complete': s:rlist, 'nargs': '1'})
-    echom 'First load'
-    finish
-elseif s:_pluginloaded
-    echom 'Third load'
-    finish
-endif
-echom 'Second load'
-function s:rdict.function(a, c, p)
-    return [a:a.a:a]
-endfunction
-let s:list=['def', 'ghi']
-let s:rlist+=['in list']

test/rtp/plugin/commands-completion.vim

-execute frawor#Setup('0.0', {'@/commands': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/commands': '0.0'})
 
 call s:_f.command.add('Abc', 'call WriteFile(<q-args>)',
             \         {'complete': 'var', 'nargs': '1'})

test/rtp/plugin/commands-twoload.vim

-if !exists('s:_pluginloaded')
-    execute frawor#Setup('0.0', {'@/commands': '0.0', '@/functions': '0.0'}, 0)
-    let s:rdict={}
-    call FraworLoad('@/commands')
-    call FraworLoad('@/functions')
-    call s:_f.command.add('Abc', s:rdict, {})
-    Abc
-    finish
-elseif s:_pluginloaded
-    finish
-endif
-function s:rdict.function()
-    W$ Abc
-endfunction

test/rtp/plugin/commands.vim

-execute frawor#Setup('0.0', {'@/commands': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/commands': '0.0'})
 
 W- String + no options
 function Abc()

test/rtp/plugin/double-load.2.vim

-if exists('s:_pluginloaded') && s:_pluginloaded
-    finish
-elseif !exists('s:_pluginloaded')
-    execute frawor#Setup('0.0', {'plugin/double-load': '0.0'}, 0)
-    call WriteFile('registered '.s:_frawor.id,
-                \  'features: '.join(sort(keys(s:_f))))
-    finish
-endif
-call WriteFile('loaded '.s:_frawor.id,
-            \  'features: '.join(sort(keys(s:_f))))
-

test/rtp/plugin/double-load.vim

-if exists('s:_pluginloaded') && s:_pluginloaded
-    finish
-elseif !exists('s:_pluginloaded')
-    execute frawor#Setup('0.0', {'plugin/plugin-with-feature': '0.0'}, 0)
-    call WriteFile('registered '.s:_frawor.id,
-                \  'features: '.join(sort(keys(s:_f))))
-    finish
-endif
-call s:_f.newfeature('doublefeature', {'cons': function('deepcopy')})
-call WriteFile('loaded '.s:_frawor.id,
-            \  'features: '.join(sort(keys(s:_f))))
-

test/rtp/plugin/double-registration.vim

 endfunction
 let s:_sid=+matchstr(s:Eval('expand("<sfile>")'), '\m\d\+')
 let s:_sfile=expand('<sfile>:p')
-call FraworRegister([0, 0], s:_sid, s:_sfile, {}, 0, s:)
+call FraworRegister([0, 0], s:_sid, s:_sfile, {}, s:)
 delfunction s:Eval

test/rtp/plugin/except-ss.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
             \                 '@except-ss': '0.0',
-            \     '@/decorators/altervars': '0.0'}, 1)
+            \     '@/decorators/altervars': '0.0'})
 function s:F.saver()
     throw "Saver exception"
 endfunction

test/rtp/plugin/exptest.vim

-execute frawor#Setup('0.0', {}, 1)
+execute frawor#Setup('0.0', {})
 call WriteFile('plugin/exptest')
 

test/rtp/plugin/fwccheck.vim

 execute frawor#Setup('0.0', {'@/fwc': '0.0',
-            \                '@/os':  '0.0'}, 1)
+            \                '@/os':  '0.0'})
 let os=s:_r.os
 let i=1
 let j=1

test/rtp/plugin/fwccomplete-os.vim

 execute frawor#Setup('0.0', {'@/fwc': '0.0',
-            \                '@/os':  '0.0'}, 1)
+            \                '@/os':  '0.0'})
 let os=s:_r.os
 let i=1
 let j=1

test/rtp/plugin/fwccomplete-redir.vim

 execute frawor#Setup('0.0', {'@/fwc': '0.0',
-            \                '@/os':  '0.0'}, 1)
+            \                '@/os':  '0.0'})
 let os=s:_r.os
 let i=1
 let j=1

test/rtp/plugin/fwccomplete.vim

 execute frawor#Setup('0.0', {'@/fwc': '0.0',
-            \                '@/os':  '0.0'}, 1)
+            \                '@/os':  '0.0'})
 let os=s:_r.os
 let i=1
 let j=1

test/rtp/plugin/getoption.vim

-execute frawor#Setup('0.0', {'autoload/frawor/options': '0.0'}, 1)
+execute frawor#Setup('0.0', {'autoload/frawor/options': '0.0'})
 function s:F.filter(args)
     return [filter(a:args[0], 'type(v:val)=='.type("").
                 \                   ' && v:val=~#"\\vdef|var|dict"')]

test/rtp/plugin/global-function.vim

-execute frawor#Setup('0.0', {}, 1)
+execute frawor#Setup('0.0', {})
 
 function TestFunction()
     echo 1

test/rtp/plugin/ignoredeps-feature.vim

-execute frawor#Setup('0.0', {'plugin/writefile-feature': '0'}, 1)
+execute frawor#Setup('0.0', {'plugin/writefile-feature': '0'})
 function s:F.testfeaturecons(plugdict, fdict)
     call s:_f.writefile('cons: '.a:plugdict.id)
 endfunction

test/rtp/plugin/invalid-FraworRegister-arguments.1.vim

-call FraworRegister([0, 0], 3, expand('<sfile>'), {}, 0, [])
+call FraworRegister([0, 0], 3, expand('<sfile>'), {}, [])
 

test/rtp/plugin/invalid-FraworRegister-arguments.10.vim

 call FraworRegister([0, 0], 3, expand('<sfile>'),
-            \{'plugin/writefile-feature': [0, '0']}, 0, {})
+            \{'plugin/writefile-feature': [0, '0']}, {})
 

test/rtp/plugin/invalid-FraworRegister-arguments.2.vim

-call FraworRegister([0, 0], 3, expand('<sfile>'), {}, 0, {})
+call FraworRegister([0, 0], 3, expand('<sfile>'), {}, {})
+call FraworRegister([0, 0], 3, expand('<sfile>'), {}, {})
 

test/rtp/plugin/invalid-FraworRegister-arguments.3.vim

-call FraworRegister([0, 0], "3", expand('<sfile>'), {}, 0, {})
+call FraworRegister([0, 0], "3", expand('<sfile>'), {}, {})
 

test/rtp/plugin/invalid-FraworRegister-arguments.4.vim

-call FraworRegister([0, 0], 0, expand('<sfile>'), {}, 0, {})
+call FraworRegister([0, 0], 0, expand('<sfile>'), {}, {})
 

test/rtp/plugin/invalid-FraworRegister-arguments.5.vim

-call FraworRegister([0, 0], 3, 0, {}, 0, {})
+call FraworRegister([0, 0], 3, 0, {}, {})
 

test/rtp/plugin/invalid-FraworRegister-arguments.6.vim

-call FraworRegister([0, 0], 3, '', {}, 0, {})
+call FraworRegister([0, 0], 3, '', {}, {})
 

test/rtp/plugin/invalid-FraworRegister-arguments.7.vim

-call FraworRegister([0, 0], 3, expand('<sfile>'), [], 0, {})
+call FraworRegister([0, 0], 3, expand('<sfile>'), [], {})
 

test/rtp/plugin/invalid-FraworRegister-arguments.8.vim

 call FraworRegister([0, 0], 3, expand('<sfile>'),
-            \{'plugin/writefile-feature': '0.0'}, 0, {})
+            \{'plugin/writefile-feature': '0.0'}, {})
 

test/rtp/plugin/invalid-FraworRegister-arguments.9.vim

 call FraworRegister([0, 0], 3, expand('<sfile>'),
-            \{'plugin/writefile-feature': []}, 0, {})
+            \{'plugin/writefile-feature': []}, {})
 

test/rtp/plugin/invalid-addaltspecial.1.vim

-execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'})
 call s:_f.addaltspecial(0, 0, 0)

test/rtp/plugin/invalid-addaltspecial.2.vim

-execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'})
 call s:_f.addaltspecial("", 0, 0)

test/rtp/plugin/invalid-addaltspecial.3.vim

-execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'})
 call s:_f.addaltspecial("winview", 0, 0)

test/rtp/plugin/invalid-addaltspecial.4.vim

-execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'})
 call s:_f.addaltspecial("test", 0, 0)

test/rtp/plugin/invalid-addaltspecial.5.vim

-execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'})
 call s:_f.addaltspecial("test", function("winsaveview"), 0)

test/rtp/plugin/invalid-addaltspecial.6.vim

-execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'})
 call s:_f.addaltspecial("test", function("winsaveview"), function("winrestview"), 0, 0)

test/rtp/plugin/invalid-addaltspecial.7.vim

-execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'})
 call s:_f.addaltspecial("test", function("winsaveview"), function("winrestview"), 0)

test/rtp/plugin/invalid-addaltspecial.8.vim

-execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'})
 let s:eref=function('s:Eval')
 delfunction s:Eval
 call s:_f.addaltspecial("test", s:eref, s:eref)

test/rtp/plugin/invalid-addaltspecial.9.vim

-execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators/altervars': '0.0'})
 let s:eref=function('s:Eval')
 delfunction s:Eval
 call s:_f.addaltspecial("test", function('tr'), s:eref)

test/rtp/plugin/invalid-adddecorator.1.vim

-execute frawor#Setup('0.0', {'@/decorators': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators': '0.0'})
 call s:_f.adddecorator(0, 0)

test/rtp/plugin/invalid-adddecorator.2.vim

-execute frawor#Setup('0.0', {'@/decorators': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators': '0.0'})
 runtime autoload/frawor/decorators/*.vim
 call s:_f.adddecorator("altervars", 0)

test/rtp/plugin/invalid-adddecorator.3.vim

-execute frawor#Setup('0.0', {'@/decorators': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators': '0.0'})
 call s:_f.adddecorator("-abc", 0)

test/rtp/plugin/invalid-adddecorator.4.vim

-execute frawor#Setup('0.0', {'@/decorators': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators': '0.0'})
 call s:_f.adddecorator("abc", 0)

test/rtp/plugin/invalid-adddecorator.5.vim

-execute frawor#Setup('0.0', {'@/decorators': '0.0'}, 1)
+execute frawor#Setup('0.0', {'@/decorators': '0.0'})
 let Decfunc=function('s:Eval')
 delfunction s:Eval
 call s:_f.adddecorator("abc", Decfunc)

test/rtp/plugin/invalid-adddecorator.6.vim

 execute frawor#Setup('0.0', {'@/decorators': '0.0',
             \                 '@/functions': '0.0',
-            \     '@invalid-adddecorator.6': '0.0'}, 1)
+            \     '@invalid-adddecorator.6': '0.0'})
 function s:InvalidDecorator(...)
     return 0
 endfunction

test/rtp/plugin/invalid-addextfunctions.1.vim

-execute frawor#Setup('0.0', {'autoload/frawor/functions': '0.0'}, 1)
+execute frawor#Setup('0.0', {'autoload/frawor/functions': '0.0'})
 call s:_f.addextfunctions(0)

test/rtp/plugin/invalid-addextfunctions.10.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
-            \     '@/decorators/altervars': '0.0'}, 1)
+            \     '@/decorators/altervars': '0.0'})
 call s:_f.addextfunctions({'Function': {'function': function('tr'),
             \                         '@altervars': [[]]}})

test/rtp/plugin/invalid-addextfunctions.11.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
-            \     '@/decorators/altervars': '0.0'}, 1)
+            \     '@/decorators/altervars': '0.0'})
 call s:_f.addextfunctions({'Function': {'function': function('tr'),
             \                         '@altervars': [[1, 1, 1]]}})

test/rtp/plugin/invalid-addextfunctions.12.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
-            \     '@/decorators/altervars': '0.0'}, 1)
+            \     '@/decorators/altervars': '0.0'})
 call s:_f.addextfunctions({'Function': {'function': function('tr'),
             \                         '@altervars': [[1, 1]]}})

test/rtp/plugin/invalid-addextfunctions.13.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
-            \     '@/decorators/altervars': '0.0'}, 1)
+            \     '@/decorators/altervars': '0.0'})
 call s:_f.addextfunctions({'Function': {'function': function('tr'),
             \                         '@altervars': [['g:0', 1]]}})

test/rtp/plugin/invalid-addextfunctions.14.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
-            \     '@/decorators/altervars': '0.0'}, 1)
+            \     '@/decorators/altervars': '0.0'})
 call s:_f.addextfunctions({'Function': {'function': function('tr'),
             \                         '@altervars': [['+', 1]]}})

test/rtp/plugin/invalid-addextfunctions.15.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
-            \     '@/decorators/altervars': '0.0'}, 1)
+            \     '@/decorators/altervars': '0.0'})
 call s:_f.addextfunctions({'Function': {'function': function('tr'),
             \                         '@altervars': [['&l', 1]]}})

test/rtp/plugin/invalid-addextfunctions.16.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
-            \     '@/decorators/altervars': '0.0'}, 1)
+            \     '@/decorators/altervars': '0.0'})
 call s:_f.addextfunctions({'Function': {'function': function('tr'),
             \                         '@altervars': [['&list', 1]]}})

test/rtp/plugin/invalid-addextfunctions.17.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
-            \     '@/decorators/altervars': '0.0'}, 1)
+            \     '@/decorators/altervars': '0.0'})
 call s:_f.addextfunctions({'Function': {'function': function('tr'),
             \                         '@altervars': [['&g:_', 1]]}})

test/rtp/plugin/invalid-addextfunctions.18.vim

 execute frawor#Setup('0.0', {'@/functions': '0.0',
-            \     '@/decorators/altervars': '0.0'},