jac-client 0.2.8__py3-none-any.whl → 0.2.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- jac_client/examples/all-in-one/{app.jac → main.jac} +5 -5
- jac_client/examples/all-in-one/pages/BudgetPlanner.jac +8 -1
- jac_client/examples/all-in-one/pages/FeaturesTest.jac +16 -1
- jac_client/examples/all-in-one/pages/{FeaturesTest.cl.jac → features_test_ui.cl.jac} +11 -0
- jac_client/examples/all-in-one/pages/nestedDemo.jac +1 -1
- jac_client/examples/all-in-one/pages/notFound.jac +2 -7
- jac_client/plugin/cli.jac +491 -411
- jac_client/plugin/client.jac +25 -0
- jac_client/plugin/client_runtime.cl.jac +5 -1
- jac_client/plugin/impl/client.impl.jac +96 -55
- jac_client/plugin/impl/client_runtime.impl.jac +154 -0
- jac_client/plugin/plugin_config.jac +243 -15
- jac_client/plugin/src/config_loader.jac +1 -0
- jac_client/plugin/src/desktop_config.jac +31 -0
- jac_client/plugin/src/impl/compiler.impl.jac +1 -1
- jac_client/plugin/src/impl/config_loader.impl.jac +8 -0
- jac_client/plugin/src/impl/desktop_config.impl.jac +191 -0
- jac_client/plugin/src/impl/vite_bundler.impl.jac +97 -16
- jac_client/plugin/src/targets/desktop/sidecar/main.py +144 -0
- jac_client/plugin/src/targets/desktop_target.jac +37 -0
- jac_client/plugin/src/targets/impl/desktop_target.impl.jac +2334 -0
- jac_client/plugin/src/targets/impl/registry.impl.jac +64 -0
- jac_client/plugin/src/targets/impl/web_target.impl.jac +157 -0
- jac_client/plugin/src/targets/register.jac +21 -0
- jac_client/plugin/src/targets/registry.jac +87 -0
- jac_client/plugin/src/targets/web_target.jac +35 -0
- jac_client/plugin/src/vite_bundler.jac +6 -0
- jac_client/plugin/utils/__init__.jac +1 -0
- jac_client/plugin/utils/impl/node_installer.impl.jac +249 -0
- jac_client/plugin/utils/node_installer.jac +41 -0
- jac_client/templates/client.jacpack +72 -0
- jac_client/templates/fullstack.jacpack +61 -0
- jac_client/tests/conftest.py +48 -7
- jac_client/tests/test_cli.py +184 -70
- jac_client/tests/test_e2e.py +232 -0
- jac_client/tests/test_helpers.py +65 -0
- jac_client/tests/test_it.py +91 -135
- jac_client/tests/test_it_desktop.py +891 -0
- {jac_client-0.2.8.dist-info → jac_client-0.2.10.dist-info}/METADATA +4 -4
- jac_client-0.2.10.dist-info/RECORD +115 -0
- {jac_client-0.2.8.dist-info → jac_client-0.2.10.dist-info}/WHEEL +1 -1
- jac_client-0.2.8.dist-info/RECORD +0 -97
- /jac_client/examples/all-in-one/pages/{BudgetPlanner.cl.jac → budget_planner_ui.cl.jac} +0 -0
- /jac_client/examples/asset-serving/css-with-image/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/asset-serving/image-asset/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/asset-serving/import-alias/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/basic/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/basic-auth/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/basic-auth-with-router/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/basic-full-stack/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/css-styling/js-styling/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/css-styling/material-ui/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/css-styling/pure-css/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/css-styling/sass-example/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/css-styling/styled-components/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/css-styling/tailwind-example/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/full-stack-with-auth/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/little-x/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/nested-folders/nested-advance/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/nested-folders/nested-basic/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/ts-support/{src/app.jac → main.jac} +0 -0
- /jac_client/examples/with-router/{src/app.jac → main.jac} +0 -0
- {jac_client-0.2.8.dist-info → jac_client-0.2.10.dist-info}/entry_points.txt +0 -0
- {jac_client-0.2.8.dist-info → jac_client-0.2.10.dist-info}/top_level.txt +0 -0
jac_client/tests/test_cli.py
CHANGED
|
@@ -7,7 +7,7 @@ from subprocess import PIPE, Popen, run
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def test_create_jac_app() -> None:
|
|
10
|
-
"""Test jac create --
|
|
10
|
+
"""Test jac create --use client command."""
|
|
11
11
|
test_project_name = "test-jac-app"
|
|
12
12
|
|
|
13
13
|
# Create a temporary directory for testing
|
|
@@ -17,9 +17,9 @@ def test_create_jac_app() -> None:
|
|
|
17
17
|
# Change to temp directory
|
|
18
18
|
os.chdir(temp_dir)
|
|
19
19
|
|
|
20
|
-
# Run jac create --
|
|
20
|
+
# Run jac create --use client command
|
|
21
21
|
process = Popen(
|
|
22
|
-
["jac", "create", "--
|
|
22
|
+
["jac", "create", "--use", "client", test_project_name],
|
|
23
23
|
stdin=PIPE,
|
|
24
24
|
stdout=PIPE,
|
|
25
25
|
stderr=PIPE,
|
|
@@ -30,7 +30,11 @@ def test_create_jac_app() -> None:
|
|
|
30
30
|
|
|
31
31
|
# Check that command succeeded
|
|
32
32
|
assert result_code == 0
|
|
33
|
-
|
|
33
|
+
# Check for success message (handles both old and new console formats)
|
|
34
|
+
assert (
|
|
35
|
+
f"Project '{test_project_name}' created successfully!" in stdout
|
|
36
|
+
or f"Project '{test_project_name}' created" in stdout
|
|
37
|
+
)
|
|
34
38
|
|
|
35
39
|
# Verify project directory was created
|
|
36
40
|
project_path = os.path.join(temp_dir, test_project_name)
|
|
@@ -104,24 +108,29 @@ def test_create_jac_app() -> None:
|
|
|
104
108
|
|
|
105
109
|
|
|
106
110
|
def test_create_jac_app_invalid_name() -> None:
|
|
107
|
-
"""Test jac create --
|
|
111
|
+
"""Test jac create --use client command with project names containing spaces.
|
|
112
|
+
|
|
113
|
+
Note: The current implementation allows names with spaces. This test
|
|
114
|
+
verifies that such projects are created successfully.
|
|
115
|
+
"""
|
|
108
116
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
109
117
|
original_cwd = os.getcwd()
|
|
110
118
|
try:
|
|
111
119
|
os.chdir(temp_dir)
|
|
112
120
|
|
|
113
|
-
# Test with
|
|
121
|
+
# Test with name containing spaces (currently allowed)
|
|
114
122
|
result = run(
|
|
115
|
-
["jac", "create", "--
|
|
123
|
+
["jac", "create", "--use", "client", "--skip", "name with spaces"],
|
|
116
124
|
capture_output=True,
|
|
117
125
|
text=True,
|
|
118
126
|
)
|
|
119
127
|
|
|
120
|
-
#
|
|
121
|
-
assert result.returncode
|
|
128
|
+
# Currently succeeds - names with spaces are allowed
|
|
129
|
+
assert result.returncode == 0
|
|
130
|
+
# Check for success message (handles both old and new console formats)
|
|
122
131
|
assert (
|
|
123
|
-
"Project name
|
|
124
|
-
in result.
|
|
132
|
+
"Project 'name with spaces' created successfully!" in result.stdout
|
|
133
|
+
or "Project 'name with spaces' created" in result.stdout
|
|
125
134
|
)
|
|
126
135
|
|
|
127
136
|
finally:
|
|
@@ -129,7 +138,7 @@ def test_create_jac_app_invalid_name() -> None:
|
|
|
129
138
|
|
|
130
139
|
|
|
131
140
|
def test_create_jac_app_existing_directory() -> None:
|
|
132
|
-
"""Test jac create --
|
|
141
|
+
"""Test jac create --use client command when directory already exists."""
|
|
133
142
|
test_project_name = "existing-test-app"
|
|
134
143
|
|
|
135
144
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
@@ -142,7 +151,7 @@ def test_create_jac_app_existing_directory() -> None:
|
|
|
142
151
|
|
|
143
152
|
# Try to create app with same name
|
|
144
153
|
process = Popen(
|
|
145
|
-
["jac", "create", "--
|
|
154
|
+
["jac", "create", "--use", "client", test_project_name],
|
|
146
155
|
stdin=PIPE,
|
|
147
156
|
stdout=PIPE,
|
|
148
157
|
stderr=PIPE,
|
|
@@ -160,7 +169,7 @@ def test_create_jac_app_existing_directory() -> None:
|
|
|
160
169
|
|
|
161
170
|
|
|
162
171
|
def test_create_jac_app_with_button_component() -> None:
|
|
163
|
-
"""Test jac create --
|
|
172
|
+
"""Test jac create --use client command creates Button.cl.jac component."""
|
|
164
173
|
test_project_name = "test-jac-app-component"
|
|
165
174
|
|
|
166
175
|
# Create a temporary directory for testing
|
|
@@ -170,9 +179,9 @@ def test_create_jac_app_with_button_component() -> None:
|
|
|
170
179
|
# Change to temp directory
|
|
171
180
|
os.chdir(temp_dir)
|
|
172
181
|
|
|
173
|
-
# Run jac create --
|
|
182
|
+
# Run jac create --use client command
|
|
174
183
|
process = Popen(
|
|
175
|
-
["jac", "create", "--
|
|
184
|
+
["jac", "create", "--use", "client", test_project_name],
|
|
176
185
|
stdin=PIPE,
|
|
177
186
|
stdout=PIPE,
|
|
178
187
|
stderr=PIPE,
|
|
@@ -183,7 +192,11 @@ def test_create_jac_app_with_button_component() -> None:
|
|
|
183
192
|
|
|
184
193
|
# Check that command succeeded
|
|
185
194
|
assert result_code == 0
|
|
186
|
-
|
|
195
|
+
# Check for success message (handles both old and new console formats)
|
|
196
|
+
assert (
|
|
197
|
+
f"Project '{test_project_name}' created successfully!" in stdout
|
|
198
|
+
or f"Project '{test_project_name}' created" in stdout
|
|
199
|
+
)
|
|
187
200
|
|
|
188
201
|
# Verify project directory was created
|
|
189
202
|
project_path = os.path.join(temp_dir, test_project_name)
|
|
@@ -259,7 +272,7 @@ def test_create_jac_app_with_button_component() -> None:
|
|
|
259
272
|
|
|
260
273
|
|
|
261
274
|
def test_create_jac_app_with_skip_flag() -> None:
|
|
262
|
-
"""Test jac create --
|
|
275
|
+
"""Test jac create --use client --skip command skips package installation."""
|
|
263
276
|
test_project_name = "test-jac-app-skip"
|
|
264
277
|
|
|
265
278
|
# Create a temporary directory for testing
|
|
@@ -269,9 +282,9 @@ def test_create_jac_app_with_skip_flag() -> None:
|
|
|
269
282
|
# Change to temp directory
|
|
270
283
|
os.chdir(temp_dir)
|
|
271
284
|
|
|
272
|
-
# Run jac create --
|
|
285
|
+
# Run jac create --use client --skip command
|
|
273
286
|
process = Popen(
|
|
274
|
-
["jac", "create", "--
|
|
287
|
+
["jac", "create", "--use", "client", "--skip", test_project_name],
|
|
275
288
|
stdin=PIPE,
|
|
276
289
|
stdout=PIPE,
|
|
277
290
|
stderr=PIPE,
|
|
@@ -282,7 +295,11 @@ def test_create_jac_app_with_skip_flag() -> None:
|
|
|
282
295
|
|
|
283
296
|
# Check that command succeeded
|
|
284
297
|
assert result_code == 0
|
|
285
|
-
|
|
298
|
+
# Check for success message (handles both old and new console formats)
|
|
299
|
+
assert (
|
|
300
|
+
f"Project '{test_project_name}' created successfully!" in stdout
|
|
301
|
+
or f"Project '{test_project_name}' created" in stdout
|
|
302
|
+
)
|
|
286
303
|
|
|
287
304
|
# Verify project directory was created
|
|
288
305
|
project_path = os.path.join(temp_dir, test_project_name)
|
|
@@ -303,7 +320,7 @@ def test_create_jac_app_with_skip_flag() -> None:
|
|
|
303
320
|
|
|
304
321
|
|
|
305
322
|
def test_create_jac_app_installs_default_packages() -> None:
|
|
306
|
-
"""Test jac create --
|
|
323
|
+
"""Test jac create --use client command attempts to install default packages."""
|
|
307
324
|
test_project_name = "test-jac-app-install"
|
|
308
325
|
|
|
309
326
|
# Create a temporary directory for testing
|
|
@@ -313,9 +330,9 @@ def test_create_jac_app_installs_default_packages() -> None:
|
|
|
313
330
|
# Change to temp directory
|
|
314
331
|
os.chdir(temp_dir)
|
|
315
332
|
|
|
316
|
-
# Run jac create --
|
|
333
|
+
# Run jac create --use client command
|
|
317
334
|
process = Popen(
|
|
318
|
-
["jac", "create", "--
|
|
335
|
+
["jac", "create", "--use", "client", test_project_name],
|
|
319
336
|
stdin=PIPE,
|
|
320
337
|
stdout=PIPE,
|
|
321
338
|
stderr=PIPE,
|
|
@@ -326,14 +343,22 @@ def test_create_jac_app_installs_default_packages() -> None:
|
|
|
326
343
|
|
|
327
344
|
# Check that command succeeded
|
|
328
345
|
assert result_code == 0
|
|
329
|
-
|
|
346
|
+
# Check for success message (handles both old and new console formats)
|
|
347
|
+
assert (
|
|
348
|
+
f"Project '{test_project_name}' created successfully!" in stdout
|
|
349
|
+
or f"Project '{test_project_name}' created" in stdout
|
|
350
|
+
)
|
|
330
351
|
|
|
331
352
|
# Verify project directory was created
|
|
332
353
|
project_path = os.path.join(temp_dir, test_project_name)
|
|
333
354
|
assert os.path.exists(project_path)
|
|
334
355
|
|
|
335
356
|
# Verify that installation was attempted (message should be in output)
|
|
336
|
-
|
|
357
|
+
# Handles both old and new console formats
|
|
358
|
+
assert (
|
|
359
|
+
"Installing default npm packages" in stdout
|
|
360
|
+
or "Installing npm packages" in stdout
|
|
361
|
+
)
|
|
337
362
|
|
|
338
363
|
# Verify package.json was generated (even if npm install failed)
|
|
339
364
|
package_json_path = os.path.join(
|
|
@@ -423,13 +448,13 @@ entry-point = "app.jac"
|
|
|
423
448
|
|
|
424
449
|
|
|
425
450
|
def test_install_without_cl_flag() -> None:
|
|
426
|
-
"""Test add command without --
|
|
451
|
+
"""Test add command without --npm flag should skip silently when no jac.toml exists."""
|
|
427
452
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
428
453
|
original_cwd = os.getcwd()
|
|
429
454
|
try:
|
|
430
455
|
os.chdir(temp_dir)
|
|
431
456
|
|
|
432
|
-
# Run add command without --
|
|
457
|
+
# Run add command without --npm flag and without jac.toml
|
|
433
458
|
result = run(
|
|
434
459
|
["jac", "add", "lodash"],
|
|
435
460
|
capture_output=True,
|
|
@@ -447,7 +472,7 @@ def test_install_without_cl_flag() -> None:
|
|
|
447
472
|
|
|
448
473
|
|
|
449
474
|
def test_install_all_packages() -> None:
|
|
450
|
-
"""Test add --
|
|
475
|
+
"""Test add --npm command installs all packages from jac.toml."""
|
|
451
476
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
452
477
|
original_cwd = os.getcwd()
|
|
453
478
|
try:
|
|
@@ -456,24 +481,31 @@ def test_install_all_packages() -> None:
|
|
|
456
481
|
# Create jac.toml with some dependencies
|
|
457
482
|
_create_jac_toml(temp_dir, deps='lodash = "^4.17.21"')
|
|
458
483
|
|
|
459
|
-
# Run add --
|
|
484
|
+
# Run add --npm command without package name
|
|
460
485
|
result = run(
|
|
461
|
-
["jac", "add", "--
|
|
486
|
+
["jac", "add", "--npm"],
|
|
462
487
|
capture_output=True,
|
|
463
488
|
text=True,
|
|
464
489
|
)
|
|
465
490
|
|
|
466
491
|
# Should succeed
|
|
467
492
|
assert result.returncode == 0
|
|
468
|
-
|
|
469
|
-
assert
|
|
493
|
+
# Check for install messages (handles both old and new console formats)
|
|
494
|
+
assert (
|
|
495
|
+
"Installing all npm packages" in result.stdout
|
|
496
|
+
or "Installing all npm packages" in result.stdout.lower()
|
|
497
|
+
)
|
|
498
|
+
assert (
|
|
499
|
+
"Installed all npm packages successfully" in result.stdout
|
|
500
|
+
or "Installed all npm packages" in result.stdout
|
|
501
|
+
)
|
|
470
502
|
|
|
471
503
|
finally:
|
|
472
504
|
os.chdir(original_cwd)
|
|
473
505
|
|
|
474
506
|
|
|
475
507
|
def test_install_package_to_dependencies() -> None:
|
|
476
|
-
"""Test add --
|
|
508
|
+
"""Test add --npm command adds package to dependencies."""
|
|
477
509
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
478
510
|
original_cwd = os.getcwd()
|
|
479
511
|
try:
|
|
@@ -482,17 +514,25 @@ def test_install_package_to_dependencies() -> None:
|
|
|
482
514
|
# Create jac.toml
|
|
483
515
|
config_path = _create_jac_toml(temp_dir)
|
|
484
516
|
|
|
485
|
-
# Run add --
|
|
517
|
+
# Run add --npm command with package name
|
|
486
518
|
result = run(
|
|
487
|
-
["jac", "add", "--
|
|
519
|
+
["jac", "add", "--npm", "lodash"],
|
|
488
520
|
capture_output=True,
|
|
489
521
|
text=True,
|
|
490
522
|
)
|
|
491
523
|
|
|
492
524
|
# Should succeed
|
|
493
525
|
assert result.returncode == 0
|
|
494
|
-
|
|
495
|
-
assert
|
|
526
|
+
# Check for package add messages (handles both old and new console formats)
|
|
527
|
+
assert (
|
|
528
|
+
"Adding lodash (npm)" in result.stdout
|
|
529
|
+
or "lodash" in result.stdout.lower()
|
|
530
|
+
)
|
|
531
|
+
assert (
|
|
532
|
+
"Added 1 package(s) to [dependencies.npm]" in result.stdout
|
|
533
|
+
or "Updated jac.toml" in result.stdout
|
|
534
|
+
or "dependencies.npm" in result.stdout
|
|
535
|
+
)
|
|
496
536
|
|
|
497
537
|
# Verify package was added to jac.toml
|
|
498
538
|
with open(config_path, "rb") as f:
|
|
@@ -505,7 +545,7 @@ def test_install_package_to_dependencies() -> None:
|
|
|
505
545
|
|
|
506
546
|
|
|
507
547
|
def test_install_package_with_version() -> None:
|
|
508
|
-
"""Test add --
|
|
548
|
+
"""Test add --npm command with specific version."""
|
|
509
549
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
510
550
|
original_cwd = os.getcwd()
|
|
511
551
|
try:
|
|
@@ -514,17 +554,25 @@ def test_install_package_with_version() -> None:
|
|
|
514
554
|
# Create jac.toml
|
|
515
555
|
config_path = _create_jac_toml(temp_dir)
|
|
516
556
|
|
|
517
|
-
# Run add --
|
|
557
|
+
# Run add --npm command with package and version
|
|
518
558
|
result = run(
|
|
519
|
-
["jac", "add", "--
|
|
559
|
+
["jac", "add", "--npm", "lodash@^4.17.21"],
|
|
520
560
|
capture_output=True,
|
|
521
561
|
text=True,
|
|
522
562
|
)
|
|
523
563
|
|
|
524
564
|
# Should succeed
|
|
525
565
|
assert result.returncode == 0
|
|
526
|
-
|
|
527
|
-
assert
|
|
566
|
+
# Check for package add messages (handles both old and new console formats)
|
|
567
|
+
assert (
|
|
568
|
+
"Adding lodash (npm)" in result.stdout
|
|
569
|
+
or "lodash" in result.stdout.lower()
|
|
570
|
+
)
|
|
571
|
+
assert (
|
|
572
|
+
"Added 1 package(s) to [dependencies.npm]" in result.stdout
|
|
573
|
+
or "Updated jac.toml" in result.stdout
|
|
574
|
+
or "dependencies.npm" in result.stdout
|
|
575
|
+
)
|
|
528
576
|
|
|
529
577
|
# Verify package was added with correct version
|
|
530
578
|
with open(config_path, "rb") as f:
|
|
@@ -537,7 +585,7 @@ def test_install_package_with_version() -> None:
|
|
|
537
585
|
|
|
538
586
|
|
|
539
587
|
def test_install_package_to_devdependencies() -> None:
|
|
540
|
-
"""Test add --
|
|
588
|
+
"""Test add --npm -d command adds package to dev-dependencies."""
|
|
541
589
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
542
590
|
original_cwd = os.getcwd()
|
|
543
591
|
try:
|
|
@@ -546,9 +594,9 @@ def test_install_package_to_devdependencies() -> None:
|
|
|
546
594
|
# Create jac.toml
|
|
547
595
|
config_path = _create_jac_toml(temp_dir)
|
|
548
596
|
|
|
549
|
-
# Run add --
|
|
597
|
+
# Run add --npm -d command
|
|
550
598
|
run(
|
|
551
|
-
["jac", "add", "--
|
|
599
|
+
["jac", "add", "--npm", "-d", "@types/react"],
|
|
552
600
|
capture_output=True,
|
|
553
601
|
text=True,
|
|
554
602
|
)
|
|
@@ -568,15 +616,15 @@ def test_install_package_to_devdependencies() -> None:
|
|
|
568
616
|
|
|
569
617
|
|
|
570
618
|
def test_install_without_config_json() -> None:
|
|
571
|
-
"""Test add --
|
|
619
|
+
"""Test add --npm command when jac.toml doesn't exist."""
|
|
572
620
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
573
621
|
original_cwd = os.getcwd()
|
|
574
622
|
try:
|
|
575
623
|
os.chdir(temp_dir)
|
|
576
624
|
|
|
577
|
-
# Run add --
|
|
625
|
+
# Run add --npm command without jac.toml
|
|
578
626
|
result = run(
|
|
579
|
-
["jac", "add", "--
|
|
627
|
+
["jac", "add", "--npm", "lodash"],
|
|
580
628
|
capture_output=True,
|
|
581
629
|
text=True,
|
|
582
630
|
)
|
|
@@ -590,13 +638,13 @@ def test_install_without_config_json() -> None:
|
|
|
590
638
|
|
|
591
639
|
|
|
592
640
|
def test_uninstall_without_cl_flag() -> None:
|
|
593
|
-
"""Test remove command without --
|
|
641
|
+
"""Test remove command without --npm flag should fail when no jac.toml exists."""
|
|
594
642
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
595
643
|
original_cwd = os.getcwd()
|
|
596
644
|
try:
|
|
597
645
|
os.chdir(temp_dir)
|
|
598
646
|
|
|
599
|
-
# Run remove command without --
|
|
647
|
+
# Run remove command without --npm flag and without jac.toml
|
|
600
648
|
result = run(
|
|
601
649
|
["jac", "remove", "lodash"],
|
|
602
650
|
capture_output=True,
|
|
@@ -612,7 +660,7 @@ def test_uninstall_without_cl_flag() -> None:
|
|
|
612
660
|
|
|
613
661
|
|
|
614
662
|
def test_uninstall_without_package_name() -> None:
|
|
615
|
-
"""Test remove --
|
|
663
|
+
"""Test remove --npm command without package name should fail."""
|
|
616
664
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
617
665
|
original_cwd = os.getcwd()
|
|
618
666
|
try:
|
|
@@ -621,9 +669,9 @@ def test_uninstall_without_package_name() -> None:
|
|
|
621
669
|
# Create jac.toml
|
|
622
670
|
_create_jac_toml(temp_dir)
|
|
623
671
|
|
|
624
|
-
# Run remove --
|
|
672
|
+
# Run remove --npm command without package name
|
|
625
673
|
result = run(
|
|
626
|
-
["jac", "remove", "--
|
|
674
|
+
["jac", "remove", "--npm"],
|
|
627
675
|
capture_output=True,
|
|
628
676
|
text=True,
|
|
629
677
|
)
|
|
@@ -637,7 +685,7 @@ def test_uninstall_without_package_name() -> None:
|
|
|
637
685
|
|
|
638
686
|
|
|
639
687
|
def test_uninstall_package_from_dependencies() -> None:
|
|
640
|
-
"""Test remove --
|
|
688
|
+
"""Test remove --npm command removes package from dependencies."""
|
|
641
689
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
642
690
|
original_cwd = os.getcwd()
|
|
643
691
|
try:
|
|
@@ -646,9 +694,9 @@ def test_uninstall_package_from_dependencies() -> None:
|
|
|
646
694
|
# Create jac.toml with a package
|
|
647
695
|
config_path = _create_jac_toml(temp_dir, deps='lodash = "^4.17.21"')
|
|
648
696
|
|
|
649
|
-
# Run remove --
|
|
697
|
+
# Run remove --npm command
|
|
650
698
|
result = run(
|
|
651
|
-
["jac", "remove", "--
|
|
699
|
+
["jac", "remove", "--npm", "lodash"],
|
|
652
700
|
capture_output=True,
|
|
653
701
|
text=True,
|
|
654
702
|
)
|
|
@@ -671,7 +719,7 @@ def test_uninstall_package_from_dependencies() -> None:
|
|
|
671
719
|
|
|
672
720
|
|
|
673
721
|
def test_uninstall_package_from_devdependencies() -> None:
|
|
674
|
-
"""Test remove --
|
|
722
|
+
"""Test remove --npm -d command removes package from dev-dependencies."""
|
|
675
723
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
676
724
|
original_cwd = os.getcwd()
|
|
677
725
|
try:
|
|
@@ -682,9 +730,9 @@ def test_uninstall_package_from_devdependencies() -> None:
|
|
|
682
730
|
temp_dir, dev_deps='"@types/react" = "^18.0.0"'
|
|
683
731
|
)
|
|
684
732
|
|
|
685
|
-
# Run remove --
|
|
733
|
+
# Run remove --npm -d command
|
|
686
734
|
result = run(
|
|
687
|
-
["jac", "remove", "--
|
|
735
|
+
["jac", "remove", "--npm", "-d", "@types/react"],
|
|
688
736
|
capture_output=True,
|
|
689
737
|
text=True,
|
|
690
738
|
)
|
|
@@ -706,7 +754,7 @@ def test_uninstall_package_from_devdependencies() -> None:
|
|
|
706
754
|
|
|
707
755
|
|
|
708
756
|
def test_uninstall_nonexistent_package() -> None:
|
|
709
|
-
"""Test remove --
|
|
757
|
+
"""Test remove --npm command with non-existent package should fail."""
|
|
710
758
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
711
759
|
original_cwd = os.getcwd()
|
|
712
760
|
try:
|
|
@@ -715,9 +763,9 @@ def test_uninstall_nonexistent_package() -> None:
|
|
|
715
763
|
# Create jac.toml without the package
|
|
716
764
|
_create_jac_toml(temp_dir)
|
|
717
765
|
|
|
718
|
-
# Run remove --
|
|
766
|
+
# Run remove --npm command with non-existent package
|
|
719
767
|
result = run(
|
|
720
|
-
["jac", "remove", "--
|
|
768
|
+
["jac", "remove", "--npm", "nonexistent-package"],
|
|
721
769
|
capture_output=True,
|
|
722
770
|
text=True,
|
|
723
771
|
)
|
|
@@ -731,15 +779,15 @@ def test_uninstall_nonexistent_package() -> None:
|
|
|
731
779
|
|
|
732
780
|
|
|
733
781
|
def test_uninstall_without_config_toml() -> None:
|
|
734
|
-
"""Test remove --
|
|
782
|
+
"""Test remove --npm command when jac.toml doesn't exist."""
|
|
735
783
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
736
784
|
original_cwd = os.getcwd()
|
|
737
785
|
try:
|
|
738
786
|
os.chdir(temp_dir)
|
|
739
787
|
|
|
740
|
-
# Run remove --
|
|
788
|
+
# Run remove --npm command without jac.toml
|
|
741
789
|
result = run(
|
|
742
|
-
["jac", "remove", "--
|
|
790
|
+
["jac", "remove", "--npm", "lodash"],
|
|
743
791
|
capture_output=True,
|
|
744
792
|
text=True,
|
|
745
793
|
)
|
|
@@ -752,8 +800,74 @@ def test_uninstall_without_config_toml() -> None:
|
|
|
752
800
|
os.chdir(original_cwd)
|
|
753
801
|
|
|
754
802
|
|
|
803
|
+
def test_config_files_from_jac_toml() -> None:
|
|
804
|
+
"""Test that [plugins.client.configs] in jac.toml generates config files."""
|
|
805
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
|
806
|
+
original_cwd = os.getcwd()
|
|
807
|
+
try:
|
|
808
|
+
os.chdir(temp_dir)
|
|
809
|
+
|
|
810
|
+
# Create jac.toml with postcss and tailwind configs
|
|
811
|
+
toml_content = """[project]
|
|
812
|
+
name = "test-configs"
|
|
813
|
+
version = "1.0.0"
|
|
814
|
+
description = "Test project"
|
|
815
|
+
entry-point = "main.jac"
|
|
816
|
+
|
|
817
|
+
[plugins.client.configs.postcss]
|
|
818
|
+
plugins = ["tailwindcss", "autoprefixer"]
|
|
819
|
+
|
|
820
|
+
[plugins.client.configs.tailwind]
|
|
821
|
+
content = ["./**/*.jac", "./.jac/client/**/*.{js,jsx}"]
|
|
822
|
+
plugins = []
|
|
823
|
+
|
|
824
|
+
[plugins.client.configs.tailwind.theme.extend]
|
|
825
|
+
colors = { primary = "#3490dc" }
|
|
826
|
+
"""
|
|
827
|
+
config_path = os.path.join(temp_dir, "jac.toml")
|
|
828
|
+
with open(config_path, "w") as f:
|
|
829
|
+
f.write(toml_content)
|
|
830
|
+
|
|
831
|
+
# Import and use ViteBundler to generate config files
|
|
832
|
+
from pathlib import Path
|
|
833
|
+
|
|
834
|
+
from jac_client.plugin.src.vite_bundler import ViteBundler
|
|
835
|
+
|
|
836
|
+
bundler = ViteBundler(Path(temp_dir))
|
|
837
|
+
created_files = bundler.create_config_files()
|
|
838
|
+
|
|
839
|
+
# Verify two config files were created
|
|
840
|
+
assert len(created_files) == 2
|
|
841
|
+
|
|
842
|
+
# Verify postcss.config.js was created with correct content
|
|
843
|
+
configs_dir = os.path.join(temp_dir, ".jac", "client", "configs")
|
|
844
|
+
postcss_config = os.path.join(configs_dir, "postcss.config.js")
|
|
845
|
+
assert os.path.exists(postcss_config)
|
|
846
|
+
|
|
847
|
+
with open(postcss_config) as f:
|
|
848
|
+
postcss_content = f.read()
|
|
849
|
+
|
|
850
|
+
assert "module.exports" in postcss_content
|
|
851
|
+
assert "tailwindcss" in postcss_content
|
|
852
|
+
assert "autoprefixer" in postcss_content
|
|
853
|
+
|
|
854
|
+
# Verify tailwind.config.js was created with correct content
|
|
855
|
+
tailwind_config = os.path.join(configs_dir, "tailwind.config.js")
|
|
856
|
+
assert os.path.exists(tailwind_config)
|
|
857
|
+
|
|
858
|
+
with open(tailwind_config) as f:
|
|
859
|
+
tailwind_content = f.read()
|
|
860
|
+
|
|
861
|
+
assert "module.exports" in tailwind_content
|
|
862
|
+
assert "./**/*.jac" in tailwind_content
|
|
863
|
+
assert "#3490dc" in tailwind_content
|
|
864
|
+
|
|
865
|
+
finally:
|
|
866
|
+
os.chdir(original_cwd)
|
|
867
|
+
|
|
868
|
+
|
|
755
869
|
def test_create_cl_and_run_no_root_files() -> None:
|
|
756
|
-
"""Test that jac create --
|
|
870
|
+
"""Test that jac create --use client + jac run doesn't create files outside .jac/ directory."""
|
|
757
871
|
test_project_name = "test-cl-no-root-files"
|
|
758
872
|
|
|
759
873
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
@@ -761,16 +875,16 @@ def test_create_cl_and_run_no_root_files() -> None:
|
|
|
761
875
|
try:
|
|
762
876
|
os.chdir(temp_dir)
|
|
763
877
|
|
|
764
|
-
# Run jac create --
|
|
878
|
+
# Run jac create --use client command
|
|
765
879
|
process = Popen(
|
|
766
|
-
["jac", "create", "--
|
|
880
|
+
["jac", "create", "--use", "client", test_project_name],
|
|
767
881
|
stdin=PIPE,
|
|
768
882
|
stdout=PIPE,
|
|
769
883
|
stderr=PIPE,
|
|
770
884
|
text=True,
|
|
771
885
|
)
|
|
772
886
|
stdout, stderr = process.communicate()
|
|
773
|
-
assert process.returncode == 0, f"jac create --
|
|
887
|
+
assert process.returncode == 0, f"jac create --use client failed: {stderr}"
|
|
774
888
|
|
|
775
889
|
project_path = os.path.join(temp_dir, test_project_name)
|
|
776
890
|
|