The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use warnings;
use Test::More tests => 5;

use lib 't/lib';
use TestParser qw(:all);

parse_and_diff_yaml( <<'EOP', <<'EOE' );
$x = 1;
EOP
--- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:Symbol
  context: CXT_SCALAR|CXT_LVALUE
  name: x
  sigil: VALUE_SCALAR
op: OP_ASSIGN
right: !parsetree:Constant
  context: CXT_SCALAR
  flags: CONST_NUMBER|NUM_INTEGER
  value: 1
EOE

parse_and_diff_yaml( <<'EOP', <<'EOE' );
$x = 'test';
EOP
--- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:Symbol
  context: CXT_SCALAR|CXT_LVALUE
  name: x
  sigil: VALUE_SCALAR
op: OP_ASSIGN
right: !parsetree:Constant
  context: CXT_SCALAR
  flags: CONST_STRING
  value: test
EOE

parse_and_diff_yaml( <<'EOP', <<'EOE' );
@x = foo();
EOP
--- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:Symbol
  context: CXT_LIST|CXT_LVALUE
  name: x
  sigil: VALUE_ARRAY
op: OP_ASSIGN
right: !parsetree:FunctionCall
  arguments: ~
  context: CXT_LIST
  function: !parsetree:Symbol
    context: CXT_SCALAR
    name: foo
    sigil: VALUE_SUB
EOE

parse_and_diff_yaml( <<'EOP', <<'EOE' );
( $x ) = foo();
EOP
--- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:Parentheses
  context: CXT_LIST|CXT_LVALUE
  left: !parsetree:Symbol
    context: CXT_SCALAR|CXT_LVALUE
    name: x
    sigil: VALUE_SCALAR
  op: OP_PARENTHESES
op: OP_ASSIGN
right: !parsetree:FunctionCall
  arguments: ~
  context: CXT_LIST
  function: !parsetree:Symbol
    context: CXT_SCALAR
    name: foo
    sigil: VALUE_SUB
EOE

parse_and_diff_yaml( <<'EOP', <<'EOE' );
( $x, $y ) = foo();
EOP
--- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:List
  context: CXT_LIST|CXT_LVALUE
  expressions:
    - !parsetree:Symbol
      context: CXT_SCALAR|CXT_LVALUE
      name: x
      sigil: VALUE_SCALAR
    - !parsetree:Symbol
      context: CXT_SCALAR|CXT_LVALUE
      name: y
      sigil: VALUE_SCALAR
op: OP_ASSIGN
right: !parsetree:FunctionCall
  arguments: ~
  context: CXT_LIST
  function: !parsetree:Symbol
    context: CXT_SCALAR
    name: foo
    sigil: VALUE_SUB
EOE