更新最新代码
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const vm = require('node:vm');
|
||||
const {tabForPage, paths} = require('../utils/navigation');
|
||||
const root = path.join(__dirname, '..');
|
||||
test('native custom tabs retain the three main pages; pages never mount a duplicate tab bar',()=>{
|
||||
const config=JSON.parse(fs.readFileSync(path.join(root,'app.json'),'utf8'));
|
||||
assert.equal(config.tabBar.custom,true);
|
||||
assert.deepEqual(config.tabBar.list.map(tab=>tab.pagePath),Object.values(paths));
|
||||
const pages=config.pages;
|
||||
for(const page of pages){
|
||||
const main=Object.values(paths).includes(page);
|
||||
const markup=fs.readFileSync(path.join(root,page+'.wxml'),'utf8');
|
||||
const components=JSON.parse(fs.readFileSync(path.join(root,page+'.json'),'utf8')).usingComponents||{};
|
||||
assert.equal(/<app-tabbar\b/.test(markup),false,page);
|
||||
assert.ok(!components['app-tabbar'],page);
|
||||
assert.equal(!!tabForPage(page),main,page);
|
||||
if(!main){assert.ok(!components['app-tabbar'],page);assert.ok(markup.includes('app-shell--secondary'),page);}
|
||||
}
|
||||
assert.equal(tabForPage('/pages/profile/profile?bind=1'),'profile');
|
||||
assert.equal(tabForPage('unknown'),'');
|
||||
});
|
||||
test('component selects the main page, hides on child routes and avoids reloading its current tab',()=>{
|
||||
let definition,route='pages/profile/profile',pageData={};const navigations=[];
|
||||
vm.runInNewContext(fs.readFileSync(path.join(root,'custom-tab-bar/index.js'),'utf8'),{
|
||||
Component:c=>definition=c,require:()=>({tabForPage,paths}),getCurrentPages:()=>[{route,data:pageData}],wx:{switchTab:o=>{navigations.push(o.url);o.complete();},reLaunch(){assert.fail('normal tab switching must retain pages');}}
|
||||
});
|
||||
const component={...definition.methods,data:{...definition.data},setData(v){Object.assign(this.data,v);}};
|
||||
definition.lifetimes.attached.call(component);assert.equal(component.data.active,'profile');
|
||||
component.navigate({currentTarget:{dataset:{tab:'profile'}}});assert.equal(navigations.length,0);
|
||||
component.navigate({currentTarget:{dataset:{tab:'records'}}});assert.deepEqual(navigations,['/pages/discover/discover']);
|
||||
pageData={showEditProfileModal:true};definition.pageLifetimes.show.call(component);assert.equal(component.data.hidden,true);
|
||||
pageData={showEditPartnerModal:true};definition.pageLifetimes.show.call(component);assert.equal(component.data.hidden,true);
|
||||
pageData={};definition.pageLifetimes.show.call(component);assert.equal(component.data.hidden,false);
|
||||
route='pages/settings/settings';definition.pageLifetimes.show.call(component);assert.equal(component.data.active,'');
|
||||
const markup=fs.readFileSync(path.join(root,'custom-tab-bar/index.wxml'),'utf8');
|
||||
assert.ok(markup.includes('wx:if="{{active && !hidden}}"'));
|
||||
});
|
||||
|
||||
test('profile editing hides tabs until close and reserves a fixed save area outside the scroll view',()=>{
|
||||
const createLoader=require('./load-module.cjs');let definition;const visibility=[];
|
||||
const load=createLoader({Page:value=>definition=value,wx:{getStorageSync:()=>1},console,Date,setTimeout,clearTimeout,setInterval,clearInterval});
|
||||
load(path.join(root,'pages/profile/profile.js'));
|
||||
const page={...definition,data:{...definition.data,myNickname:'名字',myInitial:'名',partnerDetail:'20岁'},setData(value){Object.assign(this.data,value);},getTabBar:()=>({setHidden:hidden=>visibility.push(hidden)})};
|
||||
page.showEditProfileModal();page.hideEditProfileModal();page.showEditPartnerModal();page.hideEditPartnerModal();
|
||||
assert.deepEqual(visibility,[true,false,true,false]);
|
||||
const markup=fs.readFileSync(path.join(root,'pages/profile/profile.wxml'),'utf8');
|
||||
assert.ok(markup.includes('<scroll-view class="edit-body" scroll-y'));
|
||||
assert.ok(markup.includes('</scroll-view>\n <view class="edit-footer">'));
|
||||
});
|
||||
test('photo memory detail uses light system controls and restores them on exit',()=>{
|
||||
const createLoader=require('./load-module.cjs');let definition;const colors=[];let back=0;
|
||||
const load=createLoader({Page:value=>definition=value,wx:{setNavigationBarColor:value=>colors.push(value),navigateBack:()=>back++},console,Date},{'../../utils/request':{api:{},getImageUrl:value=>'https://past.sundynix.cn/backend/'+value}});
|
||||
load(path.join(root,'pages/timeline-detail/timeline-detail.js'));
|
||||
const page={...definition,data:{...definition.data,item:{bg_image:'uploads/memory.jpg'}},setData(value){Object.assign(this.data,value);}};
|
||||
page.loadBgImage();assert.equal(colors.at(-1).frontColor,'#ffffff');assert.ok(page.data.bgImageUrl.endsWith('memory.jpg'));
|
||||
page.onHide();assert.equal(colors.at(-1).frontColor,'#000000');page.goBack();assert.equal(back,1);
|
||||
page.data.item.bg_image='';page.loadBgImage();assert.equal(page.data.bgImageUrl,'');assert.equal(colors.at(-1).frontColor,'#000000');
|
||||
});
|
||||
Reference in New Issue
Block a user