123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- import Element from "../src/element";
- test("layout", () => {
- const container = new Element({
- width: 100,
- height: 100,
- padding: 10,
- borderWidth: 2
- })
- const div1 = new Element({
- left: 5,
- top: 5,
- width: 14,
- height: 14
- })
- container.add(div1);
- container.layout();
- // css-layout 是 border-box
- expect(container.layoutBox.left).toBe(0);
- expect(container.layoutBox.top).toBe(0);
- expect(container.layoutBox.width).toBe(100);
- expect(container.layoutBox.height).toBe(100);
- expect(div1.layoutBox.left).toBe(10 + 2 + 5);
- expect(div1.layoutBox.top).toBe(10 + 2 + 5);
- expect(div1.layoutBox.width).toBe(14);
- expect(div1.layoutBox.height).toBe(14);
- });
- test("overflow", () => {
- const container = new Element({
- width: 100,
- height: 100,
- padding: 10,
- borderWidth: 2
- })
- const div1 = new Element({
- width: 114,
- height: 114,
- })
- container.add(div1);
- container.layout();
- // 写死尺寸的情况下子元素不收缩父元素不撑开
- expect(container.layoutBox.width).toBe(100);
- expect(container.layoutBox.height).toBe(100);
- expect(div1.layoutBox.left).toBe(10 + 2);
- expect(div1.layoutBox.top).toBe(10 + 2);
- expect(div1.layoutBox.width).toBe(114);
- expect(div1.layoutBox.height).toBe(114);
- });
- test("right bottom", () => {
- const container = new Element({
- width: 100,
- height: 100,
- padding: 10,
- borderWidth: 2
- })
- const div1 = new Element({
- width: 14,
- height: 14,
- right: 13,
- bottom: 9,
- position: "absolute"
- })
- container.add(div1);
- container.layout();
- // right bottom 只有在 position 为 absolute 的情况下才有用
- expect(container.layoutBox.width).toBe(100);
- expect(container.layoutBox.height).toBe(100);
- // 但这时就是以整个父元素为边界,而不是 border + padding 后的边界
- expect(div1.layoutBox.left).toBe(100 - 13 - 14);
- expect(div1.layoutBox.top).toBe(100 - 9 - 14);
- });
- test("flex center", () => {
- const container = new Element({
- width: 100,
- height: 100,
- padding: 10,
- borderWidth: 2,
- flexDirection: "row",
- justifyContent: "center",
- alignItems: "center"
- })
- const div1 = new Element({
- width: 14,
- height: 14
- })
- container.add(div1);
- container.layout();
- // 使用 flex 水平垂直居中
- expect(div1.layoutBox.left).toBe((100 - 14)/2);
- expect(div1.layoutBox.top).toBe((100 - 14)/2);
- })
- test("flex top bottom", () => {
- const container = new Element({
- width: 100,
- height: 100,
- padding: 10,
- borderWidth: 2,
- flexDirection: "column",
- justifyContent: "space-between",
- alignItems: "stretch"
- })
- // flex 实现一上一下两行水平填满
- const div1 = new Element({
- height: 10
- })
- const div2 = new Element({
- height: 20
- })
- container.add(div1);
- container.add(div2);
- container.layout();
- expect(div1.layoutBox.left).toBe(10 + 2);
- expect(div1.layoutBox.top).toBe(10 + 2);
- expect(div1.layoutBox.width).toBe(100 - 10*2 - 2*2);
- expect(div2.layoutBox.left).toBe(10 + 2);
- expect(div2.layoutBox.top).toBe(100 - 10 - 2 - 20);
- expect(div2.layoutBox.width).toBe(100 - 10*2 - 2*2);
- })
- test("rewrite uuid", () => {
- // 小程序为了保证 webview 和 service 侧的 coverview 不冲突,所以设置了不同的自增起点
- // uuid 静态方法就是为了根据不同的需求去覆写
- let uuid = 79648527;
- Element.uuid = () => uuid++;
- const container = new Element();
- expect(container.id).toEqual(79648527);
- const div = new Element();
- expect(div.id).toEqual(79648528);
- });
- test("absolute left top", () => {
- const container = new Element({
- width: 300,
- height: 200,
- flexDirection: 'row',
- justifyContent: 'center',
- alignItems: 'center'
- })
-
- const div1 = new Element({
- width: 80,
- height: 60
- })
-
- const div2 = new Element({
- width: 40,
- height: 30
- })
- div1.add(div2)
- container.add(div1)
- container.layout()
- expect(div1.layoutBox.left).toBe(110)
- expect(div1.layoutBox.top).toBe(70)
- expect(div2.layoutBox.left).toBe(110)
- expect(div2.layoutBox.top).toBe(70)
- })
|