# Maps
# TODO make it without side effects
# -- Use the normal vimwiki or reset it


# 0 Configure {{{1
##################

Execute (VimwikiIndex):
  call SetSyntax('markdown')
  VimwikiIndex 2
  AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
  AssertEqual 'vimwiki', &filetype
  AssertEqual $HOME . '/testmarkdown/', vimwiki_wikilocal_vars[1]['path']
  AssertEqual $HOME . '/testmarkdown/index.md', expand('%')

Execute (Open buzz bozz):
  edit $HOME/testmarkdown/buzz_bozz.md
  AssertEqual $HOME . '/testmarkdown/buzz_bozz.md', expand('%')

# 1 Global {{{1
###############

Execute (===========================================================):
  Log "Checking global map"

Do (,ww -> open index [Assert]):
  ,ww
  :AssertEqual $HOME . '/testmarkdown/index.md', expand('%')
  \<CR>
  :call AssertTab(1)
  \<CR>

Do (,wt -> open index in tab [Assert]):
  ,wt
  :AssertEqual $HOME . '/testmarkdown/index.md', expand('%')
  \<CR>
  :call AssertTab(2)
  \<CR>

Do (,w,w -> open diary [Assert]):
  ,w,w
  :AssertEqual $HOME . '/testmarkdown/diary/' . strftime('%Y-%m-%d') . '.md', expand('%')
  \<CR>
  :call AssertTab(1)
  \<CR>

Do (,w,t -> open diary in tab [Assert]):
  ,w,t
  :AssertEqual $HOME . '/testmarkdown/diary/' . strftime('%Y-%m-%d') . '.md', expand('%')
  \<CR>
  :call AssertTab(2)
  \<CR>

Do (,ws -> list and select wiki [Assert]):
  ,ws
  1
  \<CR>
  :AssertEqual $HOME . '/testmarkdown/index.md', expand('%')
  \<CR>
  :call AssertTab(1)
  \<CR>

Do (,wi -> open diary index [Assert]):
  ,wi
  :AssertEqual $HOME . '/testmarkdown/diary/diary.md', expand('%')
  \<CR>
  :call AssertTab(1)
  \<CR>

Do (,w,y -> open yesterday [Assert]):
  ,w,y
  :AssertEqual $HOME . '/testmarkdown/diary/' . strftime('%Y-%m-%d', localtime() - 60*60*24) . '.md', expand('%')
  \<CR>
  :call AssertTab(1)
  \<CR>

Do (,w,m -> open tomorrow [Assert]):
  ,wm
  :AssertEqual $HOME . '/testmarkdown/diary/' . strftime('%Y-%m-%d', localtime() + 60*60*24) . '.md', expand('%')
  \<CR>
  :call AssertTab(1)
  \<CR>


# 2 Local {{{1
##############

#Execute (===========================================================):
#  Log "Checking local map"
#
#
## 2.3 Font color {{{2
Given (Some paragraphs):
  Some paragraph with some words 1
  Some paragraph with some words 2
  Some paragraph with some words 3
  Some paragraph with some words 4

Execute(Colorize1: Current line):
  set ft=vimwiki
  call SetSyntax('markdown')
  AssertEqual 3, vimwiki#vars#get_bufferlocal('wiki_nr')
  AssertEqual 'vimwiki', &ft
  "AssertEqual ',', mapleader
  " Returns: Undefeind mapleader
  VimwikiColorize red

Expect (Some paragraphs):
  <span style="color:#cc241d;">Some paragraph with some words 1</span>
  Some paragraph with some words 2
  Some paragraph with some words 3
  Some paragraph with some words 4

Execute(Colorize2: 2 lines):
  2,3VimwikiColorize red

Expect (Some paragraphs):
  Some paragraph with some words 1
  <span style="color:#cc241d;">Some paragraph with some words 2
  Some paragraph with some words 3</span>
  Some paragraph with some words 4

Do(,wc):
  \wc1\<Cr>\<Cr>

Expect (Some paragraphs):
  <span style="background:#458588;">Some paragraph with some words 1</span>
  Some paragraph with some words 2
  Some paragraph with some words 3
  Some paragraph with some words 4

Do(User leave menu):
  ,wc\<Esc>

Expect (Some paragraphs, nothing changed):
  Some paragraph with some words 1
  Some paragraph with some words 2
  Some paragraph with some words 3
  Some paragraph with some words 4

Do(v,wc):
  jwll
  v
  jjllll
  \wc14\<Cr>

Expect (Some paragraphs):
  Some paragraph with some words 1
  Some pa<span style="color:#cc241d;">ragraph with some words 2
  Some paragraph with some words 3
  Some paragra</span>ph with some words 4

