tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

registry.rs (9947B)


      1 use l10nregistry_tests::{FileSource, RegistrySetup, TestFileFetcher};
      2 use unic_langid::LanguageIdentifier;
      3 
      4 static FTL_RESOURCE_TOOLKIT: &str = "toolkit/global/textActions.ftl";
      5 static FTL_RESOURCE_BROWSER: &str = "branding/brand.ftl";
      6 
      7 #[test]
      8 fn test_get_sources_for_resource() {
      9    let en_us: LanguageIdentifier = "en-US".parse().unwrap();
     10    let setup = RegistrySetup::new(
     11        "test",
     12        vec![
     13            FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"),
     14            FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"),
     15        ],
     16        vec![en_us.clone()],
     17    );
     18    let fetcher = TestFileFetcher::new();
     19    let (_, reg) = fetcher.get_registry_and_environment(setup);
     20 
     21    {
     22        let metasources = reg
     23            .try_borrow_metasources()
     24            .expect("Unable to borrow metasources.");
     25 
     26        let toolkit = metasources.file_source_by_name(0, "toolkit").unwrap();
     27        let browser = metasources.file_source_by_name(0, "browser").unwrap();
     28        let toolkit_resource_id = FTL_RESOURCE_TOOLKIT.into();
     29 
     30        let mut i = metasources.get_sources_for_resource(0, &en_us, &toolkit_resource_id);
     31 
     32        assert_eq!(i.next(), Some(toolkit));
     33        assert_eq!(i.next(), Some(browser));
     34        assert_eq!(i.next(), None);
     35 
     36        assert!(browser
     37            .fetch_file_sync(&en_us, &FTL_RESOURCE_TOOLKIT.into(), false)
     38            .is_none());
     39 
     40        let mut i = metasources.get_sources_for_resource(0, &en_us, &toolkit_resource_id);
     41        assert_eq!(i.next(), Some(toolkit));
     42        assert_eq!(i.next(), None);
     43 
     44        assert!(toolkit
     45            .fetch_file_sync(&en_us, &FTL_RESOURCE_TOOLKIT.into(), false)
     46            .is_some());
     47 
     48        let mut i = metasources.get_sources_for_resource(0, &en_us, &toolkit_resource_id);
     49        assert_eq!(i.next(), Some(toolkit));
     50        assert_eq!(i.next(), None);
     51    }
     52 }
     53 
     54 #[test]
     55 fn test_generate_bundles_for_lang_sync() {
     56    let en_us: LanguageIdentifier = "en-US".parse().unwrap();
     57    let setup = RegistrySetup::new(
     58        "test",
     59        vec![
     60            FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"),
     61            FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"),
     62        ],
     63        vec![en_us.clone()],
     64    );
     65    let fetcher = TestFileFetcher::new();
     66    let (_, reg) = fetcher.get_registry_and_environment(setup);
     67 
     68    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
     69    let mut i = reg.generate_bundles_for_lang_sync(en_us.clone(), paths);
     70 
     71    assert!(i.next().is_some());
     72    assert!(i.next().is_none());
     73 }
     74 
     75 #[test]
     76 fn test_generate_bundles_sync() {
     77    let en_us: LanguageIdentifier = "en-US".parse().unwrap();
     78    let setup = RegistrySetup::new(
     79        "test",
     80        vec![
     81            FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"),
     82            FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"),
     83        ],
     84        vec![en_us.clone()],
     85    );
     86    let fetcher = TestFileFetcher::new();
     87    let (_, reg) = fetcher.get_registry_and_environment(setup);
     88 
     89    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
     90    let lang_ids = vec![en_us];
     91    let mut i = reg.generate_bundles_sync(lang_ids.into_iter(), paths);
     92 
     93    assert!(i.next().is_some());
     94    assert!(i.next().is_none());
     95 }
     96 
     97 #[tokio::test]
     98 async fn test_generate_bundles_for_lang() {
     99    use futures::stream::StreamExt;
    100 
    101    let en_us: LanguageIdentifier = "en-US".parse().unwrap();
    102    let setup = RegistrySetup::new(
    103        "test",
    104        vec![
    105            FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"),
    106            FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"),
    107        ],
    108        vec![en_us.clone()],
    109    );
    110    let fetcher = TestFileFetcher::new();
    111    let (_, reg) = fetcher.get_registry_and_environment(setup);
    112 
    113    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
    114    let mut i = reg
    115        .generate_bundles_for_lang(en_us, paths)
    116        .expect("Failed to get GenerateBundles.");
    117 
    118    assert!(i.next().await.is_some());
    119    assert!(i.next().await.is_none());
    120 }
    121 
    122 #[tokio::test]
    123 async fn test_generate_bundles() {
    124    use futures::stream::StreamExt;
    125 
    126    let en_us: LanguageIdentifier = "en-US".parse().unwrap();
    127    let setup = RegistrySetup::new(
    128        "test",
    129        vec![
    130            FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"),
    131            FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"),
    132        ],
    133        vec![en_us.clone()],
    134    );
    135    let fetcher = TestFileFetcher::new();
    136    let (_, reg) = fetcher.get_registry_and_environment(setup);
    137 
    138    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
    139    let langs = vec![en_us];
    140    let mut i = reg
    141        .generate_bundles(langs.into_iter(), paths)
    142        .expect("Failed to get GenerateBundles.");
    143 
    144    assert!(i.next().await.is_some());
    145    assert!(i.next().await.is_none());
    146 }
    147 
    148 #[test]
    149 fn test_manage_sources() {
    150    let en_us: LanguageIdentifier = "en-US".parse().unwrap();
    151    let setup = RegistrySetup::new(
    152        "test",
    153        vec![
    154            FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"),
    155            FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"),
    156        ],
    157        vec![en_us.clone()],
    158    );
    159    let fetcher = TestFileFetcher::new();
    160    let (_, reg) = fetcher.get_registry_and_environment(setup);
    161 
    162    let lang_ids = vec![en_us];
    163 
    164    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
    165 
    166    let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths);
    167 
    168    assert!(i.next().is_some());
    169    assert!(i.next().is_none());
    170 
    171    reg.clone()
    172        .remove_sources(vec!["toolkit"])
    173        .expect("Failed to remove a source.");
    174 
    175    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
    176    let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths);
    177    assert!(i.next().is_none());
    178 
    179    let paths = vec![FTL_RESOURCE_BROWSER.into()];
    180    let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths);
    181    assert!(i.next().is_some());
    182    assert!(i.next().is_none());
    183 
    184    reg.register_sources(vec![fetcher.get_test_file_source(
    185        "toolkit",
    186        None,
    187        lang_ids.clone(),
    188        "browser/{locale}/",
    189    )])
    190    .expect("Failed to register a source.");
    191 
    192    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
    193    let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths);
    194    assert!(i.next().is_none());
    195 
    196    reg.update_sources(vec![fetcher.get_test_file_source(
    197        "toolkit",
    198        None,
    199        lang_ids.clone(),
    200        "toolkit/{locale}/",
    201    )])
    202    .expect("Failed to update a source.");
    203 
    204    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
    205    let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths);
    206    assert!(i.next().is_some());
    207    assert!(i.next().is_none());
    208 }
    209 
    210 #[test]
    211 fn test_generate_bundles_with_metasources_sync() {
    212    let en_us: LanguageIdentifier = "en-US".parse().unwrap();
    213    let setup = RegistrySetup::new(
    214        "test",
    215        vec![
    216            FileSource::new(
    217                "toolkit",
    218                Some("app"),
    219                vec![en_us.clone()],
    220                "toolkit/{locale}/",
    221            ),
    222            FileSource::new(
    223                "browser",
    224                Some("app"),
    225                vec![en_us.clone()],
    226                "browser/{locale}/",
    227            ),
    228            FileSource::new(
    229                "toolkit",
    230                Some("langpack"),
    231                vec![en_us.clone()],
    232                "toolkit/{locale}/",
    233            ),
    234            FileSource::new(
    235                "browser",
    236                Some("langpack"),
    237                vec![en_us.clone()],
    238                "browser/{locale}/",
    239            ),
    240        ],
    241        vec![en_us.clone()],
    242    );
    243    let fetcher = TestFileFetcher::new();
    244    let (_, reg) = fetcher.get_registry_and_environment(setup);
    245 
    246    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
    247    let lang_ids = vec![en_us];
    248    let mut i = reg.generate_bundles_sync(lang_ids.into_iter(), paths);
    249 
    250    assert!(i.next().is_some());
    251    assert!(i.next().is_some());
    252    assert!(i.next().is_none());
    253 }
    254 
    255 #[tokio::test]
    256 async fn test_generate_bundles_with_metasources() {
    257    use futures::stream::StreamExt;
    258 
    259    let en_us: LanguageIdentifier = "en-US".parse().unwrap();
    260 
    261    let setup = RegistrySetup::new(
    262        "test",
    263        vec![
    264            FileSource::new(
    265                "toolkit",
    266                Some("app"),
    267                vec![en_us.clone()],
    268                "toolkit/{locale}/",
    269            ),
    270            FileSource::new(
    271                "browser",
    272                Some("app"),
    273                vec![en_us.clone()],
    274                "browser/{locale}/",
    275            ),
    276            FileSource::new(
    277                "toolkit",
    278                Some("langpack"),
    279                vec![en_us.clone()],
    280                "toolkit/{locale}/",
    281            ),
    282            FileSource::new(
    283                "browser",
    284                Some("langpack"),
    285                vec![en_us.clone()],
    286                "browser/{locale}/",
    287            ),
    288        ],
    289        vec![en_us.clone()],
    290    );
    291 
    292    let fetcher = TestFileFetcher::new();
    293    let (_, reg) = fetcher.get_registry_and_environment(setup);
    294 
    295    let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()];
    296    let langs = vec![en_us];
    297    let mut i = reg
    298        .generate_bundles(langs.into_iter(), paths)
    299        .expect("Failed to get GenerateBundles.");
    300 
    301    assert!(i.next().await.is_some());
    302    assert!(i.next().await.is_some());
    303    assert!(i.next().await.is_none());
    304 }