|
| 1 | +use crate::tests::helpers::fixtures::WASM_DIR; |
| 2 | +use lazy_static::lazy_static; |
| 3 | +use std::fs; |
| 4 | +use tree_sitter::{wasmtime::Engine, Parser, WasmStore}; |
| 5 | + |
| 6 | +lazy_static! { |
| 7 | + static ref ENGINE: Engine = Engine::default(); |
| 8 | +} |
| 9 | + |
| 10 | +#[test] |
| 11 | +fn test_wasm_store() { |
| 12 | + let mut store = WasmStore::new(ENGINE.clone()); |
| 13 | + let mut parser = Parser::new(); |
| 14 | + |
| 15 | + let wasm_cpp = fs::read(&WASM_DIR.join(format!("tree-sitter-cpp.wasm"))).unwrap(); |
| 16 | + let wasm_rs = fs::read(&WASM_DIR.join(format!("tree-sitter-rust.wasm"))).unwrap(); |
| 17 | + let wasm_rb = fs::read(&WASM_DIR.join(format!("tree-sitter-ruby.wasm"))).unwrap(); |
| 18 | + |
| 19 | + let language_rust = store.load_language("rust", &wasm_rs); |
| 20 | + let language_cpp = store.load_language("cpp", &wasm_cpp); |
| 21 | + let language_ruby = store.load_language("ruby", &wasm_rb); |
| 22 | + parser.set_wasm_store(store).unwrap(); |
| 23 | + |
| 24 | + for _ in 0..2 { |
| 25 | + parser.set_language(language_cpp).unwrap(); |
| 26 | + let tree = parser.parse("A<B> c = d();", None).unwrap(); |
| 27 | + assert_eq!( |
| 28 | + tree.root_node().to_sexp(), |
| 29 | + "(translation_unit (declaration type: (template_type name: (type_identifier) arguments: (template_argument_list (type_descriptor type: (type_identifier)))) declarator: (init_declarator declarator: (identifier) value: (call_expression function: (identifier) arguments: (argument_list)))))" |
| 30 | + ); |
| 31 | + |
| 32 | + parser.set_language(language_rust).unwrap(); |
| 33 | + let tree = parser.parse("const A: B = c();", None).unwrap(); |
| 34 | + assert_eq!( |
| 35 | + tree.root_node().to_sexp(), |
| 36 | + "(source_file (const_item name: (identifier) type: (type_identifier) value: (call_expression function: (identifier) arguments: (arguments))))" |
| 37 | + ); |
| 38 | + |
| 39 | + parser.set_language(language_ruby).unwrap(); |
| 40 | + let tree = parser.parse("class A; end", None).unwrap(); |
| 41 | + assert_eq!( |
| 42 | + tree.root_node().to_sexp(), |
| 43 | + "(program (class name: (constant)))" |
| 44 | + ); |
| 45 | + } |
| 46 | +} |
0 commit comments