Merge lp:~gang65/ubuntu-calculator-app/ubuntu-calculator-complex-number-validation into lp:ubuntu-calculator-app

Proposed by Bartosz Kosiorek
Status: Merged
Approved by: Riccardo Padovani
Approved revision: 137
Merged at revision: 134
Proposed branch: lp:~gang65/ubuntu-calculator-app/ubuntu-calculator-complex-number-validation
Merge into: lp:ubuntu-calculator-app
Diff against target: 209 lines (+56/-16)
7 files modified
app/engine/formula.js (+13/-4)
app/tests/autopilot/ubuntu_calculator_app/__init__.py (+1/-1)
app/tests/autopilot/ubuntu_calculator_app/tests/test_main.py (+34/-3)
app/ui/LandscapeKeyboard.qml (+1/-1)
app/ui/PortraitKeyboard.qml (+1/-1)
app/ui/Screen.qml (+1/-1)
po/com.ubuntu.calculator.pot (+5/-5)
To merge this branch: bzr merge lp:~gang65/ubuntu-calculator-app/ubuntu-calculator-complex-number-validation
Reviewer Review Type Date Requested Status
Riccardo Padovani Approve
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve
Review via email: mp+252824@code.launchpad.net

Commit message

Add complex numbers validation

Description of the change

Add complex numbers validation

To post a comment you must log in.
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
133. By Bartosz Kosiorek

Fix validation for adding brackets

134. By Bartosz Kosiorek

Update translation

135. By Bartosz Kosiorek

Fix PEP8 warnings

136. By Bartosz Kosiorek

Fix factorial closing bracket

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
137. By Bartosz Kosiorek

Fix for sin and cos tests

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Riccardo Padovani (rpadovani) wrote :

