Skip to content
Snippets Groups Projects
Select Git revision
  • 96dfef9c9e87c841897b6c8347e780eb59e99bdd
  • release default protected
  • 11-22-implement-kv-interface-defined-in-collectiveversionedkvgo
  • hotfix/TestHostPool_UpdateNdf_AddFilter
  • XX-4719/announcementChannels
  • xx-4717/logLevel
  • jonah/noob-channel
  • master protected
  • XX-4707/tagDiskJson
  • xx-4698/notification-retry
  • hotfix/notifylockup
  • syncNodes
  • hotfix/localCB
  • XX-4677/NewChanManagerMobile
  • XX-4689/DmSync
  • duplicatePrefix
  • XX-4601/HavenInvites
  • finalizedUICallbacks
  • XX-4673/AdminKeySync
  • debugNotifID
  • anne/test
  • v4.7.5
  • v4.7.4
  • v4.7.3
  • v4.7.2
  • v4.7.1
  • v4.6.3
  • v4.6.1
  • v4.5.0
  • v4.4.4
  • v4.3.11
  • v4.3.8
  • v4.3.7
  • v4.3.6
  • v4.3.5
  • v4.2.0
  • v4.3.0
  • v4.3.4
  • v4.3.3
  • v4.3.2
  • v4.3.1
41 results

utils_test.go

Blame
  • wasm_test.go 2.47 KiB
    ////////////////////////////////////////////////////////////////////////////////
    // Copyright © 2022 xx foundation                                             //
    //                                                                            //
    // Use of this source code is governed by a license that can be found in the  //
    // LICENSE file.                                                              //
    ////////////////////////////////////////////////////////////////////////////////
    
    // This file is compiled for all architectures except WebAssembly.
    //go:build !js || !wasm
    
    package main
    
    import (
    	"go/ast"
    	"go/parser"
    	"go/token"
    	"testing"
    	"unicode"
    )
    
    // Tests that all public functions in client/bindings are implemented here in
    // the WASM bindings.
    func TestPublicFunctions(t *testing.T) {
    	// Exclude these functions from the check. These functions are intentionally
    	// not implemented.
    	excludeList := map[string]struct{}{
    		// Notifications are not available in the browser
    		"GetNotificationsReport":     {},
    		"RegisterForNotifications":   {},
    		"UnregisterForNotifications": {},
    
    		// UD not available in the browser
    		"IsRegisteredWithUD":     {},
    		"NewOrLoadUd":            {},
    		"NewUdManagerFromBackup": {},
    		"LookupUD":               {},
    		"MultiLookupUD":          {},
    		"SearchUD":               {},
    
    		// These functions are used internally by the WASM bindings but are not
    		// exposed
    		"NewEventModel":                   {},
    		"NewChannelsManagerGoEventModel":  {},
    		"LoadChannelsManagerGoEventModel": {},
    	}
    	wasmFuncs := getPublicFunctions("wasm", t)
    	bindingsFuncs := getPublicFunctions(
    		"vendor/gitlab.com/elixxir/client/bindings", t)
    
    	for fnName := range bindingsFuncs {
    		if _, exists := wasmFuncs[fnName]; !exists {
    			if _, exists = excludeList[fnName]; !exists {
    				t.Errorf("Function %q does not exist in WASM bindings.", fnName)
    			} else {
    				delete(wasmFuncs, fnName)
    			}
    		}
    	}
    }
    
    func getPublicFunctions(pkg string, t testing.TB) map[string]*ast.FuncDecl {
    	set := token.NewFileSet()
    	packs, err := parser.ParseDir(set, pkg, nil, 0)
    	if err != nil {
    		t.Fatalf("Failed to parse package: %+v", err)
    	}
    
    	funcs := make(map[string]*ast.FuncDecl)
    	for _, pack := range packs {
    		for _, f := range pack.Files {
    			for _, d := range f.Decls {
    				if fn, isFn := d.(*ast.FuncDecl); isFn {
    					// Exclude type methods and private functions
    					if fn.Recv == nil && unicode.IsUpper(rune(fn.Name.Name[0])) {
    						funcs[fn.Name.Name] = fn
    					}
    				}
    			}
    		}
    	}
    
    	return funcs
    }