blob: 1602d6f884f3df7da98cc3fd8be1969ff2fea2c4 [file] [log] [blame]
suite('SupSub', function() {
var mq;
setup(function() {
mq = MQ.MathField($('<span></span>').appendTo('#mock')[0]);
});
teardown(function() {
$(mq.el()).remove();
});
function prayWellFormedPoint(pt) { prayWellFormed(pt.parent, pt[L], pt[R]); }
var expecteds = [
'x_{ab} x_{ba}, x_a^b x_a^b; x_{ab} x_{ba}, x_a^b x_a^b; x_a x_a, x_a^{} x_a^{}',
'x_b^a x_b^a, x^{ab} x^{ba}; x_b^a x_b^a, x^{ab} x^{ba}; x_{}^a x_{}^a, x^a x^a'
];
var expectedsAfterC = [
'x_{abc} x_{bca}, x_a^{bc} x_a^{bc}; x_{ab}c x_{bca}, x_a^bc x_a^bc; x_ac x_{ca}, x_a^{}c x_a^{}c',
'x_{bc}^a x_{bc}^a, x^{abc} x^{bca}; x_b^ac x_b^ac, x^{ab}c x^{bca}; x_{}^ac x_{}^ac, x^ac x^{ca}'
];
'sub super'.split(' ').forEach(function(initSupsub, i) {
var initialLatex = 'x_a x^a'.split(' ')[i];
'typed, wrote, wrote empty'.split(', ').forEach(function(did, j) {
var doTo = [
function(mq, supsub) { mq.typedText(supsub).typedText('b'); },
function(mq, supsub) { mq.write(supsub+'b'); },
function(mq, supsub) { mq.write(supsub+'{}'); }
][j];
'sub super'.split(' ').forEach(function(supsub, k) {
var cmd = '_^'.split('')[k];
'after before'.split(' ').forEach(function(side, l) {
var moveToSide = [
noop,
function(mq) { mq.moveToLeftEnd().keystroke('Right'); }
][l];
var expected = expecteds[i].split('; ')[j].split(', ')[k].split(' ')[l];
var expectedAfterC = expectedsAfterC[i].split('; ')[j].split(', ')[k].split(' ')[l];
test('initial '+initSupsub+'script then '+did+' '+supsub+'script '+side, function() {
mq.latex(initialLatex);
assert.equal(mq.latex(), initialLatex);
moveToSide(mq);
doTo(mq, cmd);
assert.equal(mq.latex().replace(/ /g, ''), expected);
prayWellFormedPoint(mq.__controller.cursor);
mq.typedText('c');
assert.equal(mq.latex().replace(/ /g, ''), expectedAfterC);
});
});
});
});
});
var expecteds = 'x_a^3 x_a^3, x_a^3 x_a^3; x^{a3} x^{3a}, x^{a3} x^{3a}';
var expectedsAfterC = 'x_a^3c x_a^3c, x_a^3c x_a^3c; x^{a3}c x^{3ca}, x^{a3}c x^{3ca}';
'sub super'.split(' ').forEach(function(initSupsub, i) {
var initialLatex = 'x_a x^a'.split(' ')[i];
'typed wrote'.split(' ').forEach(function(did, j) {
var doTo = [
function(mq) { mq.typedText('³'); },
function(mq) { mq.write('³'); }
][j];
'after before'.split(' ').forEach(function(side, k) {
var moveToSide = [
noop,
function(mq) { mq.moveToLeftEnd().keystroke('Right'); }
][k];
var expected = expecteds.split('; ')[i].split(', ')[j].split(' ')[k];
var expectedAfterC = expectedsAfterC.split('; ')[i].split(', ')[j].split(' ')[k];
test('initial '+initSupsub+'script then '+did+' \'³\' '+side, function() {
mq.latex(initialLatex);
assert.equal(mq.latex(), initialLatex);
moveToSide(mq);
doTo(mq);
assert.equal(mq.latex().replace(/ /g, ''), expected);
prayWellFormedPoint(mq.__controller.cursor);
mq.typedText('c');
assert.equal(mq.latex().replace(/ /g, ''), expectedAfterC);
});
});
});
});
test('render LaTeX with 2 SupSub\'s in a row', function() {
mq.latex('x_a_b');
assert.equal(mq.latex(), 'x_{ab}');
mq.latex('x_a_{}');
assert.equal(mq.latex(), 'x_a');
mq.latex('x_{}_a');
assert.equal(mq.latex(), 'x_a');
mq.latex('x^a^b');
assert.equal(mq.latex(), 'x^{ab}');
mq.latex('x^a^{}');
assert.equal(mq.latex(), 'x^a');
mq.latex('x^{}^a');
assert.equal(mq.latex(), 'x^a');
});
test('render LaTeX with 3 alternating SupSub\'s in a row', function() {
mq.latex('x_a^b_c');
assert.equal(mq.latex(), 'x_{ac}^b');
mq.latex('x^a_b^c');
assert.equal(mq.latex(), 'x_b^{ac}');
});
suite('deleting', function() {
test('backspacing out of and then re-typing subscript', function() {
mq.latex('x_a^b');
assert.equal(mq.latex(), 'x_a^b');
mq.keystroke('Down Backspace');
assert.equal(mq.latex(), 'x_{ }^b');
mq.keystroke('Backspace');
assert.equal(mq.latex(), 'x^b');
mq.typedText('_a');
assert.equal(mq.latex(), 'x_a^b');
mq.keystroke('Left Backspace');
assert.equal(mq.latex(), 'xa^b');
mq.typedText('c');
assert.equal(mq.latex(), 'xca^b');
});
test('backspacing out of and then re-typing superscript', function() {
mq.latex('x_a^b');
assert.equal(mq.latex(), 'x_a^b');
mq.keystroke('Up Backspace');
assert.equal(mq.latex(), 'x_a^{ }');
mq.keystroke('Backspace');
assert.equal(mq.latex(), 'x_a');
mq.typedText('^b');
assert.equal(mq.latex(), 'x_a^b');
mq.keystroke('Left Backspace');
assert.equal(mq.latex(), 'x_ab');
mq.typedText('c');
assert.equal(mq.latex(), 'x_acb');
});
});
});