def _test(layer, is_gpkg=False):

            # Skip fid and precision tests
            offset = 1 if is_gpkg else 0

            fieldFormatter = QgsFallbackFieldFormatter()

            QLocale.setDefault(QLocale('en'))

            # Precision is ignored for integers and longlongs
            self.assertEqual(
                fieldFormatter.representValue(layer, 0 + offset, {}, None,
                                              '123'), '123')
            self.assertEqual(
                fieldFormatter.representValue(layer, 0 + offset, {}, None,
                                              '123000'), '123,000')
            self.assertEqual(
                fieldFormatter.representValue(layer, 0 + offset, {}, None,
                                              '9999999'), '9,999,999')
            self.assertEqual(
                fieldFormatter.representValue(layer, 0 + offset, {}, None,
                                              None), 'NULL')
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              '123'), '123')
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              '123000'), '123,000')
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              '9999999'), '9,999,999')
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              None), 'NULL')

            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              None), 'NULL')

            if not is_gpkg:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123'), '123.00000')
            else:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123'), '123')

            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              None), 'NULL')

            if not is_gpkg:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123000'), '123,000.00000')
            else:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123000'), '123,000')

            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '0'), '0')
            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '0.127'), '0.127')
            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '1.27e-1'), '0.127')

            if not is_gpkg:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '-123'), '-123.00000')
            else:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '-123'), '-123')

            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '-0.127'), '-0.127')
            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '-1.27e-1'), '-0.127')

            # Check with Italian locale
            QLocale.setDefault(QLocale('it'))

            self.assertEqual(
                fieldFormatter.representValue(layer, 0 + offset, {}, None,
                                              '9999999'),
                '9.999.999')  # scientific notation for integers!
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              '123'), '123')
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              '123000'), '123.000')
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              '9999999'), '9.999.999')
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              None), 'NULL')

            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              None), 'NULL')

            if not is_gpkg:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123000'), '123.000,00000')
            else:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123000'), '123.000')

            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '0'), '0')

            if not is_gpkg:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123'), '123,00000')
            else:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123'), '123')

            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '0.127'), '0,127')
            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '1.27e-1'), '0,127')

            if not is_gpkg:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '-123'), '-123,00000')
            else:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '-123'), '-123')

            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '-0.127'), '-0,127')
            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              '-1.27e-1'), '-0,127')

            # Check with custom locale without thousand separator

            custom = QLocale('en')
            custom.setNumberOptions(QLocale.OmitGroupSeparator)
            QLocale.setDefault(custom)

            self.assertEqual(
                fieldFormatter.representValue(layer, 0 + offset, {}, None,
                                              '9999999'),
                '9999999')  # scientific notation for integers!
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              '123'), '123')
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              '9999999'), '9999999')

            if not is_gpkg:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123000'), '123000.00000')
            else:
                self.assertEqual(
                    fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                                  '123000'), '123000')

            # Check string
            self.assertEqual(
                fieldFormatter.representValue(layer, 3 + offset, {}, None,
                                              '123'), '123')
            self.assertEqual(
                fieldFormatter.representValue(layer, 3 + offset, {}, None,
                                              'a string'), 'a string')
            self.assertEqual(
                fieldFormatter.representValue(layer, 3 + offset, {}, None, ''),
                '')
            self.assertEqual(
                fieldFormatter.representValue(layer, 3 + offset, {}, None,
                                              None), 'NULL')

            # Check NULLs (this is what happens in real life inside QGIS)
            self.assertEqual(
                fieldFormatter.representValue(layer, 0 + offset, {}, None,
                                              QVariant(QVariant.String)),
                'NULL')
            self.assertEqual(
                fieldFormatter.representValue(layer, 1 + offset, {}, None,
                                              QVariant(QVariant.String)),
                'NULL')
            self.assertEqual(
                fieldFormatter.representValue(layer, 2 + offset, {}, None,
                                              QVariant(QVariant.String)),
                'NULL')
            self.assertEqual(
                fieldFormatter.representValue(layer, 3 + offset, {}, None,
                                              QVariant(QVariant.String)),
                'NULL')