// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. use test_util as util; use util::assert_contains; use util::TestContextBuilder; #[test] fn init_subcommand_without_dir() { let context = TestContextBuilder::for_jsr().use_temp_cwd().build(); let cwd = context.temp_dir().path(); let output = context.new_command().args("init").split_output().run(); output.assert_exit_code(0); let stderr = output.stderr(); assert_contains!(stderr, "Project initialized"); assert!(!stderr.contains("cd")); assert_contains!(stderr, "deno run main.ts"); assert_contains!(stderr, "deno task dev"); assert_contains!(stderr, "deno test"); assert!(cwd.join("deno.json").exists()); let output = context .new_command() .env("NO_COLOR", "1") .args("run main.ts") .split_output() .run(); output.assert_exit_code(0); assert_eq!(output.stdout().as_bytes(), b"Add 2 + 3 = 5\n"); let output = context .new_command() .env("NO_COLOR", "1") .args("test") .split_output() .run(); output.assert_exit_code(0); assert_contains!(output.stdout(), "1 passed"); output.skip_output_check(); } #[test] fn init_subcommand_with_dir_arg() { let context = TestContextBuilder::for_jsr().use_temp_cwd().build(); let cwd = context.temp_dir().path(); let output = context .new_command() .args("init my_dir") .split_output() .run(); output.assert_exit_code(0); let stderr = output.stderr(); assert_contains!(stderr, "Project initialized"); assert_contains!(stderr, "cd my_dir"); assert_contains!(stderr, "deno run main.ts"); assert_contains!(stderr, "deno task dev"); assert_contains!(stderr, "deno test"); assert!(cwd.join("my_dir/deno.json").exists()); let output = context .new_command() .env("NO_COLOR", "1") .args("run my_dir/main.ts") .split_output() .run(); output.assert_exit_code(0); assert_eq!(output.stdout().as_bytes(), b"Add 2 + 3 = 5\n"); output.skip_output_check(); let output = context .new_command() .env("NO_COLOR", "1") .current_dir("my_dir") .args("test main_test.ts") .split_output() .run(); output.assert_exit_code(0); assert_contains!(output.stdout(), "1 passed"); output.skip_output_check(); } #[test] fn init_subcommand_with_quiet_arg() { let context = TestContextBuilder::for_jsr().use_temp_cwd().build(); let cwd = context.temp_dir().path(); let output = context .new_command() .args("init --quiet") .split_output() .run(); output.assert_exit_code(0); assert_eq!(output.stdout(), ""); assert!(cwd.join("deno.json").exists()); let output = context .new_command() .env("NO_COLOR", "1") .args("run main.ts") .split_output() .run(); output.assert_exit_code(0); assert_eq!(output.stdout().as_bytes(), b"Add 2 + 3 = 5\n"); output.skip_output_check(); let output = context .new_command() .env("NO_COLOR", "1") .args("test") .split_output() .run(); output.assert_exit_code(0); assert_contains!(output.stdout(), "1 passed"); output.skip_output_check(); } #[test] fn init_subcommand_with_existing_file() { let context = TestContextBuilder::new().use_temp_cwd().build(); let cwd = context.temp_dir().path(); cwd .join("main.ts") .write("console.log('Log from main.ts that already exists');"); let output = context.new_command().args("init").split_output().run(); output.assert_exit_code(0); output.assert_stderr_matches_text( "ℹ️ Skipped creating main.ts as it already exists ✅ Project initialized Run these commands to get started # Run the program deno run main.ts # Run the program and watch for file changes deno task dev # Run the tests deno test ", ); assert!(cwd.join("deno.json").exists()); let output = context .new_command() .env("NO_COLOR", "1") .args("run main.ts") .run(); output.assert_exit_code(0); output.assert_matches_text("Log from main.ts that already exists\n"); }