use crate::pretty_printer::with_parse;
use luau_common::ByteSlice;
use luau_common::flags;
use luau_syntax::parser::ParseOptions;
use luau_syntax::pretty_printer::{pretty_print, pretty_print_with_types};
#[test]
fn fuzzer_class() {
let source = r" class l0 end ";
let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);
with_parse(
source,
ParseOptions::default().with_declaration_syntax(true),
|result| {
pretty_print_with_types(result.root);
},
);
}
#[test]
fn simple_class_example() {
let source = r#"
class Point
public x: number
public y: number
function length(self)
return 100
end
function new()
return Point { x = 0, y = 0 }
end
end
"#;
let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);
with_parse(
source,
ParseOptions::default()
.with_comment_capture(true)
.with_declaration_syntax(true),
|_| {
assert_eq!(
pretty_print(
source.as_bytes(),
ParseOptions::default().with_declaration_syntax(true),
true,
false,
)
.code
.as_bytes(),
source.as_bytes()
);
},
);
}
#[test]
fn simple_class_inheritance() {
let source = r#"
class Animal
public species: string
end
class Cat extends Animal
public meowMult: number
end
"#;
let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);
assert_eq!(
pretty_print(source, ParseOptions::default(), true, false)
.code
.as_bytes(),
source.as_bytes()
);
}
#[test]
fn remixed_simple_class() {
let source = r#"
class Point
function length(self)
return 100
end
public x
function new(): Point
return Point { x = 0, y = 0 }
end
public y
end
"#;
let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);
with_parse(
source,
ParseOptions::default()
.with_comment_capture(true)
.with_declaration_syntax(true),
|_| {
assert_eq!(
pretty_print(
source.as_bytes(),
ParseOptions::default().with_declaration_syntax(true),
true,
false,
)
.code
.as_bytes(),
source.as_bytes()
);
},
);
}
#[test]
fn simple_class_with_public_functions() {
let source = r#"
class Point
public function length(self)
return 100
end
public x
public function new(): Point
return Point { x = 0, y = 0 }
end
public y
end
"#;
let _classes = flags::DebugLuauUserDefinedClasses.scoped(true);
with_parse(
source,
ParseOptions::default()
.with_comment_capture(true)
.with_declaration_syntax(true),
|_| {
assert_eq!(
pretty_print(
source.as_bytes(),
ParseOptions::default().with_declaration_syntax(true),
true,
false,
)
.code
.as_bytes(),
source.as_bytes()
);
},
);
}