diff --git a/mdn/data.py b/mdn/data.py
index 15585d4..020b6e9 100644
--- a/mdn/data.py
+++ b/mdn/data.py
@@ -24,7 +24,8 @@ def __init__(self):
BrowserParams = namedtuple(
'BrowserParams', ['browser', 'browser_id', 'name', 'slug'])
- browser_name_fixes = {
+ # bug 1128525 changes names and slugs so that desktop isn't implied
+ pre_1128525_name_fixes = {
'Firefox (Gecko)': 'Firefox',
'Firefox Mobile (Gecko)': 'Firefox Mobile',
'Firefox OS (Gecko)': 'Firefox OS',
@@ -33,6 +34,27 @@ def __init__(self):
'IE Phone': 'IE Mobile',
'IE': 'Internet Explorer',
}
+ post_1128525_name_fixes = {
+ 'Android': 'Android Browser',
+ 'BlackBerry': 'BlackBerry Browser',
+ 'Chrome': 'Chrome for Desktop',
+ 'Firefox (Gecko)': 'Firefox for Desktop',
+ 'Firefox Mobile (Gecko)': 'Firefox for Android',
+ 'Firefox Mobile': 'Firefox for Android',
+ 'Firefox OS (Gecko)': 'Firefox OS',
+ 'Firefox': 'Firefox for Desktop',
+ 'IE Mobile': 'Internet Explorer Mobile',
+ 'IE Phone': 'Internet Explorer Mobile',
+ 'IE': 'Internet Explorer for Desktop',
+ 'iOS Safari': 'Safari for iOS',
+ 'Internet Explorer': 'Internet Explorer for Desktop',
+ 'Opera': 'Opera for Desktop',
+ 'Opera (Presto)': 'Opera for Desktop',
+ 'Safari (WebKit)': 'Safari for Desktop',
+ 'Safari Mobile': 'Safari for iOS',
+ 'Safari': 'Safari for Desktop',
+ 'Windows Phone': 'Internet Explorer Mobile',
+ }
def lookup_browser_params(self, name, locale='en'):
"""Get or create the browser ID, name, and slug given a raw name.
@@ -44,23 +66,30 @@ def lookup_browser_params(self, name, locale='en'):
* slug - A unique slug for this browser
"""
# Load existing browser data
+ # Also, detect if names and slugs have been changed by bug 1128525
if self.browser_data is None:
self.browser_data = {}
for browser in Browser.objects.all():
key = browser.name[locale]
+ if key == 'Firefox':
+ self.browser_name_fixes = self.pre_1128525_name_fixes
+ if key == 'Firefox for Desktop':
+ self.browser_name_fixes = self.post_1128525_name_fixes
self.browser_data[key] = self.BrowserParams(
browser, browser.pk, key, browser.slug)
+ if not hasattr(self, 'browser_name_fixes'):
+ self.browser_name_fixes = self.pre_1128525_name_fixes
- # Handle common alternate names
- fixed_name = self.browser_name_fixes.get(name, name)
+ # Expand to full name, handle common alternate names
+ full_name = self.browser_name_fixes.get(name, name)
# Select the Browser ID and slug
- if fixed_name not in self.browser_data:
- browser_id = '_' + fixed_name
+ if full_name not in self.browser_data:
+ browser_id = '_' + full_name
# TODO: unique slugify instead of browser_id
- self.browser_data[fixed_name] = self.BrowserParams(
- None, browser_id, fixed_name, browser_id)
- return self.browser_data[fixed_name]
+ self.browser_data[full_name] = self.BrowserParams(
+ None, browser_id, full_name, browser_id)
+ return self.browser_data[full_name]
FeatureParams = namedtuple(
'FeatureParams', ['feature', 'feature_id', 'slug'])
diff --git a/mdn/tests/base.py b/mdn/tests/base.py
index 9a78242..1ae08e9 100644
--- a/mdn/tests/base.py
+++ b/mdn/tests/base.py
@@ -58,11 +58,13 @@ class TestCase(BaseTestCase):
('Feature', 'web-css-background-size-contain_and_cover'): {
'_req': {'parent': ('Feature', 'web-css-background-size')},
'name': '{"en": "contain
and cover
"}'},
- ('Browser', 'chrome'): {'name': '{"en": "Chrome"}'},
- ('Browser', 'firefox'): {'name': '{"en": "Firefox"}'},
- ('Version', ('chrome', '1.0')): {},
- ('Version', ('firefox', 'current')): {},
- ('Version', ('firefox', '1.0')): {},
+ ('Browser', 'chrome_desktop'): {
+ 'name': '{"en": "Chrome for Desktop"}'},
+ ('Browser', 'firefox_desktop'): {
+ 'name': '{"en": "Firefox for Desktop"}'},
+ ('Version', ('chrome_desktop', '1.0')): {},
+ ('Version', ('firefox_desktop', 'current')): {},
+ ('Version', ('firefox_desktop', '1.0')): {},
}
def get_instance(self, model_cls_name, slug):
diff --git a/mdn/tests/test_compatibility.py b/mdn/tests/test_compatibility.py
index 06f7db5..a4f9cef 100644
--- a/mdn/tests/test_compatibility.py
+++ b/mdn/tests/test_compatibility.py
@@ -17,7 +17,7 @@ class TestCompatSectionExtractor(TestCase):
def setUp(self):
self.feature = self.get_instance('Feature', 'web-css-background-size')
self.visitor = KumaVisitor()
- self.version = self.get_instance('Version', ('firefox', '1.0'))
+ self.version = self.get_instance('Version', ('firefox_desktop', '1.0'))
def construct_html(
self, header=None, pre_table=None, feature=None,
@@ -56,7 +56,8 @@ def get_default_compat_div(self):
return {
'name': u'desktop',
'browsers': [{
- 'id': browser_id, 'name': 'Firefox', 'slug': 'firefox'}],
+ 'id': browser_id, 'name': 'Firefox for Desktop',
+ 'slug': 'firefox_desktop'}],
'versions': [{
'browser': browser_id, 'id': version_id, 'version': '1.0'}],
'features': [{
@@ -160,9 +161,9 @@ def test_compat_mobile_table(self):
expected_mobile = {
'name': 'mobile',
'browsers': [{
- 'id': '_Safari Mobile',
- 'name': 'Safari Mobile',
- 'slug': '_Safari Mobile',
+ 'id': '_Safari for iOS',
+ 'name': 'Safari for iOS',
+ 'slug': '_Safari for iOS',
}],
'features': [{
'id': '_contain and cover',
@@ -170,15 +171,15 @@ def test_compat_mobile_table(self):
'slug': 'web-css-background-size_contain_and_cover',
}],
'versions': [{
- 'id': '_Safari Mobile-1.0',
+ 'id': '_Safari for iOS-1.0',
'version': '1.0',
- 'browser': '_Safari Mobile',
+ 'browser': '_Safari for iOS',
}],
'supports': [{
- 'id': '__contain and cover-_Safari Mobile-1.0',
+ 'id': '__contain and cover-_Safari for iOS-1.0',
'feature': '_contain and cover',
'support': 'yes',
- 'version': '_Safari Mobile-1.0',
+ 'version': '_Safari for iOS-1.0',
'footnote': "It's really supported.",
'footnote_id': ('1', 581, 584),
}],
@@ -602,24 +603,25 @@ def test_version(self):
self.assert_support('1.0', [{'version': '1.0'}], [{'support': 'yes'}])
def test_version_matches(self):
- version = self.get_instance('Version', ('firefox', '1.0'))
+ version = self.get_instance('Version', ('firefox_desktop', '1.0'))
self.set_browser(version.browser)
self.assert_support(
'1.0', [{'version': '1.0', 'id': version.id}],
[{'support': 'yes'}])
def test_new_version_existing_browser(self):
- browser = self.get_instance('Browser', 'firefox')
+ browser = self.get_instance('Browser', 'firefox_desktop')
self.set_browser(browser)
issue = (
'unknown_version', 4, 7,
- {'browser_id': browser.id, 'browser_name': {"en": "Firefox"},
- 'browser_slug': 'firefox', 'version': '2.0'})
+ {'browser_id': browser.id,
+ 'browser_name': {"en": "Firefox for Desktop"},
+ 'browser_slug': 'firefox_desktop', 'version': '2.0'})
self.assert_support(
'2.0', [{'version': '2.0'}], [{'support': 'yes'}], issues=[issue])
def test_support_matches(self):
- version = self.get_instance('Version', ('firefox', '1.0'))
+ version = self.get_instance('Version', ('firefox_desktop', '1.0'))
self.set_browser(version.browser)
feature = self.get_instance(
'Feature', 'web-css-background-size-contain_and_cover')
diff --git a/mdn/tests/test_data.py b/mdn/tests/test_data.py
index cf5bb6d..dff2a70 100644
--- a/mdn/tests/test_data.py
+++ b/mdn/tests/test_data.py
@@ -3,7 +3,7 @@
from __future__ import unicode_literals
from mdn.data import Data
-from webplatformcompat.models import Feature, Support
+from webplatformcompat.models import Browser, Feature, Support
from .base import TestCase
@@ -23,14 +23,28 @@ def assert_browser_params(self, raw_name, browser, b_id, name, slug):
new_params = self.data.lookup_browser_params(raw_name)
self.assertEqual(params, new_params)
- def test_browser_params_new(self):
+ def test_browser_params_new_pre_1128525(self):
+ self.create(Browser, slug="chrome", name='{"en": "Chrome"}')
+ self.create(Browser, slug="firefox", name='{"en": "Firefox"}')
self.assert_browser_params(
- 'Firefox', None, '_Firefox', 'Firefox', '_Firefox')
+ 'Safari', None, '_Safari', 'Safari', '_Safari')
+
+ def test_browser_params_new_defaults_to_pre_1128525(self):
+ self.assert_browser_params(
+ 'Safari', None, '_Safari', 'Safari', '_Safari')
+
+ def test_browser_params_new_post_1128525(self):
+ self.get_instance('Browser', 'chrome_desktop')
+ self.get_instance('Browser', 'firefox_desktop')
+ self.assert_browser_params(
+ 'Safari', None, '_Safari for Desktop', 'Safari for Desktop',
+ '_Safari for Desktop')
def test_browser_params_match(self):
- match = self.get_instance('Browser', 'firefox')
+ match = self.get_instance('Browser', 'firefox_desktop')
self.assert_browser_params(
- 'Firefox', match, match.id, 'Firefox', 'firefox')
+ 'Firefox', match, match.id, 'Firefox for Desktop',
+ 'firefox_desktop')
class TestLookupFeatureParams(TestDataBase):
@@ -114,7 +128,8 @@ def test_not_found_but_others(self):
class TestLookupSupportId(TestDataBase):
def setUp(self):
super(TestLookupSupportId, self).setUp()
- self.version = self.get_instance('Version', ('firefox', 'current'))
+ self.version = self.get_instance(
+ 'Version', ('firefox_desktop', 'current'))
self.feature = self.get_instance(
'Feature', 'web-css-background-size-contain_and_cover')
@@ -146,7 +161,7 @@ def test_found(self):
class TestLookupVersionParams(TestDataBase):
def setUp(self):
super(TestLookupVersionParams, self).setUp()
- self.browser = self.get_instance('Browser', 'firefox')
+ self.browser = self.get_instance('Browser', 'firefox_desktop')
def test_new_browser(self):
params = self.data.lookup_version_params('_browser', 'Browser', '1.0')
@@ -157,10 +172,10 @@ def test_new_version(self):
params = self.data.lookup_version_params(
self.browser.id, self.browser.name['en'], '1.0')
self.assertIsNone(params.version)
- self.assertEqual('_Firefox-1.0', params.version_id)
+ self.assertEqual('_Firefox for Desktop-1.0', params.version_id)
def test_existing_version(self):
- version = self.get_instance('Version', ('firefox', 'current'))
+ version = self.get_instance('Version', ('firefox_desktop', 'current'))
params = self.data.lookup_version_params(
self.browser.id, self.browser.name['en'], 'current')
self.assertEqual(version, params.version)
diff --git a/mdn/tests/test_scrape.py b/mdn/tests/test_scrape.py
index 41e233c..02f0352 100644
--- a/mdn/tests/test_scrape.py
+++ b/mdn/tests/test_scrape.py
@@ -61,13 +61,14 @@ def get_sample_compat(self):
"""
- version = self.get_instance('Version', ('firefox', '1.0'))
+ version = self.get_instance('Version', ('firefox_desktop', '1.0'))
browser_id = version.browser_id
version_id = version.id
expected_compat = [{
'name': u'desktop',
'browsers': [{
- 'id': browser_id, 'name': 'Firefox', 'slug': 'firefox'}],
+ 'id': browser_id, 'name': 'Firefox for Desktop',
+ 'slug': 'firefox_desktop'}],
'versions': [{
'browser': browser_id, 'id': version_id, 'version': '1.0'}],
'features': [{
@@ -395,12 +396,12 @@ def test_new_section(self):
self.assertDataEqual(expected, section_content)
def test_load_browser(self):
- browser = self.get_instance('Browser', 'firefox')
+ browser = self.get_instance('Browser', 'firefox_desktop')
view = ScrapedViewFeature(self.page, self.empty_scrape())
browser_content = view.load_browser(browser.id)
expected = {
- 'id': str(browser.id), 'name': {'en': 'Firefox'}, 'note': None,
- 'slug': browser.slug}
+ 'id': str(browser.id), 'name': {'en': 'Firefox for Desktop'},
+ 'note': None, 'slug': browser.slug}
self.assertDataEqual(expected, browser_content)
def test_new_browser(self):
@@ -415,7 +416,7 @@ def test_new_browser(self):
self.assertDataEqual(expected, browser_content)
def test_load_version(self):
- version = self.get_instance('Version', ('firefox', '1.0'))
+ version = self.get_instance('Version', ('firefox_desktop', '1.0'))
view = ScrapedViewFeature(self.page, self.empty_scrape())
version_content = view.load_version(version.id)
expected = {
@@ -526,7 +527,7 @@ def test_new_feature_canonical(self):
self.assertDataEqual(expected, feature_content)
def test_load_support(self):
- version = self.get_instance('Version', ('firefox', '1.0'))
+ version = self.get_instance('Version', ('firefox_desktop', '1.0'))
feature = self.get_instance(
'Feature', 'web-css-background-size-contain_and_cover')
support = self.create(Support, version=version, feature=feature)
@@ -652,7 +653,7 @@ def test_load_compat_table_new_resources(self):
self.assertDataEqual(expected, out)
def test_load_compat_table_existing_resources(self):
- version = self.get_instance('Version', ('firefox', '1.0'))
+ version = self.get_instance('Version', ('firefox_desktop', '1.0'))
browser = version.browser
feature = self.get_instance(
'Feature', 'web-css-background-size-contain_and_cover')
@@ -691,7 +692,7 @@ def test_load_compat_table_existing_resources(self):
self.assertDataEqual(expected, out)
def test_load_compat_table_basic_support(self):
- version = self.get_instance('Version', ('firefox', '1.0'))
+ version = self.get_instance('Version', ('firefox_desktop', '1.0'))
browser = version.browser
feature = self.feature
browser_id = str(browser.id)
@@ -728,7 +729,7 @@ def test_load_compat_table_basic_support(self):
self.assertDataEqual(expected, out)
def test_load_compat_table_new_support_with_note(self):
- version = self.get_instance('Version', ('firefox', '1.0'))
+ version = self.get_instance('Version', ('firefox_desktop', '1.0'))
browser = version.browser
feature = self.get_instance(
'Feature', 'web-css-background-size-contain_and_cover')