diff --git a/cypress/integration/language-select.spec.js b/cypress/integration/language-select.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..a526a0e9d4cd42f1ed312ce9867ae7465bc1229d
--- /dev/null
+++ b/cypress/integration/language-select.spec.js
@@ -0,0 +1,90 @@
+/**
+ * Copyright (C) 2019  The Software Heritage developers
+ * See the AUTHORS file at the top-level directory of this distribution
+ * License: GNU Affero General Public License version 3, or any later version
+ * See top-level LICENSE file for more information
+ */
+
+import {random, checkLanguageHighlighting} from '../utils';
+
+const origin = {
+  url: 'https://github.com/memononen/libtess2',
+  content: {
+    path: 'premake4.lua'
+  }
+};
+
+let contentWithLanguageInfo, contentWithoutLanguageInfo;
+
+let languages = [];
+
+const $ = Cypress.$;
+
+describe('Test Content Language Select', function() {
+  before(function() {
+    contentWithLanguageInfo = this.Urls.browse_origin_content(origin.url, origin.content.path);
+
+    cy.visit(contentWithLanguageInfo);
+    cy.window().then(win => {
+      const metadata = win.swh.webapp.getBrowsedSwhObjectMetadata();
+
+      origin.content.name = metadata.filename;
+      origin.content.sha1git = metadata.sha1_git;
+      contentWithoutLanguageInfo = this.Urls.browse_content(`sha1_git:${origin.content.sha1git}`);
+      $('.language-select option').each(function() {
+        languages.push(this.value);
+      });
+    });
+  });
+
+  context('When Language is detected', function() {
+    it('should display correct language in dropdown', function() {
+      cy.visit(contentWithLanguageInfo)
+        .then(() => {
+          cy.get(`code.${$('.language-select').val()}`)
+            .should('exist');
+        });
+    });
+  });
+
+  context('When Language is not detected', function() {
+    it('should have no selected language in dropdown', function() {
+      cy.visit(contentWithoutLanguageInfo).then(() => {
+        assert.strictEqual($('.language-select').val(), null);
+      });
+    });
+  });
+
+  context('When language is switched from dropdown', function() {
+    before(function() {
+      cy.visit(contentWithLanguageInfo);
+
+      let languageSelect = languages[random(0, languages.length)];
+
+      cy.get('.chosen-container')
+        .click()
+        .get('.chosen-results > li')
+        .contains(languageSelect)
+        .click()
+        .then(() => {
+          assert.strictEqual($('.language-select').val(), languageSelect);
+        });
+    });
+
+    it('should contain argument with language in url', function() {
+      cy.location('search')
+        .should('contain', `language=${$('.language-select').val()}`);
+    });
+
+    it('should highlight according to new language', function() {
+      checkLanguageHighlighting($('.language-select').val());
+    });
+  });
+
+  it('should highlight according to the language passed as argument in url', function() {
+    const languageSelect = languages[random(0, languages.length)];
+    cy.visit(`${contentWithLanguageInfo}?language=${languageSelect}`);
+    checkLanguageHighlighting(languageSelect);
+  });
+
+});
diff --git a/cypress/utils/index.js b/cypress/utils/index.js
index 34df946d61ab8e3b115e343f82e90fff015371b5..cb8cf7f0ec96c150e6155a1122d0c9eccc1d75ed 100644
--- a/cypress/utils/index.js
+++ b/cypress/utils/index.js
@@ -45,3 +45,8 @@ export function checkLanguageHighlighting(language) {
     .should('be.visible')
     .and('not.be.empty');
 }
+
+export function random(start, end) {
+  const range = end - start;
+  return Math.floor(Math.random() * range) + start;
+}