use strict;
use warnings;
use Setup;
use Data::Dumper;
use Test2::V0;
use Hydra::Helper::Escape;

subtest "checking individual attribute set elements" => sub {
    my %values = (
        "" => '""',
        "." => '"."',
        "foobar" => '"foobar"',
        "foo.bar" => '"foo.bar"',
        "🌮" => '"🌮"',
        'foo"bar' => '"foo\"bar"',
        'foo\\bar' => '"foo\\\\bar"',
        '$bar' => '"\\$bar"',
    );

    for my $input (keys %values) {
        my $value = $values{$input};
        is(escapeString($input), $value, "Escaping the value: " . $input);
    }
};

subtest "escaping path components of a nested attribute" => sub {
    my %values = (
        "" => '""',
        "." => '"".""',
        "...." => '""."".""."".""',
        "foobar" => '"foobar"',
        "foo.bar" => '"foo"."bar"',
        "🌮" => '"🌮"',
        'foo"bar' => '"foo\"bar"',
        'foo\\bar' => '"foo\\\\bar"',
        '$bar' => '"\\$bar"',
    );

    for my $input (keys %values) {
        my $value = $values{$input};
        is(escapeAttributePath($input), $value, "Escaping the attribute path: " . $input);
    }
};

done_testing;
