• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import {
17    expect
18} from 'chai';
19import 'mocha';
20import { checkInstructions, SnippetCompiler } from "./utils/base";
21import {
22    Createobjectwithbuffer,
23    Defineclasswithbuffer,
24    Returnundefined,
25    Stmodulevar,
26    ThrowUndefinedifholewithname,
27    Imm,
28    Lda,
29    LdaStr,
30    Mov,
31    Sta,
32    VReg,
33    IRNode,
34    Ldexternalmodulevar,
35    Ldlocalmodulevar,
36    Stobjbyname
37} from "../src/irnodes";
38import { CmdOptions } from '../src/cmdOptions';
39import { creatAstFromSnippet } from "./utils/asthelper";
40import { PandaGen } from '../src/pandagen';
41
42
43describe("ExportDeclaration", function () {
44
45    it("exportClassTest", function() {
46        CmdOptions.isModules = () => {return true};
47        CmdOptions.parseUserCmd([""]);
48        let snippetCompiler = new SnippetCompiler();
49        snippetCompiler.compile(`class C {}; export {C}`);
50        IRNode.pg = new PandaGen("foo", creatAstFromSnippet(`class C {}; export {C}`), 0, undefined);
51        CmdOptions.isModules = () => {return false};
52        let funcMainInsns = snippetCompiler.getGlobalInsns();
53        let classReg = new VReg();
54        let expected = [
55            new Mov(new VReg(), new VReg()),
56            new Defineclasswithbuffer(new Imm(0), "UnitTest.#1#C", "snippet_1", new Imm(0), new VReg()),
57            new Sta(classReg),
58            new Lda(classReg),
59            new Stmodulevar(new Imm(0)),
60            new Returnundefined(),
61        ];
62        expect(checkInstructions(funcMainInsns, expected)).to.be.true;
63    });
64
65    it("Re-exportImportVarTest", function() {
66        CmdOptions.isModules = () => {return true};
67        let snippetCompiler = new SnippetCompiler();
68        snippetCompiler.compile(`import a from 'test.js'; let v = a; export {a};`);
69        CmdOptions.isModules = () => {return false};
70        let funcMainInsns = snippetCompiler.getGlobalInsns();
71        let v = new VReg();
72        let expected = [
73            new Ldexternalmodulevar(new Imm(0)),
74            new ThrowUndefinedifholewithname("a"),
75            new Sta(v),
76            new Returnundefined(),
77        ];
78        expect(checkInstructions(funcMainInsns, expected)).to.be.true;
79    });
80
81    it("Re-exportImportVaribaleIndexTest", function() {
82        CmdOptions.isModules = () => {return true};
83        let snippetCompiler = new SnippetCompiler();
84        snippetCompiler.compile(
85        `import { Graphics } from 'module1';
86        import { graphicsAssembler as graphics } from 'module2';
87        export { earcut } from 'module3';
88        const graphicsAssemblerManager = {
89            getAssembler(sprite) {
90                return graphics;
91            },
92        };
93        Graphics.Assembler = graphicsAssemblerManager;
94        export { graphics, graphicsAssemblerManager as graphicsAssembler, };`);
95        CmdOptions.isModules = () => {return false};
96        IRNode.pg = new PandaGen("test", creatAstFromSnippet(""), 0, undefined);
97        let funcMainInsns = snippetCompiler.getGlobalInsns();
98        let graphicsAssemblerManager = new VReg();
99        let v = new VReg();
100        let expected = [
101            new Createobjectwithbuffer(new Imm(0), "snippet_1"),
102            new Sta(graphicsAssemblerManager),
103            new Lda(graphicsAssemblerManager),
104            new Stmodulevar(new Imm(0)),
105            new Ldexternalmodulevar(new Imm(0)),
106            new ThrowUndefinedifholewithname("Graphics"),
107            new Sta(v),
108            new Mov(graphicsAssemblerManager, v),
109            new Ldlocalmodulevar(new Imm(0)),
110            new Stobjbyname(new Imm(1), "Assembler", graphicsAssemblerManager),
111            new Returnundefined()
112        ];
113        expect(checkInstructions(funcMainInsns, expected)).to.be.true;
114    });
115});