diff --git a/Cargo.lock b/Cargo.lock index d2983c0..5a7460a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -96,6 +96,7 @@ dependencies = [ "assert_cmd", "clap", "clap_complete", + "escargot", "pretty_assertions", "thiserror", "tracing", @@ -105,9 +106,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.3" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "949626d00e063efc93b6dca932419ceb5432f99769911c0b995f7e884c778813" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" dependencies = [ "clap_builder", "clap_derive", @@ -136,9 +137,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.3" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90239a040c80f5e14809ca132ddc4176ab33d5e17e49691793296e3fcb34d72f" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" dependencies = [ "heck", "proc-macro2", @@ -176,12 +177,30 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "escargot" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f474c6844cbd04e783d0f25757583db4f491770ca618bedf2fb01815fc79939" +dependencies = [ + "log", + "once_cell", + "serde", + "serde_json", +] + [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + [[package]] name = "lazy_static" version = "1.4.0" @@ -202,9 +221,9 @@ checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "nu-ansi-term" @@ -230,9 +249,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "predicates" @@ -295,6 +314,12 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + [[package]] name = "serde" version = "1.0.197" @@ -315,6 +340,17 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.115" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -338,9 +374,9 @@ checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" [[package]] name = "syn" -version = "2.0.55" +version = "2.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "002a1b3dbf967edfafc32655d0f377ab0bb7b994aa1d32c8cc7e9b8bf3ebb8f0" +checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 77a5c72..edfa37d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,13 +15,11 @@ tracing-subscriber = { version = "0.3", optional = true } clap = { version = "4", optional = true, features = ["derive"] } clap_complete = { version = "4", optional = true } - - - [build-dependencies] [dev-dependencies] assert_cmd = "2" +escargot = "0.5" pretty_assertions = { version = "1", features = ["unstable"] } [[bin]] diff --git a/src/bin/chen_lang.rs b/src/bin/chen_lang.rs index fb3af8a..75d6991 100644 --- a/src/bin/chen_lang.rs +++ b/src/bin/chen_lang.rs @@ -74,11 +74,10 @@ fn run_file(code_file: String) -> Result<()> { debug!(?s); let mut f = OpenOptions::new().read(true).open(s)?; - let mut v = vec![]; - f.read_to_end(&mut v)?; - let code = String::from_utf8(v)?; - + let mut code = String::new(); + f.read_to_string(&mut code)?; debug!(?code); + chen_lang::run(code)?; Ok(()) } @@ -86,20 +85,3 @@ fn run_file(code_file: String) -> Result<()> { fn print_completions(gen: G, cmd: &mut Command) { generate(gen, cmd, cmd.get_name().to_string(), &mut io::stdout()); } - -#[cfg(test)] -mod tests { - #[test] - fn _test() { - assert_cmd::Command::new("cargo").arg("build").ok().unwrap(); - } - - #[test] - fn cmd_test() { - assert_cmd::Command::cargo_bin(env!("CARGO_PKG_NAME")) - .unwrap() - .args(["-h"]) - .ok() - .unwrap(); - } -} diff --git a/src/tests/cli_test.rs b/src/tests/cli_test.rs new file mode 100644 index 0000000..d48f6e7 --- /dev/null +++ b/src/tests/cli_test.rs @@ -0,0 +1,17 @@ +use std::process::Command; + +use assert_cmd::{cargo::CargoError, prelude::*}; + +fn command() -> Command { + let runner = escargot::CargoBuild::new() + .current_target() + .run() + .map_err(CargoError::with_cause) + .unwrap(); + runner.command() +} + +#[test] +fn cmd_test() { + command().args(["-h"]).ok().unwrap(); +} diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 69e88e8..a328191 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -1,7 +1,7 @@ +mod cli_test; mod expression_test; mod parse_test; mod token_test; - #[cfg(test)] mod tests_1 { use pretty_assertions::assert_eq; diff --git a/src/tests/token_test.rs b/src/tests/token_test.rs index 7585b35..3a3de33 100644 --- a/src/tests/token_test.rs +++ b/src/tests/token_test.rs @@ -1,15 +1,13 @@ -#![rustfmt::skip] - use pretty_assertions::assert_eq; -use crate::Keyword::DEF; -use crate::Operator::{NotEquals, Or, Subtract}; use crate::token; use crate::token::Keyword::{ELSE, FOR, IF, LET}; -use crate::token::Operator::{ADD, Assign, Equals, LT, Mod}; +use crate::token::Operator::{Assign, Equals, Mod, ADD, LT}; use crate::token::Token::{ Identifier, Int, Keyword, LBig, LParen, NewLine, Operator, RBig, RParen, String, }; +use crate::Keyword::DEF; +use crate::Operator::{NotEquals, Or, Subtract}; #[test] fn test_parse_keyword() { @@ -42,7 +40,7 @@ for i<100{ } "# .to_string(); - + #[rustfmt::skip] assert_eq!( token::tokenlizer(code).unwrap(), vec![ @@ -90,6 +88,7 @@ println(sum) "# .to_string(); + #[rustfmt::skip] assert_eq!( token::tokenlizer(code).unwrap(), vec![