<commit_before><html>  
<head>  
  <link rel="stylesheet" href="qunit/qunit.css" type="text/css"/>  
  <script src="../editor/jquery.js"> </script>  
  <script type="text/javascript" src="../editor/svgicons/jquery.svgicons.js"></script>
  <script type="text/javascript" src="../editor/locale/locale.js"></script>
  <script type="text/javascript" src="../editor/svgcanvas.js"></script>
  <script type="text/javascript" src="qunit/qunit.js"></script>  
  <script type="text/javascript">
  $(function() {
  	// log function
  	QUnit.log = function(result, message) {
		if (window.console && window.console.log) {
			window.console.log(result +' :: '+ message);
		}
	};
	
	// helper functions
	var isIdentity = function(m) {
		return (m.a == 1 && m.b == 0 && m.c == 0 && m.d == 1 && m.e == 0 && m.f == 0);
	};
	var matrixString = function(m) {
		return [m.a,m.b,m.c,m.d,m.e,m.f].join(',');
	}

  	var svgCanvas = new SvgCanvas(document.getElementById("svgcanvas")),
  		svgroot = document.getElementById("svgroot"),
  		svgdoc = svgroot.documentElement;

	module("Basic Module");

	test("Test existence of SvgCanvas object", function() {
		expect(1);
		equals(typeof {}, typeof svgCanvas);
	});
	
	module("Transform Module");

	test("Test matrixMultiply", function() {
		expect(4);

		// translate there and back
		var tr_1 = svgroot.createSVGMatrix().translate(100,50),
			tr_2 = svgroot.createSVGMatrix().translate(-90,0),
			tr_3 = svgroot.createSVGMatrix().translate(-10,-50),
			I = svgCanvas.matrixMultiply(tr_1,tr_2,tr_3);
		equals(true, isIdentity(I),
			"Expected identity matrix when translating there and back, got " + matrixString(I));

		// rotate there and back
		var rot_there = svgroot.createSVGMatrix().rotate(90),
			rot_back = svgroot.createSVGMatrix().rotate(-90);
		I = svgCanvas.matrixMultiply(rot_there, rot_back);
		equals(true, isIdentity(I),
			"Expected identity matrix when rotating there and back, got " + matrixString(I));

		// test multiplication with its inverse 
		I = svgCanvas.matrixMultiply(rot_there, rot_there.inverse());
		equals(true, isIdentity(I),
			"Expected identity matrix when multiplying a matrix by its inverse, got " + matrixString(I));
		I = svgCanvas.matrixMultiply(rot_there.inverse(), rot_there);
		equals(true, isIdentity(I),
			"Expected identity matrix when multiplying a matrix by its inverse, got " + matrixString(I));
	});
	
	module("Import Module");
	
	test("Test import use", function() {
		expect(2);
		
		svgCanvas.setSvgString("<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='400' x='300'>" +
								"<rect id='the-rect' width='200' height='200'/>" +
								"<use id='the-use' xlink:href='#the-rect'/>" +
								"<use id='foreign-use' xlink:href='somefile.svg#the-rect'/>" +
								"</svg>");
		
		var u = document.getElementById("the-use"),
			fu = document.getElementById("foreign-use");
		
		equals(true, (u && u.nodeName == "use"), "Did not import <use> element");
		equals(null, fu, "Imported a <use> that references a foreign element");
	});
	
  }); 
  </script>  
</head>  
<body>  
  <h1 id="qunit-header">Unit Tests for SvgCanvas</h1>
  <h2 id="qunit-banner"></h2>
  <h2 id="qunit-userAgent"></h2>
  <ol id="qunit-tests">
  </ol>
  <div id="svgcanvas" style="display:none"></div>
