Skip to content

Commit 988d27d

Browse files
updated testcase.
1 parent 195f9ed commit 988d27d

File tree

5 files changed

+141
-76
lines changed

5 files changed

+141
-76
lines changed

tools/test/releasetest/main.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { createApp, defineAsyncComponent } from 'vue'
2+
3+
// Import components
4+
const componentMap = {}
5+
const modules = import.meta.glob('./components/*.vue')
6+
for (const path in modules) {
7+
const name = path.split('/').pop().replace('.vue', '')
8+
componentMap[name] = defineAsyncComponent(modules[path])
9+
}
10+
11+
// Execute createApp()
12+
document.addEventListener('DOMContentLoaded', () => {
13+
document.querySelectorAll('[data-vue-component]').forEach(element => {
14+
const comp = componentMap[element.dataset.vueComponent]
15+
if (comp) {
16+
const rawProps = document.getElementById(element.dataset.vueComponent + "-props")?.textContent?.trim()
17+
const props = JSON.parse(rawProps || '{}')
18+
createApp(comp, props).mount(element)
19+
}
20+
})
21+
})

tools/test/releasetest/releasetest

Lines changed: 79 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ row_count()
2020
# Cleanup
2121
cleanup()
2222
{
23-
# Cleanup
24-
cd $APPROOT
25-
$TREEFROG -k abort >/dev/null 2>&1
23+
$TREEFROG -k abort $APPROOT >/dev/null 2>&1
2624

2725
cd $BASEDIR
2826
rm -rf $WORKDIR
@@ -33,11 +31,11 @@ testcase()
3331
{
3432
# Start Check
3533
cd $APPROOT
36-
$TREEFROG -e dev -p $PORT -d || exit
34+
$TREEFROG -p $PORT -d || exit
3735
sleep 1
3836
$TREEFROG -k stop || exit
3937
sleep 1
40-
$TREEFROG -e dev -p $PORT -d || exit
38+
$TREEFROG -p $PORT -d || exit
4139
sleep 1
4240

4341
# GET method
@@ -84,72 +82,85 @@ testcase()
8482
$TREEFROG -k stop || exit
8583
}
8684

85+
replace()
86+
{
87+
[ ! -f "$2" ] && return
88+
sed -e "$1" "$2" > "$2".$$
89+
mv -f "$2".$$ "$2"
90+
}
91+
92+
test_app()
93+
{
94+
cd $BASEDIR
95+
if [ -d "$APPNAME" ]; then
96+
$TREEFROG -k abort $APPNAME
97+
rm -rf $APPNAME
98+
fi
99+
100+
# New application
101+
$TSPAWN new $APPNAME $1
102+
sqlite3 $DBFILE < create_blog_table.sql || exit
103+
104+
# Frontend
105+
if [ "$2" = "with_vite+vue" ]; then
106+
cd $APPROOT
107+
yarn create vite frontend --template vue || exit
108+
cp ../vite.config.js frontend/
109+
cp ../main.js frontend/src/
110+
cd frontend
111+
yarn || exit
112+
fi
113+
114+
cd $APPROOT
115+
$TSPAWN --show-tables || exit
116+
$TSPAWN s blog || exit
117+
$TSPAWN s food || exit
118+
$TSPAWN ms fuga || exit
119+
$TSPAWN w foo || exit
120+
$TSPAWN a book || exit
121+
replace "s|\[product\]|\[prod\]|" config/database.ini
122+
replace "s|\[dev\]|\[product\]|" config/database.ini
123+
124+
if [ "$2" = "with_vite+vue" ]; then
125+
cd $APPROOT/frontend
126+
yarn build --emptyOutDir || exit
127+
fi
128+
129+
# QMake build check
130+
cd $APPROOT
131+
qmake -r || exit
132+
make -j4
133+
make || exit
134+
$TREEFROG --show-routes || exit
135+
$TREEFROG --settings || exit
136+
137+
# Test
138+
testcase
139+
140+
cd $APPROOT
141+
rm -f lib/*
142+
make distclean
143+
144+
# CMake build check
145+
cd $APPROOT
146+
cmake --version
147+
cmake -S . -B build
148+
make -j4 -C build
149+
make -C build || exit
150+
151+
cd $APPROOT
152+
rm -f lib/*
153+
154+
cleanup
155+
}
156+
157+
87158
## Main ##
88159
trap 'cleanup' 2 3 15 EXIT
89160

90-
# Create app
91-
cd $BASEDIR
92-
if [ -d "$APPNAME" ]; then
93-
$TREEFROG -k abort $APPNAME
94-
rm -rf $APPNAME
95-
fi
96-
97-
# SQL
98-
$TSPAWN new $APPNAME
99-
sqlite3 $DBFILE < create_blog_table.sql || exit
100-
101-
# QMake Build
102-
cd $APPROOT
103-
$TSPAWN --show-tables || exit
104-
echo "n" | $TSPAWN s blog || exit
105-
echo "n" | $TSPAWN s food || exit
106-
echo "n" | $TSPAWN ms fuga || exit
107-
$TSPAWN w foo || exit
108-
$TSPAWN a book || exit
109-
qmake -r || exit
110-
make -j4
111-
make || exit
112-
$TREEFROG --show-routes || exit
113-
$TREEFROG --settings || exit
114-
115-
# Test
116-
testcase
117-
cd $APPROOT
118-
rm -f lib/*
119-
make distclean
120-
121-
# CMake Build
122-
cmake --version
123-
cmake -S . -B build
124-
make -j4 -C build
125-
make -C build || exit
126-
cd $APPROOT
127-
$TREEFROG --show-routes || exit
128-
$TREEFROG --settings || exit
129-
130-
# SQL
131-
cd $BASEDIR
132-
sqlite3 $DBFILE < create_blog_table.sql || exit
133-
134-
# Test
135-
testcase
136-
cd $APPROOT
137-
rm -f lib/*
138-
make distclean
139-
140-
# Vue.js & QMake
141-
cd $APPROOT
142-
for i in {0..5}; do sleep 1; echo "y"; done | $TSPAWN s blog || exit
143-
for i in {0..5}; do sleep 1; echo "y"; done | $TSPAWN s food || exit
144-
for i in {0..5}; do sleep 1; echo "y"; done | $TSPAWN ms fuga || exit
145-
qmake -r || exit
146-
make -j4
147-
make || exit
148-
$TREEFROG --show-routes || exit
149-
$TREEFROG --settings || exit
150-
$TREEFROG -k abort
151-
rm -f lib/*
152-
make distclean
161+
test_app "--template erb"
162+
test_app "--template vue"
163+
test_app "--template vite+vue" with_vite+vue
153164

154165
echo
155166
echo "Test completed."
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { defineConfig } from 'vite'
2+
import vue from '@vitejs/plugin-vue'
3+
import { watch } from 'fs'
4+
5+
// https://vite.dev/config/
6+
export default defineConfig({
7+
plugins: [
8+
vue(),
9+
{
10+
name: 'treefrog-watcher',
11+
configureServer(server) {
12+
let timer = null;
13+
const watcher = watch('../lib', (e, f) => {
14+
if (f && f.endsWith('.so') && !timer) {
15+
timer = setTimeout(() => {
16+
console.log(`${new Date().toTimeString().slice(0, 8)} hmr full reload: ${f}`);
17+
server.ws.send({type: 'full-reload', path: '*'});
18+
timer = null;
19+
}, 1000); // trigger after 1000s
20+
}
21+
});
22+
}
23+
}
24+
],
25+
build: {
26+
manifest: true,
27+
outDir: '../public',
28+
rollupOptions: {
29+
input: 'src/main.js'
30+
}
31+
}
32+
})

tools/tspawn/vitevuegenerator.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ constexpr auto INDEX_VUE_TEMPLATE =
126126
" <tr v-for=\"item in items\">\n"
127127
"%td%"
128128
" <td>\n"
129-
" <a :href=\"`/%varName%/show/${item.id}`\">Show</a> <a :href=\"`/%varName%/save/${item.id}`\">Edit</a> <a href=\"#\" @click.prevent=\"postRemove(`/%varName%/remove/${item.id}`)\">Remove</a>\n"
129+
" <a :href=\"`/%varName%/show/${item.%pkVarName%}`\">Show</a> <a :href=\"`/%varName%/save/${item.%pkVarName%}`\">Edit</a> <a href=\"#\" @click.prevent=\"postRemove(`/%varName%/remove/${item.%pkVarName%}`)\">Remove</a>\n"
130130
" </td>\n"
131131
" </tr>\n"
132132
" </tbody>\n"
@@ -161,7 +161,7 @@ constexpr auto SHOW_VUE_TEMPLATE =
161161
" <p style=\"color: red\">{{ error }}</p>\n"
162162
"%showitems%"
163163
" <br>\n"
164-
" <a :href=\"`/%varName%/save/${item.id}`\">Edit</a> |\n"
164+
" <a :href=\"`/%varName%/save/${item.%pkVarName%}`\">Edit</a> |\n"
165165
" <a href=\"/%varName%/index\">Back</a>\n"
166166
"</template>\n"
167167
"\n"
@@ -213,14 +213,14 @@ constexpr auto SAVE_VUE_TEMPLATE =
213213
"<template>\n"
214214
" <h1>Editing %caption%</h1>\n"
215215
" <p style=\"color: red\">{{ error }}</p>\n"
216-
" <form :action=\"`/%varName%/save/${item.id}`\" method=\"post\">\n"
216+
" <form :action=\"`/%varName%/save/${item.%pkVarName%}`\" method=\"post\">\n"
217217
" <input type=\"hidden\" name=\"authenticity_token\" :value=\"token\" />\n"
218218
"%edititems%"
219219
" <p>\n"
220220
" <input type=\"submit\" value=\"Save\" />\n"
221221
" </p>\n"
222222
" </form>\n"
223-
" <a :href=\"`/%varName%/show/${item.id}`\">Show</a> |\n"
223+
" <a :href=\"`/%varName%/show/${item.%pkVarName%}`\">Show</a> |\n"
224224
" <a href=\"/%varName%/index\">Back</a>\n"
225225
"</template>\n"
226226
"\n"
@@ -317,6 +317,7 @@ bool ViteVueGenerator::generate(const QString &dstDir) const
317317
{"varName", varName},
318318
{"th", th},
319319
{"td", td},
320+
{"pkVarName", pkVarName},
320321
{"showitems", showitems},
321322
{"entryitems", entryitems},
322323
{"edititems", edititems},

tools/tspawn/vitevueservicegenerator.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ constexpr auto SERVICE_SOURCE_FILE_TEMPLATE =
4848
"\n"
4949
"void %clsname%Service::show(%arg%)\n"
5050
"{\n"
51-
" auto model = %clsname%::get(id);\n"
51+
" auto model = %clsname%::get(%id%);\n"
5252
" QJsonObject props {\n"
5353
" {\"item\", model.toJsonObject()},\n"
5454
" {\"error\", QString()},\n"
@@ -72,12 +72,12 @@ constexpr auto SERVICE_SOURCE_FILE_TEMPLATE =
7272
" {\"error\", \"Failed to create.\"},\n"
7373
" };\n"
7474
" texport(props);\n"
75-
" return -1; // render\n"
75+
" return %erres%; // render\n"
7676
" }\n"
7777
"\n"
7878
" QString notice = \"Created successfully.\";\n"
7979
" tflash(notice);\n"
80-
" return model.id(); // redirect to show\n"
80+
" return model.%id%(); // redirect to show\n"
8181
"}\n"
8282
"\n"
8383
"void %clsname%Service::edit(TSession& session, %arg%)\n"
@@ -87,7 +87,7 @@ constexpr auto SERVICE_SOURCE_FILE_TEMPLATE =
8787
" {\"error\", Tf::currentController()->flashVariant(\"error\").toString()},\n"
8888
" };\n"
8989
"\n"
90-
" auto model = %clsname%::get(id);\n"
90+
" auto model = %clsname%::get(%id%);\n"
9191
" if (!model.isNull()) {\n"
9292
" props[\"item\"] = model.toJsonObject();\n"
9393
"%code1%"

0 commit comments

Comments
 (0)