diff --git a/README.md b/README.md index 2d45a13..4bce6cd 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,52 @@ -# Taller Oxidar LS +# Oxidar +¡Bienvenido a **Oxidar**! El objetivo de este curso es aprender Rust creando un proyecto desde cero. El curso está dividido en varias etapas donde iremos agregando nuevas funcionalidades al proyecto, cada una introduciendo un nuevo concepto o un desafío con lo que ya se vio hasta el momento. -## 1. Setup Your Project +## Herramientas -In this stage, we'll setup command line app that replies with a standard hello world message. +### cargo -The tester will execute your program like this: +`cargo` es el gestor de paquetes de Rust. Además de gestionar los paquetes, con `cargo` podemos correr tests, construir el proyecto y ejecutar nuestro programa. Los comandos que más utilizaremos son: -```shell -$ ./your_program -``` +- `cargo run -- `: Corre el proyecto pasando como argumentos ``. +- `cargo test`: Corre los tests. +- `cargo add `: Agrega al `Cargo.toml` la dependencia `` +<<<<<<< Updated upstream It then expects to receive a "Hello Rust!" on the standard output. +======= +### crates.io +>>>>>>> Stashed changes -## 2. Write header section +[crates.io](https://crates.io) es el sitio donde se alojan todos los crates públicos o herramientas de líneas de comando que podemos utilizar para construir nuestro proyecto. Generalmente cuando necesitamos una dependencia la solemos buscar aquí. -## 3. Write question section +En esta página no sólo encontraremos el listado de crates disponibles para utilizar. También encontraremos documentación de los crates (si el autor se molestó en crearla) y su código de fuente. -## 4. Write answer section +### clippy -## 5. Parse header section +`clippy` es el linter oficial de Rust. Esta herramienta nos sirve para marcar potenciales errores y estilar el código de forma correcta. -## 6. Parse question section +### rust-analizer -## 7. Parse compressed packet +[rust-analizer](https://rust-analyzer.github.io/) es una implementación del [Languange Server Protocol](https://microsoft.github.io/language-server-protocol/) para Rust. El mismo nos provee auto-completado de código entre otras cosas útiles para hacer nuestra vida un poco más sencilla. -## 8. Forwarding Server +### Visual Studio Code + +Visual Studio Code tiene gran soporte para Rust. + +Te recomendamos instalarte los siguientes plug-ins: +- [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) + > El mejor amigo de todos los rustaceans. Te va a recomendar mejores practicas, detectar patrones y darte explicaciones de como hacer tu codigo más idiomatico. +- [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml) + > Highlight y formatting para el formato de configuraciones más usado por la comunidad. +- [Dependi](https://marketplace.visualstudio.com/items?itemName=fill-labs.dependi) + > Tu compañero para mantener tus dependencias al dia y acceder a su documentación. + + +## Corriendo el proyecto + +Para probar el proyecto, corre `cargo run`. Después de la compilación deberías ver el mensaje `Hello, world!` en la pantalla. + + +Cambia el mensaje a "Hola, Oxidar!" para pasar el primer nivel. + +Exitos! diff --git a/docs/stage0.md b/docs/stage0.md deleted file mode 100644 index edf6df2..0000000 --- a/docs/stage0.md +++ /dev/null @@ -1,44 +0,0 @@ -# Introducción - -¡Bienvenido a Oxidar! El objetivo de este curso es aprender Rust creando un proyecto desde cero. El curso está dividido en varias etapas donde iremos agregando nuevas funcionalidades al proyecto, cada una introduciendo un nuevo concepto o un desafío con lo que ya se vio hasta el momento. - -# Herramientas - -## cargo - -`cargo` es el gestor de paquetes de Rust. Además de gestionar los paquetes, con `cargo` podemos correr tests, construir el proyecto y ejecutar nuestro programa. Los comandos que más utilizaremos son: - -- `cargo run -- `: Corre el proyecto pasando como argumentos ``. -- `cargo test`: Corre los tests. -- `cargo add `: Agrega al `Cargo.toml` la dependencia `` - -## crates.io - -[crates.io](https://crates.io) es el sitio donde se alojan todos los crates públicos o herramientas de líneas de comando que podemos utilizar para construir nuestro proyecto. Generalmente cuando necesitamos una dependencia la solemos buscar aquí. - -En esta página no sólo encontraremos el listado de crates disponibles para utilizar. También encontraremos documentación de los crates (si el autor se molestó en crearla) y su código de fuente. - -## clippy - -`clippy` es el linter oficial de Rust. Esta herramienta nos sirve para marcar potenciales errores y estilar el código de forma correcta. - -## rust-analizer - -[rust-analizer](https://rust-analyzer.github.io/) es una implementación del [Languange Server Protocol](https://microsoft.github.io/language-server-protocol/) para Rust. El mismo nos provee auto-completado de código entre otras cosas útiles para hacer nuestra vida un poco más sencilla. - -## Visual Studio Code - -Visual Studio Code tiene gran soporte para Rust. - -Te recomendamos instalarte los siguientes plug-ins: -- [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) - > El mejor amigo de todos los rustaceans. Te va a recomendar mejores practicas, detectar patrones y darte explicaciones de como hacer tu codigo más idiomatico. -- [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml) - > Highlight y formatting para el formato de configuraciones más usado por la comunidad. -- [Dependi](https://marketplace.visualstudio.com/items?itemName=fill-labs.dependi) - > Tu compañero para mantener tus dependencias al dia y acceder a su documentación. - - -# Corriendo el proyecto - -Para probar el proyecto, corre `cargo run`. Después de la compilación deberías ver el mensaje `Hello, world!` en la pantalla. diff --git a/src/main.rs b/src/main.rs index a9366fa..88416ad 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,49 +1,3 @@ -use std::fs::{self, DirEntry}; -use std::io::Error; - -const ERROR_LISTING_FILES: &str = "there was an error listing files"; - -#[derive(Default)] -struct Options { - all: bool, -} - fn main() { - let args: Vec = std::env::args().collect(); - - let mut options = Options::default(); - - for arg in &args { - if arg == "-a" || arg == "--all" { - options.all = true; - } - } - - let path = args.last().map(|s| s.as_str()).unwrap_or("."); - let paths = fs::read_dir(path).expect(ERROR_LISTING_FILES); - - let mut dir_entries: Vec = paths - .into_iter() - .collect::, Error>>() - .expect(ERROR_LISTING_FILES) - .into_iter() - .filter_map(|f| f.file_name().into_string().ok()) - .collect(); - - dir_entries.sort(); - - let hidden_files: Vec<&String> = dir_entries.iter().filter(|s| s.starts_with('.')).collect(); - let unhidden_files: Vec<&String> = dir_entries.iter().filter(|s| !s.starts_with('.')).collect(); - - if options.all { - print!(".\t..\t"); - for file in hidden_files { - print!("{}\t", file) - } - } - - for file in unhidden_files { - print!("{}\t", file) - } - println!(); + println!("Hola Rustacean!"); } diff --git a/tests/stage0.rs b/tests/stage0.rs index 7295c68..42ea917 100644 --- a/tests/stage0.rs +++ b/tests/stage0.rs @@ -1,17 +1,12 @@ use std::process::Command; #[test] -fn test_stage0() { +fn test_stage_0() { let output = Command::new("./target/debug/oxidar-ls") .args(["./test_dir"]) .output() .expect("failed to execute process"); - let expected = Command::new("/bin/ls") - .args(["./test_dir"]) - .output() - .expect("failed to execute process"); - - println!("{}", String::from_utf8(output.stdout).unwrap()); - println!("{}", String::from_utf8(expected.stdout).unwrap()); + assert!(output.status.success()); + assert_eq!(output.stdout, b"Hola Oxidar!\n") } diff --git a/tests/stage1.rs b/tests/stage1.rs index 3d31094..1efb8f2 100644 --- a/tests/stage1.rs +++ b/tests/stage1.rs @@ -1,16 +1,14 @@ -#![cfg(feature = "stage1")] - use std::process::Command; #[test] -fn test_stage1() { +fn test_stage_1() { let output = Command::new("./target/debug/oxidar-ls") - .args(["-a", "./test_dir"]) + .args(["./test_dir"]) .output() .expect("failed to execute process"); let expected = Command::new("/bin/ls") - .args(["-a", "./test_dir"]) + .args(["./test_dir"]) .output() .expect("failed to execute process"); diff --git a/tests/stage2.rs b/tests/stage2.rs new file mode 100644 index 0000000..c9fe250 --- /dev/null +++ b/tests/stage2.rs @@ -0,0 +1,19 @@ +#![cfg(feature = "stage1")] + +use std::process::Command; + +#[test] +fn test_stage_2() { + let output = Command::new("./target/debug/oxidar-ls") + .args(["-a", "./test_dir"]) + .output() + .expect("failed to execute process"); + + let expected = Command::new("/bin/ls") + .args(["-a", "./test_dir"]) + .output() + .expect("failed to execute process"); + + println!("{}", String::from_utf8(output.stdout).unwrap()); + println!("{}", String::from_utf8(expected.stdout).unwrap()); +}