From b6b32fef47e8f7e645c0f693e386a3cd12c0440b Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Sun, 19 May 2024 14:02:12 +0200 Subject: [PATCH] tests(error_derive): Init --- tests/error_derive/expected.md | 75 ++++++++++++++++++++++++++++++++++ tests/error_derive/input.tri | 35 ++++++++++++++++ tests/error_derive/main.rs | 39 ++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 tests/error_derive/expected.md create mode 100644 tests/error_derive/input.tri create mode 100644 tests/error_derive/main.rs diff --git a/tests/error_derive/expected.md b/tests/error_derive/expected.md new file mode 100644 index 0000000..601259a --- /dev/null +++ b/tests/error_derive/expected.md @@ -0,0 +1,75 @@ +# Host files + +File path: `out/dir/api.rs` + +```rust +// Host code +/* Rust API */ +#[derive(trixy::__private::thiserror::Error)] +#[allow(non_camel_case_types)] +#[derive(Debug)] +pub enum ErrorOne { + #[error("I'm an error")] + Error, + #[error("I'm also an error'")] + ErrorB, +} +impl From for ErrorOne { + fn from(value: crate::ErrorOne_c) -> Self { + match value { + crate::ErrorOne_c::Error => Self::Error, + crate::ErrorOne_c::ErrorB => Self::ErrorB, + } + } +} +#[derive(Debug)] +pub enum Commands {} +/* C API */ +#[derive(trixy::__private::thiserror::Error)] +#[allow(non_camel_case_types)] +#[repr(C)] +#[derive(Debug)] +pub enum ErrorOne_c { + #[error("I'm an error")] + Error, + #[error("I'm also an error'")] + ErrorB, +} +impl From for ErrorOne_c { + fn from(value: crate::ErrorOne) -> Self { + match value { + crate::ErrorOne::Error => Self::Error, + crate::ErrorOne::ErrorB => Self::ErrorB, + } + } +} +// vim: filetype=rust +``` + +# Auxiliary files + +File path: `dist/interface.h` + +```c +#if !defined TRIXY_MAIN_HEADER +#define TRIXY_MAIN_HEADER + +#include "errno.h" +#include "string.h" +#include "vec.h" + +/** + */ +enum ErrorOne +{ + /** + */ + Error, + /** + */ + ErrorB, +}; + +#endif // if !defined TRIXY_MAIN_HEADER +// vim: filetype=c +``` diff --git a/tests/error_derive/input.tri b/tests/error_derive/input.tri new file mode 100644 index 0000000..eccdcf2 --- /dev/null +++ b/tests/error_derive/input.tri @@ -0,0 +1,35 @@ +/* +* Copyright (C) 2023 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later +* +* This file is part of the Trixy crate for Trinitrix. +* +* Trixy is free software: you can redistribute it and/or modify +* it under the terms of the Lesser GNU General Public License as +* published by the Free Software Foundation, either version 3 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* and the Lesser GNU General Public License along with this program. +* If not, see . +*/ + +#[derive(Error)] +enum ErrorOne { + #[error = "I'm an error"] + Error, + + #[error = "I'm also an error'"] + ErrorB, + + // TODO: We also need to assert, that all enum veriants have the error attribute. <2024-05-19> +} + +// Trixy is sort of a subset of rust +// vim: syntax=rust diff --git a/tests/error_derive/main.rs b/tests/error_derive/main.rs new file mode 100644 index 0000000..35c675d --- /dev/null +++ b/tests/error_derive/main.rs @@ -0,0 +1,39 @@ +/* +* Copyright (C) 2023 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later +* +* This file is part of the Trixy crate for Trinitrix. +* +* Trixy is free software: you can redistribute it and/or modify +* it under the terms of the Lesser GNU General Public License as +* published by the Free Software Foundation, either version 3 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* and the Lesser GNU General Public License along with this program. +* If not, see . +*/ + +use pretty_assertions::assert_eq; +use trixy::macros::config::{file_tree::FileTree, trixy::TrixyConfig}; + +#[test] +pub fn error_derive() { + let input = include_str!("./expected.md"); + let expected: FileTree = input.parse().unwrap(); + + let config = TrixyConfig::new("callback_function") + .out_dir_path("out/dir") + .trixy_path("./tests/error_derive/input.tri") + .dist_dir_path("dist") + .add_c_headers(false); + + let actual = config.generate(); + assert_eq!(expected, actual); +}