File: 69mop-generated.t

package info (click to toggle)
libobject-pad-perl 0.821-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 936 kB
  • sloc: ansic: 3,361; perl: 3,328; pascal: 28; makefile: 3
file content (40 lines) | stat: -rw-r--r-- 901 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/perl

use v5.18;
use warnings;

use Test2::V0;

use Object::Pad::MOP::Class ':experimental(mop)';

# An attempt to programmatically generate everything
{
   my $classmeta = Object::Pad::MOP::Class->create_class( "Point" );

   my $xfieldmeta = $classmeta->add_field( '$x', reader => 'x' );
   my $yfieldmeta = $classmeta->add_field( '$y', reader => 'y' );

   $classmeta->add_BUILD( sub {
      my $self = shift;
      my ( $x, $y ) = @_;
      $xfieldmeta->value($self) = $x;
      $yfieldmeta->value($self) = $y;
   } );

   $classmeta->add_method( describe => sub {
      my $self = shift;
      return sprintf "Point(%d, %d)",
         $xfieldmeta->value($self), $yfieldmeta->value($self);
   } );

   $classmeta->seal;
}

{
   my $point = Point->new( 10, 20 );
   is( $point->describe, "Point(10, 20)",
      '$point->describe' );
   is( $point->x, 10, '$point->x' );
}

done_testing;