nargo-parser 0.0.0

Nargo parser component
Documentation
use std::sync::Arc;

use nargo_config::NargoConfig;
use nargo_parser::NargoParser;
use nargo_types::NargoContext;

#[test]
fn test_parse_simple_component() {
    let source = r#"
<template>
  <div class="container">
    <h1>{{ title }}</h1>
  </div>
</template>

<script lang="ts">
import { ref } from 'vue';

const title = ref('Hello Nargo');
</script>

<style scoped>
.container {
  padding: 20px;
}
</style>
"#;

    let config = NargoConfig::default();
    let ctx = Arc::new(NargoContext::new(config));
    let parser = NargoParser::new(ctx);

    let result = parser.parse("test.nargo", source);
    assert!(result.is_ok());

    let module = result.unwrap();
    assert!(module.template.is_some());
    assert!(module.script.is_some());
    assert_eq!(module.styles.len(), 1);
}

#[test]
fn test_parse_template_only() {
    let source = r#"
<template>
  <div>Hello World</div>
</template>
"#;

    let config = NargoConfig::default();
    let ctx = Arc::new(NargoContext::new(config));
    let parser = NargoParser::new(ctx);

    let result = parser.parse("test.nargo", source);
    assert!(result.is_ok());

    let module = result.unwrap();
    assert!(module.template.is_some());
    assert!(module.script.is_none());
    assert!(module.styles.is_empty());
}

#[test]
fn test_parse_script_only() {
    let source = r#"
<script lang="ts">
const message = 'Hello';
function greet() {
  return message;
}
</script>
"#;

    let config = NargoConfig::default();
    let ctx = Arc::new(NargoContext::new(config));
    let parser = NargoParser::new(ctx);

    let result = parser.parse("test.nargo", source);
    assert!(result.is_ok());

    let module = result.unwrap();
    assert!(module.template.is_none());
    assert!(module.script.is_some());
}