Merge remote-tracking branch 'origin/master'
Conflicts: android-app-core/res/values-ru/text_about.xml android-app-core/res/values-ru/text_wizard.xml android-app-core/res/values/text_about.xml android-app-core/res/values/text_wizard.xml pom.xml
This commit is contained in:
Binary file not shown.
Before Width: | Height: | Size: 473 B |
Binary file not shown.
Before Width: | Height: | Size: 386 B |
Binary file not shown.
Before Width: | Height: | Size: 458 B |
Binary file not shown.
Before Width: | Height: | Size: 645 B |
Binary file not shown.
Before Width: | Height: | Size: 645 B |
@@ -24,6 +24,6 @@
|
||||
|
||||
<ImageButton xmlns:a="http://schemas.android.com/apk/res/android"
|
||||
a:id="@id/cpp_button_like"
|
||||
a:src="@drawable/kb_facebook"
|
||||
a:src="@drawable/kb_share"
|
||||
style="@style/cpp_simple_metro_control_image_button_style"
|
||||
a:contentDescription="Like"/>
|
29
android-app-core/res/layout/cpp_simple_button_operators.xml
Normal file
29
android-app-core/res/layout/cpp_simple_button_operators.xml
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
~ Copyright 2013 serso aka se.solovyev
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
~
|
||||
~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
~ Contact details
|
||||
~
|
||||
~ Email: se.solovyev@gmail.com
|
||||
~ Site: http://se.solovyev.org
|
||||
-->
|
||||
|
||||
<Button xmlns:a="http://schemas.android.com/apk/res/android"
|
||||
a:id="@id/cpp_button_operators"
|
||||
a:text="∂,…"
|
||||
a:textStyle="italic"
|
||||
style="@style/cpp_simple_metro_control_button_style"/>
|
@@ -78,7 +78,7 @@
|
||||
|
||||
<include layout="@layout/cpp_simple_button_plus"/>
|
||||
|
||||
<include layout="@layout/cpp_simple_button_like"/>
|
||||
<include layout="@layout/cpp_simple_button_settings"/>
|
||||
|
||||
<include layout="@layout/cpp_simple_button_copy"/>
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
<include layout="@layout/cpp_simple_button_subtraction"/>
|
||||
|
||||
<include layout="@layout/cpp_simple_button_settings"/>
|
||||
<include layout="@layout/cpp_simple_button_app"/>
|
||||
|
||||
<include layout="@layout/cpp_simple_button_paste"/>
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
<include layout="@layout/cpp_simple_button_functions"/>
|
||||
|
||||
<include layout="@layout/cpp_simple_button_app"/>
|
||||
<include layout="@layout/cpp_simple_button_operators"/>
|
||||
|
||||
<include layout="@layout/cpp_simple_button_history"/>
|
||||
|
||||
|
@@ -21,20 +21,25 @@
|
||||
-->
|
||||
|
||||
<resources>
|
||||
<string name="c_about">О программе</string>
|
||||
<string name="c_about_content">Копирайт © 2009–2013\n\n<b>Создано serso aka se.solovyev</b>\n\n
|
||||
Страница на Facebook:<a href="http://facebook.com/calculatorpp">http://facebook.com/calculatorpp</a>\n\n
|
||||
Эта программа распространяется под соглашением Apache 2.0 :\nисходный код может быть найден на\n
|
||||
<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
||||
Для получения большей информации\nсвяжитесь с автором по email\n
|
||||
<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>
|
||||
\nor visit\n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
||||
Если вы хотите поддержать проект\n\nвы можете купить специальную опцию из настроек приложения\n\n
|
||||
Если вам нравится приложение\nоценить его на 5 звёзд в\n
|
||||
<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
||||
Это приложение использует открытые библиотеки:\n
|
||||
<a href="http://simple.sourceforge.net">Simple (XML serialization)</a>\n
|
||||
<a href="http://meditorworld.appspot.com/meditor.txt">JSCL</a></string>
|
||||
<string name="c_release_notes">Примечания к выпуску</string>
|
||||
<string name="c_release_notes_for_title">"Примечания к выпуску версии "</string>
|
||||
</resources>
|
||||
|
||||
<string name="c_about">О программе</string>
|
||||
|
||||
<string name="c_about_content">Copyright (c) 2009-2013\n\n<b>Программа создана\nserso aka se.solovyev</b>\n\n
|
||||
Сайт приложения: <a href="https://vk.com/calculatorpp">https://vk.com/calculatorpp</a>\n\n
|
||||
Эта программа с открытыми исходным кодом:\nон может быть найден на \n
|
||||
<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
||||
За подробной информацией, пожалуйста,\nобращайтесь на почту\n<a href="mailto:se.solovyev@gmail.com">
|
||||
se.solovyev@gmail.com</a>\n
|
||||
или посетите сайт \n<a href="http://se.solovyev.org">http://se.solovyev.org</a>\n\n
|
||||
Если вы хотите поддержать проект материально\nвы можете купить специальную опцию из настроек приложения\n\n
|
||||
Если вам понравилось приложение -\nпоставьте 5 звёздочек в\n
|
||||
<a href="https://market.android.com/details?id=org.solovyev.android.calculator">Google Play</a>\n\n
|
||||
Это приложение использует следующие открытые библиотеки:\n
|
||||
<a href="http://simple.sourceforge.net">Simple (XML serialization)</a>\n
|
||||
<a href="http://meditorworld.appspot.com/meditor.txt">JSCL</a>
|
||||
</string>
|
||||
<string name="cpp_share_link">https://vk.com/calculatorpp</string>
|
||||
<string name="c_release_notes">Примечания к выпуску</string>
|
||||
<string name="c_release_notes_for_title">"Примечания к выпуску версии "</string>
|
||||
|
||||
</resources>
|
@@ -28,4 +28,25 @@
|
||||
<string name="cpp_wizard_final_donate">Пожертвовать деньги</string>
|
||||
<string name="cpp_wizard_final_translate">Перевести язык</string>
|
||||
<string name="cpp_wizard_final_contribute">Поучавствовать в разработке</string>
|
||||
<string name="cpp_wizard_layout_optimized">Оптимизированная</string>
|
||||
<string name="cpp_wizard_layout_big_buttons">С большими кнопками</string>
|
||||
<string name="cpp_wizard_mode_simple">Простой</string>
|
||||
<string name="cpp_wizard_mode_simple_description">В простом режиме только базовая функциональность доступна на главном экране. Результат округляется до 5 знаков, градусы установлены единицами измерения углов по умолчанию.</string>
|
||||
<string name="cpp_wizard_mode_engineer">Инженерный</string>
|
||||
<string name="cpp_wizard_mode_engineer_description">В инженерном режиме дополнительные функции доступны на главном экране. Результат не округляется и представлен в инженерной нотации, радианы установлены единицами измерения углов по умолчанию.</string>
|
||||
<string name="cpp_restart_wizard">Начать визард</string>
|
||||
<string name="cpp_wizard_dragbutton_action_end">Замечательно! Нажмите на кнопку ещё раз, чтобы повторить сначала</string>
|
||||
<string name="cpp_wizard_dragbutton_action_center">Нажмите на кнопку ниже для того, чтобы вопспользоваться 9</string>
|
||||
<string name="cpp_wizard_dragbutton_action_up">Потяните из центра кнопки вниз для того, чтобы воспользоваться %</string>
|
||||
<string name="cpp_wizard_dragbutton_action_left">Потяните из центра кнопки влево для того, чтобы воспользоваться sin</string>
|
||||
<string name="cpp_wizard_dragbutton_action_down">Потяните из центра кнопки вниз для того, чтобы воспользоваться ^2</string>
|
||||
<string name="cpp_wizard_welcome_title">Приветствие</string>
|
||||
<string name="cpp_wizard_layout_title">Выберите раскладку</string>
|
||||
<string name="cpp_wizard_mode_title">Выберите режим</string>
|
||||
<string name="cpp_wizard_onscreen_calculator_title">Калькулятор в отдельном окне</string>
|
||||
<string name="cpp_wizard_dragbutton_title">Основы использования кнопок</string>
|
||||
<string name="cpp_wizard_onscreen_description">Калькулятор в отдельном окне позволяет вам произодить вычисления не закрывая при этом другие приложения</string>
|
||||
<string name="cpp_wizard_onscreen_checkbox">Включить калькулятор в отдельном окне (вторая иконка появится в списке приложений)</string>
|
||||
<string name="cpp_wizard_dragbutton_description">Специально разработанные кнопки позволяют быстро и просто использовать дополнительные возможности калькулятора
|
||||
</string>
|
||||
</resources>
|
||||
|
@@ -1,9 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--Generated by crowdin.net-->
|
||||
<resources>
|
||||
<string name="c_about">About</string>
|
||||
<string name="c_about_content">Copyright © 2009–2013\n\n<b>Created by serso aka se.solovyev</b>\n\n
|
||||
We are on Facebook:<a href="http://facebook.com/calculatorpp">http://facebook.com/calculatorpp</a>\n\n
|
||||
|
||||
<string name="c_about">About</string>
|
||||
|
||||
<string name="c_about_content">Copyright © 2009–2013\n\n<b>Created by serso aka se.solovyev</b>\n\n
|
||||
We are on Facebook: <a href="http://facebook.com/calculatorpp">http://facebook.com/calculatorpp</a>\n\n
|
||||
This program is distributed under Apache 2.0 License:\nsource code can be found on\n
|
||||
<a href="https://github.com/serso/android-calculatorpp">http://github.com</a>\n\n
|
||||
For more information please\ncontact the author by email\n
|
||||
@@ -16,6 +18,9 @@
|
||||
<a href="http://simple.sourceforge.net">Simple (XML serialization)</a>\n
|
||||
<a href="http://meditorworld.appspot.com/meditor.txt">JSCL</a>
|
||||
</string>
|
||||
<string name="c_release_notes">Release notes</string>
|
||||
<string name="c_release_notes_for_title">"Release notes for version "</string>
|
||||
</resources>
|
||||
|
||||
<string name="c_release_notes">Release notes</string>
|
||||
<string name="c_release_notes_for_title">"Release notes for version "</string>
|
||||
<string name="cpp_share_link">http://www.facebook.com/calculatorpp</string>
|
||||
|
||||
</resources>
|
@@ -34,7 +34,17 @@
|
||||
</string>
|
||||
<string name="cpp_wizard_final_ways_to_help">There are several ways how you can help to make this app better:
|
||||
</string>
|
||||
<string name="cpp_wizard_final_donate">Donating money</string>
|
||||
<string name="cpp_wizard_final_translate">Translating</string>
|
||||
<string name="cpp_wizard_final_contribute">Contributing source code</string>
|
||||
</resources>
|
||||
<string name="cpp_wizard_final_donate">Donating money</string>
|
||||
<string name="cpp_wizard_final_translate">Translating</string>
|
||||
<string name="cpp_wizard_final_contribute">Contributing source code</string>
|
||||
<string name="cpp_wizard_onscreen_description">Calculator in separate window allows you to do calculations while
|
||||
using other apps on your device
|
||||
</string>
|
||||
<string name="cpp_wizard_onscreen_checkbox">Enable calculator in separate window (second icon will appear in the
|
||||
apps list)
|
||||
</string>
|
||||
<string name="cpp_wizard_dragbutton_description">Drag button is an exclusive feature of Calculator++ which provides
|
||||
fast access to the secondary functions
|
||||
</string>
|
||||
|
||||
</resources>
|
@@ -32,6 +32,16 @@ import org.solovyev.android.calculator.core.R;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.cursor_left;
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.cursor_right;
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.functions_detached;
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.history_detached;
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.like;
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.open_app;
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.operators_detached;
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.settings_detached;
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.vars_detached;
|
||||
|
||||
/**
|
||||
* User: serso
|
||||
* Date: 10/20/12
|
||||
@@ -54,16 +64,17 @@ public enum CalculatorButton {
|
||||
period(R.id.cpp_button_period, "."),
|
||||
brackets(R.id.cpp_button_round_brackets, "()"),
|
||||
|
||||
settings(R.id.cpp_button_settings, CalculatorSpecialButton.settings_detached),
|
||||
settings(R.id.cpp_button_settings, settings_detached),
|
||||
like(R.id.cpp_button_like, CalculatorSpecialButton.like),
|
||||
|
||||
/*last row*/
|
||||
left(R.id.cpp_button_left, CalculatorSpecialButton.cursor_left),
|
||||
right(R.id.cpp_button_right, CalculatorSpecialButton.cursor_right),
|
||||
vars(R.id.cpp_button_vars, CalculatorSpecialButton.vars_detached),
|
||||
functions(R.id.cpp_button_functions, CalculatorSpecialButton.functions_detached),
|
||||
app(R.id.cpp_button_app, CalculatorSpecialButton.open_app),
|
||||
history(R.id.cpp_button_history, CalculatorSpecialButton.history_detached),
|
||||
left(R.id.cpp_button_left, cursor_left),
|
||||
right(R.id.cpp_button_right, cursor_right),
|
||||
vars(R.id.cpp_button_vars, vars_detached),
|
||||
functions(R.id.cpp_button_functions, functions_detached),
|
||||
operators(R.id.cpp_button_operators, operators_detached),
|
||||
app(R.id.cpp_button_app, open_app),
|
||||
history(R.id.cpp_button_history, history_detached),
|
||||
|
||||
/*operations*/
|
||||
multiplication(R.id.cpp_button_multiplication, "*"),
|
||||
|
@@ -274,12 +274,12 @@ public class AndroidCalculatorEngine implements CalculatorEngine, SharedPreferen
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public NumeralBase getNumeralBaseFromPrefs(@Nonnull SharedPreferences preferences) {
|
||||
public static NumeralBase getNumeralBaseFromPrefs(@Nonnull SharedPreferences preferences) {
|
||||
return Preferences.numeralBase.getPreference(preferences);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public AngleUnit getAngleUnitsFromPrefs(@Nonnull SharedPreferences preferences) {
|
||||
public static AngleUnit getAngleUnitsFromPrefs(@Nonnull SharedPreferences preferences) {
|
||||
return Preferences.angleUnit.getPreference(preferences);
|
||||
}
|
||||
|
||||
|
@@ -27,6 +27,7 @@ import android.content.res.Resources;
|
||||
import android.graphics.Paint;
|
||||
import android.text.TextPaint;
|
||||
import android.util.AttributeSet;
|
||||
import jscl.AngleUnit;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
@@ -41,8 +42,12 @@ import org.solovyev.android.view.drag.DirectionDragButton;
|
||||
*/
|
||||
public class AngleUnitsButton extends DirectionDragButton {
|
||||
|
||||
@Nonnull
|
||||
private AngleUnit angleUnit;
|
||||
|
||||
public AngleUnitsButton(Context context, @Nonnull AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.angleUnit = Locator.getInstance().getEngine().getAngleUnits();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -52,11 +57,32 @@ public class AngleUnitsButton extends DirectionDragButton {
|
||||
super.initDirectionTextPaint(basePaint, directionTextData, resources);
|
||||
|
||||
final TextPaint directionTextPaint = directionTextData.getPaint();
|
||||
if (Locator.getInstance().getEngine().getAngleUnits().name().equals(directionTextData.getText())) {
|
||||
directionTextPaint.setColor(resources.getColor(R.color.cpp_selected_angle_unit_text_color));
|
||||
} else {
|
||||
directionTextPaint.setColor(resources.getColor(R.color.cpp_default_text_color));
|
||||
final int color = getDirectionTextColor(directionTextData.getText());
|
||||
directionTextPaint.setColor(color);
|
||||
if (!isCurrentAngleUnits(directionTextData.getText())) {
|
||||
directionTextPaint.setAlpha(getDirectionTextAlpha());
|
||||
}
|
||||
}
|
||||
|
||||
int getDirectionTextColor(@Nonnull String directionText) {
|
||||
final int color;
|
||||
final Resources resources = getResources();
|
||||
if (isCurrentAngleUnits(directionText)) {
|
||||
color = resources.getColor(R.color.cpp_selected_angle_unit_text_color);
|
||||
} else {
|
||||
color = resources.getColor(R.color.cpp_default_text_color);
|
||||
}
|
||||
return color;
|
||||
}
|
||||
|
||||
boolean isCurrentAngleUnits(@Nonnull String directionText) {
|
||||
return this.angleUnit.name().equals(directionText);
|
||||
}
|
||||
|
||||
public void setAngleUnit(@Nonnull AngleUnit angleUnit) {
|
||||
if (this.angleUnit != angleUnit) {
|
||||
this.angleUnit = angleUnit;
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -27,6 +27,7 @@ import android.content.res.Resources;
|
||||
import android.graphics.Paint;
|
||||
import android.text.TextPaint;
|
||||
import android.util.AttributeSet;
|
||||
import jscl.NumeralBase;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
@@ -41,8 +42,12 @@ import org.solovyev.android.view.drag.DirectionDragButton;
|
||||
*/
|
||||
public class NumeralBasesButton extends DirectionDragButton {
|
||||
|
||||
@Nonnull
|
||||
private NumeralBase numeralBase;
|
||||
|
||||
public NumeralBasesButton(Context context, @Nonnull AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.numeralBase = Locator.getInstance().getEngine().getNumeralBase();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -52,11 +57,33 @@ public class NumeralBasesButton extends DirectionDragButton {
|
||||
super.initDirectionTextPaint(basePaint, directionTextData, resources);
|
||||
|
||||
final TextPaint directionTextPaint = directionTextData.getPaint();
|
||||
if (Locator.getInstance().getEngine().getNumeralBase().name().equals(directionTextData.getText())) {
|
||||
directionTextPaint.setColor(resources.getColor(R.color.cpp_selected_angle_unit_text_color));
|
||||
} else {
|
||||
directionTextPaint.setColor(resources.getColor(R.color.cpp_default_text_color));
|
||||
|
||||
final int color = getDirectionTextColor(directionTextData.getText());
|
||||
directionTextPaint.setColor(color);
|
||||
|
||||
if (!isCurrentNumberBase(directionTextData.getText())) {
|
||||
directionTextPaint.setAlpha(getDirectionTextAlpha());
|
||||
}
|
||||
}
|
||||
|
||||
int getDirectionTextColor(@Nonnull String directionText) {
|
||||
final int color;
|
||||
if (isCurrentNumberBase(directionText)) {
|
||||
color = getResources().getColor(R.color.cpp_selected_angle_unit_text_color);
|
||||
} else {
|
||||
color = getResources().getColor(R.color.cpp_default_text_color);
|
||||
}
|
||||
return color;
|
||||
}
|
||||
|
||||
boolean isCurrentNumberBase(@Nonnull String directionText) {
|
||||
return this.numeralBase.name().equals(directionText);
|
||||
}
|
||||
|
||||
public void setNumeralBase(@Nonnull NumeralBase numeralBase) {
|
||||
if (this.numeralBase != numeralBase) {
|
||||
this.numeralBase = numeralBase;
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright 2013 serso aka se.solovyev
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
* Contact details
|
||||
*
|
||||
* Email: se.solovyev@gmail.com
|
||||
* Site: http://se.solovyev.org
|
||||
*/
|
||||
|
||||
package org.solovyev.android.calculator;
|
||||
|
||||
import android.content.Context;
|
||||
import jscl.JsclMathEngine;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import org.mockito.Mockito;
|
||||
import org.solovyev.android.calculator.history.CalculatorHistory;
|
||||
import org.solovyev.android.calculator.plot.CalculatorPlotter;
|
||||
|
||||
/**
|
||||
* User: serso
|
||||
* Date: 10/7/12
|
||||
* Time: 8:56 PM
|
||||
*/
|
||||
public class CalculatorTestUtils {
|
||||
|
||||
public static void staticSetUp(@Nullable Context context) throws Exception {
|
||||
Locator.getInstance().init(new CalculatorImpl(), newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class), new SystemOutCalculatorLogger(), Mockito.mock(CalculatorPreferenceService.class), Mockito.mock(CalculatorKeyboard.class), Mockito.mock(CalculatorPlotter.class), null);
|
||||
Locator.getInstance().getEngine().init();
|
||||
|
||||
if (context != null) {
|
||||
initViews(context);
|
||||
}
|
||||
}
|
||||
|
||||
public static void initViews(@Nonnull Context context) {
|
||||
final AndroidCalculatorEditorView editor = new AndroidCalculatorEditorView(context);
|
||||
editor.init();
|
||||
Locator.getInstance().getEditor().setView(editor);
|
||||
|
||||
final AndroidCalculatorDisplayView display = new AndroidCalculatorDisplayView(context);
|
||||
display.init(context);
|
||||
Locator.getInstance().getDisplay().setView(display);
|
||||
}
|
||||
|
||||
public static void staticSetUp() throws Exception {
|
||||
staticSetUp(null);
|
||||
}
|
||||
|
||||
|
||||
@Nonnull
|
||||
static CalculatorEngineImpl newCalculatorEngine() {
|
||||
final MathEntityDao mathEntityDao = Mockito.mock(MathEntityDao.class);
|
||||
|
||||
final JsclMathEngine jsclEngine = JsclMathEngine.getInstance();
|
||||
|
||||
final CalculatorVarsRegistry varsRegistry = new CalculatorVarsRegistry(jsclEngine.getConstantsRegistry(), mathEntityDao);
|
||||
final CalculatorFunctionsMathRegistry functionsRegistry = new CalculatorFunctionsMathRegistry(jsclEngine.getFunctionsRegistry(), mathEntityDao);
|
||||
final CalculatorOperatorsMathRegistry operatorsRegistry = new CalculatorOperatorsMathRegistry(jsclEngine.getOperatorsRegistry(), mathEntityDao);
|
||||
final CalculatorPostfixFunctionsRegistry postfixFunctionsRegistry = new CalculatorPostfixFunctionsRegistry(jsclEngine.getPostfixFunctionsRegistry(), mathEntityDao);
|
||||
|
||||
return new CalculatorEngineImpl(jsclEngine, varsRegistry, functionsRegistry, operatorsRegistry, postfixFunctionsRegistry, null);
|
||||
}
|
||||
}
|
@@ -0,0 +1,75 @@
|
||||
package org.solovyev.android.calculator.view;
|
||||
|
||||
import android.app.Activity;
|
||||
import jscl.AngleUnit;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mockito;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.res.Attribute;
|
||||
import org.robolectric.shadows.ShadowActivity;
|
||||
|
||||
import static jscl.AngleUnit.deg;
|
||||
import static jscl.AngleUnit.grad;
|
||||
import static jscl.AngleUnit.rad;
|
||||
import static jscl.AngleUnit.turns;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.solovyev.android.calculator.CalculatorTestUtils.staticSetUp;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class AngleUnitsButtonTest {
|
||||
|
||||
private AngleUnitsButton button;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
staticSetUp();
|
||||
|
||||
final Activity context = Robolectric.buildActivity(Activity.class).create().get();
|
||||
final ShadowActivity activity = Robolectric.shadowOf(context);
|
||||
button = new AngleUnitsButton(context, activity.createAttributeSet(new ArrayList<Attribute>(), AngleUnitsButton.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldReturnDifferentColorsForDifferentAngleUnits() throws Exception {
|
||||
button.setAngleUnit(deg);
|
||||
|
||||
assertEquals(button.getDirectionTextColor(deg.name()), button.getDirectionTextColor(deg.name()));
|
||||
assertEquals(button.getDirectionTextColor(grad.name()), button.getDirectionTextColor(rad.name()));
|
||||
assertNotSame(button.getDirectionTextColor(deg.name()), button.getDirectionTextColor(rad.name()));
|
||||
assertNotSame(button.getDirectionTextColor(deg.name()), button.getDirectionTextColor(grad.name()));
|
||||
assertNotSame(button.getDirectionTextColor(deg.name()), button.getDirectionTextColor(turns.name()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsCurrentAngleUnits() throws Exception {
|
||||
button.setAngleUnit(rad);
|
||||
assertTrue(button.isCurrentAngleUnits(rad.name()));
|
||||
assertFalse(button.isCurrentAngleUnits(deg.name()));
|
||||
assertFalse(button.isCurrentAngleUnits(grad.name()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidateShouldBeCalledOnlyWhenChangeIsDone() throws Exception {
|
||||
button.setAngleUnit(rad);
|
||||
|
||||
button = Mockito.spy(button);
|
||||
|
||||
button.setAngleUnit(deg);
|
||||
verify(button, times(1)).invalidate();
|
||||
|
||||
button.setAngleUnit(deg);
|
||||
verify(button, times(1)).invalidate();
|
||||
}
|
||||
}
|
@@ -0,0 +1,76 @@
|
||||
package org.solovyev.android.calculator.view;
|
||||
|
||||
import android.app.Activity;
|
||||
import jscl.NumeralBase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mockito;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.res.Attribute;
|
||||
import org.robolectric.shadows.ShadowActivity;
|
||||
|
||||
import static jscl.AngleUnit.deg;
|
||||
import static jscl.AngleUnit.rad;
|
||||
import static jscl.NumeralBase.bin;
|
||||
import static jscl.NumeralBase.dec;
|
||||
import static jscl.NumeralBase.hex;
|
||||
import static jscl.NumeralBase.oct;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.solovyev.android.calculator.CalculatorTestUtils.staticSetUp;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class NumeralBasesButtonTest {
|
||||
|
||||
private NumeralBasesButton button;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
staticSetUp();
|
||||
|
||||
final Activity context = Robolectric.buildActivity(Activity.class).create().get();
|
||||
final ShadowActivity activity = Robolectric.shadowOf(context);
|
||||
button = new NumeralBasesButton(context, activity.createAttributeSet(new ArrayList<Attribute>(), NumeralBasesButton.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldReturnDifferentColorsForDifferentNumeralBase() throws Exception {
|
||||
button.setNumeralBase(dec);
|
||||
|
||||
assertEquals(button.getDirectionTextColor(dec.name()), button.getDirectionTextColor(dec.name()));
|
||||
assertEquals(button.getDirectionTextColor(hex.name()), button.getDirectionTextColor(bin.name()));
|
||||
assertNotSame(button.getDirectionTextColor(dec.name()), button.getDirectionTextColor(bin.name()));
|
||||
assertNotSame(button.getDirectionTextColor(dec.name()), button.getDirectionTextColor(hex.name()));
|
||||
assertNotSame(button.getDirectionTextColor(dec.name()), button.getDirectionTextColor(oct.name()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsCurrentNumeralBase() throws Exception {
|
||||
button.setNumeralBase(dec);
|
||||
assertTrue(button.isCurrentNumberBase(dec.name()));
|
||||
assertFalse(button.isCurrentNumberBase(hex.name()));
|
||||
assertFalse(button.isCurrentNumberBase(bin.name()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidateShouldBeCalledOnlyWhenChangeIsDone() throws Exception {
|
||||
button.setNumeralBase(dec);
|
||||
|
||||
button = Mockito.spy(button);
|
||||
|
||||
button.setNumeralBase(hex);
|
||||
verify(button, times(1)).invalidate();
|
||||
|
||||
button.setNumeralBase(hex);
|
||||
verify(button, times(1)).invalidate();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user