Skip to content

Commit 8b21808

Browse files
committed
test a simple if statement
1 parent c77d6c9 commit 8b21808

4 files changed

Lines changed: 49 additions & 2 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ rustpython-ast = { version = "0.4.0" }
88

99
[dev-dependencies]
1010
rustpython-parser = "0.4.0"
11+
rustpython-ast = { version = "0.4.0", features = ["fold"] }

src/lib.rs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,39 @@ pub use crate::unparser::Unparser;
55
#[cfg(test)]
66
mod tests {
77
use super::*;
8+
use rustpython_ast::text_size::TextRange;
9+
use rustpython_ast::Fold;
10+
11+
use rustpython_ast::TextSize;
812
use rustpython_parser::ast::Suite;
913
use rustpython_parser::Parse;
1014

1115
use std::fs;
1216
use std::io;
1317
use std::path::Path;
18+
19+
struct RangesEraser {}
20+
21+
impl Fold<TextRange> for RangesEraser {
22+
type TargetU = TextRange;
23+
24+
type Error = std::convert::Infallible;
25+
26+
type UserContext = TextRange;
27+
28+
fn will_map_user(&mut self, _user: &TextRange) -> Self::UserContext {
29+
TextRange::new(TextSize::new(0), TextSize::new(0))
30+
}
31+
32+
fn map_user(
33+
&mut self,
34+
_user: TextRange,
35+
start: Self::UserContext,
36+
) -> Result<Self::TargetU, Self::Error> {
37+
Ok(start)
38+
}
39+
}
40+
1441
#[test]
1542
fn test_predefined_files() -> io::Result<()> {
1643
for entry in fs::read_dir("./test_files")? {
@@ -34,7 +61,19 @@ mod tests {
3461
fs::write(&new_entry_path, &new_source)?;
3562
let new_stmts =
3663
Suite::parse(&new_source, new_entry_path.to_str().unwrap()).unwrap();
37-
for (stmt, new_stmt) in stmts.iter().zip(new_stmts.iter()) {
64+
// erase range information
65+
let mut eraser = RangesEraser {};
66+
let mut erased_new_stmts = Vec::new();
67+
for stmt in &new_stmts {
68+
erased_new_stmts.push(eraser.fold_stmt(stmt.to_owned()).unwrap());
69+
}
70+
71+
let mut erased_stmts = Vec::new();
72+
for stmt in &stmts {
73+
erased_stmts.push(eraser.fold_stmt(stmt.to_owned()).unwrap());
74+
}
75+
76+
for (stmt, new_stmt) in erased_stmts.iter().zip(erased_new_stmts.iter()) {
3877
assert_eq!(stmt, new_stmt)
3978
}
4079
}

src/unparser.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,7 @@ impl Unparser {
858858
self.unparse_expr(&node.func);
859859
let mut args_iter = node.args.iter().peekable();
860860
let mut keywords_iter = node.keywords.iter().peekable();
861+
self.write_str("(");
861862
while let Some(arg) = args_iter.next() {
862863
self.unparse_expr(arg);
863864
if args_iter.peek().is_some() || keywords_iter.peek().is_some() {
@@ -870,6 +871,7 @@ impl Unparser {
870871
self.write_str(", ");
871872
}
872873
}
874+
self.write_str(")");
873875
}
874876

875877
fn unparse_expr_formatted_value(&mut self, node: &ExprFormattedValue<TextRange>) {
@@ -915,7 +917,7 @@ impl Unparser {
915917
self.write_str(&utf8.unwrap());
916918
}
917919
Constant::Int(value) => self.write_str(&value.to_string()),
918-
Constant::Str(value) => self.write_str(value),
920+
Constant::Str(value) => self.write_str(&format!("\"{}\"", value)),
919921
Constant::None => self.write_str("None"),
920922
Constant::Complex { real, imag: _ } => self.write_str(&real.to_string()),
921923
Constant::Float(value) => self.write_str(&value.to_string()),

test_files/simple_if_statement.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
if __name__ == "__main__":
2+
pass
3+
4+
if True:
5+
print("Hello!")

0 commit comments

Comments
 (0)