Before:
  Save &shell
  let &shell = 'cmd.exe'

After:
  Restore

Execute(ale#Escape for cmd.exe should allow not escape paths without special characters):
  AssertEqual 'C:', ale#Escape('C:')
  AssertEqual 'C:\', ale#Escape('C:\')
  AssertEqual 'python', ale#Escape('python')
  AssertEqual 'C:\foo\bar', ale#Escape('C:\foo\bar')
  AssertEqual '/bar/baz', ale#Escape('/bar/baz')
  AssertEqual 'nul', ale#Escape('nul')
  AssertEqual '''foo''', ale#Escape('''foo''')

Execute(ale#Escape for cmd.exe should escape Windows paths with spaces appropriately):
  AssertEqual '"C:\foo bar\baz"', ale#Escape('C:\foo bar\baz')
  AssertEqual '"^foo bar^"', ale#Escape('^foo bar^')
  AssertEqual '"&foo bar&"', ale#Escape('&foo bar&')
  AssertEqual '"|foo bar|"', ale#Escape('|foo bar|')
  AssertEqual '"<foo bar<"', ale#Escape('<foo bar<')
  AssertEqual '">foo bar>"', ale#Escape('>foo bar>')
  AssertEqual '"^foo bar^"', ale#Escape('^foo bar^')
  AssertEqual '"''foo'' ''bar''"', ale#Escape('''foo'' ''bar''')

Execute(ale#Escape for cmd.exe should use caret escapes on special characters):
  AssertEqual '^^foo^^', ale#Escape('^foo^')
  AssertEqual '^&foo^&', ale#Escape('&foo&')
  AssertEqual '^|foo^|', ale#Escape('|foo|')
  AssertEqual '^<foo^<', ale#Escape('<foo<')
  AssertEqual '^>foo^>', ale#Escape('>foo>')
  AssertEqual '^^foo^^', ale#Escape('^foo^')
  AssertEqual '''foo''^^''bar''', ale#Escape('''foo''^''bar''')

Execute(ale#Escape for cmd.exe should escape percent characters):
  AssertEqual '%%foo%%', ale#Escape('%foo%')
  AssertEqual 'C:\foo%%\bar\baz%%', ale#Escape('C:\foo%\bar\baz%')
  AssertEqual '"C:\foo bar%%\baz%%"', ale#Escape('C:\foo bar%\baz%')
  AssertEqual '^^%%foo%%', ale#Escape('^%foo%')
  AssertEqual '"^%%foo%% %%bar%%"', ale#Escape('^%foo% %bar%')
  AssertEqual '"^%%foo%% %%bar%% """""', ale#Escape('^%foo% %bar% ""')
