aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/vweb/assets/assets_test.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/vlib/vweb/assets/assets_test.v')
-rw-r--r--v_windows/v/vlib/vweb/assets/assets_test.v179
1 files changed, 179 insertions, 0 deletions
diff --git a/v_windows/v/vlib/vweb/assets/assets_test.v b/v_windows/v/vlib/vweb/assets/assets_test.v
new file mode 100644
index 0000000..6170f3c
--- /dev/null
+++ b/v_windows/v/vlib/vweb/assets/assets_test.v
@@ -0,0 +1,179 @@
+import vweb.assets
+import os
+
+// clean_cache_dir used before and after tests that write to a cache directory.
+// Because of parallel compilation and therefore test running,
+// unique cache dirs are needed per test function.
+fn clean_cache_dir(dir string) {
+ if os.is_dir(dir) {
+ os.rmdir_all(dir) or { panic(err) }
+ }
+}
+
+fn base_cache_dir() string {
+ return os.join_path(os.temp_dir(), 'assets_test_cache')
+}
+
+fn cache_dir(test_name string) string {
+ return os.join_path(base_cache_dir(), test_name)
+}
+
+fn get_test_file_path(file string) string {
+ path := os.join_path(base_cache_dir(), file)
+ if !os.is_dir(base_cache_dir()) {
+ os.mkdir_all(base_cache_dir()) or { panic(err) }
+ }
+ if !os.exists(path) {
+ os.write_file(path, get_test_file_contents(file)) or { panic(err) }
+ }
+ return path
+}
+
+fn get_test_file_contents(file string) string {
+ contents := match file {
+ 'test1.js' { '{"one": 1}\n' }
+ 'test2.js' { '{"two": 2}\n' }
+ 'test1.css' { '.one {\n\tcolor: #336699;\n}\n' }
+ 'test2.css' { '.two {\n\tcolor: #996633;\n}\n' }
+ else { 'wibble\n' }
+ }
+ return contents
+}
+
+fn test_set_cache() {
+ mut am := assets.new_manager()
+ am.cache_dir = 'cache'
+}
+
+fn test_set_minify() {
+ mut am := assets.new_manager()
+ am.minify = true
+}
+
+fn test_add() {
+ mut am := assets.new_manager()
+ assert am.add('css', 'testx.css') == false
+ assert am.add('css', get_test_file_path('test1.css')) == true
+ assert am.add('js', get_test_file_path('test1.js')) == true
+ // assert am.add('css', get_test_file_path('test2.js')) == false // TODO: test extension on add
+}
+
+fn test_add_css() {
+ mut am := assets.new_manager()
+ assert am.add_css('testx.css') == false
+ assert am.add_css(get_test_file_path('test1.css')) == true
+ // assert am.add_css(get_test_file_path('test1.js')) == false // TODO: test extension on add
+}
+
+fn test_add_js() {
+ mut am := assets.new_manager()
+ assert am.add_js('testx.js') == false
+ assert am.add_css(get_test_file_path('test1.js')) == true
+ // assert am.add_css(get_test_file_path('test1.css')) == false // TODO: test extension on add
+}
+
+fn test_combine_css() {
+ mut am := assets.new_manager()
+ am.cache_dir = cache_dir('test_combine_css')
+ clean_cache_dir(am.cache_dir)
+ am.add_css(get_test_file_path('test1.css'))
+ am.add_css(get_test_file_path('test2.css'))
+ // TODO: How do I test non-minified, is there a "here doc" format that keeps formatting?
+ am.minify = true
+ expected := '.one { color: #336699; } .two { color: #996633; } '
+ actual := am.combine_css(false)
+ assert actual == expected
+ assert actual.contains(expected)
+ // Test cache path doesn't change when input files and minify setting do not.
+ path1 := am.combine_css(true)
+ clean_cache_dir(am.cache_dir)
+ path2 := am.combine_css(true)
+ assert path1 == path2
+ clean_cache_dir(am.cache_dir)
+}
+
+fn test_combine_js() {
+ mut am := assets.new_manager()
+ am.cache_dir = cache_dir('test_combine_js')
+ clean_cache_dir(am.cache_dir)
+ am.add_js(get_test_file_path('test1.js'))
+ am.add_js(get_test_file_path('test2.js'))
+ expected1 := '{"one": 1}'
+ expected2 := '{"two": 2}'
+ expected := expected1 + '\n' + expected2 + '\n'
+ actual := am.combine_js(false)
+ assert actual == expected
+ assert actual.contains(expected)
+ assert actual.contains(expected1)
+ assert actual.contains(expected2)
+ am.minify = true
+ clean_cache_dir(am.cache_dir)
+ expected3 := expected1 + ' ' + expected2 + ' '
+ actual2 := am.combine_js(false)
+ assert actual2 == expected3
+ assert actual2.contains(expected3)
+ // Test cache path doesn't change when input files and minify setting do not.
+ path1 := am.combine_js(true)
+ clean_cache_dir(am.cache_dir)
+ path2 := am.combine_js(true)
+ assert path1 == path2
+ clean_cache_dir(am.cache_dir)
+}
+
+fn test_include_css() {
+ mut am := assets.new_manager()
+ file1 := get_test_file_path('test1.css')
+ am.add_css(file1)
+ expected := '<link rel="stylesheet" href="$file1">\n'
+ actual := am.include_css(false)
+ assert actual == expected
+ assert actual.contains(expected)
+ // Two lines of output.
+ file2 := get_test_file_path('test2.css')
+ am.add_css(file2)
+ am.cache_dir = cache_dir('test_include_css')
+ clean_cache_dir(am.cache_dir)
+ expected2 := expected + '<link rel="stylesheet" href="$file2">\n'
+ actual2 := am.include_css(false)
+ assert actual2 == expected2
+ assert actual2.contains(expected2)
+ // Combined output.
+ clean_cache_dir(am.cache_dir)
+ actual3 := am.include_css(true)
+ assert actual3.contains(expected2) == false
+ assert actual3.starts_with('<link rel="stylesheet" href="$am.cache_dir/') == true
+ // Test cache path doesn't change when input files and minify setting do not.
+ clean_cache_dir(am.cache_dir)
+ actual4 := am.include_css(true)
+ assert actual4 == actual3
+ clean_cache_dir(am.cache_dir)
+}
+
+fn test_include_js() {
+ mut am := assets.new_manager()
+ file1 := get_test_file_path('test1.js')
+ am.add_js(file1)
+ expected := '<script type="text/javascript" src="$file1"></script>\n'
+ actual := am.include_js(false)
+ assert actual == expected
+ assert actual.contains(expected)
+ // Two lines of output.
+ file2 := get_test_file_path('test2.js')
+ am.add_js(file2)
+ am.cache_dir = cache_dir('test_include_js')
+ clean_cache_dir(am.cache_dir)
+ expected2 := expected + '<script type="text/javascript" src="$file2"></script>\n'
+ actual2 := am.include_js(false)
+ assert actual2 == expected2
+ assert actual2.contains(expected2)
+ // Combined output.
+ clean_cache_dir(am.cache_dir)
+ actual3 := am.include_js(true)
+ assert actual3.contains(expected2) == false
+ assert actual3.starts_with('<script type="text/javascript" src="$am.cache_dir/')
+ // Test cache path doesn't change when input files and minify setting do not.
+ clean_cache_dir(am.cache_dir)
+ actual4 := am.include_js(true)
+ assert actual4 == actual3
+ clean_cache_dir(am.cache_dir)
+}