diff --git a/README.md b/README.md
index f8b9ced..423c839 100644
--- a/README.md
+++ b/README.md
@@ -217,7 +217,14 @@ Run tests with Vim and Neovim, whichever is installed
./test/run.sh basic template # Only these cases
```
-Each case is a `.vue` file in [test/cases](test/cases), with an optional `.vim` file for the config and syntax checks. A case fails if indenting the whole file changes it, a check fails, or there is an error message. Tests also run on GitHub Actions for each push and pull request.
+Each case is a `.vue` or `.wpy` file in [test/cases](test/cases), with an optional `.vim` file for the config and checks. A case fails if
+
+- indenting the whole file changes it
+- with `g:test_flatten`, indenting the file after removing all indent doesn't restore it
+- a check in `Check()` fails, such as syntax, `GetVueTag()`, `GetVueSyntax()` or fold level
+- there is an error message
+
+Tests also run on GitHub Actions for each push and pull request.
## Acknowledgments & Refs
diff --git a/test/cases/attribute-off.vim b/test/cases/attribute-off.vim
new file mode 100644
index 0000000..09c8797
--- /dev/null
+++ b/test/cases/attribute-off.vim
@@ -0,0 +1,14 @@
+" Without attribute and keyword highlight
+let g:vim_vue_plugin_config = {'attribute': 0, 'keyword': 0}
+let g:test_flatten = 1
+
+function! Check()
+ call ExpectSyntax('@click', 'VueKey')
+ call ExpectSyntax('toggle', 'VueValue')
+ call ExpectNoSyntax('$t', 'VueInject')
+ call ExpectNoSyntax('1"', 'javaScriptNumber')
+ call ExpectSyntax('message', 'VueExpression')
+ call ExpectEqual(matchstr(execute('highlight VueKey'), 'links to \zs\S\+'),
+ \ 'htmlArg', 'VueKey link')
+ call ExpectNoSyntax('data', 'vueObjectFuncName')
+endfunction
diff --git a/test/cases/attribute-off.vue b/test/cases/attribute-off.vue
new file mode 100644
index 0000000..73cf150
--- /dev/null
+++ b/test/cases/attribute-off.vue
@@ -0,0 +1,13 @@
+
+