diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 801fdf6201ee3..7c2ce474cb2b8 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1141,7 +1141,6 @@
-
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index ec8634a915810..9861bae88ac45 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2925,22 +2925,6 @@
Deny
-
-
- Send SMS to short code?
-
- Send premium SMS?
-
- <b>%1$s</b> would like to send a text message to <b>%2$s</b>, which appears to be an SMS short code.<p>Sending text messages to some short codes may cause your mobile account to be billed for premium services.<p>Do you want to allow this app to send the message?
-
- <b>%1$s</b> would like to send a text message to <b>%2$s</b>, which is a premium SMS short code.<p><b>Sending a message to this destination will cause your mobile account to be billed for premium services.</b><p>Do you want to allow this app to send the message?
-
- Send message
-
- Don\'t send
-
- Report malicious app
-
SIM card removed
diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml
deleted file mode 100644
index 8b395af0a7b3c..0000000000000
--- a/core/res/res/xml/sms_short_codes.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/telephony/java/com/android/internal/telephony/SMSDispatcher.java b/telephony/java/com/android/internal/telephony/SMSDispatcher.java
index 41125dd119bd3..6ba8b9e65436a 100644
--- a/telephony/java/com/android/internal/telephony/SMSDispatcher.java
+++ b/telephony/java/com/android/internal/telephony/SMSDispatcher.java
@@ -920,61 +920,18 @@ public abstract class SMSDispatcher extends Handler {
SmsTracker tracker = new SmsTracker(map, sentIntent, deliveryIntent, appPackage,
PhoneNumberUtils.extractNetworkPortion(destAddr));
- // checkDestination() returns true if the destination is not a premium short code or the
- // sending app is approved to send to short codes. Otherwise, a message is sent to our
- // handler with the SmsTracker to request user confirmation before sending.
- if (checkDestination(tracker)) {
- // check for excessive outgoing SMS usage by this app
- if (!mUsageMonitor.check(appPackage, SINGLE_PART_SMS)) {
- sendMessage(obtainMessage(EVENT_SEND_LIMIT_REACHED_CONFIRMATION, tracker));
- return;
- }
-
- int ss = mPhone.getServiceState().getState();
-
- if (ss != ServiceState.STATE_IN_SERVICE) {
- handleNotInService(ss, tracker.mSentIntent);
- } else {
- sendSms(tracker);
- }
+ // check for excessive outgoing SMS usage by this app
+ if (!mUsageMonitor.check(appPackage, SINGLE_PART_SMS)) {
+ sendMessage(obtainMessage(EVENT_SEND_LIMIT_REACHED_CONFIRMATION, tracker));
+ return;
}
- }
- /**
- * Check if destination is a potential premium short code and sender is not pre-approved to
- * send to short codes.
- *
- * @param tracker the tracker for the SMS to send
- * @return true if the destination is approved; false if user confirmation event was sent
- */
- boolean checkDestination(SmsTracker tracker) {
- if (mContext.checkCallingOrSelfPermission(SEND_SMS_NO_CONFIRMATION_PERMISSION)
- == PackageManager.PERMISSION_GRANTED) {
- return true; // app is pre-approved to send to short codes
+ int ss = mPhone.getServiceState().getState();
+
+ if (ss != ServiceState.STATE_IN_SERVICE) {
+ handleNotInService(ss, tracker.mSentIntent);
} else {
- String countryIso = mTelephonyManager.getSimCountryIso();
- if (countryIso == null || countryIso.length() != 2) {
- Log.e(TAG, "Can't get SIM country code: trying network country code");
- countryIso = mTelephonyManager.getNetworkCountryIso();
- }
-
- switch (mUsageMonitor.checkDestination(tracker.mDestAddress, countryIso)) {
- case SmsUsageMonitor.CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE:
- sendMessage(obtainMessage(EVENT_CONFIRM_SEND_TO_POSSIBLE_PREMIUM_SHORT_CODE,
- tracker));
- return false; // wait for user confirmation before sending
-
- case SmsUsageMonitor.CATEGORY_PREMIUM_SHORT_CODE:
- sendMessage(obtainMessage(EVENT_CONFIRM_SEND_TO_PREMIUM_SHORT_CODE,
- tracker));
- return false; // wait for user confirmation before sending
-
- case SmsUsageMonitor.CATEGORY_NOT_SHORT_CODE:
- case SmsUsageMonitor.CATEGORY_FREE_SHORT_CODE:
- case SmsUsageMonitor.CATEGORY_STANDARD_SHORT_CODE:
- default:
- return true; // destination is not a premium short code
- }
+ sendSms(tracker);
}
}
diff --git a/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java b/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java
index 1804d97dee59b..4a4485d1fd0b8 100644
--- a/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java
+++ b/telephony/java/com/android/internal/telephony/SmsUsageMonitor.java
@@ -60,177 +60,17 @@ public class SmsUsageMonitor {
/** Default number of SMS sent in checking period without user permission. */
private static final int DEFAULT_SMS_MAX_COUNT = 30;
- /** Return value from {@link #checkDestination} for regular phone numbers. */
- static final int CATEGORY_NOT_SHORT_CODE = 0;
-
- /** Return value from {@link #checkDestination} for free (no cost) short codes. */
- static final int CATEGORY_FREE_SHORT_CODE = 1;
-
- /** Return value from {@link #checkDestination} for standard rate (non-premium) short codes. */
- static final int CATEGORY_STANDARD_SHORT_CODE = 2;
-
- /** Return value from {@link #checkDestination} for possible premium short codes. */
- static final int CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE = 3;
-
- /** Return value from {@link #checkDestination} for premium short codes. */
- static final int CATEGORY_PREMIUM_SHORT_CODE = 4;
-
private final int mCheckPeriod;
private final int mMaxAllowed;
private final HashMap> mSmsStamp =
new HashMap>();
- /** Context for retrieving regexes from XML resource. */
- private final Context mContext;
-
- /** Country code for the cached short code pattern matcher. */
- private String mCurrentCountry;
-
- /** Cached short code pattern matcher for {@link #mCurrentCountry}. */
- private ShortCodePatternMatcher mCurrentPatternMatcher;
-
- /** Cached short code regex patterns from secure settings for {@link #mCurrentCountry}. */
- private String mSettingsShortCodePatterns;
-
- /** Handler for responding to content observer updates. */
- private final SettingsObserverHandler mSettingsObserverHandler;
-
- /** XML tag for root element. */
- private static final String TAG_SHORTCODES = "shortcodes";
-
- /** XML tag for short code patterns for a specific country. */
- private static final String TAG_SHORTCODE = "shortcode";
-
- /** XML attribute for the country code. */
- private static final String ATTR_COUNTRY = "country";
-
- /** XML attribute for the short code regex pattern. */
- private static final String ATTR_PATTERN = "pattern";
-
- /** XML attribute for the premium short code regex pattern. */
- private static final String ATTR_PREMIUM = "premium";
-
- /** XML attribute for the free short code regex pattern. */
- private static final String ATTR_FREE = "free";
-
- /** XML attribute for the standard rate short code regex pattern. */
- private static final String ATTR_STANDARD = "standard";
-
- /**
- * SMS short code regex pattern matcher for a specific country.
- */
- private static final class ShortCodePatternMatcher {
- private final Pattern mShortCodePattern;
- private final Pattern mPremiumShortCodePattern;
- private final Pattern mFreeShortCodePattern;
- private final Pattern mStandardShortCodePattern;
-
- ShortCodePatternMatcher(String shortCodeRegex, String premiumShortCodeRegex,
- String freeShortCodeRegex, String standardShortCodeRegex) {
- mShortCodePattern = (shortCodeRegex != null ? Pattern.compile(shortCodeRegex) : null);
- mPremiumShortCodePattern = (premiumShortCodeRegex != null ?
- Pattern.compile(premiumShortCodeRegex) : null);
- mFreeShortCodePattern = (freeShortCodeRegex != null ?
- Pattern.compile(freeShortCodeRegex) : null);
- mStandardShortCodePattern = (standardShortCodeRegex != null ?
- Pattern.compile(standardShortCodeRegex) : null);
- }
-
- int getNumberCategory(String phoneNumber) {
- if (mFreeShortCodePattern != null && mFreeShortCodePattern.matcher(phoneNumber)
- .matches()) {
- return CATEGORY_FREE_SHORT_CODE;
- }
- if (mStandardShortCodePattern != null && mStandardShortCodePattern.matcher(phoneNumber)
- .matches()) {
- return CATEGORY_STANDARD_SHORT_CODE;
- }
- if (mPremiumShortCodePattern != null && mPremiumShortCodePattern.matcher(phoneNumber)
- .matches()) {
- return CATEGORY_PREMIUM_SHORT_CODE;
- }
- if (mShortCodePattern != null && mShortCodePattern.matcher(phoneNumber).matches()) {
- return CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE;
- }
- return CATEGORY_NOT_SHORT_CODE;
- }
- }
-
- /**
- * Observe the secure setting for updated regex patterns.
- */
- private static class SettingsObserver extends ContentObserver {
- private final int mWhat;
- private final Handler mHandler;
-
- SettingsObserver(Handler handler, int what) {
- super(handler);
- mHandler = handler;
- mWhat = what;
- }
-
- @Override
- public void onChange(boolean selfChange) {
- mHandler.obtainMessage(mWhat).sendToTarget();
- }
- }
-
- /**
- * Handler to update regex patterns when secure setting for the current country is updated.
- */
- private class SettingsObserverHandler extends Handler {
- /** Current content observer, or null. */
- SettingsObserver mSettingsObserver;
-
- /** Current country code to watch for settings updates. */
- private String mCountryIso;
-
- /** Request to start observing a secure setting. */
- static final int OBSERVE_SETTING = 1;
-
- /** Handler event for updated secure settings. */
- static final int SECURE_SETTINGS_CHANGED = 2;
-
- /** Send a message to this handler requesting to observe the setting for a new country. */
- void observeSettingForCountry(String countryIso) {
- obtainMessage(OBSERVE_SETTING, countryIso).sendToTarget();
- }
-
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case OBSERVE_SETTING:
- if (msg.obj != null && msg.obj instanceof String) {
- mCountryIso = (String) msg.obj;
- String settingName = getSettingNameForCountry(mCountryIso);
- ContentResolver resolver = mContext.getContentResolver();
-
- if (mSettingsObserver != null) {
- if (VDBG) log("Unregistering old content observer");
- resolver.unregisterContentObserver(mSettingsObserver);
- }
-
- mSettingsObserver = new SettingsObserver(this, SECURE_SETTINGS_CHANGED);
- resolver.registerContentObserver(
- Settings.Secure.getUriFor(settingName), false, mSettingsObserver);
- if (VDBG) log("Registered content observer for " + settingName);
- }
- break;
-
- case SECURE_SETTINGS_CHANGED:
- loadPatternsFromSettings(mCountryIso);
- break;
- }
- }
- }
-
/**
* Create SMS usage monitor.
* @param context the context to use to load resources and get TelephonyManager service
*/
public SmsUsageMonitor(Context context) {
- mContext = context;
ContentResolver resolver = context.getContentResolver();
mMaxAllowed = Settings.Secure.getInt(resolver,
@@ -240,83 +80,6 @@ public class SmsUsageMonitor {
mCheckPeriod = Settings.Secure.getInt(resolver,
Settings.Secure.SMS_OUTGOING_CHECK_INTERVAL_MS,
DEFAULT_SMS_CHECK_PERIOD);
-
- mSettingsObserverHandler = new SettingsObserverHandler();
- }
-
- /**
- * Return a pattern matcher object for the specified country.
- * @param country the country to search for
- * @return a {@link ShortCodePatternMatcher} for the specified country, or null if not found
- */
- private ShortCodePatternMatcher getPatternMatcher(String country) {
- int id = com.android.internal.R.xml.sms_short_codes;
- XmlResourceParser parser = mContext.getResources().getXml(id);
-
- try {
- return getPatternMatcher(country, parser);
- } catch (XmlPullParserException e) {
- Log.e(TAG, "XML parser exception reading short code pattern resource", e);
- } catch (IOException e) {
- Log.e(TAG, "I/O exception reading short code pattern resource", e);
- } finally {
- parser.close();
- }
- return null; // country not found
- }
-
- /**
- * Return a pattern matcher object for the specified country from a secure settings string.
- * @return a {@link ShortCodePatternMatcher} for the specified country, or null if not found
- */
- private static ShortCodePatternMatcher getPatternMatcher(String country, String settingsPattern) {
- // embed pattern tag into an XML document.
- String document = "" + settingsPattern + "";
- if (VDBG) log("loading updated patterns from: " + document);
-
- try {
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
- XmlPullParser parser = factory.newPullParser();
- parser.setInput(new StringReader(document));
- return getPatternMatcher(country, parser);
- } catch (XmlPullParserException e) {
- Log.e(TAG, "XML parser exception reading short code pattern from settings", e);
- } catch (IOException e) {
- Log.e(TAG, "I/O exception reading short code pattern from settings", e);
- }
- return null; // country not found
- }
-
- /**
- * Return a pattern matcher object for the specified country and pattern XML parser.
- * @param country the country to search for
- * @return a {@link ShortCodePatternMatcher} for the specified country, or null if not found
- */
- private static ShortCodePatternMatcher getPatternMatcher(String country, XmlPullParser parser)
- throws XmlPullParserException, IOException
- {
- XmlUtils.beginDocument(parser, TAG_SHORTCODES);
-
- while (true) {
- XmlUtils.nextElement(parser);
-
- String element = parser.getName();
- if (element == null) break;
-
- if (element.equals(TAG_SHORTCODE)) {
- String currentCountry = parser.getAttributeValue(null, ATTR_COUNTRY);
- if (country.equals(currentCountry)) {
- String pattern = parser.getAttributeValue(null, ATTR_PATTERN);
- String premium = parser.getAttributeValue(null, ATTR_PREMIUM);
- String free = parser.getAttributeValue(null, ATTR_FREE);
- String standard = parser.getAttributeValue(null, ATTR_STANDARD);
- return new ShortCodePatternMatcher(pattern, premium, free, standard);
- }
- } else {
- Log.e(TAG, "Error: skipping unknown XML tag " + element);
- }
- }
- return null; // country not found
}
/** Clear the SMS application list for disposal. */
@@ -348,90 +111,6 @@ public class SmsUsageMonitor {
}
}
- /**
- * Check if the destination is a possible premium short code.
- * NOTE: the caller is expected to strip non-digits from the destination number with
- * {@link PhoneNumberUtils#extractNetworkPortion} before calling this method.
- * This happens in {@link SMSDispatcher#sendRawPdu} so that we use the same phone number
- * for testing and in the user confirmation dialog if the user needs to confirm the number.
- * This makes it difficult for malware to fool the user or the short code pattern matcher
- * by using non-ASCII characters to make the number appear to be different from the real
- * destination phone number.
- *
- * @param destAddress the destination address to test for possible short code
- * @return {@link #CATEGORY_NOT_SHORT_CODE}, {@link #CATEGORY_FREE_SHORT_CODE},
- * {@link #CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE}, or {@link #CATEGORY_PREMIUM_SHORT_CODE}.
- */
- public int checkDestination(String destAddress, String countryIso) {
- synchronized (mSettingsObserverHandler) {
- // always allow emergency numbers
- if (PhoneNumberUtils.isEmergencyNumber(destAddress, countryIso)) {
- return CATEGORY_NOT_SHORT_CODE;
- }
-
- ShortCodePatternMatcher patternMatcher = null;
-
- if (countryIso != null) {
- // query secure settings and initialize content observer for updated regex patterns
- if (mCurrentCountry == null || !countryIso.equals(mCurrentCountry)) {
- loadPatternsFromSettings(countryIso);
- mSettingsObserverHandler.observeSettingForCountry(countryIso);
- }
-
- if (countryIso.equals(mCurrentCountry)) {
- patternMatcher = mCurrentPatternMatcher;
- } else {
- patternMatcher = getPatternMatcher(countryIso);
- mCurrentCountry = countryIso;
- mCurrentPatternMatcher = patternMatcher; // may be null if not found
- }
- }
-
- if (patternMatcher != null) {
- return patternMatcher.getNumberCategory(destAddress);
- } else {
- // Generic rule: numbers of 5 digits or less are considered potential short codes
- Log.e(TAG, "No patterns for \"" + countryIso + "\": using generic short code rule");
- if (destAddress.length() <= 5) {
- return CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE;
- } else {
- return CATEGORY_NOT_SHORT_CODE;
- }
- }
- }
- }
-
- private static String getSettingNameForCountry(String countryIso) {
- return Settings.Secure.SMS_SHORT_CODES_PREFIX + countryIso;
- }
-
- /**
- * Load regex patterns from secure settings if present.
- * @param countryIso the country to search for
- */
- void loadPatternsFromSettings(String countryIso) {
- synchronized (mSettingsObserverHandler) {
- if (VDBG) log("loadPatternsFromSettings(" + countryIso + ") called");
- String settingsPatterns = Settings.Secure.getString(
- mContext.getContentResolver(), getSettingNameForCountry(countryIso));
- if (settingsPatterns != null && !settingsPatterns.equals(
- mSettingsShortCodePatterns)) {
- // settings pattern string has changed: update the pattern matcher
- mSettingsShortCodePatterns = settingsPatterns;
- ShortCodePatternMatcher matcher = getPatternMatcher(countryIso, settingsPatterns);
- if (matcher != null) {
- mCurrentCountry = countryIso;
- mCurrentPatternMatcher = matcher;
- }
- } else if (settingsPatterns == null && mSettingsShortCodePatterns != null) {
- // pattern string was removed: caller will load default patterns from XML resource
- mCurrentCountry = null;
- mCurrentPatternMatcher = null;
- mSettingsShortCodePatterns = null;
- }
- }
- }
-
/**
* Remove keys containing only old timestamps. This can happen if an SMS app is used
* to send messages and then uninstalled.
diff --git a/telephony/tests/telephonytests/src/com/android/internal/telephony/SmsUsageMonitorShortCodeTest.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/SmsUsageMonitorShortCodeTest.java
deleted file mode 100644
index 3bb7c060e9e37..0000000000000
--- a/telephony/tests/telephonytests/src/com/android/internal/telephony/SmsUsageMonitorShortCodeTest.java
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.
- */
-
-package com.android.internal.telephony;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import static com.android.internal.telephony.SmsUsageMonitor.CATEGORY_FREE_SHORT_CODE;
-import static com.android.internal.telephony.SmsUsageMonitor.CATEGORY_NOT_SHORT_CODE;
-import static com.android.internal.telephony.SmsUsageMonitor.CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE;
-import static com.android.internal.telephony.SmsUsageMonitor.CATEGORY_PREMIUM_SHORT_CODE;
-import static com.android.internal.telephony.SmsUsageMonitor.CATEGORY_STANDARD_SHORT_CODE;
-
-/**
- * Test cases for SMS short code pattern matching in SmsUsageMonitor.
- */
-public class SmsUsageMonitorShortCodeTest extends AndroidTestCase {
-
- private static final class ShortCodeTest {
- final String countryIso;
- final String address;
- final int category;
-
- ShortCodeTest(String countryIso, String destAddress, int category) {
- this.countryIso = countryIso;
- this.address = destAddress;
- this.category = category;
- }
- }
-
- /**
- * List of short code test cases.
- */
- private static final ShortCodeTest[] sShortCodeTests = new ShortCodeTest[] {
- new ShortCodeTest("al", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("al", "4321", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("al", "54321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("al", "15191", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("al", "55500", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("al", "55600", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("al", "654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("am", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("am", "101", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("am", "102", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("am", "103", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("am", "222", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("am", "1111", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("am", "9999", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("am", "1121", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("am", "1141", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("am", "1161", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("am", "3024", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("at", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("at", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("at", "0901234", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("at", "0900666266", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("au", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("au", "180000", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("au", "190000", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("au", "1900000", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("au", "19000000", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("au", "19998882", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("az", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("az", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "12345", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "87744", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "3301", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "3302", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "9012", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "9014", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "9394", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "87744", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "93101", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("az", "123456", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("be", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("be", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("be", "567890", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("be", "8000", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("be", "6566", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("be", "7777", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("bg", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("bg", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("bg", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("bg", "12345", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("bg", "1816", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("bg", "1915", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("bg", "1916", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("bg", "1935", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("bg", "18423", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("by", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("by", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("by", "3336", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("by", "5013", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("by", "5014", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("by", "7781", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("ca", "911", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ca", "+18005551234", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ca", "8005551234", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ca", "20000", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ca", "200000", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ca", "2000000", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ca", "60999", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ca", "88188", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("ch", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ch", "123", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ch", "234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ch", "3456", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ch", "98765", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ch", "543", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ch", "83111", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ch", "234567", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ch", "87654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("cn", "120", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("cn", "1062503000", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("cn", "1065123456", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("cn", "1066335588", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("cy", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("cy", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("cy", "4321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("cy", "54321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("cy", "654321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("cy", "7510", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("cy", "987654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("cz", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("cz", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("cz", "9090150", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("cz", "90901599", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("cz", "987654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("de", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("de", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("de", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "12345", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "8888", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "11111", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "11886", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "22022", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "23300", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "3434", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "34567", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "41414", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "55655", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "66766", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "66777", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "77677", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "80888", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "1232286", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("de", "987654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("dk", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("dk", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("dk", "1259", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("dk", "16123", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("dk", "987654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("ee", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ee", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("ee", "123", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ee", "1259", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ee", "15330", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ee", "17999", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ee", "17010", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ee", "17013", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ee", "9034567", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ee", "34567890", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("es", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("es", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("es", "25165", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("es", "27333", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("es", "995399", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("es", "87654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("fi", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("fi", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("fi", "12345", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("fi", "123456", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("fi", "17159", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("fi", "17163", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("fi", "0600123", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("fi", "070012345", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("fi", "987654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("fr", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("fr", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("fr", "34567", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("fr", "45678", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("fr", "81185", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("fr", "87654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("gb", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("gb", "999", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("gb", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("gb", "4567", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("gb", "45678", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("gb", "56789", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("gb", "79067", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("gb", "80079", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("gb", "654321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("gb", "7654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("ge", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ge", "8765", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ge", "2345", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ge", "8012", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ge", "8013", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ge", "8014", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ge", "8889", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("gr", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("gr", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("gr", "54321", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("gr", "19567", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("gr", "19678", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("gr", "87654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("hu", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("hu", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("hu", "012", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("hu", "0123", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("hu", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("hu", "1784", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("hu", "2345", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("hu", "01234", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("hu", "012345678", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("hu", "0123456789", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("hu", "1234567890", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("hu", "0691227910", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("hu", "2345678901", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("hu", "01234567890", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("ie", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ie", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("ie", "50123", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("ie", "51234", CATEGORY_STANDARD_SHORT_CODE),
- new ShortCodeTest("ie", "52345", CATEGORY_STANDARD_SHORT_CODE),
- new ShortCodeTest("ie", "57890", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ie", "67890", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ie", "87654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("il", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("il", "5432", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("il", "4422", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("il", "4545", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("il", "98765", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("it", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("it", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("it", "4567", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("it", "48000", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("it", "45678", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("it", "56789", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("it", "456789", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("kg", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("kg", "5432", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("kg", "4152", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("kg", "4157", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("kg", "4449", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("kg", "98765", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("kz", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("kz", "5432", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("kz", "9194", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("kz", "7790", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("kz", "98765", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("lt", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("lt", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("lt", "123", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lt", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lt", "1381", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lt", "1394", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lt", "1645", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lt", "12345", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lt", "123456", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("lu", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("lu", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("lu", "1234", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("lu", "12345", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("lu", "64747", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lu", "678901", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("lv", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("lv", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("lv", "5432", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lv", "1819", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lv", "1863", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lv", "1874", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("lv", "98765", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("mx", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("mx", "2345", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("mx", "7766", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("mx", "23456", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("mx", "53035", CATEGORY_PREMIUM_SHORT_CODE),
-
- new ShortCodeTest("my", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("my", "1234", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("my", "23456", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("my", "32298", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("my", "33776", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("my", "345678", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("nl", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("nl", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("nl", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("nl", "4466", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("nl", "5040", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("nl", "23456", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("no", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("no", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("no", "2201", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("no", "2226", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("no", "2227", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("no", "23456", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("no", "234567", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("nz", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("nz", "123", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("nz", "2345", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("nz", "3903", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("nz", "8995", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("nz", "23456", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("pl", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("pl", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("pl", "7890", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pl", "34567", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pl", "7910", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pl", "74240", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pl", "79866", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pl", "92525", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pl", "87654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("pt", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("pt", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("pt", "61000", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pt", "62345", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pt", "68304", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pt", "69876", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("pt", "87654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("ro", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ro", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("ro", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ro", "1263", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ro", "1288", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ro", "1314", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ro", "1380", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ro", "7890", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ro", "12345", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("ru", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ru", "5432", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ru", "1161", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ru", "2097", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ru", "3933", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ru", "7781", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ru", "98765", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("se", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("se", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("se", "1234", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("se", "72345", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("se", "72999", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("se", "123456", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("se", "87654321", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("sg", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("sg", "1234", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("sg", "70000", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("sg", "79999", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("sg", "73800", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("sg", "74688", CATEGORY_STANDARD_SHORT_CODE),
- new ShortCodeTest("sg", "987654", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("si", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("si", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("si", "1234", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("si", "3838", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("si", "72999", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("sk", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("sk", "116117", CATEGORY_FREE_SHORT_CODE),
- new ShortCodeTest("sk", "1234", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("sk", "6674", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("sk", "7604", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("sk", "72999", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("tj", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("tj", "5432", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("tj", "1161", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("tj", "1171", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("tj", "4161", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("tj", "4449", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("tj", "98765", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("ua", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("ua", "5432", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ua", "4448", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ua", "7094", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ua", "7540", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("ua", "98765", CATEGORY_NOT_SHORT_CODE),
-
- new ShortCodeTest("us", "911", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("us", "+18005551234", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("us", "8005551234", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("us", "20000", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("us", "200000", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("us", "2000000", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("us", "20433", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("us", "21472", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("us", "23333", CATEGORY_PREMIUM_SHORT_CODE),
- new ShortCodeTest("us", "99807", CATEGORY_PREMIUM_SHORT_CODE),
-
- // generic rules for other countries: 5 digits or less considered potential short code
- new ShortCodeTest("zz", "2000000", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest("zz", "54321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("zz", "4321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("zz", "321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest("zz", "112", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest(null, "2000000", CATEGORY_NOT_SHORT_CODE),
- new ShortCodeTest(null, "54321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest(null, "4321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest(null, "321", CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE),
- new ShortCodeTest(null, "112", CATEGORY_NOT_SHORT_CODE),
- };
-
- @SmallTest
- public void testSmsUsageMonitor() {
- SmsUsageMonitor monitor = new SmsUsageMonitor(getContext());
- for (ShortCodeTest test : sShortCodeTests) {
- assertEquals("country: " + test.countryIso + " number: " + test.address,
- test.category, monitor.checkDestination(test.address, test.countryIso));
- }
- }
-}