Do(With emoji):
  Go
  🤥 abcdefghi 🤥 🤥\<Cr>
  🤥 abcdefghi 🤥 🤥\<Cr>
  🤥 abcdefghi 🤥 🤥\<Esc>
  /abc\<Cr>
  ll
  \<esc>\<C-v>
  jjllll
  \wc1\<Cr>

Expect (Some paragraphs):
  Some paragraph with some words 1
  Some paragraph with some words 2
  Some paragraph with some words 3
  Some paragraph with some words 4
  🤥 ab<span style="background:#458588;">cdefghi 🤥 🤥
  🤥 abcdefghi 🤥 🤥
  🤥 abcdefg</span>hi 🤥 🤥

# 2.1 Heading {{{2
##############


Do (,wn -> Create new wiki [Assert]):
  ,wn
  new_file1
  \<CR>
  :AssertEqual $HOME . '/testmarkdown/new_file1.md', expand('%')
  \<CR>
  :call AssertTab(1)
  \<CR>

Do (,wd -> Delete wiki yes [Assert]):
  :edit $HOME . '/testmarkdown/file_new1.md'
  \<CR>

  ,wn
  new_file2
  \<CR>
  ithis is content 2
  \<Esc>

  ,wd
  yes
  \<CR>

  :AssertEqual $HOME . '/testmarkdown/index.md', expand('%')
  \<CR>

Do (,wd -> Delete wiki no [Assert]):
  :edit $HOME . '/testmarkdown/file_new1.md'
  \<CR>

  ,wn
  new_file2
  \<CR>
  ithis is content 1
  \<Esc>

  ,wd
  no
  \<CR>

  :AssertEqual $HOME . '/testmarkdown/new_file2.md', expand('%')
  \<CR>

Do (,wn -> Rename wiki [Assert]):
  ,wn
  new_file1
  \<CR>
  ithis is content 1
  \<Esc>

  ,wn
  new_file2
  \<CR>

  :AssertEqual $HOME . '/testmarkdown/new_file2.md', expand('%')
  \<CR>

Given (Some headings):
  # Head 1
  ## Head 1.1
  content 1

  # Head2
  content 2

Execute (file .md):
  file toto.md
  edit!
  AssertEqual 'vimwiki', &ft

Do (= -> add header level):
  =

Expect (Inc header level):
  ## Head 1
  ## Head 1.1
  content 1

  # Head2
  content 2

Do (- -> Dec header level):
  j
  -

Expect (Dec header level):
  # Head 1
  # Head 1.1
  content 1

  # Head2
  content 2

# TODO fix for vim_7.3.429  
# Do ([[ -> Go to the previous header):
#   G
#   k
#   [[
#   A placeholder
# 
# Expect (placeholder):
#   # Head 1
#   ## Head 1.1 placeholder
#   content 1
# 
#   # Head2
#   content 2
# 
# Do (]] -> Go to the next header):
#   ]]
#   A placeholder
# 
# Expect (placeholder):
#   # Head 1
#   ## Head 1.1 placeholder
#   content 1
# 
#   # Head2
#   content 2
# 
# Do ([= -> Go to the previous header which has the same level):
#   G
#   k
#   [=
#   A placeholder
# 
# Expect (placeholder):
#   # Head 1 placeholder
#   ## Head 1.1
#   content 1
# 
#   # Head2
#   content 2
# 
# Do (]= -> Go to the next header which has the same level):
#   ]=
#   A placeholder
# 
# Expect (placeholder):
#   # Head 1
#   ## Head 1.1
#   content 1
# 
#   # Head2 placeholder
#   content 2
# 
# Do (]u Go one level up):
#   j
#   ]u
#   A placeholder
# 
# Expect (placeholder):
#   # Head 1 placeholder
#   ## Head 1.1
#   content 1
# 
#   # Head2
#   content 2
# 
# Do ([u Go one level up):
#   j
#   [u
#   A placeholder
# 
# Expect (placeholder):
#   # Head 1 placeholder
#   ## Head 1.1
#   content 1
# 
#   # Head2
#   content 2


# 2.2 List {{{2
##############



# brennen commenting this out 2021-03-29 - test seems to flap, test failures
# are difficult to diagnose.
#
# Given vimwiki (Completion list #813 {{{3):
#   complete1
#   complete2
#   complete3
#
# Do (Insert a list item and complete):
#   Go
#   * comp\<C-n>\<C-n>\<Cr>\<Esc>
# # -Es -> Delete trailing *
#   :let mode = mode(1)\<Cr>
#   :Log 'Mode : ' .mode\<Cr>
#   :if mode ==# 'ce' || mode ==# 'cv' || v:version < 704\<Cr>
#     Log 'Cheating'\<Cr>
#     try\<Cr>
#       g/^\* \?$/d\<Cr>
#     endtry\<Cr>
#   endif\<Cr>
#
# Expect (With a completion but no new list item):
#   complete1
#   complete2
#   complete3
#   * complete2
#   

