Commit | Line | Data |
185c34d5 |
1 | #!/usr/bin/perl -w |
2 | # vim:filetype=perl |
3 | |
44eb9098 |
4 | #============================================================================= |
5 | # Test Package based filters that oks when called. |
6 | package SQL::Translator::Filter::Ok; |
7 | use strict; |
8 | |
9 | sub filter { Test::More::pass(@_) } |
10 | |
11 | # Hack to allow sqlt to see our module as it wasn't loaded from a .pm |
12 | $INC{'SQL/Translator/Filter/Ok.pm'} = 'lib/SQL/Translator/Filter/Ok.pm'; |
185c34d5 |
13 | |
185c34d5 |
14 | #============================================================================= |
44eb9098 |
15 | # SQL::Translator::Filter::HelloWorld - Test filter in a package |
da06ac74 |
16 | package # hide from cpan |
17 | SQL::Translator::Filter::HelloWorld; |
185c34d5 |
18 | |
19 | use strict; |
185c34d5 |
20 | |
21 | sub filter { |
44eb9098 |
22 | my ($schema,%args) = (shift,@_); |
185c34d5 |
23 | |
44eb9098 |
24 | my $greeting = $args{greeting} || "Hello"; |
25 | my $newtable = "${greeting}World"; |
26 | $schema->add_table( name => $newtable ); |
185c34d5 |
27 | } |
28 | |
29 | # Hack to allow sqlt to see our module as it wasn't loaded from a .pm |
30 | $INC{'SQL/Translator/Filter/HelloWorld.pm'} |
31 | = 'lib/SQL/Translator/Filter/HelloWorld.pm'; |
32 | |
33 | #============================================================================= |
34 | |
35 | package main; |
36 | |
37 | use strict; |
38 | use Test::More; |
39 | use Test::Exception; |
40 | use Test::SQL::Translator qw(maybe_plan); |
41 | |
42 | use Data::Dumper; |
43 | |
44 | BEGIN { |
44eb9098 |
45 | maybe_plan(16, 'Template', 'Test::Differences') |
185c34d5 |
46 | } |
47 | use Test::Differences; |
48 | use SQL::Translator; |
49 | |
50 | my $in_yaml = qq{--- #YAML:1.0 |
51 | schema: |
52 | tables: |
53 | person: |
54 | name: person |
55 | fields: |
56 | first_name: |
57 | data_type: foovar |
58 | name: First_Name |
59 | }; |
60 | |
495c5c2f |
61 | my $sqlt_version = $SQL::Translator::VERSION; |
e7a96c90 |
62 | my $ans_yaml = qq{--- |
185c34d5 |
63 | schema: |
64 | procedures: {} |
65 | tables: |
44eb9098 |
66 | GdayWorld: |
44eb9098 |
67 | constraints: [] |
68 | fields: {} |
69 | indices: [] |
70 | name: GdayWorld |
71 | options: [] |
72 | order: 3 |
185c34d5 |
73 | HelloWorld: |
185c34d5 |
74 | constraints: [] |
75 | fields: {} |
76 | indices: [] |
77 | name: HelloWorld |
78 | options: [] |
79 | order: 2 |
80 | PERSON: |
185c34d5 |
81 | constraints: [] |
82 | fields: |
83 | first_name: |
84 | data_type: foovar |
85 | default_value: ~ |
185c34d5 |
86 | is_nullable: 1 |
87 | is_primary_key: 0 |
88 | is_unique: 0 |
89 | name: first_name |
90 | order: 1 |
91 | size: |
92 | - 0 |
93 | indices: [] |
94 | name: PERSON |
95 | options: [] |
96 | order: 1 |
97 | triggers: {} |
98 | views: {} |
99 | translator: |
100 | add_drop_table: 0 |
101 | filename: ~ |
102 | no_comments: 0 |
103 | parser_args: {} |
104 | parser_type: SQL::Translator::Parser::YAML |
105 | producer_args: {} |
106 | producer_type: SQL::Translator::Producer::YAML |
107 | show_warnings: 1 |
108 | trace: 0 |
495c5c2f |
109 | version: $sqlt_version |
185c34d5 |
110 | }; |
111 | |
112 | # Parse the test XML schema |
113 | my $obj; |
114 | $obj = SQL::Translator->new( |
115 | debug => 0, |
116 | show_warnings => 1, |
117 | parser => "YAML", |
118 | data => $in_yaml, |
119 | to => "YAML", |
120 | filters => [ |
121 | # Check they get called ok |
122 | sub { |
123 | pass("Filter 1 called"); |
124 | isa_ok($_[0],"SQL::Translator::Schema", "Filter 1, arg0 "); |
44eb9098 |
125 | is( $#_, 0, "Filter 1, got no args"); |
185c34d5 |
126 | }, |
127 | sub { |
128 | pass("Filter 2 called"); |
129 | isa_ok($_[0],"SQL::Translator::Schema", "Filter 2, arg0 "); |
44eb9098 |
130 | is( $#_, 0, "Filter 2, got no args"); |
185c34d5 |
131 | }, |
132 | |
133 | # Sub filter with args |
134 | [ sub { |
135 | pass("Filter 3 called"); |
136 | isa_ok($_[0],"SQL::Translator::Schema", "Filter 3, arg0 "); |
44eb9098 |
137 | is( $#_, 2, "Filter 3, go 2 args"); |
138 | is( $_[1], "hello", "Filter 3, arg1=hello"); |
139 | is( $_[2], "world", "Filter 3, arg2=world"); |
185c34d5 |
140 | }, |
44eb9098 |
141 | hello => "world" ], |
185c34d5 |
142 | |
143 | # Uppercase all the table names. |
144 | sub { |
145 | my $schema = shift; |
146 | foreach ($schema->get_tables) { |
147 | $_->name(uc $_->name); |
148 | } |
149 | }, |
150 | |
151 | # lowercase all the field names. |
152 | sub { |
153 | my $schema = shift; |
154 | foreach ( map { $_->get_fields } $schema->get_tables ) { |
155 | $_->name(lc $_->name); |
156 | } |
157 | }, |
158 | |
159 | # Filter from SQL::Translator::Filter::* |
44eb9098 |
160 | 'Ok', |
185c34d5 |
161 | [ 'HelloWorld' ], |
44eb9098 |
162 | [ 'HelloWorld', greeting => 'Gday' ], |
185c34d5 |
163 | ], |
164 | |
165 | ) or die "Failed to create translator object: ".SQL::Translator->error; |
166 | |
167 | my $out; |
168 | lives_ok { $out = $obj->translate; } "Translate ran"; |
169 | is $obj->error, '' ,"No errors"; |
170 | ok $out ne "" ,"Produced something!"; |
171 | eq_or_diff $out, $ans_yaml ,"Output looks right"; |