Add test case for the thing which breaks C::P::Authentication
Tomas Doran [Sun, 7 Dec 2008 18:33:07 +0000 (18:33 +0000)]
t/caf_backcompat_plugin_accessor_override.t [new file with mode: 0644]
t/lib/CAFCompatTestPlugin.pm [new file with mode: 0644]

diff --git a/t/caf_backcompat_plugin_accessor_override.t b/t/caf_backcompat_plugin_accessor_override.t
new file mode 100644 (file)
index 0000000..e612fdc
--- /dev/null
@@ -0,0 +1,24 @@
+use strict;
+use warnings;
+use lib 't/lib';
+
+use Test::More tests => 1;
+use Test::Exception;
+
+# Force a stack trace.
+use Carp;
+$SIG{__DIE__} = \&Carp::confess;
+
+{
+    package CAFCompatTestApp;
+    use Catalyst qw/
+           +CAFCompatTestPlugin
+    /;
+}
+
+TODO: {
+    local $TODO = 'The overridden setup in CAFCompatTestApp + the overridden accessor causes destruction';
+    lives_ok {
+        CAFCompatTestApp->setup;
+    } 'Setup app with plugins which says use base qw/Class::Accessor::Fast/';
+}
diff --git a/t/lib/CAFCompatTestPlugin.pm b/t/lib/CAFCompatTestPlugin.pm
new file mode 100644 (file)
index 0000000..b663ae5
--- /dev/null
@@ -0,0 +1,30 @@
+package CAFCompatTestPlugin;
+
+# This plugin specificially tests an edge case of CAF compat,
+# where you load a plugin which uses base CAF, and then override
+# a core catalyst accessor (_config in this case)..
+
+# This is what happens if you use the authentication back-compat
+# stuff, as C::A::Plugin::Credential::Password is added to the plugin
+# list, and the base C::A::C::P class, does the mk_accessors, and
+# then the C::P::A class calls the config method before setup finishes...
+
+use strict;
+use warnings;
+
+# Note that we don't actually _really_ use CAF here, as MX::Adopt::CAF
+# is in place...
+use base qw/Class::Accessor::Fast/;
+
+BEGIN {
+    __PACKAGE__->mk_accessors(qw/_config/);
+}
+
+sub setup {
+    my $app = shift;
+
+    $app->config;
+    $app->NEXT::setup(@_);
+}
+
+1;