mod common;
use jsxrs::{JsxrsError, render_string};
use serde_json::json;
use common::minimal_config;
#[test]
fn should_return_parse_error_when_given_invalid_jsx_syntax() {
let source = r#"export default function Page() {
return <div><span></div>;
}"#;
let result = render_string(source, "page.jsx", &json!({}), &minimal_config());
assert!(result.is_err());
assert!(matches!(result.unwrap_err(), JsxrsError::Parse(_)));
}
#[test]
fn should_return_error_when_no_default_export_found() {
let source = r#"function Page() {
return <div>Hello</div>;
}"#;
let result = render_string(source, "page.jsx", &json!({}), &minimal_config());
assert!(result.is_err());
}
#[test]
fn should_return_unsupported_error_when_given_variable_declaration() {
let source = r#"export default function Page() {
return <div>{let x = 1}</div>;
}"#;
let result = render_string(source, "page.jsx", &json!({}), &minimal_config());
assert!(result.is_err());
}
#[test]
fn should_return_error_when_file_not_found() {
let path = common::fixtures_dir().join("nonexistent.jsx");
let result = jsxrs::render_file(&path, &json!({}), &minimal_config());
assert!(result.is_err());
}
#[test]
fn should_return_error_when_referencing_undefined_prop() {
let source = r#"export default function Page(props) {
return <div>{props.missing}</div>;
}"#;
let props = json!({});
let result = render_string(source, "page.jsx", &props, &minimal_config());
assert!(result.is_err());
}
#[test]
fn should_return_error_when_import_target_not_found() {
let source = r#"import Foo from './does_not_exist';
export default function Page() {
return <Foo />;
}"#;
let config = common::config_with_base_dir(common::fixtures_dir());
let result = render_string(source, "page.jsx", &json!({}), &config);
assert!(result.is_err());
}
#[test]
fn should_return_parse_error_when_given_invalid_tsx_syntax() {
let source = r#"
interface Props {
name: string
}
export default function Page(props: Props) {
return <div><span></div>;
}"#;
let result = render_string(source, "page.tsx", &json!({}), &minimal_config());
assert!(result.is_err());
assert!(matches!(result.unwrap_err(), JsxrsError::Parse(_)));
}
#[test]
fn should_return_error_when_source_is_empty() {
let source = "";
let result = render_string(source, "page.jsx", &json!({}), &minimal_config());
assert!(result.is_err());
}