| 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)})
 |