diff --git a/tests/regressiontests/special_headers/fixtures/data.xml b/tests/regressiontests/special_headers/fixtures/data.xml
new file mode 100644
index 0000000000..7e60d45199
--- /dev/null
+++ b/tests/regressiontests/special_headers/fixtures/data.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
diff --git a/tests/regressiontests/special_headers/models.py b/tests/regressiontests/special_headers/models.py
new file mode 100644
index 0000000000..0c126757cc
--- /dev/null
+++ b/tests/regressiontests/special_headers/models.py
@@ -0,0 +1,4 @@
+from django.db import models
+
+class Article(models.Model):
+ text = models.TextField()
diff --git a/tests/regressiontests/special_headers/templates/special_headers/article_detail.html b/tests/regressiontests/special_headers/templates/special_headers/article_detail.html
new file mode 100644
index 0000000000..3cbd38cb7e
--- /dev/null
+++ b/tests/regressiontests/special_headers/templates/special_headers/article_detail.html
@@ -0,0 +1 @@
+{{ object }}
diff --git a/tests/regressiontests/special_headers/tests.py b/tests/regressiontests/special_headers/tests.py
new file mode 100644
index 0000000000..f304bfa932
--- /dev/null
+++ b/tests/regressiontests/special_headers/tests.py
@@ -0,0 +1,40 @@
+from django.test import TestCase
+from django.contrib.auth.models import User
+
+class SpecialHeadersTest(TestCase):
+ fixtures = ['data.xml']
+
+ def test_xheaders(self):
+ user = User.objects.get(username='super')
+ response = self.client.get('/special_headers/article/1/')
+ # import pdb; pdb.set_trace()
+ self.failUnless('X-Object-Type' not in response)
+ self.client.login(username='super', password='secret')
+ response = self.client.get('/special_headers/article/1/')
+ self.failUnless('X-Object-Type' in response)
+ user.is_staff = False
+ user.save()
+ response = self.client.get('/special_headers/article/1/')
+ self.failUnless('X-Object-Type' not in response)
+ user.is_staff = True
+ user.is_active = False
+ user.save()
+ response = self.client.get('/special_headers/article/1/')
+ self.failUnless('X-Object-Type' not in response)
+
+ def test_xview(self):
+ user = User.objects.get(username='super')
+ response = self.client.head('/special_headers/xview/')
+ self.failUnless('X-View' not in response)
+ self.client.login(username='super', password='secret')
+ response = self.client.head('/special_headers/xview/')
+ self.failUnless('X-View' in response)
+ user.is_staff = False
+ user.save()
+ response = self.client.head('/special_headers/xview/')
+ self.failUnless('X-View' not in response)
+ user.is_staff = True
+ user.is_active = False
+ user.save()
+ response = self.client.head('/special_headers/xview/')
+ self.failUnless('X-View' not in response)
diff --git a/tests/regressiontests/special_headers/urls.py b/tests/regressiontests/special_headers/urls.py
new file mode 100644
index 0000000000..721f60ad94
--- /dev/null
+++ b/tests/regressiontests/special_headers/urls.py
@@ -0,0 +1,10 @@
+# coding: utf-8
+from django.conf.urls.defaults import *
+from django.views.generic.list_detail import object_detail
+from models import Article
+import views
+
+urlpatterns = patterns('',
+ (r'^article/(?P\d+)/$', object_detail, {'queryset': Article.objects.all()}),
+ (r'^xview/$', views.xview),
+)
diff --git a/tests/regressiontests/special_headers/views.py b/tests/regressiontests/special_headers/views.py
new file mode 100644
index 0000000000..7a012038a1
--- /dev/null
+++ b/tests/regressiontests/special_headers/views.py
@@ -0,0 +1,10 @@
+# -*- coding:utf-8 -*-
+from django.http import HttpResponse
+from django.utils.decorators import decorator_from_middleware
+from django.middleware.doc import XViewMiddleware
+
+xview_dec = decorator_from_middleware(XViewMiddleware)
+
+def xview(request):
+ return HttpResponse()
+xview = xview_dec(xview)