You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: parse_gradient.rs
    path of file: ./repos/freya/crates/state/tests
    
    the code of the file until where you have to start completion: use freya_engine::prelude::*;
use freya_node_state::{GradientStop, LinearGradient, Parse};

#[test]
fn parse_basic_gradient() {
    assert_eq!(
        LinearGradient::parse("linear-gradient(red 0%, blue 100%)"),
        Ok(LinearGradient {
            angle: 0.0,
            stops: vec![
                GradientStop {
                    color: Color::RED,
                    offset: 0.0,
                },
                GradientStop {
                    color: Color::BLUE,
                    offset: 1.0,
                }
            ]
        })
    );
}

#[test]
fn parse_rgb_hsl_gradient() {
    assert_eq!(
        LinearGradient::parse("linear-gradient(0deg, rgb(255, 0, 0) 0%, blue 100%)"),
        Ok(LinearGradient {
            angle: 0.0,
            stops: vec![
                GradientStop {
                    color: Color::from_rgb(255, 0, 0),
                    offset: 0.0,
                },
              
    
fn invalid_gradients() {
    let incorrect_name = LinearGradient::parse("lkdsjfalkasdasdjaslkfjsdklfs(red 0%, blue 100%)");
    let extra_lparen = LinearGradient::parse("linear-gradient((red 0%, blue 100%)");
    let extra_rparen = LinearGradient::parse("linear-gradient(red 0%, blue 100%))");
    let missing_rparen = LinearGradient::parse("linear-gradient(red 0%, blue 100%");
    let missing_commas = LinearGradient::parse("linear-gradient(red 0% blue 100%)");
    let extra_commas = LinearGradient::parse("linear-gradient(red 0%, blue 100%,)");
    let extra_stop_component =
        LinearGradient::parse("linear-gradient(red 0% something, blue 100%)");
    let bad_angle_unit = LinearGradient::parse("linear-gradient(45ft, red 0%, blue 100%,)");
    let bad_offset_unit = LinearGradient::parse("linear-gradient(45deg, red 0atm, blue 100kpa)");
    let missing_color = LinearGradient::parse("linear-gradient(45deg, 0%, blue 100%)");
    let missing_offset = LinearGradient::parse("linear-gradient(45deg, red, blue 100%)");

    assert_eq!(incorrect_name.is_err(), true);
    assert_eq!(extra_lparen.is_err(), true);
    assert_eq!(extra_rparen.is_err(), true);
    assert_eq!(missing_rparen.is_err(), true);
    assert_eq!(missing_commas.is_err(), true);
    assert_eq!(extra_commas.is_err(), true);
    assert_eq!(extra_stop_component.is_err(), true);
    assert_eq!(bad_angle_unit.is_err(), true);
    assert_eq!(bad_offset_unit.is_err(), true);
    assert_eq!(missing_color.is_err(), true);
    assert_eq!(missing_offset.is_err(), true);
}