[poincare] Add tests about cursor positioning in layout

This commit is contained in:
Léa Saviot
2019-05-27 15:27:17 +02:00
parent 852c43c092
commit 18df391e5e
4 changed files with 81 additions and 0 deletions

View File

@@ -158,6 +158,7 @@ tests += $(addprefix poincare/test/,\
infinity.cpp\
integer.cpp\
layouts.cpp\
layout_cursor.cpp\
logarithm.cpp\
matrix.cpp\
multiplication.cpp\

View File

@@ -193,6 +193,11 @@ void assert_parsed_expression_layout_serialize_to_self(const char * expressionLa
quiz_assert(strcmp(expressionLayout, buffer) == 0);
}
void assert_expression_layouts_as(Poincare::Expression expression, Poincare::Layout layout) {
Layout l = expression.createLayout(DecimalMode, PrintFloat::k_numberOfStoredSignificantDigits);
quiz_assert(l.isIdenticalTo(layout));
}
void assert_expression_layout_serialize_to(Poincare::Layout layout, const char * serialization) {
constexpr int bufferSize = 255;
char buffer[bufferSize];

View File

@@ -39,6 +39,7 @@ void assert_parsed_expression_approximates_with_value_for_symbol(Poincare::Expre
void assert_parsed_expression_simplify_to(const char * expression, const char * simplifiedExpression, Poincare::ExpressionNode::ReductionTarget target = Poincare::ExpressionNode::ReductionTarget::User, Poincare::Preferences::AngleUnit angleUnit = Poincare::Preferences::AngleUnit::Radian, Poincare::Preferences::ComplexFormat complexFormat = Poincare::Preferences::ComplexFormat::Cartesian);
void assert_parsed_expression_serialize_to(Poincare::Expression expression, const char * serializedExpression, Poincare::Preferences::PrintFloatMode mode = DecimalMode, int numberOfSignifiantDigits = 7);
void assert_expression_layouts_as(Poincare::Expression expression, Poincare::Layout layout);
// Layouts

View File

@@ -0,0 +1,74 @@
#include <quiz.h>
#include <poincare_layouts.h>
#include "helper.h"
using namespace Poincare;
void assert_inserted_layout_points_to(Layout layoutToInsert, Expression * correspondingExpression, Layout layoutToPoint) {
quiz_assert(correspondingExpression != nullptr);
assert_expression_layouts_as(*correspondingExpression, layoutToInsert);
Layout layoutToPointComputed = layoutToInsert.layoutToPointWhenInserting(correspondingExpression);
quiz_assert(layoutToPointComputed.identifier() == layoutToPoint.identifier());
}
QUIZ_CASE(poincare_layout_cursor_computation) {
Layout l;
Expression e;
// 1+2
l = HorizontalLayout::Builder(
CodePointLayout::Builder('1'),
CodePointLayout::Builder('+'),
CodePointLayout::Builder('2'));
e = Addition::Builder(Rational::Builder(1), Rational::Builder(2));
assert_inserted_layout_points_to(l, &e, l);
// random()
HorizontalLayout hl = HorizontalLayout::Builder();
hl.addChildAtIndex(CodePointLayout::Builder('r'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(CodePointLayout::Builder('a'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(CodePointLayout::Builder('n'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(CodePointLayout::Builder('d'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(CodePointLayout::Builder('o'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(CodePointLayout::Builder('m'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(LeftParenthesisLayout::Builder(), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(RightParenthesisLayout::Builder(), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
l = hl;
e = Random::Builder();
assert_inserted_layout_points_to(l, &e, l);
// cos(\x11)
hl = HorizontalLayout::Builder();
hl.addChildAtIndex(CodePointLayout::Builder('c'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(CodePointLayout::Builder('o'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(CodePointLayout::Builder('s'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(LeftParenthesisLayout::Builder(), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
hl.addChildAtIndex(RightParenthesisLayout::Builder(), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
l = hl;
e = Cosine::Builder(EmptyExpression::Builder());
assert_inserted_layout_points_to(l, &e, l.childAtIndex(3));
// •^•
l = HorizontalLayout::Builder(
EmptyLayout::Builder(),
VerticalOffsetLayout::Builder(
EmptyLayout::Builder(),
VerticalOffsetLayoutNode::Position::Superscript)
);
e = Power::Builder(EmptyExpression::Builder(), EmptyExpression::Builder());
assert_inserted_layout_points_to(l, &e, l.childAtIndex(0));
// int(•, x, •, •)
l = IntegralLayout::Builder(
EmptyLayout::Builder(),
HorizontalLayout::Builder(
CodePointLayout::Builder('x')),
EmptyLayout::Builder(),
EmptyLayout::Builder());
e = Integral::Builder(
EmptyExpression::Builder(),
Symbol::Builder('x'),
EmptyExpression::Builder(),
EmptyExpression::Builder());
assert_inserted_layout_points_to(l, &e, l.childAtIndex(2));
}