patch 9.0.0307: :echomsg doesn't work properly with cmdheight=0

Problem:    :echomsg doesn't work properly with cmdheight=0.
Solution:   Improve scrolling and displaying.
diff --git a/src/testdir/dumps/Test_cmdheight_zero_6.dump b/src/testdir/dumps/Test_cmdheight_zero_6.dump
new file mode 100644
index 0000000..7af84c9
--- /dev/null
+++ b/src/testdir/dumps/Test_cmdheight_zero_6.dump
@@ -0,0 +1,6 @@
+|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
diff --git a/src/testdir/dumps/Test_cmdheight_zero_7.dump b/src/testdir/dumps/Test_cmdheight_zero_7.dump
new file mode 100644
index 0000000..3c57623
--- /dev/null
+++ b/src/testdir/dumps/Test_cmdheight_zero_7.dump
@@ -0,0 +1,6 @@
+|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
+|~+0#4040ff13&| @73
+|~| @73
+|═+0#e000002&@74
+|s|o|m|e| |t|e|x|t| @65
+|s|o|m|e| |m|o|r|e| |t|e|x|t| @60
diff --git a/src/testdir/dumps/Test_cmdheight_zero_8.dump b/src/testdir/dumps/Test_cmdheight_zero_8.dump
new file mode 100644
index 0000000..6dbd42c
--- /dev/null
+++ b/src/testdir/dumps/Test_cmdheight_zero_8.dump
@@ -0,0 +1,6 @@
+|s+0&#ffffff0|o|m|e| >t|e|x|t| @65
+|~+0#4040ff13&| @73
+|═+0#e000002&@74
+|s|o|m|e| |t|e|x|t| @65
+|s|o|m|e| |m|o|r|e| |t|e|x|t| @60
+|e|v|e|n| |m|o|r|e| |t|e|x|t| @60
diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim
index f714478..8683adc 100644
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -478,6 +478,13 @@
       set cmdheight=0
       set showmode
       call setline(1, 'some text')
+      func ShowMessages()
+        echomsg 'some text'
+        sleep 100m
+        echomsg 'some more text'
+        sleep 2500m
+        echomsg 'even more text'
+      endfunc
   END
   call writefile(lines, 'XtestCmdheight')
   let buf = RunVimInTerminal('-S XtestCmdheight', #{rows: 6})
@@ -501,6 +508,14 @@
   call term_sendkeys(buf, ":w XsomeText\<CR>")
   call VerifyScreenDump(buf, 'Test_cmdheight_zero_5', {})
 
+  call term_sendkeys(buf, ":call popup_clear()\<CR>")
+  call VerifyScreenDump(buf, 'Test_cmdheight_zero_6', {})
+
+  call term_sendkeys(buf, ":call ShowMessages()\<CR>")
+  call VerifyScreenDump(buf, 'Test_cmdheight_zero_7', {})
+  sleep 2
+  call VerifyScreenDump(buf, 'Test_cmdheight_zero_8', {})
+
   " clean up
   call StopVimInTerminal(buf)
   call delete('XtestCmdheight')