#include "vtkCaptionRepresentation.h"

#include <cstdlib>
#include <iostream>

#include "vtkImageData.h"
#include "vtkProperty2D.h"
#include "vtkTextProperty.h"

#include "WidgetTestingMacros.h"

#include "vtkCaptionActor2D.h"
#include "vtkPointHandleRepresentation3D.h"

int vtkCaptionRepresentationTest1(int, char*[])
{
  vtkSmartPointer<vtkCaptionRepresentation> node1 =
    vtkSmartPointer<vtkCaptionRepresentation>::New();

  EXERCISE_BASIC_BORDER_REPRESENTATION_METHODS(vtkCaptionRepresentation, node1);

  double pos[3] = { -99.0, 100.0, 50.0 };
  node1->SetAnchorPosition(pos);
  double pos2[3];
  node1->GetAnchorPosition(pos2);
  if (pos2[0] != pos[0] || pos2[1] != pos[1] || pos2[2] != pos[2])
  {
    std::cerr << "Failure in Get/Set AnchorPosition, expected " << pos[0] << ", " << pos[1] << ", "
              << pos[2] << ", instead got " << pos2[0] << ", " << pos2[1] << ", " << pos2[2]
              << std::endl;
    return EXIT_FAILURE;
  }

  vtkSmartPointer<vtkCaptionActor2D> captionActor = vtkSmartPointer<vtkCaptionActor2D>::New();
  node1->SetCaptionActor2D(captionActor);
  if (node1->GetCaptionActor2D() != captionActor)
  {
    std::cerr << "Failure in Get/Set CaptionActor2D." << std::endl;
    return EXIT_FAILURE;
  }

  vtkSmartPointer<vtkPointHandleRepresentation3D> handleRep =
    vtkSmartPointer<vtkPointHandleRepresentation3D>::New();
  node1->SetAnchorRepresentation(handleRep);
  if (node1->GetAnchorRepresentation() != handleRep)
  {
    std::cerr << "Failure in Get/Set AnchorRepresentation." << std::endl;
    return EXIT_FAILURE;
  }
  TEST_SET_GET_DOUBLE_RANGE(node1, FontFactor, 1.1, 9.0);

  return EXIT_SUCCESS;
}
