text: from django import forms
  from django.contrib.formtools import preview
  from django import http
  from django.test import TestCase
  
  success_string = "Done was called!"
  test_data = {'field1': u'foo',
               'field1_': u'asdf'}
  
  
  class TestFormPreview(preview.FormPreview):
  
      def done(self, request, cleaned_data):
          return http.HttpResponse(success_string)
  
  
  class TestForm(forms.Form):
      field1 = forms.CharField()
      field1_ = forms.CharField()
  
  
  class PreviewTests(TestCase):
      urls = 'django.contrib.formtools.test_urls'
  
      def setUp(self):
          # Create a FormPreview instance to share between tests
          self.preview = preview.FormPreview(TestForm)
          input_template = '<input type="hidden" name="%s" value="%s" />'
          self.input = input_template % (self.preview.unused_name('stage'), "%d")
  
      def test_unused_name(self):
          """
          Verifies name mangling to get uniue field name.
          """
          self.assertEqual(self.preview.unused_name('field1'), 'field1__')
  
      def test_form_get(self):
          """
          Test contrib.formtools.preview form retrieval.
  
          Use the client library to see if we can sucessfully retrieve
          the form (mostly testing the setup ROOT_URLCONF
          process). Verify that an additional  hidden input field
          is created to manage the stage.
  
          """
          response = self.client.get('/test1/')
          stage = self.input % 1
          self.assertContains(response, stage, 1)
  
      def test_form_preview(self):
          """
          Test contrib.formtools.preview form preview rendering.
  
          Use the client library to POST to the form to see if a preview
          is returned.  If we do get a form back check that the hidden
          value is correctly managing the state of the form.
  
          """
          # Pass strings for form submittal and add stage variable to
          # show we previously saw first stage of the form.
          test_data.update({'stage': 1})
          response = self.client.post('/test1/', test_data)
          # Check to confirm stage is set to 2 in output form.
          stage = self.input % 2
          self.assertContains(response, stage, 1)
  
      def test_form_submit(self):
          """
          Test contrib.formtools.preview form submittal.
  
          Use the client library to POST to the form with stage set to 3
          to see if our forms done() method is called. Check first
          without the security hash, verify failure, retry with security
          hash and verify sucess.
  
          """
          # Pass strings for form submittal and add stage variable to
          # show we previously saw first stage of the form.
          test_data.update({'stage': 2})
          response = self.client.post('/test1/', test_data)
          self.failIfEqual(response.content, success_string)
          hash = self.preview.security_hash(None, TestForm(test_data))
          test_data.update({'hash': hash})
          response = self.client.post('/test1/', test_data)
          self.assertEqual(response.content, success_string)
  
  