@Override
  public LinkedAsset getLinkedAsset(String requirePath) throws RequirePathException {
    LinkedAsset linkedAsset = bundlableNode.getLinkedAsset(requirePath);

    if ((linkedAsset instanceof SourceModule)
        && (linkedAsset.assetLocation() instanceof TestAssetLocation)) {
      linkedAsset = new JsTestDriverEmptyTestSourceModule((SourceModule) linkedAsset);
    }

    return linkedAsset;
  }
 @Override
 public NodeProperties nodeProperties(String pluginName) {
   return bundlableNode.nodeProperties(pluginName);
 }
 @Override
 public MemoizedFile dir() {
   return bundlableNode.dir();
 }
 @Override
 public Node parentNode() {
   return bundlableNode.parentNode();
 }
 @Override
 public String getTemplateName() {
   return bundlableNode.getTemplateName();
 }
 @Override
 public boolean isNamespaceEnforced() {
   return bundlableNode.isNamespaceEnforced();
 }
 @Override
 public String requirePrefix() {
   return bundlableNode.requirePrefix();
 }
 @Override
 public void incrementChildFileVersions() {
   bundlableNode.incrementChildFileVersions();
 }
 @Override
 public void discoverAllChildren() {
   bundlableNode.discoverAllChildren();
 }
 @Override
 public ObserverList getObservers() {
   return bundlableNode.getObservers();
 }
 @Override
 public void notifyObservers(Event event, Node notifyForNode) {
   bundlableNode.notifyObservers(event, notifyForNode);
 }
 @Override
 public AliasesFile aliasesFile() {
   return bundlableNode.aliasesFile();
 }
 @Override
 public void addObserver(Class<? extends Event> eventType, EventObserver observer) {
   bundlableNode.addObserver(eventType, observer);
 }
 @Override
 public void addObserver(EventObserver observer) {
   bundlableNode.addObserver(observer);
 }
 @Override
 public BRJS root() {
   return bundlableNode.root();
 }
 @Override
 public List<AssetLocation> seedAssetLocations() {
   return bundlableNode.seedAssetLocations();
 }
 @Override
 public void incrementFileVersion() {
   bundlableNode.incrementFileVersion();
 }
 @Override
 public List<LinkedAsset> seedAssets() {
   return bundlableNode.seedAssets();
 }
 public App app() {
   return bundlableNode.app();
 }
 @Override
 public BundleSet getBundleSet() throws ModelOperationException {
   return bundlableNode.getBundleSet();
 }
 @Override
 public void populate(String templateGroup)
     throws InvalidNameException, ModelUpdateException, TemplateInstallationException {
   bundlableNode.populate(templateGroup);
 }
 @Override
 public AliasDefinition getAlias(String aliasName)
     throws AliasException, ContentFileProcessingException {
   return bundlableNode.getAlias(aliasName);
 }
 @Override
 public Set<LinkedAsset> linkedAssets() {
   return bundlableNode.linkedAssets();
 }
 @Override
 public List<AliasDefinitionsFile> aliasDefinitionFiles() {
   return bundlableNode.aliasDefinitionFiles();
 }
 @Override
 public LinkedAsset linkedAsset(String requirePath) {
   return bundlableNode.linkedAsset(requirePath);
 }
 @Override
 public ResponseContent handleLogicalRequest(
     String logicalRequestPath, UrlContentAccessor contentAccessor, String version)
     throws MalformedRequestException, ResourceNotFoundException, ContentProcessingException {
   return bundlableNode.handleLogicalRequest(logicalRequestPath, contentAccessor, version);
 }
 @Override
 public void addTemplateTransformations(Map<String, String> transformations)
     throws ModelUpdateException {
   bundlableNode.addTemplateTransformations(transformations);
 }
 @Override
 public List<Asset> getLinkedAssets(AssetLocation assetLocation, List<String> requirePaths)
     throws RequirePathException {
   return bundlableNode.getLinkedAssets(assetLocation, requirePaths);
 }
 @Override
 public MemoizedFile file(String filePath) {
   return bundlableNode.file(filePath);
 }
 @Override
 public MemoizedFile storageFile(String pluginName, String filePath) {
   return bundlableNode.storageFile(pluginName, filePath);
 }