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 #[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 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 }
101}