Blame test/test_node.cpp

Packit bfcc33
#include <assert.h>
Packit bfcc33
#include <sstream>
Packit bfcc33
Packit bfcc33
#include "node.hpp"
Packit bfcc33
#include "parser.hpp"
Packit bfcc33
Packit bfcc33
Packit bfcc33
#define STATIC_ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0])))
Packit bfcc33
Packit bfcc33
Packit bfcc33
namespace Sass {
Packit bfcc33
Packit bfcc33
  Context ctx = Context::Data();
Packit bfcc33
Packit bfcc33
  const char* const ROUNDTRIP_TESTS[] = {
Packit bfcc33
    NULL,
Packit bfcc33
    "~",
Packit bfcc33
    "CMPD",
Packit bfcc33
    "~ CMPD",
Packit bfcc33
    "CMPD >",
Packit bfcc33
    "> > CMPD",
Packit bfcc33
    "CMPD ~ ~",
Packit bfcc33
    "> + CMPD1.CMPD2 > ~",
Packit bfcc33
    "> + CMPD1.CMPD2 CMPD3.CMPD4 > ~",
Packit bfcc33
    "+ CMPD1 CMPD2 ~ CMPD3 + CMPD4 > CMPD5 > ~"
Packit bfcc33
  };
Packit bfcc33
Packit bfcc33
Packit bfcc33
Packit bfcc33
  static Complex_Selector* createComplexSelector(std::string src) {
Packit bfcc33
    std::string temp(src);
Packit bfcc33
    temp += ";";
Packit bfcc33
    return (*Parser::from_c_str(temp.c_str(), ctx, "", Position()).parse_selector_list())[0];
Packit bfcc33
  }
Packit bfcc33
Packit bfcc33
Packit bfcc33
  void roundtripTest(const char* toTest) {
Packit bfcc33
Packit bfcc33
    // Create the initial selector
Packit bfcc33
Packit bfcc33
    Complex_Selector* pOrigSelector = NULL;
Packit bfcc33
    if (toTest) {
Packit bfcc33
      pOrigSelector = createComplexSelector(toTest);
Packit bfcc33
    }
Packit bfcc33
Packit bfcc33
    std::string expected(pOrigSelector ? pOrigSelector->to_string() : "NULL");
Packit bfcc33
Packit bfcc33
Packit bfcc33
    // Roundtrip the selector into a node and back
Packit bfcc33
Packit bfcc33
    Node node = complexSelectorToNode(pOrigSelector, ctx);
Packit bfcc33
Packit bfcc33
    std::stringstream nodeStringStream;
Packit bfcc33
    nodeStringStream << node;
Packit bfcc33
    std::string nodeString = nodeStringStream.str();
Packit bfcc33
    cout << "ASNODE: " << node << endl;
Packit bfcc33
Packit bfcc33
    Complex_Selector* pNewSelector = nodeToComplexSelector(node, ctx);
Packit bfcc33
Packit bfcc33
    // Show the result
Packit bfcc33
Packit bfcc33
    std::string result(pNewSelector ? pNewSelector->to_string() : "NULL");
Packit bfcc33
Packit bfcc33
    cout << "SELECTOR: " << expected << endl;
Packit bfcc33
    cout << "NEW SELECTOR:   " << result << endl;
Packit bfcc33
Packit bfcc33
Packit bfcc33
    // Test that they are equal using the equality operator
Packit bfcc33
Packit bfcc33
    assert( (!pOrigSelector && !pNewSelector ) || (pOrigSelector && pNewSelector) );
Packit bfcc33
    if (pOrigSelector) {
Packit bfcc33
      assert( *pOrigSelector == *pNewSelector );
Packit bfcc33
    }
Packit bfcc33
Packit bfcc33
Packit bfcc33
    // Test that they are equal by comparing the string versions of the selectors
Packit bfcc33
Packit bfcc33
    assert(expected == result);
Packit bfcc33
Packit bfcc33
  }
Packit bfcc33
Packit bfcc33
Packit bfcc33
  int main() {
Packit bfcc33
    for (int index = 0; index < STATIC_ARRAY_SIZE(ROUNDTRIP_TESTS); index++) {
Packit bfcc33
      const char* const toTest = ROUNDTRIP_TESTS[index];
Packit bfcc33
      cout << "\nINPUT STRING: " << (toTest ? toTest : "NULL") << endl;
Packit bfcc33
      roundtripTest(toTest);
Packit bfcc33
    }
Packit bfcc33
Packit bfcc33
    cout << "\nTesting Done.\n";
Packit bfcc33
  }
Packit bfcc33
Packit bfcc33
Packit bfcc33
}