|
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 |
}
|