Given (Number list):
  1. I
    1. Relly
  2. Love
    1. Very
      1. Much
  3. You

Execute (file .md):
  file toto.md
  edit!
  AssertEqual 'vimwiki', &ft
  set sw=2

Do (gll):
  gll

Expect (Increase):
    1. I
    2. Relly
  1. Love
    1. Very
      1. Much
  2. You

Do (gLl):
  gLl

Expect (Increase self + child):
    1. I
      1. Relly
  1. Love
    1. Very
      1. Much
  2. You

Do (glh):
  jjj
  glh

Expect (Decrease):
  1. I
    1. Relly
  2. Love
  3. Very
      1. Much
  4. You

Do (gLh):
  jjj
  gLh

Expect (Decrease self + child):
  1. I
    1. Relly
  2. Love
  3. Very
    1. Much
  4. You

Do (glr):
  \<C-A>\<C-A>
  glr

Expect (Renumber):
  1. I
    1. Relly
  2. Love
    1. Very
      1. Much
  3. You


# New launch
#
Given (Number list):
  1. I
    1. Relly
  2. Love
    1. Very
      1. Much
  3. You

Execute (file .md):
  file toto.md
  edit!
  AssertEqual 'vimwiki', &ft
  set sw=2

Do (gl*):
  gl*

Expect (item -> *):
  * I
    1. Relly
  1. Love
    1. Very
      1. Much
  2. You

Do (gL*):
  gL*

Expect (list -> *):
  * I
    1. Relly
  * Love
    1. Very
      1. Much
  * You

# New launch
#
Given (Bulleted list):
  * I
    - Relly
  * Love
    - Very
      + Much
  * You

Execute (file .md):
  set sw=2
  file toto.md
  edit!
  let g:vimwiki_syntaxlocal_vars['markdown']['cycle_bullets'] = 1
  let g:vimwiki_syntaxlocal_vars['markdown']['bullet_types'] = ['*', '-', '+']
  AssertEqual 'vimwiki', &ft

Do (gLl):
  gLl

Expect (Increase):
    - I
      + Relly
  * Love
    - Very
      + Much
  * You

Do (3glh):
  gLh

Expect (Decrease):
  * I
    - Relly
  * Love
    - Very
      + Much
  * You

Given (Bulleted list 2):
  * Love
    - Very
      - Much

Do (Go):
  Go

Expect (New item):
  * Love
    - Very
      - Much
      - 


# New launch
#
Given (List ->):
  * Item1

Execute (file toto.md):
  " Note: let s:markdown_syntax.bullet_types = ['*', '-', '+']
  file toto.md
  edit!
  Log "Cycle bullets"
  let g:vimwiki_syntaxlocal_vars['bullet_types'] = ['*', '-']
  let g:vimwiki_syntaxlocal_vars['markdown']['cycle_bullets'] = 1
  AssertEqual g:vimwiki_syntaxlocal_vars['markdown']['cycle_bullets'], 1
  AssertEqual 'vimwiki', &ft
  set sw=2
  set expandtab " Otherwise, getting some tab before some items, when enought space

Do (o):
  oItem2

Expect (Good bullet type):
  * Item1
  * Item2

# TODO test more, (see real cycle, but do not work with low vim)
Do (o + <C-t>):
  o2
  \<C-t>\<Esc>
  o3
  \<C-t>\<Esc>

Expect (Good bullet type):
  * Item1
    - 2
      + 3

Do (o + <Cr>):
  A1\<Cr>
  2\<C-t>\<Cr>
  3\<C-t>

Expect (Good nested bullet type):
  * Item11
    - 2
      + 3


# TODO test: let g:vimwiki_bullet_types = ['-', '•', '→', '*']


# 3 Text Object {{{1
####################

Execute (===========================================================):
  Log "Checking text object"

# 3.1 HEading Object {{{2
####################


Given (Some headings):
  # Head 1
  ## Head 1.1
  content 1

  # Head2
  content 2

Do (ah):
  j
  dah

Expect (Change A header including its content up to the next header):
  # Head 1
  # Head2
  content 2

Do (ih):
  j
  dih

Expect (The content under a header):
  # Head 1
  ## Head 1.1

  # Head2
  content 2

Do (aH):
  daH

Expect (A header including all of its subheaders):
  # Head2
  content 2

Do (iH):
  diH

Expect (Like 'aH', but excluding the header itself):
  # Head 1

  # Head2
  content 2

# vim: foldmethod=marker foldlevel=30 sw=2