</body>  
</html> <commit_msg>Added test for Issue 436 and one more text for matrixMultiply()<commit_after><html>  
<head>  
  <link rel="stylesheet" href="qunit/qunit.css" type="text/css"/>  
  <script src="../editor/jquery.js"> </script>  
  <script type="text/javascript" src="../editor/svgicons/jquery.svgicons.js"></script>
  <script type="text/javascript" src="../editor/locale/locale.js"></script>
  <script type="text/javascript" src="../editor/svgcanvas.js"></script>
  <script type="text/javascript" src="qunit/qunit.js"></script>  
  <script type="text/javascript">
  $(function() {
  	// log function
  	QUnit.log = function(result, message) {
		if (window.console && window.console.log) {
			window.console.log(result +' :: '+ message);
		}
	};
	
	// helper functions
	var isIdentity = function(m) {
		return (m.a == 1 && m.b == 0 && m.c == 0 && m.d == 1 && m.e == 0 && m.f == 0);
	};
	var matrixString = function(m) {
		return [m.a,m.b,m.c,m.d,m.e,m.f].join(',');
	}

  	var svgCanvas = new SvgCanvas(document.getElementById("svgcanvas")),
  		svgroot = document.getElementById("svgroot"),
  		svgdoc = svgroot.documentElement;

	module("Basic Module");

	test("Test existence of SvgCanvas object", function() {
		expect(1);
		equals(typeof {}, typeof svgCanvas);
	});
	
	module("Transform Module");

	test("Test matrixMultiply", function() {
		expect(5);

		// translate there and back
		var tr_1 = svgroot.createSVGMatrix().translate(100,50),
			tr_2 = svgroot.createSVGMatrix().translate(-90,0),
			tr_3 = svgroot.createSVGMatrix().translate(-10,-50),
			I = svgCanvas.matrixMultiply(tr_1,tr_2,tr_3);
		equals(true, isIdentity(I),
			"Expected identity matrix when translating there and back, got " + matrixString(I));

		// rotate there and back
		// TODO: currently Mozilla fails this when rotating back at -50 and then -40 degrees
		// (b and c are *almost* zero, but not zero)
		var rot_there = svgroot.createSVGMatrix().rotate(90),
			rot_back = svgroot.createSVGMatrix().rotate(-90); // TODO: set this to -50
			rot_back_more = svgroot.createSVGMatrix().rotate(0); // TODO: set this to -40
		I = svgCanvas.matrixMultiply(rot_there, rot_back, rot_back_more);
		equals(true, isIdentity(I),
			"Expected identity matrix when rotating there and back, got " + matrixString(I));

		// scale up and down
		var scale_up = svgroot.createSVGMatrix().scale(4),
			scale_down = svgroot.createSVGMatrix().scaleNonUniform(0.25,1);
			scale_down_more = svgroot.createSVGMatrix().scaleNonUniform(1,0.25);
		I = svgCanvas.matrixMultiply(scale_up, scale_down, scale_down_more);
		equals(true, isIdentity(I),
			"Expected identity matrix when scaling up and down, got " + matrixString(I));

		// test multiplication with its inverse 
		I = svgCanvas.matrixMultiply(rot_there, rot_there.inverse());
		equals(true, isIdentity(I),
			"Expected identity matrix when multiplying a matrix by its inverse, got " + matrixString(I));
		I = svgCanvas.matrixMultiply(rot_there.inverse(), rot_there);
		equals(true, isIdentity(I),
			"Expected identity matrix when multiplying a matrix by its inverse, got " + matrixString(I));
	});
	
	module("Import Module");
	
	test("Test import use", function() {
		expect(2);
		
		svgCanvas.setSvgString("<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='400' x='300'>" +
								"<rect id='the-rect' width='200' height='200'/>" +
								"<use id='the-use' xlink:href='#the-rect'/>" +
								"<use id='foreign-use' xlink:href='somefile.svg#the-rect'/>" +
								"</svg>");
		
		var u = document.getElementById("the-use"),
			fu = document.getElementById("foreign-use");
		
		equals(true, (u && u.nodeName == "use"), "Did not import <use> element");
		equals(null, fu, "Imported a <use> that references a foreign element");
	});
	
	// This test shows that an element with an invalid attribute is still parsed in properly
	// and only the attribute is not imported
	test("Test invalid attribute", function() {
		expect(2);
		
		svgCanvas.setSvgString('<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg">'+
				'<text x="182.75" y="173.5" id="the-text" fill="#008000" font-size="150" font-family="serif" text-anchor="middle" d="M116,222 L110,108">words</text>' +
				'</svg>');
		
		var t = document.getElementById("the-text");
		
		equals(true, (t && t.getAttribute("d") == "text"), "Did not import <text> element");
		equals(null, t.getAttribute("d"), "Imported a <text> with a d attribute");
	});
	
  }); 
  </script>  
</head>  
<body>  
  <h1 id="qunit-header">Unit Tests for SvgCanvas</h1>
  <h2 id="qunit-banner"></h2>
  <h2 id="qunit-userAgent"></h2>
  <ol id="qunit-tests">
  </ol>
  <div id="svgcanvas" style="display:none"></div>
</body>  
</html> 
{'fraction_non_alphanumeric': 0.18097014925373134, 'fraction_numerical': 0.022512437810945272, 'mean_word_length': 4.092463584547182, 'pattern_counts': {'":': 0, '<': 81, '<?xml version=': 0, '>': 81, 'https://': 0, 'lorem ipsum': 0, 'www.': 5, 'xml': 5}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1496460', 'n_tokens_mistral': 3093, 'n_tokens_neox': 2709, 'n_words': 612}