Good catch, looks good to me, thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'app/engine/formula.js'
2--- app/engine/formula.js 2015-03-06 21:13:52 +0000
3+++ app/engine/formula.js 2015-03-12 22:55:03 +0000
4@@ -77,6 +77,7 @@
5 case "/":
6 case "%":
7 case "^":
8+ case "!":
9 return true;
10 default:
11 return false;
12@@ -96,6 +97,12 @@
13 return couldAddCloseBracket(formula);
14 }
15
16+ // Validate complex numbers
17+ if ((stringToAddToFormula === "i") || (!isNaN(stringToAddToFormula))){
18+ if (formula.slice(-1) === "i") {
19+ return false;
20+ }
21+ }
22 return true;
23 }
24
25@@ -133,7 +140,8 @@
26 return "(";
27 }
28 var lastChar = longFormula.substring(formulaToCheck.length - 1, formulaToCheck.length);
29- if (isNaN(lastChar) && lastChar !== ")") {
30+
31+ if (isNaN(lastChar) && lastChar !== ")" && lastChar !== "i" && lastChar !== "E" && lastChar !== "!") {
32 return "(";
33 } else if (couldAddCloseBracket(formulaToCheck) === true) {
34 return ")";
35@@ -159,7 +167,8 @@
36 'NaN': i18n.tr("NaN"),
37 'E': 'ℯ',
38 'Infinity': '∞',
39- '"': ''
40+ '"': '',
41+ ' ': ''
42 }
43
44 if (engineFormulaToConvert !== undefined) {
45@@ -182,8 +191,8 @@
46 * @return bool: true if the operator could be added, false otherwise
47 */
48 function couldAddOperator(formulaToCheck, operatorToAdd) {
49- // No two operators one after other
50- if (isOperator(formulaToCheck.slice(-1))) {
51+ // No two operators one after other, except factorial operator
52+ if (isOperator(formulaToCheck.slice(-1)) && formulaToCheck.slice(-1) !== "!") {
53 // But a minus after a * or a / is allowed
54 if (!(operatorToAdd === "-" && (formulaToCheck.slice(-1) === "*" ||
55 formulaToCheck.slice(-1) === "/"))) {
56
57=== modified file 'app/tests/autopilot/ubuntu_calculator_app/__init__.py'
58--- app/tests/autopilot/ubuntu_calculator_app/__init__.py 2015-03-03 20:31:14 +0000
59+++ app/tests/autopilot/ubuntu_calculator_app/__init__.py 2015-03-12 22:55:03 +0000
60@@ -76,7 +76,7 @@
61 'square': 'squareButton', 'cube': 'cubeButton',
62 'power': 'powerButton', 'log': 'logarithmButton',
63 'e': 'eNumberButton', '!': 'factorialNumberButton',
64- 'sin': 'sinusButton', 'cos': 'cosButton'}
65+ 'i': 'iButton', 'sin': 'sinusButton', 'cos': 'cosButton'}
66
67 def __init__(self, *args):
68 super(MainView, self).__init__(*args)
69
70=== modified file 'app/tests/autopilot/ubuntu_calculator_app/tests/test_main.py'
71--- app/tests/autopilot/ubuntu_calculator_app/tests/test_main.py 2015-03-09 19:52:25 +0000
72+++ app/tests/autopilot/ubuntu_calculator_app/tests/test_main.py 2015-03-12 22:55:03 +0000
73@@ -224,7 +224,20 @@
74 self._assert_result_is(u'24')
75 self._assert_history_contains(u'4!=24')
76
77- def test_sincos(self):
78+ def test_factorial_with_brackets(self):
79+ self.app.main_view.press_universal_bracket()
80+ self.app.main_view.insert('3')
81+ self.app.main_view.show_scientific_keyboard()
82+ self.app.main_view.press('!')
83+ self.app.main_view.hide_scientific_keyboard()
84+ self.app.main_view.insert('*2')
85+ self.app.main_view.press_universal_bracket()
86+ self.app.main_view.insert('=')
87+
88+ self._assert_result_is(u'12')
89+ self._assert_history_contains(u'(3!×2)=12')
90+
91+ def test_sin(self):
92 self.app.main_view.show_scientific_keyboard()
93 self.app.main_view.press('sin')
94 self.app.main_view.hide_scientific_keyboard()
95@@ -233,15 +246,33 @@
96 self._assert_result_is(u'0')
97 self._assert_history_contains(u'sin(0)=0')
98
99- self.app.main_view.clear()
100+ def test_cos(self):
101 self.app.main_view.show_scientific_keyboard()
102 self.app.main_view.press('cos')
103 self.app.main_view.hide_scientific_keyboard()
104- self.app.main_view.insert('0=')
105+ self.app.main_view.insert('0')
106+ self.app.main_view.press_universal_bracket()
107+ self.app.main_view.insert('=')
108
109 self._assert_result_is(u'1')
110 self._assert_history_contains(u'cos(0)=1')
111
112+ def test_validation_complex_numbers(self):
113+ self.app.main_view.insert('66')
114+ self.app.main_view.show_scientific_keyboard()
115+ self.app.main_view.press('i')
116+ self.app.main_view.hide_scientific_keyboard()
117+ self.app.main_view.insert('*')
118+ self.app.main_view.show_scientific_keyboard()
119+ self.app.main_view.press('i')
120+ self.app.main_view.press('i')
121+ self.app.main_view.press('i')
122+ self._assert_result_is(u'66i×i')
123+ self.app.main_view.hide_scientific_keyboard()
124+ self.app.main_view.insert('33=')
125+ self._assert_result_is(u'−66')
126+ self._assert_history_contains(u'66i×i=−66')
127+
128 def _assert_result_is(self, value):
129 self.assertThat(self.app.main_view.get_result,
130 Eventually(Equals(value)))
131
132=== modified file 'app/ui/LandscapeKeyboard.qml'
133--- app/ui/LandscapeKeyboard.qml 2015-03-06 21:13:52 +0000
134+++ app/ui/LandscapeKeyboard.qml 2015-03-12 22:55:03 +0000
135@@ -45,7 +45,7 @@
136 { number: 0, name: "zero", textColor: "#DD4814", forceNumber: true },
137 { text: "( )", name: "universalBracket", pushText: "()", textColor: "#DD4814" },
138 { text: "=", name: "equals", action: "calculate", kbdKeys: [Qt.Key_Enter, Qt.Key_Return] },
139- { text: "abs", name: "abs", pushText: "abs(", kbdKeys: [Qt.Key_A] },
140+ { text: "|x|", name: "abs", pushText: "abs(", kbdKeys: [Qt.Key_A] },
141 { text: "sin⁻¹", name: "arcsinus", pushText: "asin(" },
142 { text: "cos⁻¹", name: "arccos", pushText: "acos(" },
143 { text: "tan⁻¹", name: "arctangens", pushText: "atan(" }
144
145=== modified file 'app/ui/PortraitKeyboard.qml'
146--- app/ui/PortraitKeyboard.qml 2015-03-06 21:13:52 +0000
147+++ app/ui/PortraitKeyboard.qml 2015-03-12 22:55:03 +0000
148@@ -52,7 +52,7 @@
149 { text: "sin", name: "sinus", pushText: "sin(", kbdKeys: [Qt.Key_S] },
150 { text: "cos", name: "cos", pushText: "cos(", kbdKeys: [Qt.Key_C] },
151 { text: "tan", name: "tangens", pushText: "tan(", kbdKeys: [Qt.Key_T] },
152- { text: "abs", name: "abs", pushText: "abs(", kbdKeys: [Qt.Key_A] },
153+ { text: "|x|", name: "abs", pushText: "abs(", kbdKeys: [Qt.Key_A] },
154 { text: "sin⁻¹", name: "arcsinus", pushText: "asin(" },
155 { text: "cos⁻¹", name: "arccos", pushText: "acos(" },
156 { text: "tan⁻¹", name: "arctangens", pushText: "atan(" }
157
158=== modified file 'app/ui/Screen.qml'
159--- app/ui/Screen.qml 2015-03-06 21:13:52 +0000
160+++ app/ui/Screen.qml 2015-03-12 22:55:03 +0000
161@@ -102,7 +102,7 @@
162 anchors.bottom: formula.bottom
163
164 color: UbuntuColors.darkGrey
165- text: Formula.returnFormulaToDisplay((mathJs.format(model.result)))
166+ text: isNaN(model.result) ? Formula.returnFormulaToDisplay(model.result) : Formula.returnFormulaToDisplay(mathJs.format(model.result))
167 font.pixelSize: units.gu(3.5)
168 lineHeight: units.gu(2)
169 lineHeightMode: Text.FixedHeight
170
171=== modified file 'po/com.ubuntu.calculator.pot'
172--- po/com.ubuntu.calculator.pot 2015-03-06 21:13:52 +0000
173+++ po/com.ubuntu.calculator.pot 2015-03-12 22:55:03 +0000
174@@ -8,7 +8,7 @@
175 msgstr ""
176 "Project-Id-Version: \n"
177 "Report-Msgid-Bugs-To: \n"
178-"POT-Creation-Date: 2015-03-06 22:13+0100\n"
179+"POT-Creation-Date: 2015-03-12 23:05+0100\n"
180 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
181 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
182 "Language-Team: LANGUAGE <LL@li.org>\n"
183@@ -17,7 +17,7 @@
184 "Content-Type: text/plain; charset=CHARSET\n"
185 "Content-Transfer-Encoding: 8bit\n"
186
187-#: ../app/engine/formula.js:159
188+#: ../app/engine/formula.js:167
189 msgid "NaN"
190 msgstr ""
191
192@@ -91,14 +91,14 @@
193 msgid "Yesterday"
194 msgstr ""
195
196-#: /tmp/tmp.UV9NB7uRBM/po/ubuntu-calculator-app.desktop.in.in.h:1
197+#: /tmp/tmp.8YaHgSIjUW/po/ubuntu-calculator-app.desktop.in.in.h:1
198 msgid "Calculator"
199 msgstr ""
200
201-#: /tmp/tmp.UV9NB7uRBM/po/ubuntu-calculator-app.desktop.in.in.h:2
202+#: /tmp/tmp.8YaHgSIjUW/po/ubuntu-calculator-app.desktop.in.in.h:2
203 msgid "A calculator for Ubuntu."
204 msgstr ""
205
206-#: /tmp/tmp.UV9NB7uRBM/po/ubuntu-calculator-app.desktop.in.in.h:3
207+#: /tmp/tmp.8YaHgSIjUW/po/ubuntu-calculator-app.desktop.in.in.h:3
208 msgid "math;addition;subtraction;multiplication;division;"
209 msgstr ""

Subscribers

People subscribed via source and target branches