Skip to main content

specta_elm/
lib.rs

1mod error;
2pub use error::{Error, ErrorTraceFrame};
3
4mod module;
5mod types;
6
7mod elm;
8pub use elm::Elm;
9pub use elm::Project;
10
11mod export;
12pub use export::Exporter;
13pub use export::IntoExporter as Output;
14pub use export::SingleFileOutput as SingleFileExporter;
15pub use export::TypesFileOutput as TypesFileExporter;
16
17#[allow(dead_code)]
18#[cfg(test)]
19mod test {
20
21    use std::process::Command;
22
23    use crate::Elm;
24    use crate::Project;
25    use crate::SingleFileExporter;
26    use crate::types;
27    use fs_extra::dir;
28    use fs_extra::dir::CopyOptions;
29    use specta::Types;
30    use tempfile::tempdir;
31
32    #[test]
33    fn elm_bin_check() {
34        assert!(Command::new("elmo").arg("--versiono").status().is_err());
35        assert!(Command::new("elm").arg("--version").status().is_ok());
36    }
37
38    #[test]
39    fn elm_test_project_ready() {
40        assert!(Project::try_from("test/elm-project").is_ok());
41    }
42
43    // fn do_stuff_in_tmp_project<'a, F>(stuff_to_do: &[F])
44    // where
45    //     F: Fn(&'a str) -> bool,
46    // {
47    //     let dir = tempdir().expect("what? failed to create tmpdir");
48    //
49    //     let opt = CopyOptions::default().overwrite(true);
50    //     let copydir_res = dir::copy("test/elm-project", dir.path(), &opt);
51    //     assert!(copydir_res.is_ok());
52    //     copydir_res.unwrap();
53    //
54    //     let args = ("Maps", Types::default().register::<MapTrioska>(), "map = AMap");
55    //
56    //     let project_path = dir.path().to_path_buf().join("elm-project");
57    // }
58
59    #[test]
60    fn compile_types_for_test_project() {
61        let maybe_dir = tempdir();
62        assert!(maybe_dir.is_ok());
63        let dir = maybe_dir.unwrap();
64
65        let opt = CopyOptions::default().overwrite(true);
66        let copydir_res = dir::copy("test/elm-project", dir.path(), &opt);
67        assert!(copydir_res.is_ok());
68        copydir_res.unwrap();
69
70        let project_path = dir.path().to_path_buf().join("elm-project");
71
72        let types = Types::default().register::<types::map::test::MapTrioska>();
73        let maybe_elm =
74            Elm::init(types, &project_path.to_string_lossy()).export(SingleFileExporter("Map.elm"));
75        assert!(maybe_elm.is_ok());
76
77        maybe_elm.unwrap();
78        //make src/Main.elm --output=dist/app.js --debug
79        // cd here!
80        dbg!(
81            std::fs::read_dir(&project_path.join("src"))
82                .unwrap()
83                .map(|e| e.unwrap().file_name())
84                .collect::<Vec<_>>()
85        );
86        let maybe_compiles = Command::new("elm")
87            .current_dir(project_path)
88            .arg("make")
89            .arg("src/Main.elm")
90            .arg("--output=success.js")
91            .output();
92
93        assert!(maybe_compiles.is_ok());
94        let output = maybe_compiles.unwrap();
95        dbg!("AAAH: {}", String::from_utf8_lossy(&output.stdout));
96
97        assert!(output.status.success())
98
99        // assert!(maybe_compiles.is_ok())
100    }
101}