Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a3042be authored by Martin Geisler's avatar Martin Geisler Committed by Automerger Merge Worker
Browse files

PDL: add regression tests for ‘pdl’ output am: 0cb1ca8c am: f770fd23 am:...

PDL: add regression tests for ‘pdl’ output am: 0cb1ca8c am: f770fd23 am: bed39e92 am: 788475b6

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/2063814



Change-Id: Ib3577c2c9cd61936a5f588519562e4b7b067307b
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents a206cc40 788475b6
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -48,3 +48,25 @@ rust_test_host {
        ":rustfmt",
    ],
}

rust_test_host {
    name: "pdl_tests",
    srcs: ["test/pdl_tests.rs"],
    test_suites: ["general-tests"],
    enabled: false, // rustfmt is only available on x86.
    arch: {
        x86_64: {
            enabled: true,
        },
    },
    // LINT.IfChange
    rustlibs: [
        "libtempfile",
    ],
    // LINT.ThenChange(Cargo.toml)
    data: [
        ":bluetooth_packetgen",
        ":pdl",
        ":rustfmt",
    ],
}
+2 −0
Original line number Diff line number Diff line
@@ -16,4 +16,6 @@ serde = { version = "*", features = ["default", "derive", "serde_derive", "std"]
serde_json = "*"
structopt = "*"
syn = "*"

[dev-dependencies]
tempfile = "*"
+25 −2
Original line number Diff line number Diff line
@@ -328,11 +328,22 @@ fn generate_packet_decl(
            writer
        })
        .collect::<Result<Vec<_>>>()?;

    let total_field_size = syn::Index::from(fields.iter().map(get_field_size).sum::<usize>());
    let get_size_adjustment = (total_field_size.index > 0).then(|| {
        Some(quote! {
            let ret = ret + #total_field_size;
        })
    });

    code.push_str(&quote_block! {
        impl #data_name {
            fn conforms(bytes: &[u8]) -> bool {
                // TODO(mgeisler): return Boolean expression directly.
                // TODO(mgeisler): skip when total_field_size == 0.
                if bytes.len() < #total_field_size {
                    return false;
                }
                true
            }

@@ -351,7 +362,7 @@ fn generate_packet_decl(

            fn get_size(&self) -> usize {
                let ret = 0;
                let ret = ret + #total_field_size;
                #get_size_adjustment
                ret
            }
        }
@@ -490,7 +501,19 @@ pub fn generate_rust(sources: &ast::SourceDatabase, grammar: &ast::Grammar) -> R
#[cfg(test)]
mod tests {
    use super::*;
    use crate::test_utils::{assert_eq_with_diff, parse_str, rustfmt};
    use crate::ast;
    use crate::parser::parse_inline;
    use crate::test_utils::{assert_eq_with_diff, rustfmt};

    /// Parse a string fragment as a PDL file.
    ///
    /// # Panics
    ///
    /// Panics on parse errors.
    pub fn parse_str(text: &str) -> ast::Grammar {
        let mut db = ast::SourceDatabase::new();
        parse_inline(&mut db, String::from("stdin"), String::from(text)).expect("parse error")
    }

    #[test]
    fn test_generate_preamble() {
+6 −13
Original line number Diff line number Diff line
//! Various utility functions used in tests.

use crate::ast;
use crate::parser::parse_inline;
// This file is included directly into integration tests in the
// `test/` directory. These tests are compiled without access to the
// rest of the `pdl` crate. To make this work, avoid `use crate::`
// statements below.

use std::io::Write;
use std::process::{Command, Stdio};
use tempfile::NamedTempFile;

/// Search for a binary in `$PATH` or as a sibling to the current
/// executable (typically the test binary).
fn find_binary(name: &str) -> Result<std::path::PathBuf, String> {
pub fn find_binary(name: &str) -> Result<std::path::PathBuf, String> {
    let mut current_exe = std::env::current_exe().unwrap();
    current_exe.pop();
    let paths = std::env::var_os("PATH").unwrap();
@@ -27,16 +30,6 @@ fn find_binary(name: &str) -> Result<std::path::PathBuf, String> {
    ))
}

/// Parse a string fragment as a PDL file.
///
/// # Panics
///
/// Panics on parse errors.
pub fn parse_str(text: &str) -> ast::Grammar {
    let mut db = ast::SourceDatabase::new();
    parse_inline(&mut db, String::from("stdin"), String::from(text)).expect("parse error")
}

/// Run `input` through `rustfmt`.
///
/// # Panics
+3 −1
Original line number Diff line number Diff line
@@ -11,6 +11,9 @@ pub struct FooBuilder {}

impl FooData {
    fn conforms(bytes: &[u8]) -> bool {
        if bytes.len() < 0 {
            return false;
        }
        true
    }
    fn parse(bytes: &[u8]) -> Result<Self> {
@@ -22,7 +25,6 @@ impl FooData {
    }
    fn get_size(&self) -> usize {
        let ret = 0;
        let ret = ret + 0;
        ret
    }
}
Loading